クライアントサイドセキュリティ:WAFには見えない攻撃対象領域
WAFはあなたのoriginを守る。しかし現代のサイト攻撃の多くは、サードパーティのコードを介して訪問者のブラウザ内に存在する。クライアントサイドセキュリティが独立した分野である理由を解説する。
クライアントサイドセキュリティ(client-side security)は、ページ読み込み後に訪問者のブラウザ内で起きるすべてのことを対象とする:JavaScriptの実行、サードパーティスクリプト、外部ドメインへのリクエスト、DOM操作。これはサーバーサイドの防御が原則として見えない攻撃対象領域だ。
業界の歴史はサーバー中心だった:WAF、IDS、ファイル整合性モニタリング。これらはすべてoriginを見る。しかし現代のサイトは外部ホストから数十ものスクリプトを読み込む——analytics、広告、A/Bテスト、チャット、決済。それぞれがページの完全な権限で実行されるコードであり、すべてが潜在的な入口だ。タグマネージャーやCDNスクリプトが侵害されると、悪意のあるトラフィックはWAFを一切通過しないため、WAFは盲目になる。
クライアントサイドの主要な脅威カテゴリは三つ:ウェブスキミング/formjacking(フォームおよび決済データの窃取)、drive-byダウンロードとexploit kit(ページ読み込み時のマルウェア配信)、ClickFix/偽CAPTCHA(ユーザー自身が実行するソーシャルエンジニアリング)。これらに共通するのは、クライアント側で実行され、サーバー志向のインフラには不可視であることだ。
優れたクライアントサイド防御の要件:すべてのサードパーティスクリプトとその接続先のインベントリ。厳格なContent-Security-Policy。静的依存関係に対するSubresource Integrity。そして——重要なのは——静的スキャナーではなく実ブラウザから見た、ページが実際に何を実行しどこに接続しているかの継続的モニタリング。
ExploitShieldはこの攻撃対象領域を中心に構築されている。トラフィックをプロキシする代わりに、監視対象ページのレンダリングを5分ごとに実Chromiumで再現し、すべてのJSボディとすべての送信先を捕捉し、脅威インテリジェンスで情報を付与する。目標はシンプルだ:クライアントサイドの攻撃対象領域を、サーバーサイドが数十年前から持っていたのと同等の可視性で見えるようにすること。