【機能追加】F5のAWS WAFマネージドルールがリリースされたのでXSS/SQLiを検知してみた
こんにちは、臼田です。
今回はAWS WAF Managed Ruleに新たに追加されたF5のルールを利用して、XSS(クロスサイトスクリプティング) / SQLi(SQLインジェクション)を検知してみたいと思います。
WAFマネージドルールって何?
本記事では説明しないので、下記をご確認下さい。
F5のマネージドルールが3つ追加されました!
New Products for Managed Rules on AWS WAF
上記リリースの通り、F5から3つのマネージドルールが追加され、現状では全14ルールあります。
簡単に追加されたルールについて説明します。なお、既存のルールについても先述のブログをご参照下さい。
追加されたルール + 概要
- F5 Web Application CVE Signatures For AWS WAF
- F5 WebアプリケーションのCVEシグネチャAWS用WAFは、Webアプリケーションとインフラストラクチャのための高プロファイルのCVE(Common Vulnerabilities and Exposures)のコレクションをフィルタリングすることを可能にします:Struts、Java、Apache、windows、Linux、PHP、 MySQL、Shellshock、Elastic Search、CMS
- AWS WAF - Web Exploits Rules by F5
- ウェブの悪用から守ります。 F5 Web Exploits AWS WAFのルールは、SQLi、XSS、コマンドインジェクション、No-SQLiインジェクション、パストラバーサル、予測可能リソースなど、OWASP Top 10の一部であるWeb攻撃から保護します。 Webアプリケーションセキュリティの信頼できるリーダーであるF5を使用して、アプリケーションとサービスを保護します。
- F5 Bot Detection Signatures For AWS WAF
- F5のボット検出シグネチャを使用すると、脆弱性スキャナー、スクレイパー、電子メール訂正機能、ネットワークスキャナー、SPAMボット、スパイウェア、Webスパイダー、Webサーバーストレスツールを含む不要なボットアクティビティーをフィルターできます。
料金
料金は各マーケットプレイスのページをご確認下さい。
AWS Marketplace: F5 Rules for AWS WAF - Web exploits OWASP Rules
現状では、全てのルールが下記のようになっていました。
1ヶ月あたり1リージョン毎 | $20 (1時間毎で分割して計算) |
100万リクエストあたり1リージョン毎 | $1.2 |
月$20+αでF5のWAFが使えると考えると、激安ですね!
検知してみた
マネージドルールの適用についても、先述のブログと同じなので割愛します。今回はAWS WAF - Web Exploits Rules by F5をCount(検知)モードで試してみます。
今回利用するのはDVWAのXSSとSQLiです。調べてもらえれば分かる人には分かるので、詳細は省きます。
まずは/dvwa/vulnerabilities/xss_r/
でXSSを試します。
発生しました。
次に/dvwa/vulnerabilities/sqli/
でSQLiを試します。
発生しました。
検知できたか確認してみます。
AWS WAFのWeb ACLページでルールに引っかかったサンプルリクエストが確認できます。
検知できていることが確認できました。
CloudWatchの画面でも確認してみます。
CountedRequestsで数えられていることが確認できました。
また、マネジメントコンソールからではやや検知から反映に時間がかかりますが、AWS CLIを利用すると、体感では30秒程度で検知したものを取得することができます。
下記にpythonでのサンプルスクリプトを載せておきます。
from datetime import datetime, timedelta import boto3 acl_id = 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxx' waf = boto3.client('waf-regional') # get rule id r = waf.get_web_acl(WebACLId=acl_id) rule_id = r['WebACL']['Rules'][0]['RuleId'] # EndTimeはローカルとの時刻ズレに合わせて調整 r = waf.get_sampled_requests( MaxItems=500, WebAclId=acl_id, RuleId=rule_id, TimeWindow={ 'EndTime': datetime.utcnow() - timedelta(seconds=5), 'StartTime': datetime.utcnow() - timedelta(minutes=60) } ) print(r['SampledRequests'])
まとめ
F5のマネージドルールが追加され、より選択肢が広がりました。
もちろん、各メーカーが出しているオリジナルのWAF製品と比べると、やや物足りないところはありますが、
何と言っても安さと手軽さがいいですよね!
皆さんも環境に合うWAFマネージドルールを検証して、利用してみてはいかがでしょうか?