トレンドマイクロは、「新型コロナウイルスに対する減税措置」というファイル名(「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はジャンクコードを追加することによって文字列を難読化して解析を困難にします。トレンドマイクロでは、まずコードの難読化を解除して、解析を開始しました。
ファイルは、Node.jsをユーザのホームディレクトリにダウンロードします。そしてシステムアーキテクチャをチェックし、結果に応じて32ビットまたは64ビットバージョンをダウンロードします。
また、URL「hxxps://central.qhub <省略>wizard.js」から「wizard.js」というファイルをダウンロードします。次にこのファイルを、C&CサーバのURLを含む複数のコマンドライン引数を指定したNode.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プラットフォームで実行されているかどうかをチェックする動作があることから、マルウェア作成者がクロスプラットフォームを意図していることがうかがえます。
そしてhxxps://central.qhub <省略>/qnodejs-<platform>-<arch>.jsからファイルをダウンロードします。Node.jsのprocess.platformおよびprocess.archの可能な値によって、サーバでホストされているファイルqnodejs-win32-ia32.jsか、あるいはqnodejs-win32-x64.jsがダウンロードされます。サーバには各マルウェアのSHA1ハッシュも含まれていますが、それらには.sha256という名前が付けられていました。これらのハッシュがダウンロードされ、実行時にダウンロードされたマルウェアによってチェックされます。
■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」と命名した理由は、コマンドライン引数を検証するコードに示されるように、内部で使用されている名前と推測されたためです。
マルウェアはモジュールに分かれています。これらのモジュールへのアクセスは、「v」と名付けられたLOOKUP関数を使用して難読化されています。一部のモジュールは、ライブラリをインポートするための呼び出しrequire()のみで構成されていますが、他のモジュールは、作成者が作成したカスタムモジュールです。
このファイルの特定のモジュールは、wizard.jsと同じです。具体的には、これらはマルウェアのURLとそのハッシュを決定するコードを再利用しています。このファイルでは、モジュールを使用してSHA1ハッシュをダウンロードして検証するために使われます。ハッシュが存在しない場合、マルウェアは終了します。
マルウェアは、C&Cサーバとの通信にsocket.ioライブラリを使用します。そのため、特定の言語やフレームワークにかかわらず適用できるリアクティブプログラミングで設計され、WebSocketを使用してサーバと通信します。
マルウェアは、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とアクセストークンを生成する必要があります。
マルウェアは、転送URLとアクセストークンで応答します。次に、URLとアクセストークンを付与された第三者は、C&CサーバにHTTPリクエストを送信して、標的コンピュータに直接接続しなくともファイルを取得することが可能になります。
C&Cサーバは、http-forwardコマンドを使用して、HTTPリクエストを標的コンピュータ内のマルウェアに転送します。アクセストークンが正しい場合、マルウェアはファイルのコンテンツをC&Cサーバに送り返し、C&CサーバはHTTP応答でコンテンツを攻撃者に送り返し、リモートからのダウンロードを可能にします。
wizard.jsと同様に、作成者はクロスプラットフォームのマルウェアを意図しているようです。このマルウェアはwin32-ia32の亜種ですが、Darwin(macOS)およびLinuxプラットフォームにおける互換性を向上するためのコードが含まれています。
■トレンドマイクロの対策
攻撃者は、マルウェア作成には一般的でない環境を使用する、活動を持続化させる、クロスプラットフォーム互換性を提供するなどの様々な手法を用い、可能な限り多くのシステムに影響を与えるための独創的な方法を常に考え出しています。このようなマルウェアによる攻撃に遭わないようにするため、以下のようなセキュリティソリューションを採用することによって、侵入口となる可能性のある電子メール、エンドポイント、ネットワークを通過されることのないようにブロックできます。
- メールセキュリティ:Trend Micro Email Security™は、マルウェアとURLを検出してブロックする人工知能に基づくマルウェアおよび不正なURLの検出およびサンドボックスによる詳細な動作分析を提供
- エンドポイントセキュリティ:Trend Micro Apex One™は、実行前および実行時のハイブリッド型機械学習型検索に加え、オフライン機械学習型検索を提供
- ネットワークセキュリティ:TippingPoint Threat Protection Systemは、ネットワークの入口・出口、また内部の攻撃トラフィックをリアルタイムで検査、ブロックし、脅威の侵入を阻止
■侵入の痕跡(Indicators of Compromise、IoC)
今回の記事に関する侵入の痕跡はこちらを参照してください。
参考記事:
- 「New MacOS Dacls RAT Backdoor Shows Lazarus’ Multi-Platform Attack Capability」
By Matthew Stewart
翻訳: 室賀 美和(Core Technology Marketing, Trend Micro™ Research)