表面下: Web スキミングの変化を明らかにする

news

マイクロソフトのセキュリティ研究者は最近、Web スキミング キャンペーンがさまざまな難読化技術を使用して、スキミング スクリプトを配信および非表示にしていることを確認しました。これは、攻撃者が脆弱性を悪用して e コマース プラットフォームやコンテンツ管理システム (CMS) に悪意のあるスクリプトを目立って挿入する以前の戦術からの転換であり、この脅威を従来のセキュリティ ソリューションで高度に回避できるようにします。この記事の執筆時点で、VirusTotal にアップロードされた最新のスキミング HTML および JavaScript ファイルの一部は、検出率が非常に低くなっています。

Web スキミングは通常、Magento、PrestaShop、WordPress などのプラットフォームをターゲットにしています。これらのプラットフォームは、使いやすさとサードパーティのプラグインとの移植性から、オンライン ショップで人気のある選択肢です。残念ながら、これらのプラットフォームとプラグインには、攻撃者が常に利用しようとしてきた脆弱性が伴います。注目すべき Web スキミング キャンペーン/グループの 1 つに Magecart があります。Magecartは、いくつかの人気ブランドを含む数千の Web サイトに影響を与えたとして、長年にわたりメディアで取り上げられてきました。

私たちが観察したキャンペーンの 1 つで、攻撃者はスキミング スクリプトを PHP でエンコードして難読化し、画像ファイル内に埋め込んでいました。これは、Web サイトのインデックス ページが読み込まれるときに PHP 呼び出しを利用しようとする試みである可能性があります。最近では、Google アナリティクスやメタ ピクセル (以前の Facebook ピクセル) スクリプトになりすました悪意のある JavaScript が挿入された、侵害された Web アプリケーションも確認されています。一部のスキミング スクリプトには、ブラウザの開発者ツールが開いているかどうかを最初にチェックするという点で、アンチデバッグ メカニズムさえありました。

Web スキミング キャンペーンの規模と、それらが組織とその顧客に与える影響を考えると、この脅威を検出してブロックするには、包括的なセキュリティ ソリューションが必要です。 Microsoft 365 Defenderは、攻撃者のインフラストラクチャに対する可視性と脅威のランドスケープの継続的な監視によって強化された、調整された防御を提供します。

このブログでは、最近のスキミング キャンペーンの難読化手法の技術的な詳細を提供します。また、防御者とユーザーが自分自身とその組織をそのような攻撃から保護するための手順も提供します。

Web スキミングのしくみ

この Web スキミング キャンペーンの主な目的は、チェックアウト時にクレジット カードの詳細などのユーザーの支払い情報を収集し、後で盗み出すことです。これを実現するために、攻撃者は通常、e コマース プラットフォームや CMS の脆弱性を利用して、スキミング スクリプトを挿入したいページにアクセスします。もう 1 つの一般的な方法は、Web ベースのサプライ チェーン攻撃です。攻撃者は、インストールされているサードパーティのプラグインやテーマの脆弱性を利用したり、広告ネットワークを侵害したりして、サイト所有者の認識や同意なしに悪意のある広告を必然的に配信する可能性があります。

典型的な Web スキミング攻撃を表すアイコンと矢印を使用した攻撃チェーン図。
図 1. Web スキミング攻撃の概要

前述のように、注目すべきスキミング キャンペーンの 1 つにMagecartがあります。 2010 年に初めて観測された Magecart キャンペーンは、数が増加し、強力な難読化技術、新しい注入ポイント、および配信方法によってステルス性を高めています。過去 5 年間で、人気のある組織やブランドは、航空会社オンライン チケット サービスからスポーツ ブランド個人輸送業者まで、Magecart の影響を受けてきました。 2019 年には、これらのサイトがホストされていたクラウド サービス プロバイダーの構成ミスが原因で、何万もの Web サイトが侵害されました。このようなタイプの攻撃の増加により、Payment Card Industry Security Standards Council (PCI SSC) は、脅威についてユーザーに警告する速報をリリースするようになりました。 2022 年 4 月、PCI はデータ セキュリティ基準 (DSS) の大幅な改訂版もリリースしました。これには、スキミングを防止するための e コマース環境の追加要件が含まれています。

最近の開発

初期のイテレーションでは、ほとんどの Web スキミング キャンペーンが、Magento などのパッチが適用されていない e コマース プラットフォームを直接標的にしていました。また、彼らが注入した悪意のある JavaScript は非常に目立ちました。しかし、キャンペーンの攻撃ベクトルとルーチンが進化するにつれて、攻撃者はさまざまな手法を使用してスキミング スクリプトを隠し始めました。

スクリプトが難読化された悪意のある画像

調査中に、Magento がホストするサーバーにアップロードされた悪意のある画像ファイルの 2 つのインスタンスに遭遇しました。両方の画像には、Base64 でエンコードされた JavaScript を含む PHP スクリプトが含まれており、JavaScript コードは同じでしたが、PHP の実装がわずかに異なっていました。ファビコン (ショートカットまたは URL アイコンとも呼ばれます) を装った最初の画像は VirusTotal で入手できましたが、もう 1 つは私たちのチームが発見した典型的な Web 画像ファイルでした。それらのハッシュは、以下の「侵害の痕跡」セクションに含まれています。

悪意のあるファビコンが最初に確認されたのは 2021 年 11 月でした。このとき、いくつかのキャンペーンが Web ページにスクリプトを挿入するだけでなく、標的の Web サーバーにリモート アクセス トロイの木馬 (RAT) をドロップし始めました。この配信方法は、通常の手口から離れています。攻撃者は現在、スクリプトを挿入するためにサーバー側を標的にしており、外部スクリプトの読み込みを防止するコンテンツ セキュリティ ポリシー (CSP) などの従来のブラウザー保護をバイパスできるようになっているようです。一方、最新の画像ファイルは/media/wysiwyg/ディレクトリにアップロードされました。これは、Magento CMS の脆弱性を利用したものと考えられます。

画像ファイルへの PHP スクリプトの挿入は興味深いものです。デフォルトでは、Web サーバーは上記のコードを実行しないからです。以前の同様の攻撃に基づいて、攻撃者は PHP のinclude式を使用して、Web サイトのインデックス ページに画像 (PHP コードを含む) を含め、Web ページにアクセスするたびに画像が自動的に読み込まれるようにしたと考えられます。

どちらの画像の場合も、埋め込まれた PHP スクリプトが実行されると、まず現在のページの URL を取得し、「checkout」と「onepage」のキーワードを探しました。これらはどちらも Magento のチェックアウト ページにマッピングされています。

Magento ショッピング カート Web ページの部分的なスクリーンショット。
図 2. URL に「チェックアウト」キーワードを含む Magento ショッピング カート ページのスクリーンショット

スキミング スクリプトを提供する前に、PHP スクリプトは管理者の Cookie が設定されていないこともチェックして、Web 管理者が現在サインインしていないことを確認しました。このようなチェックにより、スクリプトがサイトの訪問者 (オンライン ショッパー) のみをターゲットにしていることを確認しました。

PHP コード スニペットの部分的なスクリーンショット。
図 3. 管理 Cookie をチェックする PHP スクリプトの一部

スキミング スクリプトは、16 進数 (Base16) と Base64 を使用して複数回エンコードされていました。デコードすると、完全な JavaScript コードを構築するためにさらに参照および置換される文字列の配列が含まれていました。以下は、デコードされたスキミング スクリプトのスニペットです。

boms()関数 (図 4) は、ターゲット ユーザーの支払いの詳細を収集する偽のチェックアウト支払いフォーム (図 5) の作成と提供を担当していました。

Web スキミング スクリプトの部分的なスクリーンショット。
図 4. 偽のチェックアウト支払いフォームを作成して提供するスキミング スクリプトの一部
偽のチェックアウト フォームの部分的なスクリーンショット。
図 5. ユーザーの支払いの詳細を収集する偽のチェックアウト フォームのサンプル スクリーンショット

上記の関数は、 __ffse cookie の値が「236232342323626326」に設定されていない場合にのみトリガーされます。おそらく、Web サイトがまだ感染していないことを確認するためのチェックです。

Web スキミング スクリプトの部分的なスクリーンショット。
図 6. 特定の Cookie 値をチェックするスキミング スクリプトの一部

ユーザーが偽のフォームで詳細を送信すると、 glob_snsd()関数がトリガーされ (図 7)、フォーム要素 (input、select) で詳細を収集し、それらを 16 進数と Base64 でエンコードし、最後にそれらを追加しました。 Cookie に追加します (図 8)。

Web スキミング スクリプトの部分的なスクリーンショット。
図 7. クレデンシャルの盗難と引き出しのルーチンを起動するスキミング スクリプトの一部
Web スキミング スクリプトの部分的なスクリーンショット。
図 8. 資格情報の盗難ルーチンを実行するスキミング スクリプトの一部

暗号化された盗まれた情報は、PHP の curl リクエストを介して、攻撃者が制御する C2 に流出しました。

Web スキミング スクリプトの部分的なスクリーンショット。
図 9. 抽出ルーチンを実行するスキミング スクリプトの一部

連結およびエンコードされたスキミング ホスト URL

また、侵害された Web ページに挿入された 4 行の JavaScript も発見しました。以前に分析した悪意のある画像と同様に、このシナリオのスクリプトは、ターゲットの Web ページ URL に「チェックアウト」キーワードが見つかった場合にのみ実行されます。次に、攻撃者が制御するドメインでホストされているスキミング スクリプトを取得して、偽のチェックアウト フォームを読み込みます。

攻撃者が制御するドメインは、Base64 でエンコードされ、複数の文字列が連結されていました。この記事の執筆時点では、このドメインはまだアクティブです。

JavaScript コードの部分的なスクリーンショット。
図 10. スキミング スクリプトをホストする連結およびエンコードされた URL を含むコード スニペット

スキミング スクリプト自体は難読化されておらず、 getData()__send()という 2 つの主要な機能がありました。 getData()は、Web ページ上のフォーム データを取得し、それらを JSON に変換し、それを__send()に渡します。興味深いことに、この機能は、データをスキミングする前に、クローラーやその他のデバッグ試行の可能性もチェックしました。以下のスニペットに示すように、ユーザーがブラウザー開発者ツールを開いたかどうかを具体的にチェックしました。

(devtools.open) リターンの場合。
if (/bot|googlebot|crawler|spider|robot|crawling/i.test(navigator.userAgent)) return;

次に、 __send()関数は画像オブジェクトを作成し、流出用の URL を準備しました。この関数は、画像を形成している間に、キャプチャされたデータを含む URL をdataパラメータにロードしたことに注意してください。パラメータ値も Base64 でエンコードされています。

Web スキミング スクリプトの部分的なスクリーンショット。
図 11. Web ページ データを盗み出す、ホストされたスクリプトのスニペット

Google アナリティクスとメタ ピクセル スクリプトのスプーフィング

攻撃者はまた、Google アナリティクスやメタ ピクセル (以前の Facebook ピクセル) スクリプトになりすまして、サイト管理者や開発者を騙して、悪意のないコードを見ていると思わせ、検出を回避するようになっています。

以下のスクリーンショットは、Base64 でエンコードされた文字列が、偽装された Google タグ マネージャー コード内にどのように配置されたかを示しています。この文字列は、 trafficapps[.]business/data[.]php?p=formにデコードされます。

Web スキミング スクリプトの部分的なスクリーンショット。
図 12. スプーフィングされた Google アナリティクス コード内のエンコードされたスキミング スクリプト

また、スキミング スクリプトがメタ ピクセルの関数パラメーターと JavaScript ファイル名を模倣して検出を回避する、同様の手法も確認しました。前のセクションの例と同様に、この手法の URL は Base64 でエンコードされ、複数の文字列に分割されています。 //sotech[.]fun/identity[.]jsにデコードされた連結文字列には、難読化されたコードが含まれていました。興味深いことに、デコードされた URL には、メタ ピクセルではなくGoogle タグ マネージャーに固有のクエリ文字列d=GTM-34PX2SOも含まれていました。

Web スキミング スクリプトの部分的なスクリーンショット。
図 13. スプーフィングされたメタ ピクセル コード内のエンコードされたスキミング スクリプト

メタ ピクセル スプーフィングの背後にいる攻撃者は、HTTPS でホストされている新しく登録されたドメイン (NRD) を使用して攻撃を実行しました。以下のリストに示すように、このスキミング キャンペーンに関連して確認されたすべてのドメインは、一般的な予算のホスティング プロバイダーを介してほぼ同時に登録されました。ただし、実際のホスティング サイトは Cloudflare のインフラストラクチャの背後に隠されていました。

  • sotech[.]fun – 2021 年 8 月 30 日作成
  • techlok[.]bar – 2021 年 9 月 3 日作成
  • dratserv[.]bar – 2021 年 9 月 15 日作成

ホストされたスクリプトには、複数の難読化レイヤーがありました。部分的に難読化を解除できたことに基づいて、コードはスキミング スクリプトを提供しただけでなく、次のことも行いました。

  • パスワードを盗む – input[name=”billing[customer_password]”]
  • アンチデバッグ手法を実行する – function isDebugEnabled()
JavaScript コードの部分的なスクリーンショット。
図 14. エンコードされたスキミング スクリプトのスニペット

Web スキミングに対する防御

組織にとって、Web スキミング キャンペーンの影響は、金銭的損失、評判の低下、および顧客の信頼の喪失につながる可能性があります。したがって、Web 管理者やその他の防御者は、このような攻撃に注意を払う必要があります。現状では、Web スキミング スクリプトは、Web 分析などの正当なビジネス機能を実行するために使用される他の JavaScript コードによく似ています。さらに、スキミング スクリプトは HTML ファイルだけにあるわけではありません。 CSS、SVG、およびその他のファイル タイプにも、関連する Web ページが読み込まれると JavaScript を実行するコードを埋め込むことができます。

スキミング キャンペーンで使用されるますます回避的な戦術を考えると、組織は、電子商取引プラットフォーム、CMS、およびインストールされているプラグインが最新のセキュリティ パッチで最新であることを確認し、信頼できるソースからサードパーティのプラグインとサービスのみをダウンロードして使用する必要があります。 .また、侵害されたコンテンツや疑わしいコンテンツがないか、Web アセットの定期的かつ徹底的なチェックを実行する必要があります。これらの最近のスキミング スクリプトで見つかった類似点には、「checkout」や「onepage」などの Base64 でエンコードされた文字列の存在や、侵害されたページでのatob() JavaScript 関数の存在が含まれます。このような手がかりは、防御側がこれらの悪意のあるスクリプトを明らかにするのに役立ちます。

また、組織は、 Microsoft 365 Defenderのような包括的なセキュリティ ソリューションでベスト プラクティスを補完する必要があります。これは、さまざまなドメイン間で脅威防御を調整することにより、エンドポイントとサーバー上のスキミング スクリプトを検出してブロックできます。また、コンピューティング環境を継続的に監視して新しい攻撃者のツールや手法を監視する脅威の専門家によって支えられており、保護テクノロジが強化されています。たとえば、Magecart の場合、RiskIQ はその背後にいる攻撃者グループをプロファイリングしたレポートを公開しました。観測された最新のスキミング キャンペーンに関する最新情報も提供されます。

次のアラートを示すエンドポイント UI の Microsoft Defender の部分的なスクリーンショット: 'MageBanker' 資格情報の盗難マルウェアが検出されました
図 15. Web スキミング マルウェアを検出する Microsoft Defender for Endpoint

一方、オンライン ショッパーは、特にチェックアウト プロセス中にブラウザ セッションが安全であることを確認することで、Web スキミング攻撃から身を守ることができます。支払いの詳細を求める予期しないポップアップや疑わしいポップアップには注意する必要があります。最後に、ユーザーは、Microsoft Defender ウイルス対策 (またはセキュリティ製品の同様の機能) で、 クラウドによる保護と自動サンプル送信を有効にする必要があります。この機能は、人工知能と機械学習を利用して、新しい未知の脅威を迅速に特定して阻止します。

Microsoft 365 Defender を使用して、自動化されたクロスドメイン セキュリティによって攻撃を阻止する方法について説明します。

Microsoft 365 Defender 研究チーム

付録

侵害の兆候

ファイル ハッシュ (SHA-256)

エンコードされた URL

以下は、影響を受ける CMS に挿入された Base64 でエンコードされた URL と、対応するデコードされた値のリストです。これらの URL は、攻撃者が Web スキミングに使用する悪意のある JavaScript をホストしています。

Base64 でエンコードされた URL 実際の (デコードされた) URL
AHR0cHM6Ly80NS4xOTcuMTQxLjI1MC9zdGF0eXN0awNzLnBocA== hxxps://45[.]197[.]141[.]250/statystics[.]php
AHR0cHM6Ly80NS4xOTcuMTQxLjI1MC9hbmFseXRpY3MucGhw hxxps://45[.]197[.]141[.]250/analytics[.]php
Ly9hcGl1anF1ZXJ5LmNvbS9hamF4L2xpYnMvanF1ZXJ5LzMuNS4xL2pxdWVyeS0zLjExLjAubWluLmpzP2k9 //apiujquery[.]com/ajax/libs/jquery/3[.]5[.]1/jquery-3[.]11[.]0[.]min[.]js?i=
dHJhZmZpY2FwchHMuYnVzaW5lc3MvZGF0YS5waHA/cD1mb3Jt trafficapps[.]business/data[.]php?p=form
AHR0cHM6Ly9qcXVlcmlkZXYuYXQvanF1ZXJ5LmJhLWhhc2hjaGFuZ2UubWluLmpz hxxps://jqueridev[.]at/jquery[.]ba-hashchange[.]min[.]js
aHR0cHM6Ly9qcXVlcnlzdGF0aWMueHl6L2pxdWVyeS1zdGF0aWMuanM= hxxps://jquerystatic[.]xyz/jquery-static[.]js
Ly9zb3RlY2guZnVuL2lkZW50aXR5Lmpz //sotech[.]fun/identity[.]js
Ly90ZWNobG9rLmJhci9zY2V2ZW50Lm1pbi5qcw //techlok[.]bar/scevent[.]min[.]js
Ly9kcmF0c2Vydi5iYXIvc2NyaXB0LW1pbi0yLjUunNC5taW4uanM //dratserv[.]bar/script-min-2[.]5[.]4[.]min[.]js
aHR0cHM6Ly9pZHRyYW5zZmVyLmljdS93d3cuZ29vZ2xLLWFuYWx5dGljcy5jb20vYXJvbWFvbmxpbmVzdG9yZS5jb20uanM= hxxps://idtransfer[.]icu/www[.]google-analytics[.]com/aromaonlinestore[.]com[.]js
dHJhZmZpY2FwchHMub3JnL2RhdGEucGhwP3A9ZjeE2atez trafficapps[.]org/data[.]php?p=f16i13
AHR0cHM6Ly9jaWxlbnQtdHJhY2tpbmcuY29tL2pzL3RyYWNraw5nLTIuMS5taW4uanM= hxxps://cilent-tracking[.]com/js/tracking-2[.]1[.]min[.]js
Z29vZ2xlc2VydmljZXMub25saW5lL3Y0L2FwaS9hcGlWMi5qcw== googleservices[.]online/v4/api/apiV2[.]js
bGlnaHRnZXRqcy5jb20vbGlnaHQuanM= lightgetjs[.]com/light[.]js
anNwYWNrLnByby9hcGkuanM= jspack[.]pro/api[.]js
bWFnzWVudG8uY29tL3YzL2FwaS9sb2dzLmpz magento[.]com/v3/api/logs[.]js
YWdpbGl0eXNjcmlwdHMUY29tL2pzL3NhZmVmaWxlLmpz agilityscripts[.]com/js/safefile[.]js
AHR0cHM6Ly8xMDYUMTUuMTc5LjI1NQ== hxxps://106[.]15[.]179[.]255
AHR0cHM6Ly8xMDMuMjMzLjExLjI4L2pRdWVyeV9TdFhsRmlpc3hDRE4ucGhwP2hhc2g9MDZkMDhhMjA0YmRkZmVIZTI4NTg0MDhhNjJjNzQyZTk0NDgyNDE2NA== hxxps://103[.]233[.]11[.]28/jQuery_StXlFiisxCDN[.]php?hash=06d08a204bddfebe2858408a62c742e944824164

Microsoft 365 Defender の検出

Microsoft Defender ウイルス対策

以下は、Web サーバーで悪意のある JavaScript スキマーを検出する Microsoft の検出です。

マジェントスキマー

  • TrojanSpy:JS/Banker.AA
  • TrojanSpy:JS/SuspBanker.AA
  • TrojanSpy:JS/MageBanker.CC
  • TrojanSpy:JS/GTagManagerBanker.A
  • TrojanSpy:JS/GTagManagerBanker.B
  • TrojanSpy:JS/GenWebBanker.A
  • TrojanSpy:JS/FbPixelSkimming.A
  • TrojanSpy:JS/Banker.BB
  • TrojanSpy:JS/PossibleSkimmer.A

WordPress WooCommerce スキマー

  • TrojanSpy:JS/WooCommBanker.BB

PrestaShop スキマー

  • TrojanSpy:JS/PrestaBanker.BB

参照: https://www.microsoft.com/en-us/security/blog/2022/05/23/beneath-the-surface-uncovering-the-shift-in-web-skimming/

Comments

Copied title and URL