Cloudflare Client-Side Security: より賢い検出機能、すべての人に開放
2026-03-30
Zhiyuan Zheng Juan Miguel Cejuela
7分で読める
クライアントサイドスキミング攻撃には退屈な超能力があります。何も壊すことなくデータを盗むことができるのです。ページは正常に読み込まれ、チェックアウトも完了します。必要なのは悪意のあるスクリプトタグ1つだけです。
これが抽象的に聞こえる場合は、最近のスキミング攻撃の2つの例をご紹介します:
- 2026年1月、Sansecは米国の大手銀行の従業員向けグッズストアで動作するブラウザサイドキーロガーを報告しました。これは個人データ、ログイン認証情報、クレジットカード情報を収集していました。
- 2025年9月、攻撃者は広く使用されているnpmパッケージの悪意のあるリリースを公開しました。これらのパッケージがフロントエンドコードにバンドルされた場合、エンドユーザーはブラウザ内での暗号通貨盗難にさらされる可能性がありました。
より良いインターネットの構築という目標を推進するため、Cloudflareは2025年のBirthday Weekで核となる信条を確立しました:強力なセキュリティ機能は営業担当者との商談を必要とせずにアクセス可能であるべきです。
この目標を追求するため、本日2つの重要な変更を発表します:
- Cloudflare Client-Side Security Advanced(旧Page Shieldアドオン)がセルフサーブ顧客に利用可能になりました
- ドメインベースの脅威インテリジェンスが無料のClient-Side Securityバンドルのすべての顧客に無償で提供されます
この投稿では、この製品の動作原理を説明し、誤検知を最小限に抑えながら悪意のあるJavaScriptを識別するよう設計された新しいAI検出システムをハイライトします。また、これらのツールの実世界での応用についても議論します。
Cloudflare Client-Side Securityの動作原理
Cloudflare Client-Side Securityは1日あたり35億のスクリプトを評価し、エンタープライズゾーンあたり平均2,200のスクリプトを保護しています。
内部的には、Client-Side Securityはブラウザレポート(例:Content Security Policy)を使用してこれらのシグナルを収集します。つまり、開始するためにスキャナーやアプリケーションの計装は不要で、Webアプリケーションへのレイテンシ影響はゼロです。唯一の前提条件は、トラフィックがCloudflareを通じてプロキシされていることです。
Client-Side Security Advancedの機能
Client-Side Security Advancedは強力なセキュリティ機能への即座のアクセスを提供します:
- より賢い悪意のあるスクリプト検出: 社内機械学習を使用し、この機能は現在Large Language Model(LLM)からの評価で強化されています。詳細は以下をお読みください。
- コード変更監視: 継続的なコード変更検出と監視が含まれており、PCI DSS v4の要件11.6.1などのコンプライアンス要件を満たすために不可欠です。
- プロアクティブブロッキングルール: 継続的な監視を通じて維持・実行される積極的なコンテンツセキュリティルールの恩恵を受けます。
悪意のあるJavaScriptの検出
クライアントサイドセキュリティの管理は大規模なデータ問題です。平均的なエンタープライズゾーンでは、当社のシステムは約2,200の固有スクリプトを観察し、小規模なビジネスゾーンでも頻繁に約1,000を処理します。
この量だけでも管理が困難ですが、真の課題はコードの変動性です。これらのスクリプトの約3分の1が30日間のウィンドウ内でコード更新を受けます。
セキュリティチームがすべての新しいDOM(document object model)インタラクションや外部接続を手動で承認しようとすれば、その結果生じるオーバーヘッドが開発パイプラインを麻痺させるでしょう。
代わりに、当社の検出戦略はスクリプトが何をしようとしているかに焦点を当てています。これには、以前に書いた意図分類作業が含まれます。
簡単に言うと、Abstract Syntax Tree(AST)を使用してスクリプトの動作を分析します。コードを論理構造に分解することで、コードがどのように難読化されていても、悪意のある意図を示すパターンを識別できます。
誤検知の高いコスト
クライアントサイドセキュリティは、Web Application Firewall(WAF)が攻撃シグネチャのマッチを常に観察するWeb全体に展開されるアクティブな脆弱性スキャナーとは異なる動作をします。
WAFが大量の自動攻撃を常にブロックする一方で、クライアントサイドの侵害(オリジンサーバーやサードパーティベンダーの侵害など)は稀で高影響なイベントです。
厳格なベンダーレビューとコードスキャンを行うエンタープライズ環境では、これらの攻撃は稀です。この稀少性が問題を生み出します。実際の攻撃が稀であるため、セキュリティシステムの検出は統計的に誤検知である可能性が高くなります。
セキュリティチームにとって、これらの誤警報は疲労を生み出し、真の脅威を隠します。
これを解決するため、当社は検出パイプラインにLarge Language Model(LLM)を統合し、誤検知率を大幅に削減しました。
トリアージのためのLLMベースのセカンドオピニオンの追加
当社の最前線検出エンジンはGraph Neural Network(GNN)です。GNNはこのタスクに特に適しています:
- JavaScriptコードのAbstract Syntax Tree(AST)で動作
- 変数名の変更、最小化、難読化に関係なく実行パターンをキャプチャする構造表現を学習
- 機械学習の観点から、GNNは同じセマンティック動作の構文的変化を一般化するコードのグラフ構造の埋め込みを学習
GNNは高いリコール(再現率)に調整されています。新しいゼロデイ脅威をキャッチしたいのです。その精度はすでに驚くほど高く、分析された総トラフィックの0.3%未満が誤検知(FP)としてフラグされます。
しかし、Cloudflareの1日35億スクリプト評価という規模では、0.3%未満のFP率でも顧客にとって破壊的な量の誤警報に変換されます。
二段階分類器アーキテクチャ
核心的な問題は古典的なクラス不均衡問題です。悪意のあるサンプルを広範囲に収集できる一方で、Web全体の良性JavaScriptの多様性は実質的に無限です。
Large Language Models(LLM)はまさにここでGNNを補完します。LLMは実世界のJavaScript実践の深いセマンティック理解を持っています:
- ドメイン固有のイディオムを認識
- 一般的なフレームワークパターンを理解
- 怪しいが無害な難読化と真に悪意のある意図を区別可能
GNNを置き換えるのではなく、カスケード分類器アーキテクチャを設計しました:
- すべてのスクリプトは最初にGNNで評価されます
- GNNがスクリプトを良性と予測した場合、検出パイプラインは即座に終了します。これにより、トラフィックの大部分でGNNの最小限のレイテンシのみが発生し、LLMの重い計算時間を完全にバイパスします
- GNNがスクリプトを潜在的に悪意があるとフラグした場合(決定閾値を超えた場合)、スクリプトはセカンドオピニオンのためにCloudflare Workers AI上でホストされるオープンソースLLMに転送されます
- LLMがセキュリティ専門のプロンプトコンテキストを提供され、スクリプトの意図をセマンティックに評価します
- 良性と判断した場合、GNNの判定を上書きします
この二段階設計により、両方の世界の最良の部分を得られます:構造的悪意パターンに対するGNNの高いリコールと、誤検知をフィルタリングするLLMの広範なセマンティック理解です。
技術的詳細
以前説明したように、当社のGNNは公開アクセス可能なスクリプトURL(任意のブラウザが取得する同じスクリプト)で訓練されています。ランタイムでのLLM推論は、オープンソースモデル(現在gpt-oss-120bを使用)を使用してWorkers AI経由でCloudflareのネットワーク内で完全に実行されます。
追加の安全網として、GNNによってフラグされたすべてのスクリプトは、後の分析のためにCloudflare R2にログされます。これにより、LLMの上書きが正しいかどうかを継続的に監査し、真の攻撃が誤ってフィルタリングされたエッジケースをキャッチできます。
結果
実際の本番トラフィックでの内部評価結果は説得力があります。JS Integrity脅威カテゴリの下で分析された総トラフィックに焦点を当てると、二次LLM検証レイヤーは誤検知を約3倍削減しました:すでに低い約0.3%のFP率を約0.1%まで下げました。
固有スクリプトを評価する際、影響はさらに劇的です:FP率は約200倍も急落し、約1.39%からわずか0.007%になりました。
当社の規模では、全体的な誤検知率を3分の2削減することは、顧客にとって毎日数百万の誤警報を減らすことを意味します。
重要なことに、当社のTrue Positive(実際の攻撃)検出能力にはフォールバック機構が含まれています:上記のように、LLMによってフィルタリングされた可能性のある真の攻撃をチェックするためにLLMの上書きを監査します。
LLMがこのパイプラインで高度に信頼性の高い精度フィルターとして機能するため、GNNの決定閾値を下げ、さらに積極的にすることができます。これは、以前は検出境界をわずかに下回っていた新しい、高度に難読化されたTrue Attacksをキャッチできることを意味し、すべて顧客を誤警報で圧倒することなく実現します。
次の段階では、これをさらに推し進める予定です。
野生でのゼロデイキャッチ:core.jsルーター攻撃
この二段階アーキテクチャはすでに野生でその価値を証明しています。最近、当社の検出パイプラインは特定地域のユーザーを標的とする新しい、高度に難読化された悪意のあるスクリプト(core.js)をフラグしました。
この場合、ペイロードはホームルーター(特にXiaomi OpenWrtベースデバイス)を乗っ取るよう設計されていました。
逆難読化による詳細検査で、スクリプトは重要な状況認識を示しました:
- ルーターのWAN設定をクエリ(
wanType=dhcp、wanType=static、wanType=pppoeなどのパラメータを使用してペイロードを動的に適応)
- 中国の公共DNSサーバーを通じてトラフィックをハイジャックするためにDNS設定を上書き
- 管理者パスワードを静かに変更することで正当な所有者をロックアウトしようと試行
Webサイトを直接侵害する代わりに、侵害されたブラウザ拡張機能を介してユーザーのセッションに注入されていました。
検出を回避するため、スクリプトのコアロジックは配列文字列難読化ツールを使用して大幅に最小化・パックされていました。古典的なトリックですが、この記事執筆時点でVirusTotalなどの従来の脅威インテリジェンスプラットフォームがまだ検出を報告していないほど効果的でした。
当社のGNNは難読化にもかかわらず基礎となる悪意のある構造を正常に明らかにし、Workers AI LLMは意図を確信を持って確認しました。
以下は、ターゲットルーターAPIと不正DNSサーバーの注入試行を示すペイロードの一部です:
const _0x1581=['bXhqw','=sSMS9WQ3RXc','cookie','qvRuU','pDhcS','WcQJy','lnqIe','oagRd','PtPlD','catch','defaultUrl','rgXPslXN','9g3KxI1b','123123123','zJvhA','content','dMoLJ','getTime','charAt','floor','wZXps','value','QBPVX','eJOgP','WElmE','OmOVF','httpOnly','split','userAgent','/?code=10&asyn=0&auth=','nonce=','dsgAq','VwEvU','==wb1kHb9g3KxI1b','cNdLa','W748oghc9TefbwK','_keyStr','parse','BMvDU','JYBSl','SoGNb','vJVMrgXPslXN','=Y2KwETdSl2b','816857iPOqmf','uexax','uYTur','LgIeF','OwlgF','VkYlw','nVRZT','110594AvIQbs','LDJfR','daPLo','pGkLa','nbWlm','responseText','20251212','EKjNN','65kNANAl','.js','94963VsBvZg','WuMYz','domain','tvSin','length','UBDtu','pfChN','1TYbnhd','charCodeAt','/cgi-bin/luci/api/xqsystem/login','http://192.168.','trace','https://api.qpft5.com','&newPwd=','mWHpj'
この検出は、当社の新しいAI強化検出システムが実世界の脅威に対してどのように機能するかを示す優れた例です。