新手のWebスキマーは Websocket と偽のクレジットカードフォームを悪用して機微な情報を盗む
※ このBlog 記事は2020.11.10に執筆されたGal MeiriのBlog記事を翻訳した内容を元に作成しています。
11月初旬に、各種のフレームワークを使用して構築された様々なオンライン e コマースサイトを標的とする新たなWebスキミング攻撃が発見されました。本ブログを執筆している今この瞬間も、このWEBスキマーによる攻撃は依然として続いており、データを盗み出しています。
この攻撃者は、ブラウザー内に拡大するアタックサーフェスを悪用し、Web スキミング手法を進化させ続けています。この攻撃には、一般的なスキマーによる攻撃ではあまり見られない、高度な機能が数多く実装されています。
今日、オンラインストアの多くが決済処理をサードパーティーベンダーにアウトソースしており、クレジットカードデータを自ら扱うことはほとんどありません。そこで、攻撃者は偽のクレジットカードフォームを作成して、そのフォームをアプリケーションの精算ページに挿入しています。データの窃盗自体には WebSocket を使用することで、目立つことなくデータを盗み出しています。
攻撃の概要
[!]以下の情報は公開情報であり、すでに広く拡散しています。Akamai では、Web サイトのオーナーやセキュリティチームがこの問題の特性を理解して、この新たな攻撃を阻止できるように、この攻撃手法に関する詳細情報と知見を公開しています。
このスキマーは、ページのソースにローダーをインラインスクリプトとして挿入します。ローダーが実行されると、スキマーの Command and Control(コマンド & コントロール、C2)サーバー(https[:]//tags-manager[.]com/gtags/script2)から悪性の JavaScript ファイルがリクエストされます。
スキマーローダーが標的となったストアに挿入される
この外部スクリプトがロードされると、スキマーは生成されたセッション ID とクライアント IP アドレスをブラウザーの LocalStorage に保存します。データ窃盗の一環として、これらのパラメーターが後のセッションで送信されます。
スキマーは、CloudflareのAPI を利用してエンドユーザーの IP アドレスを取得します。
スキマーはセッション ID とユーザー IP をブラウザーのローカルストレージに保存する
実際のスキマー攻撃は、機微な情報が含まれるアプリケーションページ(清算ページ、ログインページ、新規アカウント登録ページなど)で行われます。スキマーは、ページの URL を確認して、そのページに機微な情報が含まれるかどうかを判断します。
機微な情報が含まれるページにロードしたら、WebSocket と C2 サーバーの接続を開きます。
スキマーは、ローダーの実行先が機微な情報を含むページかどうかを確認する
その後、スキマーは、ページ内のすべての入力、フォーム、ボタン エレメントに新たなイベントリスナーを登録します。そして、入力フィールドの値をマッピングし、WebSocket と C2 サーバーの接続を用いてその値を盗み出します。
スキマーは、ユーザーの情報をシリアル化して盗み出す
新たな機能とメカニズム
この攻撃者は、一般的な Web スキマー攻撃にはあまり見られない、いくつかの高度なメカニズムを実装しています。それらのメカニズムについての知見をご紹介します。
WebSocket を使用したデータ窃盗 XHR リクエストや HTML タグを使用してデータを盗み出す他のスキマー攻撃とは異なり、このスキマー攻撃では WebSocket を使用してユーザーの機微な情報を盗み出します。スキマーがターゲットページにロードされると、WebSocket と C2 サーバーとの通信が開始され、一定の間隔でPingソケットを送信することで接続が維持されます。
スキマーは、ターゲットページ内のフィールド(機微な情報を入力するフィールド)を追跡し、フィールドの値が変更されるたびにその値を送信します。
WebSocket を使用することにより、リクエストの送信が目立たなくなるため、攻撃者はより効果的に身を隠すことができます。また、コンテンツ・セキュリティ・ポリシー(CSP)の多くでは、WebSocket の使用を制限していません。
WebSocket とスキマーの C2 サーバーの通信
偽のクレジットカードフォーム 標的となるオンラインストアが決済処理をサードパーティーのプロバイダーに委託している場合もあります。その場合、ユーザーが個人情報を入力すると、サードパーティーベンダーにリダイレクトされ、そこでクレジットカード情報を入力して取引を完了します。スキマーをサードパーティーベンダーのページに挿入してエンドユーザーのクレジットカード情報を盗み出すことはできません。
そこで、スキマーは、サードパーティーベンダーにリダイレクトされる前のページに偽のクレジットカードフォームを作成します。このフォームでは、ユーザーの入力内容やクレジットカード情報を検証して、正確に入力されていない場合は適切なエラーメッセージも表示されます。ユーザーが偽の「支払い」ボタンをクリックすると、「支払いを処理できません」というメッセージが表示され、本来のアプリケーションのフローへと戻されます。
スキマーがページ内に作成する偽のフォーム
スキマーが試みる回避技術や難読化技術はますます高度化し進化しています。攻撃者は、攻撃の検知を遅らせて、より多くの利益を得るために、常に戦術を強化しています。
スキマー攻撃の検知と防止
Akamai では、このような新しい、または微調整が加えられた、Web アプリケーションのクライアントサイド攻撃を毎週のように観測しています。ブラウザー内攻撃は、その性質上、サプライチェーン内で発生し、見えにくいため、CSP に依存する従来のアプローチでは検知が困難です。
Akamai のセキュリティポートフォリオには、Page Integrity Manager という名称の Web スキミング対策製品があります。この製品は、スクリプト実行のふるまいに焦点を当て、ランタイム環境を徹底的に可視化します。Page Integrity Manager は、Web ページ内で実行される各種スクリプト、そのスクリプトの実行内容、およびページ内の他のスクリプトとの関係性についての情報を収集します。収集した情報と Akamai の多層的な検知アプローチ(ヒューリスティック、リスクスコア、AI など)を組み合わせることにより、データ窃盗と Web スキミング攻撃を中心とした、さまざまな種類のクライアントサイド攻撃を検知できます。
WebSocket と偽のクレジットカードページを使用した攻撃に関して Page Integrity Manager をテストしたところ、即座に攻撃を検知し、トラブルシューティングのための詳細情報が提供され、効果的に緩和することができました。
Akamai Page Integrity Manager の詳細や貴サイトのスクリプトのリスク評価レポート(無料)については、Page Integrity Managerの製品ページ をご覧ください。