概要
クライアントサイドのスキミング攻撃は地味だが強力な性質を持っています。ページは通常通り表示され、チェックアウトも完了する――必要なのは一つの悪意ある<script>タグだけです。具体例としては次の二つが挙げられます:
- 2026年1月、Sansecは大手米国銀行の社員向けグッズストアで動作するブラウザ側キーロガーを報告しました。個人データ、ログイン資格情報、クレジットカード情報が収集されていました。
- 2025年9月、広く利用されるnpmパッケージの悪意あるリリースが公開されました。これらがフロントエンドコードにバンドルされていると、ブラウザ内で暗号資産の窃取などにさらされる可能性があります。
Cloudflareはより良いインターネットを作るという目標のもと、Birthday Week 2025で重要な方針を打ち出しました:強力なセキュリティ機能は営業窓口を介さずに利用可能であるべきだ、という点です。本日、この方針に基づき次の2点を発表します:
- Cloudflare Client-Side Security Advanced(旧 Page Shield add-on)がセルフサービスで利用可能になりました。
- 無料の Client-Side Security バンドルを利用するすべての顧客に対し、ドメインベースの脅威インテリジェンスが無償で提供されます。
以下では製品の仕組みと、誤検知を最小化しつつ悪意あるJavaScriptを特定するために設計された新しいAI検出システムについて説明します。併せて実際のユースケースも紹介します。
Cloudflare Client-Side Security の仕組み
- Cloudflare Client-Side Securityは1日あたり約3.5 billionのスクリプトを評価しており、平均ではエンタープライズゾーンあたり2,200スクリプトを保護しています。
- 内部ではブラウザのレポーティング(例:Content Security Policy)を使ってシグナルを収集するため、スキャナやアプリのインストルメンテーションは不要で、ウェブアプリケーションへのレイテンシ影響はゼロです。
- 必要な前提条件は、トラフィックがCloudflare経由でプロキシされていることだけです。
Client-Side Security Advanced で即時に利用できる主な機能:
- より賢い悪意あるスクリプト検出:社内の機械学習に加え、Large Language Model(LLM)による評価を強化しています(詳細は下記)。
- コード変更モニタリング:継続的なコード変更の検出と監視を含み、PCI DSS v4(要件11.6.1)などのコンプライアンス要件に重要です。
- プロアクティブなブロックルール:継続的なモニタリングを通じて維持・適用されるポジティブなContent Securityルールを利用できます。
悪意のある意図を持つJavaScriptの検出
クライアントサイドのセキュリティは巨大なデータ問題です。平均的なエンタープライズゾーンでは約2,200のユニークなスクリプトを観測し、中小規模のビジネスゾーンでも約1,000程度に達します。さらにコードの変動性が高く、これらのスクリプトの約3分の1が30日間の間に更新されます。
すべてのDOM操作や外向き接続をセキュリティチームが手動で承認しようとすると、開発パイプラインが麻痺します。そこで我々の検出戦略は「スクリプトが何をしようとしているか(意図)」に焦点を当てています。以前説明した通り、我々はAbstract Syntax Tree(AST)を用いてスクリプトの振る舞いを解析します。コードを論理構造に分解することで、難読化されていても悪意のあるパターンを特定できます。
誤検知(False Positive)の高コスト
クライアントサイドの検出は、常時シグネチャと照合して阻止するWAFの運用とは性質が異なります。WAFは高頻度の自動攻撃をブロックしますが、クライアントサイドの妥協(オリジンサーバやサードパーティの侵害)は稀だが影響が大きいイベントです。企業環境ではベンダーレビューやコードスキャンが厳格に行われるため、これらの攻撃は稀です。
攻撃が稀であるがゆえに、検出の多くは統計的に誤検知になりやすく、誤検知はセキュリティチームの疲弊を招き、実際の脅威を隠してしまいます。これを解決するために、我々は検出パイプラインにLarge Language Model(LLM)を統合し、誤検知率を大幅に低減しました。
トリアージのためのLLMベースの“セカンドオピニオン”の追加
我々の一次検出エンジンはGraph Neural Network(GNN)です。GNNはJavaScriptのAST上で動作し、変数名の変更やミニファイ、難読化にかかわらず実行パターンを捉える構造的表現(embedding)を学習します。GNNは高い再現率(recall)にチューニングされており、未知のゼロデイ脅威を捕捉したいという目的に適しています。
GNNの精度は非常に高く、総解析トラフィックに対する誤検知率は0.3%未満です。しかしCloudflare規模の3.5 billionスクリプト/日という数になると、0.3%未満であっても顧客にとっては多数の誤報となり得ます。問題の本質はクラス不均衡です。悪性サンプルは集められても、ウェブ上の多様な正当なJavaScriptは事実上無限であり、難読化されつつも正当なスクリプト(ボットチャレンジ、トラッキングピクセル、広告技術、ミニファイドされたフレームワーク等)はGNNの特徴空間で悪意あるパターンと重複することがあります。
ここでLLMがGNNを補完します。LLMは実際のJavaScriptの慣用表現やフレームワークの一般的パターンを深く意味的に理解しており、怪しく見えても無害な難読化と真に悪意ある意図を区別できます。私たちはGNNを置き換えるのではなく、カスケード型分類器アーキテクチャを設計しました:
- すべてのスクリプトはまずGNNで評価されます。
- GNNが「良性」と予測した場合、パイプラインはそこで終了します(大部分のトラフィックに対してはこれだけで済み、LLMの重い推論を回避できます)。
- GNNが閾値を超えて「潜在的に悪性」とフラグしたスクリプトのみ、Cloudflare Workers AI上でホストされるオープンソースLLMに転送されセカンドオピニオンを受けます。
- LLMはセキュリティ特化のプロンプト文脈を与えられ、スクリプトの意図を意味的に評価します。LLMが良性と判定すれば、GNNの判定を覆します。
この二段構成により、構造的な悪性パターンに対するGNNの高い検出再現率と、意味的理解に基づくLLMの精度フィルタリングという両者の利点を得られます。GNNは公開されているスクリプトURL(どのブラウザも取得する同じスクリプト)で訓練されています。ランタイムでのLLM推論は完全にCloudflareネットワーク内でWorkers AIを介して実行され、使用モデルは現在gpt-oss-120bです。
追加の安全策として、GNNでフラグされたすべてのスクリプトはCloudflare R2にログ保存され、後続解析に利用されます。これにより、LLMが覆した判定が正しいかを継続的に監査でき、LLMが誤って真の攻撃をフィルタしてしまった場合のエッジケース検出が可能です(我々は自社のストレージ製品を自分たちのMLパイプラインで実際に使用しています)。
内部評価の結果は説得力があります。JS Integrity脅威カテゴリにおける総解析トラフィックに着目すると、二次的なLLM検証層は誤検知をほぼ3倍低減させました:既に低い約0.3%のFP率を約0.1%まで下げています。ユニークなスクリプト単位で評価すると、影響はさらに顕著で、FP率は約1.39%からわずか0.007%へと約200倍低下しました。
この規模で誤検知全体を3分の1に削減することは、顧客にとって毎日発生する何百万件もの誤報の削減に相当します。重要な点として、真の攻撃(True Positive)検出能力にはフォールバックの仕組みがあります。前述の通り、我々はLLMによる上書きを監査しており、LLMがフィルタした真の攻撃がないかをチェックしています。LLMはこのパイプラインで高精度のフィルタとして機能するため、我々はGNNの決定閾値をさらに下げて攻撃への感度を高めることができます。これにより、これまで検出境界の下に落ちていた高度に難読化された新規攻撃も捉えられるようになります。
今後のフェーズでは、これをさらに推し進める計画です。
野生でのゼロデイ検知:core.js ルーターエクスプロイト
この二段構成はすでに実地で効果を示しています。最近、我々の検出パイプラインは新規で高度に難読化された悪意あるスクリプト(core.js)を検出しました。これは特定地域のユーザーを狙ったもので、正確には家庭用ルーター(XiaomiのOpenWrtベース機器)を乗っ取るように設計されていました。
解析の結果、ペイロードは状況認識が高く、ルーターのWAN設定を照会して(wanType=dhcp、wanType=static、wanType=pppoe などのパラメータに動的に適応)、DNS設定を書き換えて中国の公開DNSサーバ経由にトラフィックをハイジャックし、正当な管理者をロックアウトするために管理者パスワードを静かに変更しようとしていました。ウェブサイト自体を直接侵害するのではなく、感染したブラウザ拡張を介してユーザーのセッションに注入されていました。
検出回避のため、スクリプトのコアロジックは配列文字列オブフスケータで強くミニファイ/パックされていました。これは古典的な手口ですが効果的で、執筆時点では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',…
(上記は抜粋であり、元の難読化配列をそのまま掲載しています。)
まとめ
Cloudflare Client-Side Securityは、GNNによる構造的解析とWorkers AI上のLLMによる意味的評価を組み合わせることで、誤検知を大幅に減らしつつ未知かつ高度に難読化された攻撃を検出できるように設計されています。今回の発表により、Client-Side Security Advancedのセルフサービス提供と、無料バンドルへのドメインベース脅威インテリジェンスの無償提供が全顧客に開放されました。これにより強力なクライアントサイド防御がより多くのユーザーに届くことを期待しています。