F5 Advanced WAFをAWS上で使ってみた
もこ@札幌オフィスです。
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日無料で利用することが出来ますので、是非検証してみてください!
参考
https://clouddocs.f5.com/cloud/public/v1/aws_index.html
https://interact.f5.com/2020ALLFSSRFProtectionJPNOV29_01-LP-DLCAWAF.html