AWS WAF Geo allowlist と ASN ベース IPSet でボット pivot に終止符を打った話
4月のSGスクレイピング攻撃止血後、HK/VN/ID/DEへとpivotされ続けた末、Geo allowlist + Tencent/Alibaba ASN ベースのIPSetに切り替えた実録
awswafcloudfrontsecuritylodsparqlga4
台本(フルテキスト)
動画の掛け合いを書き起こしたものです。音声を再生しづらい場合はこちらをお読みください。
オープニング
- SG Geo Block 後に HK/VN/ID/DE へ pivot
- Geo allowlist + ASN ベース IPSet に切り替えた実録
- うさぎ
- 今日はAWS WAFでのボット攻撃対策の続き、Geo allowlistとASNベースIPSetへの切り替えについて紹介するね。
- WhiteCUL
- 前回のシンガポールのGeo Blockで止血したのに、攻撃が再開したのですか?
- うさぎ
- そう。1週間後にHK、VN、ID、DEとpivotされ続けたの。GA4のリアルタイムでVietnamが異常に多いのを見て気づいたんだ。
- WhiteCUL
- GA4で気づいたのですか?
- うさぎ
- 日本語コンテンツのアーカイブでJapanが3番目というのは不自然でしょ。WAFログを確認したら3時間で15万リクエストの攻撃が来ていたの。
- WhiteCUL
- GA4ではその規模は見えないのですね。
攻撃の正体と3パターンの発信元
- 攻撃の 90% が SPARQL エンドポイントに集中
- クラウド集中型・residential 分散型・単一レンジ型の 3 パターン
- WhiteCUL
- 攻撃者は何を狙っていたのですか?
- うさぎ
- WAFログを分析したら、VN/HK/IDのリクエストの90%がSPARQLエンドポイントとSnorqlに集中していたの。Linked DataのRDFを全件吸い取ろうとしていたのよ。
- WhiteCUL
- 発信元はどんなパターンがありましたか?
- うさぎ
- HKはTencentのクラウドIPが集中、VNは1000以上のIPに分散したresidential型、IDはTelkom Indonesiaの単一レンジの3パターンがあったわ。
- WhiteCUL
- residential型はIPベースの対策が難しそうですね。
- うさぎ
- そうなの。residential proxyは各IPが数リクエストしか出さないから、IPベースのBlockは事実上不可能でGeo Blockしか手がないの。
default-deny + 45カ国allowlistへの切り替え
- 個別 Geo Block は whack-a-mole で構造的に勝てない
- 先進国 45 カ国の allowlist + default deny に転換
- WhiteCUL
- 個別に国をブロックし続ける戦略はどうだったのですか?
- うさぎ
- これは構造的に勝てないの。SG→CN→HK→VN→IDと来て次はIN、PH、BRあたりに行くだけ。whack-a-moleと同じよ。
- WhiteCUL
- それで方針を変えたのですか?
- うさぎ
- default-deny+先進国45カ国のallowlistに切り替えたの。日本・韓国・台湾・北米・欧州・大洋州・中東の計45カ国ね。
- WhiteCUL
- HKやSGも除外したのですか?
- うさぎ
- Tencent CloudやAWSのクラウドIPが攻撃元になっているため除外したの。技術的には先進国だけど、ボットインフラとしての悪用度の方が大きいと判断したわ。
ASNベースIPSetへの切り替え
- 観測 IP を手で列挙する方法は必ず漏れる
- BGP feed から ASN の全 prefix を取得するのが正解
- WhiteCUL
- allowlistだけでは不十分だったのですか?
- うさぎ
- US、DE、TW経由でもTencentやAlibabaのクラウドIPからSPARQLが叩き続けられていたの。GeoIP的には許可国でも実態はクラウド経由のスクレイピングだったのよ。
- WhiteCUL
- TencentのCIDRをIPSetに手動で追加したらどうなりましたか?
- うさぎ
- 18件追加したけど、30分後にDE経由でTencentの別のCIDRから攻撃が続いていたの。観測ベースで手動列挙するのは構造的に漏れるって痛感したわ。
- WhiteCUL
- 正しい方法は何ですか?
- うさぎ
- BGP feedから各ASNのannounced prefix全件を取得するの。TencentはAS132203で1547件、AlibabaはAS45102で514件。集約すると345件になったわ。
Oracle/VultrのASN予防追加と防御の現実
- Oracle Cloud・Vultr は予防的に ASN 追加
- 完全防御は構造的に不可能、96% が現実的な到達点
- WhiteCUL
- TencentとAlibabaの他にも対策しましたか?
- うさぎ
- Oracle CloudとVultrも予防的に追加したよ。両者は無料や激安で使えるから、スクレイピング専用クラウドに近い使われ方をするの。
- WhiteCUL
- HetznerやOVHは追加しなかったのですか?
- うさぎ
- 大学や研究機関がホストしているSPARQLクライアントなど、正規の利用例がある可能性が高いから観測ベースで追加する方針にしたの。
- WhiteCUL
- これで完全に防げるようになりましたか?
- うさぎ
- 完全防御は構造的に無理なの。TencentやAlibabaが新リージョンを別ASNで開くと漏れるし、residential proxyは原理的に切れない。今日の到達点は96%ね。
まとめ
- pivot 攻撃には allowlist + ASN ベース IPSet の二段防御
- BGP feed から ASN 全 prefix を取得するのが基本
- うさぎ
- 今日の学びをまとめると、Geo Blockを個別に追加するだけでは追いかけっこになるから、allowlist化が有効ということね。
- WhiteCUL
- IPSetもASNベースで組む必要があるのですね。
- うさぎ
- 観測ベースでCIDRを手で列挙するのは高確率で漏れるわ。RIPE StatなどのBGP feedから全prefixを取得して集約するのが正解よ。
- WhiteCUL
- GA4とWAFログを両方使う重要性もわかりました。
- うさぎ
- GA4はJSが実行されたセッションしか見えないから、APIスクレイピングの全容はWAFログで確認するのが必須よ。
- WhiteCUL
- ありがとうございました。