Fastly WAF のログ機能
最終更新日 2019-05-30
2020年7月13日をもって、Fastly がこれまで提供してきた WAF はレガシー (旧) 製品となりました。旧バージョンをご使用のすべての既存のお客様は、引き続きサポートをご利用いただけます。Fastly Next-Gen WAF (powered by Signal Sciences) は、お客様のアプリケーションやオリジンサーバーに対する疑わしい異常な Web トラフィックをプロアクティブに監視し、お客様のシステムを保護します。いずれも、コントロールパネルのダッシュボードまたはアプリケーション・プログラミング・インターフェイス (API) を介してコントロールできます。Fastly Next-Gen WAF 製品をご検討、またはそれらへの移行に興味がおありの場合は、japan@fastly.com または Fastly のアカウントチームまでお問い合わせください。
Fastly では、悪意のあるトラフィックをモニタリング・特定するために様々な WAF 関連のログ変数を利用する事ができます。これらの変数によって、リクエストに対して実行された Fastly WAF の動作に関する詳細を確認できます。
ログエンドポイントの設定
悪意のあるアクティビティのリクエストをモニタリングするため、リモートログストリーミングを設定して WAF 変数をログに取得します。既存のログエンドポイント、または Fastly WAF 用の新規ログエンドポイントを作成して使用することも可能です。ログのデータを使用して WAF のイベントをモニタリングすることができます。
OWASP ルール
ひとつのリクエストが複数の OWASP ルールに該当する場合もあります。デフォルトでは、ログは vcl_deliver
または vcl_log
で記録されます。vcl_deliver
または vcl_log
でログが記録される場合、リクエストが複数の OWASP ルールに該当していても、異常スコアの累計と最後に該当した WAF ルールの情報のみが表示されます。
waf_debug_log
waf_debug_log
サブルーチンでは、1つのリクエストに対してトリガーされた各 OWASP ルールについて個別にログを取得できます。コントロールパネルまたは API を使用して、ログの placement パラメーターを waf_debug
に設定します。
コントロールパネルを使用する
以下の手順に従って、ログエンドポイントの placement パラメーターを waf_debug
に設定します。
- Fastly コントロールパネルにログインします。
- Home ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- Logging リンクをクリックします。Logging endpoints ページが表示されます。
- 編集するログエンドポイントの名前をクリックすると、Edit this endpoint ページが表示されます。
- Advanced options をクリックします。
-
Placement セクションで、waf_debug (waf_debug_log) 設定を選択します。
- Update ボタンをクリックします。
- Activate ボタンをクリックして設定変更をデプロイします。
API を使用する
以下の curl コマンドを実行することで、ログの placement パラメーターを waf_debug
に設定することもできます。
1
$ curl -X PUT -H 'Fastly-Key: FASTLY_API_TOKEN' -H 'Content-Type: application/json' 'https://api.fastly.com/service/<your Fastly service ID>/version/<version_id>/logging/<logging_integration>/<logging_name>' --data-binary '{"placement":"waf_debug"}'
waf_debug_log
のログ形式はコントロールパネルからのみ設定可能です。vcl_pass
はwaf_debug_log
とvcl_miss
でコールされます。ログ形式にリクエストヘッダー情報と WAF 変数を含むことができます。レスポンスヘッダーの情報を含むとエラーになります。<logging_integration>
は、リモートログ API のリストから設定可能です。
複数の OWASP ルールに該当するリクエストをトラックするために request_id
ヘッダーを設定することを推奨します。
1
set req.http.x-request-id = digest.hash_sha256(now randomstr(64) req.http.host req.url req.http.Fastly-Client-IP server.identity);
WAF 変数を利用する
Fastly では、悪意のあるトラフィックを監視・特定するための様々な WAF 関連のログ変数を利用することができます。これらの変数を通じて、リクエストに対して処理された以下のような Fastly WAF の動作を確認することができます。
- Fastly WAF がリクエストを検査したかどうか。 Fastly WAF はオリジンサーバーへ転送されるリクエストのみを検査の対象とします(キャッシュされていないコンテンツに対する MISS または PASS リクエストなど)。
- リクエストがルールに該当したかどうか。 Fastly WAF はリクエストを検査する際、設定されているルールセットのいずれかのルールにリクエストが該当しているかどうかチェックします。
- 該当したルールの重要度。 リクエストがルールに該当した場合、そのルールの重要度がログに示されます。
- リクエストに対して行った処理 (該当する場合) 。 リクエストがルールまたは OWASP ルールのしきい値に達した場合、Fastly WAF が行った処理(ログに記録、またはブロック)がログに示されます。
以下の変数を利用して Fastly WAF のログイベントを確認できます。
変数 | 説明 |
---|---|
waf.executed |
リクエストが WAF に処理されたかどうかを示すレスポンスヘッダー。処理された場合は 1 (true) 、処理されていない場合は 0 (false) と記録されます。 |
waf.blocked |
リクエストがルールにマッチし、ブロック設定の特定のルールに該当する、またはブロック設定にされている OWASP のしきい値を超えた場合、true に設定されます。ブロックされた場合は 1 (true)、ブロックされていない場合は 0 (false) とログに記録されます。 |
waf.logged |
リクエストがルールにマッチし、ログ設定の特定のルールに該当する、またはログ設定にされている OWASP ルールのしきい値を超えた場合に true に設定されます。アクティブ (ブロック) モードでは、waf.blocked が true の場合にも true に設定されます。ログに true の場合は 1 、false の場合は 0 と表示されます。 |
waf.failures |
リクエストが WAF ルールセットによる評価に失敗し、リクエストが WAF の処理をスキップした場合、true と記録されます。ログに true の場合は 1 、false の場合は 0 と表示されます。 |
waf.logdata |
このルールに該当する原因となったリクエストの具体的な箇所が記録されます。そのため、ルールによって記録される内容は異なります。 |
waf.message |
ルールに該当するための一般的な条件。例えば SLR: Arbitrary File Upload in Wordpress Gravity Forms plugin など。 |
waf.rule_id |
ルールの ID。 |
waf.severity |
ルールの重要度。0 が最も高い重要度、7 が最も低い重要度を表します。99 は、リクエストがどのルールにも該当しなかったなど、重要度が適用されないことを示します。 |
waf.anomaly_score |
複数の OWASP ルールに該当した場合、スコアの累積スコアが記録されます。詳細は OWASP カテゴリースコア変数を参照して下さい。 |
waf.passed |
リクエストが WAF ルールセットのどのルールにも該当しなかったことを示します。true の場合は 1 、false の場合は 0 とログに記録されます。vcl_log は vcl_deliver と waf.passed で読み取ることができます。waf_debug_log で読み込むことはできません。この値は WAF ルールセットとの照合が完了した後に設定されます。 |
OWASP カテゴリースコア変数
ある特定のリクエストが OWASP のルールで処理される際、異なる攻撃カテゴリーの複数のルール ID に該当する可能性があります。OWASP カテゴリースコア変数は、リクエストが該当したカテゴリーごとのスコアを記録します。この情報は攻撃カテゴリーごとの最低値、平均値、最大値を把握するために利用され、それぞれのカテゴリーごとに異なるしきい値を設定することが可能です。アクティブ(ブロック)モードに設定されている場合、リクエストがカテゴリーごとのしきい値を超えた場合にリクエストがブロックされます。
waf.sql_injection_score
waf.rfi_score
waf.lfi_score
waf.rce_score
waf.php_injection_score
waf.session_fixation_score
waf.http_violation_score
waf.xss_score