クラウドコンピューティングが必要ですか? 今すぐ始める

巧みな隠蔽:404 ページを悪用する新たな Magecart キャンペーン

Roman Lvovsky

執筆者

Roman Lvovsky

October 09, 2023

Roman Lvovsky

執筆者

Roman Lvovsky

Roman Lvovsky は、クライアント側の脅威、ブラウザー内部、JavaScript 攻撃ベクトルに関する豊富な経験を持つセキュリティ研究者です。Akamai の In-Browser Protection Research Team のメンバーであり、ウェブスキミングや Magecart 攻撃など、さまざまなクライアント側の脅威に関する研究に力を入れています。ソフトウェアエンジニアリングの分野で確固たる経歴を持ち、JavaScript と Web 開発を専門としています。

このドメインの攻撃者は、被害者 Web サイト内に攻撃を隠し、攻撃を検知する可能性のあるさまざまなセキュリティ対策を回避するための、より良い方法を絶えず見出しています。

エグゼクティブサマリー

  • Akamai Security Intelligence Group は、Magecart Web スキミングキャンペーンを検知しました。このキャンペーンは、食品業界や小売業界の大規模な組織など、幅広い Web サイトをターゲットにしています。

  • このキャンペーンは、3 つの高度な隠蔽手法を使用しているという点で注目されています。その 1 つはこれまでに見たことのない手法(具体的には、Web サイトのデフォルトの 404 エラーページを操作して悪性コードを隠すという手法)であり、検知と緩和がとりわけ困難です。 

  • 他の 2 つの難読化手法は、攻撃者が検知を回避して攻撃チェーンを長引かせるために使用している発展的な戦術です。 

  • Web スキミング攻撃がますます高度化しているため、組織は常に警戒し、進化する脅威を阻止する高度なアプローチを模索する必要があります。

はじめに

新しい高度な隠密の Magecart Web スキミングキャンペーンは、Magento や WoodCommerce の Web サイトをターゲットにしていました。このキャンペーンの被害者の一部は、食品業界や小売業界の大規模な組織に関係しています。

私たちが発見した証拠によると、このキャンペーンは数週間、場合によってはさらに長い期間実行されます。このキャンペーンの驚くべき点は、これまで見たことのない高度な隠匿手法が使用されていたことです。

新たなキャンペーン

Magecart 攻撃は通常、標的 Web サイトの脆弱性を悪用するか、その Web サイトが使用しているサードパーティーサービスを侵害することから始まります。このキャンペーンでは、 悪性のコードスニペットがファーストパーティーリソースの 1 つに挿入されたため、検知されたすべての被害者 Web サイトが直接悪用されました。

また、悪性コードが HTML ページに挿入された場合もあれば、Web サイトの一部としてロードされたファーストパーティースクリプトの 1 つに隠されていた場合もあります。

他の多くの Magecart キャンペーンと同様に、このキャンペーンの攻撃インフラは、ローダー、悪性の攻撃コード、データ窃取の 3 つの主要な要素で構成されています(図 1)。

  1. ローダー — 悪性の攻撃コードを完全にロードするための、短くて目立たない JavaScript コードスニペット

  2. 悪性の攻撃コード — 攻撃を実行する主な JavaScript コード。機微な情報の入力の検知、データの読み取り、チェックアウトプロセスの中断、偽のフォームの挿入を行います

  3. データ窃取 — 盗まれたデータを攻撃者のコマンド&コントロール(C2)サーバーに送信するために使用される方法

攻撃を 3 つの要素に分ける目的は、検知がより困難になるように攻撃を隠すことです。これにより、攻撃フロー全体を特定の標的ページでのみアクティベートできます。つまり、この難読化手法を使用すれば、攻撃者が攻撃を実行したい場合のみ、攻撃フロー全体をアクティベートできます。そのため、攻撃がより目立たなくなり、標的 Web サイトに配置されている可能性のあるセキュリティサービスや外部スキャンツールによる検知が困難になります。

ほとんどの Magecart キャンペーンはフローやステージが類似していますが、攻撃者が使用する隠匿手法の違いによってキャンペーンを区別することができます。そのような隠匿手法を使用する目的は、攻撃インフラを目立たなくして、トレースを隠し、検知とリバースエンジニアリングを困難にし、最終的に攻撃を長引かせることです。

キャンペーンの 3 つのバリエーション

このキャンペーンには 3 つの異なるバリエーションがあることがわかりました。これは、キャンペーンの検知と緩和を防止するために、攻撃者が時間の経過とともに攻撃を進化させ、改良を施していることを示しています。

  • 最初の 2 つのバリエーションは非常に類似しており、ローダー部分にわずかな違いがあるだけです。 

  • 3 つ目のバリエーションは独特で、攻撃者が Web サイトのデフォルトの 404 エラーページを使用して悪性コードを隠します。これは、これまでに見たことのない独創的な隠匿手法です。

この新しいキャンペーンの 3 つのバリエーションについて、技術的に詳しく見てみましょう。

バリエーション 1 

私たちは、大手企業の Web サイトで脅威インテリジェンス監視ツールによって疑わしいコードスニペットが検知されたことを知り、調査を開始しました。そのスニペットを分析したところ、それは悪意を持ってエンコードされた JavaScript ローダーであることがわかりました。その JavaScript ローダーは依然として存在し、Web サイトで有効になっていました。この発見により、さらなる調査を行うこととなりました。そして、キャンペーンの全容が明らかになり、複数のバリエーションによって数多くの Web サイトに影響を及ぼしていることがわかりました。

バリエーション 1 のローダー:氷山の一角

スキマーは、 onerror 属性を持つ不正な形式の HTML image タグを、悪用された Web サイトに挿入することに成功しました(図 2)。この属性には、難読化され Base64 でエンコードされた悪性ローダー・コード・スニペットが含まれています。意図的に空にされた image タグの src 属性は、ネットワークリクエストを防止し、難読化された悪性 JavaScript コードスニペットを含むインラインの onerror コールバックの実行をトリガーするように設計されています。

JavaScript コードを実行する目的で image タグを使用することはあまり一般的ではなく、高度な手法です。この手法は、スキマーがセキュリティ対策(通常はネットワークトラフィックを分析する外部スキャナーなど)をバイパスするために役立ちます。このような場合、そのセキュリティ対策はトリガーされません。難読化されたコードは、ページ自体によって開始されたネイティブのファーストパーティースクリプトであるかのように、ページのコンテキスト内で実行されます。

バリエーション 1 のローダー 図 2: バリエーション 1 のローダー — 不正なローダーコードを含む onerror 属性を持つ、不適切なフォーマットの HTML イメージタグ

デコードされたローダーコード — ランタイム

難読化され Base64 でエンコードされたコードがランタイムに実行されると、そのコードは単純な JavaScript に変換され、WebSocket チャネルを立ち上げる役割を担うようになります(図 3)。このチャネルは、ブラウザーと攻撃者の C2 サーバー間の双方向通信リンクとして機能します。

Magecart 攻撃での WebSockets の使用は、いくつかの最近のキャンペーンで確認されています。WebSocket は、より目立ちにくい柔軟性の高い通信方法であると考えられており、攻撃者は単一のネットワークチャネルをさまざまな目的で利用できます。これには、攻撃のさまざまな要素を C2 サーバーからブラウザーへ送信すること(およびその逆)や、特定のシナリオでのデータ窃取アクティビティを容易にすることが含まれます。

このコードのもう 1 つの注目すべき点は、ボット検知です。これにより、ユーザーエージェントが自動化制御を受けているかどうかをチェックします。そうであれば、コードの実行が終了します。これは、攻撃を検知する可能性のある外部セキュリティスキャナーとサンドボックスを回避することを目的とした、巧妙なアンチボット手法です。

ランタイムにデコードされた JavaScript コード 図 3:バリエーション 1 のローダーのランダムにデコードされた JavaScript コード

WebSocket 通信フロー

WebSocket チャネルが確立されると、攻撃者の C2 サーバーからブラウザーに最初のメッセージが送信されます。このメッセージは、Base64 でエンコードされた文字列として送信されます。この文字列には、ページの現在の URL を返すようにブラウザーに指示する 1 行の JavaScript コマンドが含まれています。

このステップの目的は、現在のページがチェックアウト(機密)ページか、その他の非チェックアウトページかを、C2 サーバーが判断できるようにすることです。このようにして、攻撃者は次のステップを適宜調整できます。

このサーバー側の簡単な検証により、攻撃者は関連する標的ページのみで攻撃をアクティベートし、非機密ページで発覚するのを回避できます。これは、スキマーがセキュリティサービスと外部スキャナーによって検知を回避するために必要な作業を示すもう 1 つの例です。

C2 サーバーがチェックアウトページの URL を識別すると、フローは次の段階に進みます。このステップでは、別のメッセージがブラウザーに送信されます。これは Base64 でエンコードされた長い文字列であり、攻撃コード全体が含まれています。デコードされると、難読化された長い JavaScript コードが現れます(図 4)。

このコードは、ユーザーの機微な個人情報やクレジットカード情報を読み取ってスキマーの C2 サーバーに送信することを目的として、標的の機密ページでさまざまな悪性のアクティビティを実行する役割を担います。

その後、悪性コードによって収集され盗まれた機微な情報を含む、難読化されたデータ窃取メッセージが、ブラウザーから C2 サーバーに送信されます。前述のとおり、悪性コード全体のロードとデータ窃取に同じ WebSocket チャネルを使用することで、プロセスがより目立たなくなり、発生するネットワークリクエストが XHR、fetch、HTML リソースリクエストなどの従来の通信方法よりも少なくなります。

WebSocket フローのスクリーンショット 図 4:チェックアウトページの WebSocket フロー

バリエーション 2

バリエーション 2 のローダー:同じ女性、新しいドレス 

バリエーション 1 とバリエーション 2 の主な違いは、ローダーコンポーネントにあります。バリエーション 2 では、スキマーはインラインスクリプトを挿入します。このスクリプトには、Facebook のビジター・アクティビティ・トラッキング・サービスとしてよく知られている Meta Pixel コードスニペットによく似たコードスニペットがあり、その中にいくつかの行が追加されています(図 5)。

この追加された行が実際のローダー部分であり、周囲の Meta Pixel コードは疑わしくない正規のコードスニペットであるかのように見せかけて誤認させるように偽装されています。

悪性のコードスニペットを Google Tag Manager や Facebook といった有名なサービスのように見せかけるこの隠匿手法は、 最近の Magecart キャンペーンでよく見られます。この手法を使用することで、スキマーは外部のスキャナーや研究者による静的分析を回避できます。

バリエーション 2 のローダー 図 5:バリエーション 2 のローダー — 内部に悪性ローダーを含む、Meta Pixel コードスニペットになりすましたインラインスクリプト

画像のリクエスト

偽の Meta Pixel コードスニペット内の疑わしい行を慎重に調べたところ、Web サイトのディレクトリーから PNG 画像が取得されたようでした。ネットワークリクエストは、Web サイトでホストされている無害な画像を求める通常のリクエストであるように見えます。しかし、この画像の実際の内容を調べたところ、見た目どおりに無害ではないことが明らかになりました(図 6)。

ネットワーク画像リクエスト 図 6:攻撃者によって改ざんされた、悪性コードを含む画像を求めるネットワーク画像リクエスト

イメージバイナリー内の悪性の JavaScript コードスニペット

PNG 画像のバイナリーデータには Base64 でエンコードされた文字列が含まれ、画像バイナリーファイルの末尾に追加されています(図 7)。この文字列はその後、ローダー・コード・スニペットによって抽出、デコード、実行されます(図 8)。デコードされた文字列は、バリエーション 1 のローダーの onerror 属性内で見られたものと同じ JavaScript コードスニペットです。

フローのその後のステップは同じです。このコードスニペットはランタイムに単純な JavaScript コードに変換され、そのコードが攻撃者の C2 サーバーへの WebSocket チャネルを立ち上げます。その後のシーケンスは前述のとおりです。

画像のバイナリーデータ 図 7:隠された悪性コードを含む画像のバイナリーデータ
 悪性コード 図 8:悪性コードは最初に Base64 でエンコードされて画像内に隠され、デコード後に明らかになります

バリエーション 3 

いよいよ、最も重要な部分について説明します。同様の攻撃を見たことはありますが、これは独特で、本当に驚かされました。

バリエーション 3 のローダー:同じに見えるが、まったく違う

一見すると、このローダーはバリエーション 2 のローダーと似ていますが、まったく異なるシナリオであることがわかります。場合によっては、このローダーはバリエーション 2 で見られたように Meta Pixel コードスニペットになりすまします(図 9)。しかし、その他の場合は、ページのランダム・インライン・スクリプト内に挿入されます(図 10)。

このローダーの注目すべき点の 1 つ目は、「icons」という相対パスへのフェッチリクエストです。

バリエーション 3 のローダー 図 9:バリエーション 3 のローダー — Meta Pixel の見た目を模したコードスニペット内に隠された悪性のコードスニペット
任意のインラインスクリプト 図 10:バリエーション 3 のローダー — 任意のインラインスクリプト内に隠された悪性のコードスニペット

404 エラーが発生しましたか?本当ですか?

ローダーが実行されると、攻撃はフェッチリクエストを /iconsに送信します。これは、実際には存在しない相対パスです。このリクエストにより、「404 Not Found」エラーが発生します(図 11)。応答で返された HTML を分析すると、Web サイトのデフォルトの 404 ページのようでした(図 12)。これは紛らわしく、私たちが見つけた被害者 Web サイトでスキマーがアクティブではなくなったのかと疑問に思いました。

ローダーによって開始されたリクエスト 図 11:404 エラーを返す存在しないパスに対してローダーが開始したリクエスト
エラーページのスクリーンショット 図 12:デフォルトのエラーページ HTML

ローダーを過小評価してはなりません

一歩戻ってローダーを再分析したところ、欠けていたパズルのピースが見つかりました。ローダーに文字列「COOKIE_ANNOT」の regex マッチが含まれていたのです。この文字列は、icons リクエストの一部として返された 404 エラーページで実行されるものでした。

そこで、返された 404 HTML 内の文字列を調べたところ、「COOKIE_ANNOT」文字列を含むページの末尾に関する隠しコメントが見つかりました(図 14)。この文字列の横に、Base64 でエンコードされた長い文字列が連結されていました。このエンコードされた文字列は、難読化された JavaScript 攻撃コード全体を表します。ローダーはコメントからこの文字列を抽出し、デコードして、攻撃を実行します。この攻撃は、ユーザーが入力した個人情報を盗むように設計されています。

存在しないパスに対する追加のリクエストをシミュレートしたところ、すべてのリクエストで、エンコードされた悪性コードを伴うコメントを含む同じ 404 エラーページが返されました。 このチェックにより、攻撃者が Web サイト全体のデフォルトのエラーページを変更し、悪性コードを内部に隠したことが確認されます。

バリエーション 3 のローダー 図 13:バリエーション 3 のローダー - 文字列「COOKIE_ANNOT」の regex マッチ
エンコードされた悪性のコメントのスクリーンショット 図 14:エラーページ HTML 内で非表示になっていた、エンコードされた悪性のコメント

データ窃取

偽のフォーム

バリエーション 1 と 2 とは異なり、バリエーション 3 では攻撃者が偽のフォームの挿入という別の一般的なデータ窃取手法を使用しました(図 15)。この手法は通常、スキマーが機微な情報の入力にアクセスできない場合に使用されます。

これは、Web サイトがサードパーティーの決済サービスを使用してサードパーティーの iframe または外部ページ内に決済フォームを実装している場合に発生することがあります。このようなシナリオを回避するために、攻撃者は元の決済フォームに類似した偽のフォームを作成して、それをオーバーレイします。 この手法は、よく使用されるようになってきています。これが、まさにバリエーション 3 のデータ窃取の仕組みです。

挿入された偽のフォーム 図 15:悪性コードによって挿入された偽のフォーム

ユーザーが攻撃者の偽のフォームにデータを送信すると、エラーが表示され、偽のフォームが非表示になり、元の決済フォームが表示され、ユーザーは決済情報を再入力するよう求められます(図 16)。

ユーザーが攻撃者の偽のフォームにデータを送信すると、エラーが表示され、偽のフォームは非表示になります 図 16:偽のフォームが非表示になり、ユーザーは情報を再入力するよう求められます

盗まれたデータを含む画像リクエスト

偽のフォームが送信されると、攻撃者の C2 サーバーへの画像ネットワークリクエストが開始され、盗まれた個人情報とクレジットカード情報がすべて、クエリーパラメーター内の Base64 でエンコードされた文字列として転送されます(図 17)。この文字列をデコードすれば、リクエストの真の意図と攻撃フロー全体が明らかになります。

盗まれたデータを含む画像ネットワークリクエスト 図 17:盗まれたデータが Base64 でエンコードされた文字列のクエリーパラメーターとして含まれている画像ネットワークリクエスト

バリエーション 3 から得た教訓:404 のケース

この隠匿手法は非常に革新的であり、これまでの Magecart キャンペーンでは見られませんでした。標的 Web サイトのデフォルトの 404 エラーページを操作するというアイデアは、隠匿や回避を強化するためのさまざまな創造的なオプションを Magecart 攻撃者にもたらす可能性があります。

特定されたケースの中には、書き込み時に影響を受ける Web サイトのページから悪性のローダーがすでに削除されていたケースもありました。ただし、デフォルトの 404 ページ内に悪性のコメントが残るため、スキマーは簡単に攻撃を再開できる可能性があります。このことは、このアプローチの検知の複雑さと緩和の重要性を浮き彫りにしています。

404 ページにつながるファーストパーティーパスへのリクエストは、コンテンツ・セキュリティ・ポリシーのヘッダーや、ページ上のネットワークリクエストをアクティブに分析している可能性のあるその他のセキュリティ対策を回避できる、もう 1 つの回避手法です。これは間違いなく、私たちが最近遭遇した Magecart 戦略の中でも高度な戦略の 1 つです。

Akamai Client-Side Protection & Compliance 対スキマー

このキャンペーンの調査の一環として、このスキマー対 Akamai Client-Side Protection & Complianceのシミュレーションを実施しました。これは、ランタイム JavaScript 実行のふるまいを分析し、JavaScript の脅威を防ぎ、クライアントサイドの攻撃を緩和するソリューションです。

Client-Side Protection & Compliance は、高度なスキマーの検知に成功し、迅速な緩和のために重大度の高いイベントをトリガーしました。実際のシナリオでは、特定の Web ページで Client-Side Protection & Compliance が有効になっています。図 18 は、Web サイト所有者が受け取るアラートを示しています。このアラートにより、Web サイト所有者は脅威を迅速に調査し、さまざまな緩和オプションを使用してリアルタイムで対応することができます。

Client-Side Protection & Compliance シミュレーションのアラート 図 18:Client-Side Protection & Compliance シミュレーションにおける、スキマー検知後のアラート

結論

このキャンペーンは、Web スキミングの手法が絶えず進化しているという事実を裏付けています。それらの手法は高度化しており、静的分析や外部スキャンによる検知と緩和がますます困難になっています。このドメインの攻撃者は、被害者 Web サイト内に攻撃を隠し、攻撃を検知する可能性のあるさまざまなセキュリティ対策を回避するための、より良い方法を絶えず見出しています。

この調査で明らかになった複雑さのレベルを考えれば、組織は Web スキミング攻撃ベクトルを注意深く警戒し続け、このタイプの攻撃に対処するための新しい高度なアプローチを積極的に模索しなければなりません。

IOC

  • Pmdresearch[.]com

  • Secure-tool[.]com

  • adsometric[.]com

  • cngresearch[.]com



Roman Lvovsky

執筆者

Roman Lvovsky

October 09, 2023

Roman Lvovsky

執筆者

Roman Lvovsky

Roman Lvovsky は、クライアント側の脅威、ブラウザー内部、JavaScript 攻撃ベクトルに関する豊富な経験を持つセキュリティ研究者です。Akamai の In-Browser Protection Research Team のメンバーであり、ウェブスキミングや Magecart 攻撃など、さまざまなクライアント側の脅威に関する研究に力を入れています。ソフトウェアエンジニアリングの分野で確固たる経歴を持ち、JavaScript と Web 開発を専門としています。