Fastly WAF ロギング (2020年)

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 に設定します。

  1. Fastly コントロールパネルにログインします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Logging リンクをクリックします。Logging endpoints ページが表示されます。
  5. 編集するログエンドポイントの名前をクリックすると、Edit this endpoint ページが表示されます。
  6. Advanced options をクリックします。
  7. Placement セクションで、waf_debug (waf_debug_log) 設定を選択します。

    ログ配置の設定

  8. Update ボタンをクリックします。
  9. 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 のログ形式はコントロールパネルからのみ設定可能です。
  • waf_debug_logvcl_missvcl_pass でコールされます。ログ形式にリクエストヘッダー情報と 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.blockedtrue の場合にも 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 とログに記録されます。waf.passedvcl_delivervcl_log で読み取ることができます。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
Back to Top