新型コロナによる減税措置をおとり文句とするNode.jsマルウェア「QNodeService」を解析

トレンドマイクロは、「新型コロナウイルスに対する減税措置」というファイル名(「Company PLP_Tax relief due to Covid-19 outbreak CI+PL.jar」)を持つJavaダウンローダについて着目しました。このマルウェアは「MalwareHunterTeam」によるTwitterの投稿で報告されたものであり、ファイルを実行すると、JavaScript実行環境であるNode.jsで書かれた、未検出の新しいトロイの木馬型マルウェアをダウンロードします。トレンドマイクロではこのマルウェアを「QNodeService」と名付け、検出対応しました。QNodeServiceには、ファイルのダウンロード、アップロードおよび実行、ChromeあるいはFirefoxブラウザからの認証情報の窃取、ファイルの管理などを実行する機能を備えています。Windowsを攻撃対象としていますが、マルウェアの設計および特定のコードからは、将来的にはOSを問わず攻撃できる、クロスプラットフォームを意図して作成された可能性がうかがえます。

このマルウェアが利用するNode.jsは、主にWebサーバ開発向けに設計されており、一般的な利用者が使用するクライアントPCにプレインストールされているようなものではありません。このため、マルウェア作成にNode.jsを利用するのは珍しいことと言えます。とはいえ、一般的でないプラットフォームを利用することで、ウイルス対策ソフトウェアによる検出を回避しやすい場合もあります。Node.js自体は正規のJavaScript実行環境であり、セキュリティ対策製品に警告されることはありません。感染環境に持ち込むことはさほど難しいことではないでしょう。最初にJavaダウンローダが実行されると、Node.js自体のダウンロードに加え、「wizard.js」、「qnodejs-win32-ia32.js」または「qnodejs-win32-x64.js」というファイルをダウンロードします。トレンドマイクロではこれらのコンポーネントを解析し、それぞれの動作についてさらに調査しました。

Javaダウンローダの解析

Javaダウンローダとして機能する上述のファイル「Company PLP_Tax relief due to Covid-19 outbreak CI+PL.jar」は、Allatoriという難読化ツールで難読化されていました。Allatoriはジャンクコードを追加することによって文字列を難読化して解析を困難にします。トレンドマイクロでは、まずコードの難読化を解除して、解析を開始しました。

図1:逆コンパイルされたコード(Allatori 難読化ツールで難読化されていた)
図2:難読化を解除したコード

ファイルは、Node.jsをユーザのホームディレクトリにダウンロードします。そしてシステムアーキテクチャをチェックし、結果に応じて32ビットまたは64ビットバージョンをダウンロードします。

図3:Node.jsをユーザのホームディレクトリにダウンロードする

また、URL「hxxps://central.qhub <省略>wizard.js」から「wizard.js」というファイルをダウンロードします。次にこのファイルを、C&CサーバのURLを含む複数のコマンドライン引数を指定したNode.jsを使用して実行します。

図4:Node.jsによって実行されるwizard.js

「–group user:476@qhub-subscription[…]」は、C&Cサーバとの通信中に使用されるパラメータであることに注目してください。ユーザ識別子が存在すること、また、「subscription」の文字から、マルウェアがサービスとして販売されている可能性を示唆しています。

wizard.jsの解析

wizard.jsは、ファイルの起動に使用される引数が含まれる「qnodejs- <8桁の16進数> .cmd」という名前のファイルを作成します。これはWindows起動時に、「HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run」に作成されるレジストリキーエントリによって呼び出されます。 また、自身がWindowsプラットフォームで実行されているかどうかをチェックする動作があることから、マルウェア作成者がクロスプラットフォームを意図していることがうかがえます。

図5: wizard.jsがWindowsで実行されているかどうかを確認し、そうである場合はRunレジストリキーエントリをインストールする
図6:wizard.jsによって追加されたレジストリの「Run」キーエントリ

そしてhxxps://central.qhub <省略>/qnodejs-<platform>-<arch>.jsからファイルをダウンロードします。Node.jsのprocess.platformおよびprocess.archの可能な値によって、サーバでホストされているファイルqnodejs-win32-ia32.jsか、あるいはqnodejs-win32-x64.jsがダウンロードされます。サーバには各マルウェアのSHA1ハッシュも含まれていますが、それらには.sha256という名前が付けられていました。これらのハッシュがダウンロードされ、実行時にダウンロードされたマルウェアによってチェックされます。

図7:process.platformとprocess.archを使用して、ダウンロードするペイロードが決定される
qnodejs-win32- <architecture> .jsの解析

これにより、システムアーキテクチャ(OSが64ビットか32ビットか)に基づいて、qnodejs-win32-ia32.jsまたはqnodejs-win32-x64.jsというファイルがダウンロードされることになります。

ダウンロードされたファイルには、実行時に展開されるNode.jsのライブラリが埋め込まれた「node_modules」フォルダが含まれています。Javascriptコード自体とは違いこれらのライブラリはアーキテクチャ固有であるため、システムアーキテクチャに対応するファイルが配布されます。以下の解説に使用する図は、win32-ia32 (2020-04-30)亜種のものです。

このマルウェアを「QNodeService」と命名した理由は、コマンドライン引数を検証するコードに示されるように、内部で使用されている名前と推測されたためです。

図8:コードに使用されている名前「QNodeService」

マルウェアはモジュールに分かれています。これらのモジュールへのアクセスは、「v」と名付けられたLOOKUP関数を使用して難読化されています。一部のモジュールは、ライブラリをインポートするための呼び出しrequire()のみで構成されていますが、他のモジュールは、作成者が作成したカスタムモジュールです。

図9:マルウェアによって使用されるモジュール
図10:モジュールは、LOOKUP関数「v」を使用しインデックスによって参照される

このファイルの特定のモジュールは、wizard.jsと同じです。具体的には、これらはマルウェアのURLとそのハッシュを決定するコードを再利用しています。このファイルでは、モジュールを使用してSHA1ハッシュをダウンロードして検証するために使われます。ハッシュが存在しない場合、マルウェアは終了します。

マルウェアは、C&Cサーバとの通信にsocket.ioライブラリを使用します。そのため、特定の言語やフレームワークにかかわらず適用できるリアクティブプログラミングで設計され、WebSocketを使用してサーバと通信します。

図11:WebSocketハンドシェイク

マルウェアは、ChromeおよびFirefoxからパスワードを窃取することが可能です。

図12:ChromeおよびFirefoxからパスワードを窃取するためのコード

以下は、マルウェアが受け入れるコマンドのリストです。

コマンド 説明
control/reload メインのペイロードを再ダウンロードするようにwizard.jsに通知する
control/uninstall システムからRunキー値を削除して終了するようにwizard.jsに通知する
info/get-ip-address IPアドレス、位置情報、ホスト名などを取得する
info/get-label 「set-label」コマンドで設定されたラベルを返す
info/get-machine-uuid マルウェアによって生成されたUUIDを取得する
info/get-os-name システムのプラットフォーム(windowsかどうか)とアーキテクチャ(x32か、あるいはx64か)を取得する
info/get-user-home ユーザのホームディレクトリ(os.homedir())を取得する
info/set-label ラベルを設定する
file-manager/absolute ファイルの完全パスを取得する
file-manager/execute コマンド「start“” / B <file>」でファイルを実行する
file-manager/delete システム上の1つまたは複数のファイルを削除する(「rimraf」ライブラリを使用して、グロブを受け入れる)
file-manager/forward-access 「http-forward」コマンドに使用するURLとトークンを生成する(以下を参照)
file-manager/list 特定のディレクトリ内のファイルを一覧表示する
file-manager/mkdirs システム上にディレクトリを作成する
file-manager/write C&C サーバから送信されたファイルをシステムに書き込む
http-forward C&Cの特定のURLに送信されたHTTPリクエストを、感染PCにルーティングする(以下を参照)
password-recovery/applications パスワードを読み取ることができるアプリケーションの一覧表示(ChromeおよびFirefox)
password-recovery/recover 特定のアプリケーションからパスワードを回復する(ChromeまたはFirefox)

また、2020年5月5日にマルウェアは以下の3つのコマンドを追加し、更新されています。

info/get-tags 「add-tag」コマンドで設定されたタグの一覧を返す
info/add-tag タグを追加する
info/remove-tag タグを削除する

以下の図13から16に示すように、攻撃者が標的のコンピュータに直接接続することなくファイルをダウンロードできるようにするhttp-forwardコマンドが特に目を引きます。ただし、標的コンピュータ上のファイルにアクセスするには、有効なリクエストパスとアクセストークンが必要です。C&Cサーバは、最初に「file-manager/forward-access」を送信し、後でhttp-forwardコマンドに使用するURLとアクセストークンを生成する必要があります。

図13:C&CサーバがWebSocket経由で「file-manager/forward-access」コマンドを送信
図14:マルウェアは、図15のcURLリクエストで使用されるアクセストークンとURLで応答する

マルウェアは、転送URLとアクセストークンで応答します。次に、URLとアクセストークンを付与された第三者は、C&CサーバにHTTPリクエストを送信して、標的コンピュータに直接接続しなくともファイルを取得することが可能になります。

  図15:「C:\foo.txt」を要求するC&CサーバへのHTTP cURL要求(内容は「bar」)

C&Cサーバは、http-forwardコマンドを使用して、HTTPリクエストを標的コンピュータ内のマルウェアに転送します。アクセストークンが正しい場合、マルウェアはファイルのコンテンツをC&Cサーバに送り返し、C&CサーバはHTTP応答でコンテンツを攻撃者に送り返し、リモートからのダウンロードを可能にします。

図16:C&Cサーバは、「http-forward」コマンドを使用して、cURLリクエストを標的コンピュータのマルウェアに転送する

wizard.jsと同様に、作成者はクロスプラットフォームのマルウェアを意図しているようです。このマルウェアはwin32-ia32の亜種ですが、Darwin(macOS)およびLinuxプラットフォームにおける互換性を向上するためのコードが含まれています。

図17:クロスプラットフォームの互換性を示すコード
■トレンドマイクロの対策

攻撃者は、マルウェア作成には一般的でない環境を使用する、活動を持続化させる、クロスプラットフォーム互換性を提供するなどの様々な手法を用い、可能な限り多くのシステムに影響を与えるための独創的な方法を常に考え出しています。このようなマルウェアによる攻撃に遭わないようにするため、以下のようなセキュリティソリューションを採用することによって、侵入口となる可能性のある電子メール、エンドポイント、ネットワークを通過されることのないようにブロックできます。

  • メールセキュリティ:Trend Micro Email Security™は、マルウェアとURLを検出してブロックする人工知能に基づくマルウェアおよび不正なURLの検出およびサンドボックスによる詳細な動作分析を提供
  • エンドポイントセキュリティ:Trend Micro Apex One™は、実行前および実行時のハイブリッド型機械学習型検索に加え、オフライン機械学習型検索を提供
  • ネットワークセキュリティ:TippingPoint Threat Protection Systemは、ネットワークの入口・出口、また内部の攻撃トラフィックをリアルタイムで検査、ブロックし、脅威の侵入を阻止
■侵入の痕跡(Indicators of Compromise、IoC)

今回の記事に関する侵入の痕跡はこちらを参照してください。

参考記事:

翻訳: 室賀 美和(Core Technology Marketing, Trend Micro™ Research)