悪性Javascriptのインジェクション キャンペーンで約5万1,000サイトが感染

A pictorial representation of JavaScript poisoning.

This post is also available in: English (英語)

概要

Unit 42のリサーチャーは、広く蔓延の見られる、ある悪質なJavascript (JS)インジェクション キャンペーンを追跡しています。このキャンペーンは、被害者をアドウェアや詐欺ページなどの悪性コンテンツにリダイレクトしています。この脅威は2022年を通じてアクティブでしたが、2023年もWebサイトを感染させ続けています。

インジェクトされたJSコードは5万1,000件以上のWebサイト上で検出されましたが、このなかにはTrancoの上位100万サイトのランキングに入っている数百件のWebサイトも含まれていました。Trancoランキングに入っているWebサイトが影響を受けていることから、このキャンペーンが多くの人に影響を与えた可能性が示唆されます。

またこのキャンペーンは、多段階のインジェクションを行ってから悪性Webページにリダイレクトし、難読化や良性アペンド攻撃を使って検知を回避する多面構成であることもわかりました。マルウェア作成者はこれらの技術を利用し、悪意のある複数のJSコード サンプル亜種をWebサイトにインジェクトしています。

私たちの新たな敵対的深層学習技術、Innocent Until Proven Guilty (IUPG)は、インジェクトされた複数のJSコードの亜種を検出しました。このモデルは弊社の次世代ファイアウォールの提供する高度なURLフィルタリング(AUF)サブスクリプションに含まれています。IUPGは、弊社のオフライン クローラーのほか、ファイアウォール上のトラフィックをリアルタイムに解析するインライン保護においても、悪性JSサンプルを検出してコンテンツを分類します。

関連するUnit 42のトピック Javascript Malware

目次

キャンペーン アクティビティとユーザーへの影響
JSインジェクションの例
難読化
サイズの大きいファイルへのJSコードのアペンド
多段階のJSインジェクション
悪性コンテンツへのリダイレクト
WebサイトにJSをインジェクトする方法
深層学習による悪性JSインジェクションの検出
結論

キャンペーン アクティビティとユーザーへの影響

私たちは、攻撃者がWebサイトに悪性JSコードをインジェクトするキャンペーンで多数の亜種を検出しました。インジェクトされたコードは被害者をアドウェアや詐欺などのさまざまな悪性コンテンツにリダイレクトします。

同様のキャンペーンは昨年もリサーチャーらに報告されています。私たちは同キャンペーンの最初の事例を2020年に観測していますが、ここでは2022年1月から2023年1月にかけて追跡した本キャンペーンの最新亜種に着目したいと思います。

2022年初頭以降、私たちは5万1,000台のホスト名からおよそ17万件のURLについてこのキャンペーンを検出しました。図1に示すように、このキャンペーンは去年1年間ずっとアクティブで、2023年も引き続きWebサイトに影響を与えています。このキャンペーンのピークは2022年5月から8月にかけてで、この間日次平均で4,000件のURLが確認されています。

画像1は2022年1月から2023年1月にかけてのキャンペーン アクティビティをグラフにしたものです。アクティビティのピークは昨年の5月から8月で、日次平均で4,000件のURLが確認されました。
図1. 2022年1月から2023年1月のキャンペーン アクティビティのグラフ。2022年5月~8月がピーク

本稿執筆時点でこれら感染Webサイトのうちの数百サイトがTrancoのトップ100万Webサイトにランクインしていることから、同キャンペーンは多くの人々に影響を与えた疑いがあります。2023年1月には、1万4,773台のデバイスで、これらWebサイトからのおよそ24万件のセッションをブロックしました。

JSインジェクションの例

この悪性JSインジェクション キャンペーンはさまざまな技術で検出を回避します。たとえば難読化やサイズの大きな良性ファイルへのコードのアペンド、多段階のインジェクションなどです。ここでは、キャンペーン オペレーターが比較的大きなJSファイルのなかに難読化して隠した悪性JSコードの例を共有します。また、マルウェアが一連のJSインジェクションを実行後、最終ペイロードをロードする例も紹介します。

難読化

図2a、b、cは、このキャンペーンでよく検出されたJSスニペットの例です。これらすべての例で、インジェクトされたJSコードは難読化され、悪性ペイロードを隠して検出を回避していました。具体的には、コードを難読化することで悪性JSのロードに使う外部URLを隠しています。このコードには悪性JSを動的にDOM(ドキュメント オブジェクト モデル)に追加する動作も含まれています。

たとえば以下の最初の2つのJSコード スニペット(図2aおよびb)は、一般的な難読化技術であるString.fromCharCodeを使って悪性JSへのリンクを隠しています。図2cもまたべつの難読化の例です。ここでは、左に難読化されたコード、右に難読化を解除したコードを示しています。たとえばfromCharCodeなどの関数呼び出しの名前は、変数_0xfcc4内で16進数表現にすることで難読化していました。

画像2はString.fromCharCodeを使って悪性Javascriptのリンクを隠している方法を示した多数のコード行です。
図2a. String.fromCharCodeを使って悪性JSのリンクを隠している例
画像3はString.fromCharCodeを使って悪性Javascriptのリンクを隠している方法を示した多数のコード行です。
図2b. String.fromCharCodeを使って悪性JSへのリンクを隠している例
画像4は2つのコード スニペットを左右に並べて表示しています。2つのコードの間には「難読化」と題された右向きの矢印があります。左が難読化された関数呼び出し、右が難読化を解除した後の関数呼び出しです。
図2c. 関数呼び出しの名前を隠している例。画像の左側は変数_0xfcc4に格納された16進数表現を使って関数呼び出しを難読化している。画像の右側は難読化解除後のfromCharCodeの関数呼び出し

サイズの大きいファイルへのJSコードのアペンド

私たちは、これらの難読化されたJSスニペットが、複数のWebサイト上で、jQueryなどの利用頻度の高いユーティリティJSファイルにインジェクトされているようすを確認しています。マルウェア作者は、この戦略により、サイズの大きな良性コードに悪性コードをアペンドすることがよくあります。これは「良性アペンド攻撃」とも呼ばれています。この技術を使うことで、マルウェア作者はセキュリティ クローラーによる検出を回避しやすくなります。

今回私たちが確認した、サイズの大きなJSファイルに悪性のJSコードをインジェクトする例は、以前のブログ「「IUPG(推定無罪)」深層学習フレームワークが良性コンテンツのアペンド攻撃検出率を向上」で解説した「良性アペンド攻撃」でのライブ検出の例に似ています。

多段階のJSインジェクション

今回のJSコード スニペット(図2a、b、c)はすべて、インジェクトされたJSコードがDOMを操作し、外部の悪性JSコードをアペンドしています。これにより、攻撃者は悪性ペイロードを変更できるようになります。

このキャンペーンのより最近の亜種では、Webサイトに悪性JSコードをインジェクトするものがあります。この亜種はその後、一連の中間的なJSインジェクションを経て、被害者を悪性Webページにリダイレクトさせるペイロードをロードします。

図3は、インジェクトされたJSコードが、ほかのWebサイトのJSコードを順次実行した後、悪性ペイロードをドロップするようすを示したものです。異なるWebサイトからのJSインジェクションを含めた理由の1つは、JSをロードするURLがセキュリティ クローラーにブラックリスト登録された場合に備え、攻撃者が最終ペイロードのロード用URLを継続的に変更したいためではないかと考えられます。

画像5はインジェクションの流れを示すフローチャートです。このフローチャートは、あるWebサイトでのJavascriptのインジェクションから始まります。次に多段階のスクリプト インジェクションが行われます。最後に、リダイレクト用の最終ペイロードがロードされます。
図3. あるWebサイト上で一連の中間スクリプト インジェクション実行を経て、最終的に悪性Webページにリダイレクトするためのペイロードをロードしている例

悪性コンテンツへのリダイレクト

最終ペイロードはユーザーをさまざまなWebサイトにリダイレクトさせたのち、最終のWebページに到達させます。この最終ページはたいていアドウェアや詐欺ページです。たとえば、偽の通知詐欺ページにリダイレクトされることがあります(図4a)。このページは、ユーザーを騙して、攻撃者の配下にあるWebサイトからWebブラウザーへの通知の送信を許可させようとします。

画像6は偽のCAPTCHA画像を使ったWebサイトのスクリーンショットです。ユーザーはポップアップで要求された通知を許可するロボットをクリックします。
図4a. 偽のCAPTCHA画像を表示しWebサイトからの通知送信を許可するようユーザーをそそのかす

別の例では、最終到達先の悪性Webページが著名なビデオ共有プラットフォームを模したページからの偽の警告の形で、詐欺的なコンテンツを表示します(図4b)。この詐欺的コンテンツは、ユーザーをそそのかして偽のWebブラウザーをダウンロードさせようとするものです。

画像7は著名な動画共有プラットフォームを模したページのスクリーンショットです。この図には偽の警告ポップアップが表示されていて、「Browser Recommended」というタイトルの下に「Download & Install Now (今すぐダウンロードしてインストール)」というオプションが表示されています。
図4b. 著名動画共有プラットフォームを模したページを偽の警告とともに表示し偽のWebブラウザーをダウンロードするようそそのかす

WebサイトにJSをインジェクトする方法

Unit 42のリサーチャーは1つないし複数の脆弱なコンテンツ管理システム(CMS)のプラグインが原因で、多数のWebサイトに侵害のおそれがあると考えています。同様のキャンペーンでのCMSプラグイン悪用はSucuriのリサーチャーからも報告されています。さらに、私たちが検出したWebサイト5万1,000件のおおよそ3/4が一般的なCMSを使っていることがわかっています。

インジェクトされた悪性JSコードは、検出されたWebサイトの半数以上のホームページ上に含まれていました。キャンペーン オペレーターがよく使う戦術の1つは、侵害したWebサイトのホームページ上に存在していそうな一般的なJSファイル名(たとえばjQuery)に悪性JSコードをインジェクトする、というものです。そのWebサイトの正規ユーザーは自分たちのホームページを閲覧する可能性が高いので、こうしておくことで、攻撃者がこれらのユーザーを狙いやすくなると考えられます。

深層学習による悪性JSインジェクションの検出

このキャンペーンでマルウェア作成者らはWebサイトにインジェクトする悪性JSコードの亜種を複数作成していました。深層学習技術は、同じ攻撃の別亜種の検出に対して堅牢であることが一般的に知られています。そのため、深層学習技術を使うことでより網羅的に悪性JSインジェクションを検出できます。

また深層学習技術は、マルウェアによる敵対的な回避試行への耐性も備えています。敵対的回避の具体例としては、利用の広がる良性アペンド攻撃というブラック ボックス化された敵対的脅威が挙げられます。

結論

2022年から2023年初頭にかけて、5万1,000件以上のWebサイトにおよぶ悪性Javascriptインジェクション キャンペーンが検出されました。マルウェア作成者は、悪性JSを難読化して検出を回避し、多段階のインジェクションを実行してから、悪性Webページにリダイレクトしていることがわかりました。

これら感染Webサイトのうち数百サイトがTrancoのトップ100万Webサイトにランクインしていることから、インジェクトされたこれらのJSコードは多くのインターネット ユーザーに影響を与えたおそれがあります。Webサイトの所有者やお客様は、こうしたインジェクションからWebサイトを保護するため、サードパーティ プラグインやソフトウェアを常にアップデートしておくことをお勧めします。

同キャンペーンでインジェクトされた悪性JSコードは、私たちが野生でよく目にするアペンド攻撃の1例です。私たちのIUPGモデルの学習方法は、良性コンテンツの背後に隠れた悪性サブパターンの識別・分離に特化して設計されています。これについては、IEEEの『Security and Privacy Workshop (SPW)』にパブリッシュされたIUPGモデルに関する私たちの研究で解説しています。

弊社の深層学習モデル「IUPG (Innocent Until Proven Guilty: 推定無罪)」はインジェクトされた悪性JSコードの複数の亜種を検出しました。このモデルはクラウド型セキュリティ サービス「高度なURLフィルタリング」の検知機能の1つで、悪性JSサンプルを検知します。IUPGは、弊社のオフライン クローラーのほか、ファイアウォール上のトラフィックをインラインでリアルタイムに解析してコンテンツを分類します。

高度なURLフィルタリングおよびDNSセキュリティのサブスクリプションをご利用の次世代ファイアウォール製品のお客様は、本稿で解説した悪性JSインジェクション キャンペーンの既知のURLとホスト名に対する保護を受けています。本稿で取り上げた脅威に対抗するため、既知の侵害指標(IoC)をここに提供します。

2023-03-27 09:45 JST 英語版更新日 2023-03-24 09:01 PST の内容を反映