AWS WAF の WEB ACL のトラフィックログを Sumo Logic で分析する
Webアプリケーションを展開する場合、L7のサイバー攻撃からの保護を強化するために、AWS WAF をリソースの前段に配置すると思います。AWS WAFには WAF ルールやマネージドルールが備わっており、これらを活用して ACL に追加することで、さらなる保護壁を築くことが可能です。
一方で、AWS WAF の効果的な運用においては、ログの調査や傾向を知るなどのために分析は欠かせません。
今回は、Sumo Logic のダッシュボードを使用して AWS WAF のログを分析し、ログデータの集約・可視化・および洞察を得られることをお伝えしたいと思います。Sumo Logic で得られた情報をもとにセキュリティポリシーの最適化や対策の改善にも繋げていただければ幸いです。
ログの収集
AWS WAF のロギングを有効にして、Kinesis Data Firehose を使って宛先が S3 になる様にストリームを設定します。 S3 にログが蓄積されたことが確認出来たら Sumo Logic がログを収集しに行けるようにアクセス許可の為の CFn を展開してログ収集設定が完了します。
参考元:Collecting Logs for the AWS WAF app | Sumo Logic Docs
App のインストール
AWS WAF のログ分析には、Sumo Logic のプリビルドのダッシュボード(App)を使って分析することが出来ます。
このプリビルドのダッシュボード(App)は、Sumo Logic にデータ収集を行った後で簡単な3ステップのプロセス(GUI操作)で展開できます。
また、展開した App は AWS WAF のログを認識して、海外からのトラフィックを迅速に確認出来たり、CrowdStrike の脅威情報と突合して攻撃者の情報を洗いだしたり、特定の期間でブロックした件数が増えていないかなどを調査できます。
分析をしよう
WAF のログを分析する観点についてざっとまとめてみます。参考元:AWS WAF のログ分析に関する考慮事項
- リクエストが意図しない海外から届いていないか
- 攻撃グループとその手法の特定
- 防御ルールが正常に評価されているか(誤検知など)
- 特定のリクエストメソッドが異常に増えていないか
- 偽陽性など、正当なアクセスを誤ってブロックしていないか
では、App を見ながら分析していきます。
AWS WAF - Overview
概要情報を表示しているダッシュボードです。以下、全体像です。
Overview のダッシュボードでは、全体のトラフィックに関する情報を表示しています。以下で細かく見てみます。
- IP Threat Count
- All Traffic by Rule Type
- Traffic Map
Sumo Logic が持つ CrowdStrike の IP アドレスに関する脅威情報と突合しており、脅威に該当する IP アドレスが WAF のログから検出できた数をカウントしています。
AWS WAF のルールタイプ(RATE_BASED、REGULAR、GROUP)の内、リクエストを終了したルールを 15分刻みで表示しています。 参考元:ウェブ ACL トラフィック情報のログ記録 | AWS デベロッパーガイド
全体的なトラフィックがどこの国から来ているのかをマップ表示しています。
- All Traffic by Rule ID
- Traffic Trend
- URI Hits
- HTTP Methods
- HTTP Versions
全体トラフィックの内、リクエストを終了したルールの ID を表示しています。
全体トラフィックに対して、Allowed・Blocked でトラフィックを制御件数をグラフ化しています。
API エンドポイントに指定された identifier を集計してリスト表示しています。
GET リクエストメソッドで WEB アプリケーションに対して要求された数をカウントおよび、円グラフ化しています。
GET リクエストで使用された HTTP プロトコルのバージョンをカウントしておよび、円グラフ化しています。
Overview のダッシュボードは、AWS WAF のトラフィックで脅威に該当する件数や評価されているルールの全体像を把握するために使用できます。
AWS WAF - Threat Intelligence
CrowdStrike の脅威情報と突合して Allowed・Blocked のトラフィックから脅威を検知してくれるダッシュボードです。以下、全体像です。
パネルの左側が Allowed、右側が Blocked のトラフィックを調査できるように表示されています。
以下で細かく見てみます。Allowed・Blocked の違いだけで、表示している内容は同じものになります。
- Unique Allowed(Blocked) Threats Map
- Allowed(Blocked) Traffic by Threat Confidence
- Allowed(Blocked) Traffic by Malicious IPs
IP アドレスの緯度と経度から、発信元トラフィックをマップ表示しています。
CrowdStrike の脅威情報で、トラフィックの脅威レベル(重要度)が分類されますので、その割合を円グラフで表示しています。
実際に脅威に該当する IP アドレスを基点に攻撃グループや脅威レベル、検出した回数をリスト表示しています。
- Allowed(Blocked) Threats Trend
- Allowed(Blocked) Threat by Actors
- Allowed(Blocked) Threat Breakdown by Sources
時系列で脅威に該当するログの出現数を折れ線グラフ化で表示しています。
攻撃グループの出現割合を円グラフで表示しています。
脅威に該当するログが出現した Sumo Logic の Source(取り込み対象のログを分類したバケット)の割合を円グラフで表示しています。
Allowed についてご説明しましたが、Blocked でも同じ内容で表示されています。 Allowed では、許可したトラフィックに不正なものが無いか確認し、Blocked では、どれだけ悪意のある攻撃者のトラフィックを防御できたのかが確認できます。
AWS WAF - Traffic
有効化しているルールの動きを確認できるダッシュボードです。以下、全体像です。
こちらも、先ほどのダッシュボードと同様にパネルの左側が Allowed、右側が Blocked のルールを調査できるように表示されています。
- Allowed(Blocked) Traffic
- Allowed(Blocked) by Rule Type
- Allowed(Blocked) by Country
IP アドレスの緯度と経度から、発信元トラフィックをマップ表示しています。
AWS WAF のルールタイプ(RATE_BASED、REGULAR、GROUP)の内、リクエストを終了したルールの割合を円グラフで表示しています。
発信元トラフィックがどこの国に属しているかをマップ表示しています。
- Allowed(Blocked) by Rule ID
- Allowed(Blocked) Outliers
AWS WAF によってリクエストを終了したルールの ID を確認できます。AWS WAF の仕様で、ルールが終了されていない場合は、Default_Action と表示されます。
普段のトラフィックとルールの終了から許容範囲を作成し、ルールの終了イベント数が許容範囲を逸脱した場合に外れ値として表示しています。
Allowed についてご説明しましたが、Blocked でも同じ内容で表示されています。 Allowed では、ルールの効果と正常性を確認し、Blocked では、ルールの効力を発揮できたのかが確認できます。 誤検知などもこちらのダッシュボードで照らし合わせてルールのメンテナンスにも使えます。
まとめ
いかがでしょうか。WAF は検知するだけでなく、ログを正規表現やフィルタリングにより必要な情報をいつでも見れるようにしておきたいです。 こうすることで、いざという時にすぐに調査→対策することができ、正常に封じ込めることで、攻撃の拡大を防げます。
皆様の一助になれば幸いです。