F5 Advanced WAFをAWS上で使ってみた

AWS Marketplaceで公開されている「F5 Advanced WAF」をサブスクライブしてAWS上に構築してみました。
2020.01.31

もこ@札幌オフィスです。

AWS Marketplaceで公開されている「F5 Advanced WAF」をサブスクライブしてAWS上に構築してみました。

今回の構成図はこんな感じです。

Public SubnetにF5 Advanced WAFを起動し、Private Subnetに起動してるNginxをターゲットとして設定します。

※Webサーバーの構築、起動は省略させて頂きます。

検証で利用したAMIは下記となります。(30日の無料トライアルがあります)

F5 Advanced WAF (PAYG, 25Mbps)

Advanced WAFの構築手順自体はあまりBIG-IPと変わっているところはありませんでした。

そもそもF5 Advanced WAFって?

BIG-IPにWAFを追加して、よりセキュアな環境を構築できるWAFソリューションで、

一般的なWAFとしての機能はもちろん、L7 DDos、不正なBot、ブルートフォース対策等の幅広い分野で利用出来るWAFです。

F5 Advanced WAFレイヤー7・ボット攻撃を対策する WAFソリューション

やってみる

早速やっていきましょう。まずはじめに、AWS Marketplaceでサブスクライブしていきます。

AWSのコンソールから「AWS Marketplace Subscriptions」を開き、

「F5 Advanced WAAF」の「新規インスタンスを起動」をクリックして、EC2を起動していきます。

インスタンスタイプは、メモリを多めに取る必要があるため、「t2.large」を選択し、プライマリ IPを「10.0.0.200」にしておきます。

続いてSecurity Groupの設定となります。 8443が管理画面となるため、IP制限をします。

6分ほどでインスタンスにSSHが出来るようになりますので、パスワードの変更をしてきます。

ユーザーは admin で接続し、パスワードを変更して保存してquitします。

$ ssh admin@xx.xxx.xxx.xx -i ~/.ssh/key.pem 
admin@(ip-10-0-0-200)(cfg-sync Standalone)(ModuleNotLicensed::Active)(/Common)(tmos)# modify auth password admin
changing password for admin
new password: 
confirm password: 
admin@(ip-10-0-0-200)(cfg-sync Standalone)(ModuleNotLicensed::Active)(/Common)(tmos)# save sys config
Saving running configuration...
  /config/bigip.conf
  /config/bigip_base.conf
  /config/bigip_user.conf
Saving Ethernet map ...done
Saving PCI map ...
 - verifying checksum .../var/run/f5pcimap: OK
done
 - saving ...done
admin@(ip-10-0-0-200)(cfg-sync Standalone)(ModuleNotLicensed::Active)(/Common)(tmos)# quit

F5 Advanced WAFの設定

https://パブリックIPアドレス:8433/ でアクセスすると、管理画面にアクセスすることが出来ます。

先程SSHして変更したパスワードでログインすることが出来ます。

ポータル画面にログインすることが出来たら、早速Application Securityを有効化していきます。

System > Resource Provisioning から「Application Security(ASM)」をNormalに変更し、Submitをクリックします。

暫く(2-3分)すると左側の一覧にSecurityが現れ、Security機能が使えるようになります。

PoolとVirtual Serverを追加する

続きましてPoolを作っていきます。

Local Traffic > Pools > Pool List を開き、新規作成で裏側のWebサーバーのPrivate IP、ポート、を指定します。

今回はNginxを起動しているEC2のプライベートIPを登録した上で、「Health Monitors」をhttpに設定しました。

作成したPoolのMembersを開き、先程追加したサーバーのヘルスチェックが通っているかを確認します。

続きまして、 Local Traffic > Virtual Servers から、新規Virtual Serverを作っていきます。

保存した後、F5 Advanced WAFのPublicIPに指定したポートにアクセスすると、Private Subnetにあるウェブサーバーのページが表示されることを確認出来ます!

Advanced WAFで攻撃をブロックしてみる

設定が完了したので、早速Advanced WAFを使って攻撃を遮断してみます。

ポリシーを作成

Security > Application Security > Security Policies > Policies List から新規Security Policyを作成します。

こんな感じに設定して、ポリシーを作成します。

Security > Overview からVirtual Serverに作成したポリシーがアタッチされていることを確認します。

「明らかに攻撃」って感じのリクエストを投げて正常にWAFが機能しているのかを確認してみます。

正常に動作してブロックされると「The requested URL was rejected. Please consult with your administrator.」と表示されるはずです!

Application Security > Attack Signatures から攻撃シグネチャの確認、追加、除外をしたり、 Options > Application Security > Attack Signatures > Attack Signature List からルールを自作することも出来ます。

DataGuard

DataGuardでは正規表現で指定した情報をマスキングすることが出来ます。

正規表現以外にも「クレジットカード番号」、「アメリカの社会保障番号」をマスキングするなどのチェックボックスもデフォルトで用意されています。

今回のポリシー作成の手順ですと、DataGuardで指定された文字が含まれていると完全にブロックする挙動となっていますので、いい感じにマスキングする動作を確認するために、ブロックをしないでマスキングを行うように設定します。

Application Security > Policy Building > Learning and Blocking Settings から右側のBasicをAdvancedにした上、「Data Guard」の「Block」を外します。

続きまして、 Application Security > DataGuard からData GuardをEnabledにして、Custom Patternにマスキングしたい文字列を入れます。

正規表現を使うことが出来ますので、0dayの脆弱性、SSRFなどで本来クライアントに流してはいけないような情報を登録しておくことで、最後の砦として設定しておくことが出来ると思います。

今回はいい感じにマスキングされることを確認したいため、「nginx」と入れました。

設定した上でアクセスすると、「nginx」がマスキングされていることを確認することが出来ます!

ログ

Event Logs > Application > Requests から検出したログを確認することが出来ます。 ブラウザ上から攻撃をサクッと認識出来るので、サーバーのログを頑張って追う必要もなく、とてもいい感じです!

「Bot回ってこないかなー」と数分間ポート80番をフルオープンにしてみました。

2-3分すると、ポートスキャナーが検知され、ブロックされているログを観測することが出来ました。

まとめ

F5 Advanced WAFを使ってApplication Security, DataGuardを使ってみました。

Application Securityではルールの細かい調整, 追加が可能なので、柔軟な設定をすることが出来ます。

今回は触れませんでしたが、Bot Signatureでは何百ものBotが「良いBot」と「悪いBot」で分類されてリスクが設定されているため、ECサイトなどで高度なBot対策をしたい場合などでもとても有効だと思います。

AWS Marketplaceで30日無料で利用することが出来ますので、是非検証してみてください!

F5 Advanced WAF

参考

https://clouddocs.f5.com/cloud/public/v1/aws_index.html

https://interact.f5.com/2020ALLFSSRFProtectionJPNOV29_01-LP-DLCAWAF.html