サイバー犯罪集団「Magecart」の新しい攻撃を確認、広告配信サービスを侵害しスキミングコードを注入

トレンドマイクロは、2019年1月1日、サイバー犯罪集団「Magecart」による活動の急増を検出しました。Magecartは、電子商取引(eコマース)サイトに不正なコードを注入し、ユーザが入力した支払い情報を窃取する攻撃で知られている集団です。トレンドマイクロは同集団の監視を続けてきましたが、これまで目立った動きは確認されていませんでした。

今回確認された攻撃では、277のeコマースサイトで、ユーザが入力した情報を窃取する「スキミングコード」(「JS_OBFUS.C」として検出)が読み込まれていました。調査の結果、このスキミングコードは対象のWebサイトに直接注入されていたわけではなく、フランスのオンライン広告企業「Adverline」が提供するJavaScriptライブラリに注入されていたことが判明しました。トレンドマイクロは迅速にAdverlineに連絡し、同社はフランスのコンピュータ緊急事態対策チーム「CERT La Poste」の協力を受けて直ちに必要な措置を講じました。

Webスキミング活動による不正なドメインへのアクセス検出数
図 1:Webスキミング活動による不正なドメインへのアクセス検出数
(トレンドマイクロのクラウド型セキュリティ技術基盤
Trend Micro Smart Protection Network(SPN)」の統計に基づく)

今回の攻撃を確認した時点で、トレンドマイクロの機械学習および挙動検出技術により、不正なダウンローダ(「Downloader.JS.TRX.XXJSE9EFF010」として検出)はプロアクティブにブロックされていました。

■対象となったWebサイト

対象となったWebサイトには、化粧品、ヘルスケア用品、衣料品等を扱う有名メーカーの販売サイトだけでなく、チケット発行、旅行および航空券の予約などのサービスを提供するサイトも含まれていました。国別に見ると、8割近くがフランスのWebサイトでした。

Webスキミング活動による不正なドメインへのアクセス検出数の国別分布
図 2:Webスキミング活動による不正なドメインへのアクセス検出数の国別分布
(2019年1月1日~1月6日、SPNの統計に基づく)

■Magecartの下位集団「Group 12」

サードパーティのサービスを狙う手法から、当初、今回の攻撃はMagecartに属する下位集団「Group 5」によるものだと推測されていました。Group 5は、セキュリティ企業「RiskIQ」によって、チケット販売サービス「Ticketmaster」への2018年の攻撃のような、いくつかの情報漏えい事例とのつながりが報告されている集団です。しかし、RiskIQのリサーチャYonathan Klijnsma氏の協力により、トレンドマイクロは、今回のWebスキミング活動がMagecartの新しい下位集団「Group 12」によるものだと断定することができました。

■攻撃の流れ

攻撃の流れ
図 3:攻撃の流れ

対象サイトを直接侵害するその他のWebスキミング攻撃とは異なり、MagecartのGroup 5およびGroup12は、サードパーティのサービスが提供するJavaScriptライブラリにコードを注入することでeコマースサイトを攻撃します。これにより、問題のライブラリが埋め込まれたすべてのWebサイトがスキミングコードを読み込むようになります。また、サードパーティのサービスを狙うことにより、攻撃者は広範なWebサイトに影響を与え、より多くの情報を窃取することが可能になります。

Adverlineの事例では、Webサイトを訪れたユーザにタグを付けて追跡し、そのユーザに特化した広告を配信する「リターゲティング広告」のためのJavaScriptライブラリにコードが注入されていました。調査の時点で、Adverlineのリターゲティングスクリプトを利用しているWebサイトは、Magecart Group 12のスキミングコードを読み込んでいました。このスキミングコードが、Webページに入力された支払い情報を窃取し遠隔のサーバに送信します。

Magecart Group 12がeコマースサイトに注入した不正コード
図 4:Magecart Group 12がeコマースサイトに注入した不正コード

スキミングコードを読み込ませるためにAdverlineのリターゲティングスクリプトに注入されたコード
図 5:スキミングコードを読み込ませるためにAdverlineのリターゲティングスクリプトに注入されたコード

■スキミングツール

Magecart Group 12は、2つの難読化されたスクリプトを利用してスキミング攻撃を実行します。1つ目のスクリプトは主にリバースエンジニアリングを防ぐためのもので、2つ目はメインのスキミングコードです。これらのスクリプトには変更を検知することで整合性をチェックする機能も含まれています。このチェックはスクリプト部分のハッシュ値を計算することで行われます。元のハッシュ値と一致しない場合、スクリプトの実行は停止します。

整合性をチェックするコード
図 6:整合性をチェックするコード(難読化解除済み)

さらに、実際のユーザが開始したセッションであることを確認するために、端末の情報をチェックする「フィンガープリンティング」を実行します。このフィンガープリンティングによって、モバイル端末で実行されていないこととデバッガが有効化されていないことを確認します。モバイル端末であるかどうかはブラウザのUser-Agent情報に基づいて判定します。また、検出および解析を逃れるためにブラウザに搭載されたデバッガのコンソール表示を常に消去します。

フィンガープリンティングを実行するコード
図 7:フィンガープリンティングを実行するコード

メインのスキミングコードである2つ目のスクリプトは、まずURLに含まれる文字列に基づいてeコマースサイトで実行されているかどうかを判定します。確認する文字列は、「checkout」、「billing」、「purchase」のような販売に関連する単語です。中でも、フランス語で「かご」を意味する「panier」、ドイツ語で「清算」を意味する「kasse」という単語は注目に値します。これは、Magecart Group 12が管理するドメインへのアクセス数を国別にまとめた図2とも一致します。フランスのWebサイトが最も多く、ドイツからのアクセスも確認されています。

狙った文字列がURLに含まれていた場合、問題のスクリプトはスキミング活動を開始します。Webページの入力フォームに空白以外の値が入ると、それを検知しフォーム名と入力値をコピーします。このようにして窃取した情報は、Base64方式でエンコードされJavaScriptの「LocalStorage」プロパティに「Cache」というキーで格納されます。また、ユーザを識別するために生成されたランダムな数値も、「E-tag」というキーでLocalStorageプロパティに格納されます。ユーザが支払いページを閉じるまたは更新すると、JavaScriptの「unload」イベントが発生します。このイベントをトリガーとして、窃取した支払い情報、ランダムな数値(E-tag)、eコマースサイトのドメイン名がBase64方式でエンコードされ、HTTPのPOSTメソッドで遠隔サーバに送信されます。

支払い情報をスキミングするメインのコード
図 8:支払い情報をスキミングするメインのコード(難読化解除済み)

■被害に遭わないためには

今回確認された攻撃は、特に機密情報を扱っている場合、WebサイトやWebアプリケーションが利用するインフラストラクチャ全体安全を守ることの重要性を強調する事例です。一般論として、ソフトウェアには定期的に更新プログラムを適用し、古なったコンポーネントやサードパーティのプラグインを無効化または制限し、認証の仕組みを実装および強化してください。ITおよびセキュリティ担当者は、自身のWebサイトやアプリケーションをプロアクティブに監視し、不正アクセスやコンテンツの改ざん、未知のスクリプトの実行のような不正活動の兆候を検知してください。

Magecartの下位集団および本記事で解説したGroup 12の活動に関するRiskIQの解析はこちらを参照してください。

■トレンドマイクロの対策

クロスジェネレーションで進化を続ける「XGen™ セキュリティ」に支えられた以下のソリューション/セキュリティ対策製品は、不正なドメインにアクセスするスクリプトをブロックすることにより、法人および個人を保護します。

■侵入の痕跡(Indicators of Compromise、IoCs)

スキミングスクリプトのSHA 256値は以下の通りです。

  • 56cca56e39431187a2bd95e53eece8f11d3cbe2ea7ee692fa891875f40f233f5
  • f1f905558c1546cd6df67504462f0171f9fca1cfe8b0348940aad78265a5ef73
  • 87ee0ae3abcd8b4880bf48781eba16135ba03392079a8d78a663274fde4060cd
  • 80e40051baae72b37fee49ecc43e8dded645b1baf5ce6166c96a3bcf0c3582ce

関連する不正なドメインは以下の通りです。

  • givemejs[.]cc
  • content-delivery[.]cc
  • cdn-content[.]cc
  • deliveryjs[.]cc

※調査協力: Yonathan Klijnsma氏(RiskIQ)

参考記事:

翻訳: 澤山 高士(Core Technology Marketing, TrendLabs)