マイクロソフトのセキュリティ研究者は最近、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 ベースのサプライ チェーン攻撃です。攻撃者は、インストールされているサードパーティのプラグインやテーマの脆弱性を利用したり、広告ネットワークを侵害したりして、サイト所有者の認識や同意なしに悪意のある広告を必然的に配信する可能性があります。
前述のように、注目すべきスキミング キャンペーンの 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 のチェックアウト ページにマッピングされています。
スキミング スクリプトを提供する前に、PHP スクリプトは管理者の Cookie が設定されていないこともチェックして、Web 管理者が現在サインインしていないことを確認しました。このようなチェックにより、スクリプトがサイトの訪問者 (オンライン ショッパー) のみをターゲットにしていることを確認しました。
スキミング スクリプトは、16 進数 (Base16) と Base64 を使用して複数回エンコードされていました。デコードすると、完全な JavaScript コードを構築するためにさらに参照および置換される文字列の配列が含まれていました。以下は、デコードされたスキミング スクリプトのスニペットです。
boms()関数 (図 4) は、ターゲット ユーザーの支払いの詳細を収集する偽のチェックアウト支払いフォーム (図 5) の作成と提供を担当していました。
上記の関数は、 __ffse cookie の値が「236232342323626326」に設定されていない場合にのみトリガーされます。おそらく、Web サイトがまだ感染していないことを確認するためのチェックです。
ユーザーが偽のフォームで詳細を送信すると、 glob_snsd()関数がトリガーされ (図 7)、フォーム要素 (input、select) で詳細を収集し、それらを 16 進数と Base64 でエンコードし、最後にそれらを追加しました。 Cookie に追加します (図 8)。
暗号化された盗まれた情報は、PHP の curl リクエストを介して、攻撃者が制御する C2 に流出しました。
連結およびエンコードされたスキミング ホスト URL
また、侵害された Web ページに挿入された 4 行の JavaScript も発見しました。以前に分析した悪意のある画像と同様に、このシナリオのスクリプトは、ターゲットの Web ページ URL に「チェックアウト」キーワードが見つかった場合にのみ実行されます。次に、攻撃者が制御するドメインでホストされているスキミング スクリプトを取得して、偽のチェックアウト フォームを読み込みます。
攻撃者が制御するドメインは、Base64 でエンコードされ、複数の文字列が連結されていました。この記事の執筆時点では、このドメインはまだアクティブです。
スキミング スクリプト自体は難読化されておらず、 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 でエンコードされています。
Google アナリティクスとメタ ピクセル スクリプトのスプーフィング
攻撃者はまた、Google アナリティクスやメタ ピクセル (以前の Facebook ピクセル) スクリプトになりすまして、サイト管理者や開発者を騙して、悪意のないコードを見ていると思わせ、検出を回避するようになっています。
以下のスクリーンショットは、Base64 でエンコードされた文字列が、偽装された Google タグ マネージャー コード内にどのように配置されたかを示しています。この文字列は、 trafficapps[.]business/data[.]php?p=formにデコードされます。
また、スキミング スクリプトがメタ ピクセルの関数パラメーターと JavaScript ファイル名を模倣して検出を回避する、同様の手法も確認しました。前のセクションの例と同様に、この手法の URL は Base64 でエンコードされ、複数の文字列に分割されています。 //sotech[.]fun/identity[.]jsにデコードされた連結文字列には、難読化されたコードが含まれていました。興味深いことに、デコードされた URL には、メタ ピクセルではなくGoogle タグ マネージャーに固有のクエリ文字列d=GTM-34PX2SOも含まれていました。
メタ ピクセル スプーフィングの背後にいる攻撃者は、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()
Web スキミングに対する防御
組織にとって、Web スキミング キャンペーンの影響は、金銭的損失、評判の低下、および顧客の信頼の喪失につながる可能性があります。したがって、Web 管理者やその他の防御者は、このような攻撃に注意を払う必要があります。現状では、Web スキミング スクリプトは、Web 分析などの正当なビジネス機能を実行するために使用される他の JavaScript コードによく似ています。さらに、スキミング スクリプトは HTML ファイルだけにあるわけではありません。 CSS、SVG、およびその他のファイル タイプにも、関連する Web ページが読み込まれると JavaScript を実行するコードを埋め込むことができます。
スキミング キャンペーンで使用されるますます回避的な戦術を考えると、組織は、電子商取引プラットフォーム、CMS、およびインストールされているプラグインが最新のセキュリティ パッチで最新であることを確認し、信頼できるソースからサードパーティのプラグインとサービスのみをダウンロードして使用する必要があります。 .また、侵害されたコンテンツや疑わしいコンテンツがないか、Web アセットの定期的かつ徹底的なチェックを実行する必要があります。これらの最近のスキミング スクリプトで見つかった類似点には、「checkout」や「onepage」などの Base64 でエンコードされた文字列の存在や、侵害されたページでのatob() JavaScript 関数の存在が含まれます。このような手がかりは、防御側がこれらの悪意のあるスクリプトを明らかにするのに役立ちます。
また、組織は、 Microsoft 365 Defenderのような包括的なセキュリティ ソリューションでベスト プラクティスを補完する必要があります。これは、さまざまなドメイン間で脅威防御を調整することにより、エンドポイントとサーバー上のスキミング スクリプトを検出してブロックできます。また、コンピューティング環境を継続的に監視して新しい攻撃者のツールや手法を監視する脅威の専門家によって支えられており、保護テクノロジが強化されています。たとえば、Magecart の場合、RiskIQ はその背後にいる攻撃者グループをプロファイリングしたレポートを公開しました。観測された最新のスキミング キャンペーンに関する最新情報も提供されます。
一方、オンライン ショッパーは、特にチェックアウト プロセス中にブラウザ セッションが安全であることを確認することで、Web スキミング攻撃から身を守ることができます。支払いの詳細を求める予期しないポップアップや疑わしいポップアップには注意する必要があります。最後に、ユーザーは、Microsoft Defender ウイルス対策 (またはセキュリティ製品の同様の機能) で、 クラウドによる保護と自動サンプル送信を有効にする必要があります。この機能は、人工知能と機械学習を利用して、新しい未知の脅威を迅速に特定して阻止します。
Microsoft 365 Defender を使用して、自動化されたクロスドメイン セキュリティによって攻撃を阻止する方法について説明します。
Microsoft 365 Defender 研究チーム
付録
侵害の兆候
ファイル ハッシュ (SHA-256)
- a6fc14a7bb5e05c1d271add5b38744523fed01a18ce5578b965ee02e19589e77
- b397e7ad2d00dcef4cf4ba5df363684b1fefcc64c23ab110032a7b2ebb77ab4a
- 88e9d5eddd24546ab78ce8db1eb474a20b9694f52d4c7ad976fbfa683b7ce635
エンコードされた 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
Comments