AWS
waf
CloudFront

「AWS WAF」を導入してみた。- SQL injection編

More than 1 year has passed since last update.

はじめに

2015年のre:Inventで「AWS WAF」が発表されました。

AWS WAFはアプリケーション用のファイアウォールで、IP address、SQL injection、String matchingに関するアクセスの制御ができます。
ただ、このサービスを利用するにはCloudFront経由でのアクセスにしか対応していないため、ELBやEC2にWAFを導入する場合はCloudFrontを配置する必要があります。

今回は既に作成済みの「waf-test-acl」にSQL injectionの設定を追加してみます。
その他の設定については以下参照ください。
「AWS WAF」を導入してみた。- IP addresses編
「AWS WAF」を導入してみた。- String matching編

1.設定

まず、SQL injectionをクリックします。
aws-waf_sql-injection_2015120401.png

「Create condition」をクリックします。
aws-waf_sql-injection_2015120402.png

「Name」には任意のコンディション名を入力します。
また、Filter settingsの「Part of the request to filter on」でチェックしたいWeb要求、「Transformation」でAWS WAFがリクエストをチェックする前に行う変換方式を指定し、OKであれば「Add another filter」をクリックして条件に追加します。
aws-waf_sql-injection_2015120403.png

Filters in this SQL injection match conditionへの追加が確認できたら「Create」をクリックして作成します。
aws-waf_sql-injection_2015120404.png

conditionを作成したら、次に「Rules」をクリックします。
aws-waf_sql-injection_2015120405.png

Rules設定画面が表示されたら「Create rule」をクリックしルールの作成を行います。
aws-waf_sql-injection_2015120406.png

先ほどConditionsのSQL injectionで作成したルールを設定し、完了したら「Create」をクリックします。
aws-waf_sql-injection_2015120407.png

ルールの作成が完了したら「Web ACLs」をクリックします。
aws-waf_sql-injection_2015120408.png

今回ルールを追加する対象のACL名をクリックします。
aws-waf_sql-injection_2015120409.png

タブ「Rules」をクリックして「Edit web ACL」をクリックします。
aws-waf_sql-injection_2015120410-1.png

「Rules」のプルダウンで今回作成したルールを選択し、「Add rule to web ACL」をクリックすると下の”If a request matches all the conditions in a rule, take the corresponding action”に追加されます。そうしたら今回はブロックをしたいため「Block」にチェックし、「Update」をクリックします。
aws-waf_sql-injection_2015120411.png

ルールが追加されました。「Requests」タブをクリックするとリクエストログが確認できます。
aws-waf_sql-injection_2015120412-1.png

2.動作確認

まずは現状を確認します。リクエストがない状態です。
aws-waf_sql-injection_2015120414.png

次にsqlmapを実行します。
aws-waf_sql-injection_2015120419-1.png

それでは再度、リクエストを確認してみます。
aws-waf_sql-injection_2015120415-1.png

先ほど設定したルール"sql-injection-rule"によってリクエストが「Block」されているのが確認できます。
さらに今回はUser-Agentに対して設定したので、Request headersのUser-Agentを確認するとどういったリクエストを防いだかがわかります。
aws-waf_sql-injection_2015120416-1.png

aws-waf_sql-injection_2015120417-1.png

aws-waf_sql-injection_2015120418-1.png

以上で設定完了です。