Axiosに対するサプライチェーン攻撃がNPMから悪意ある依存関係を引っ張る
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
悪意のあるnpmパッケージ、 plain-crypto-js@4.2.1は公開され、その後広く使用されているJavaScript HTTPクライアントAxiosの脆弱なリリースを通じて、推移的な依存関係として取り込まれました。このパッケージは、ポストインストールスクリプトを使用してWindows、macOS、Linuxをターゲットにした多段階のリモートアクセス型トロイを提供します。この攻撃は長期間有効なnpmトークンに依存しているようで、脅威アクターがプロジェクトの通常のリリースワークフローの外で悪意のあるバージョンをプッシュすることを可能にしていました。改ざんされた依存関係を早期に検出することで、影響を受けたシステムでのRATの実行を防ぐことができます。
調査
Socket Researchは、 setup.js ドロッパーの静的解析とエンコードされた文字列をデコードして、C2ドメイン、ペイロード配信ロジック、および標的とするファイルシステムパスを暴露しました。研究者たちは、3つの脆弱なAxiosバージョンと、同じ悪意のあるコードを含む2つの追加のnpmパッケージを特定しました。また、検出エンジニアリングとルールの作成に使用できるネットワークインジケータ、ファイルパス、ユーザーエージェント文字列を抽出しました。
緩和策
組織は、長期間有効なnpmトークンを無効化し、潜在的に影響を受けるアカウントの資格情報を回転させるべきです。脆弱なAxiosバージョンと、 plain-crypto-js@4.2.1 に依存しているパッケージはすぐに削除またはダウングレードされるべきです。チームはまた、ロックファイル、CI/CDパイプライン、ソフトウェアサプライチェーンのセキュリティコントロールを確認して、無許可の公開活動を特定し将来のパッケージの侵害の機会を減少させるべきです。
対応
セキュリティチームは、 plain-crypto-js@4.2.1 および影響を受けたAxiosバージョンへの参照をnpmインストールログで監視するべきです。ポストインストールフックの実行や、 sfrclak.comへのネットワークアクセス、悪意のあるユーザーエージェント文字列を対象とした検出ルールを作成するべきです。侵害が確認された場合、影響を受けたシステムは隔離され、分析のために揮発性メモリを収集し、RATが発見された場合にはホストを再イメージする必要があります。
graph TB %% Class definitions classDef technique fill:#c2e0ff classDef tool fill:#ffd9b3 classDef malware fill:#f5b7b1 classDef process fill:#d5f5e3 %% Technique nodes tech_t1195_002[“<b>技術</b> – <b>T1195.002</b> サプライチェーン侵害: ソフトウェア<br/><b>説明</b>: 更新や配布を改ざんしてマルウェアを配信する。”] class tech_t1195_002 technique tech_t1127_003[“<b>技術</b> – <b>T1127.003</b> 信頼されたツールによる実行<br/><b>説明</b>: post-install スクリプト経由で実行。”] class tech_t1127_003 technique tech_t1059_004[“<b>技術</b> – <b>T1059.004</b> Unix Shell”] class tech_t1059_004 technique tech_t1059_001[“<b>技術</b> – <b>T1059.001</b> PowerShell”] class tech_t1059_001 technique tech_t1059_005[“<b>技術</b> – <b>T1059.005</b> Visual Basic”] class tech_t1059_005 technique tech_t1059_003[“<b>技術</b> – <b>T1059.003</b> Windows CMD”] class tech_t1059_003 technique tech_t1027_014[“<b>技術</b> – <b>T1027.014</b> 難読化”] class tech_t1027_014 technique tech_t1070_004[“<b>技術</b> – <b>T1070.004</b> 痕跡削除”] class tech_t1070_004 technique tech_t1195_001[“<b>技術</b> – <b>T1195.001</b> 依存関係侵害”] class tech_t1195_001 technique tech_t1127[“<b>技術</b> – <b>T1127</b> npm フック”] class tech_t1127 technique tech_t1082[“<b>技術</b> – <b>T1082</b> システム情報収集”] class tech_t1082 technique tech_t1219[“<b>技術</b> – <b>T1219</b> リモートアクセス”] class tech_t1219 technique tech_t1102_002[“<b>技術</b> – <b>T1102.002</b> Web通信”] class tech_t1102_002 technique tech_t1570[“<b>技術</b> – <b>T1570</b> 横展開”] class tech_t1570 technique tech_t1036_005[“<b>技術</b> – <b>T1036.005</b> 偽装”] class tech_t1036_005 technique tech_t1036_003[“<b>技術</b> – <b>T1036.003</b> 名前変更”] class tech_t1036_003 technique process_curl[“<b>プロセス</b> – curl”] class process_curl process process_chmod[“<b>プロセス</b> – chmod”] class process_chmod process process_nohup[“<b>プロセス</b> – nohup”] class process_nohup process malware_rat[“<b>マルウェア</b> – macOS RAT”] class malware_rat malware %% Connections (unchanged) tech_t1195_002 –>|leads_to| tech_t1127_003 tech_t1127_003 –>|uses| tech_t1059_004 tech_t1059_004 –>|executes| tech_t1059_001 tech_t1059_004 –>|executes| tech_t1059_005 tech_t1059_004 –>|executes| tech_t1059_003 tech_t1059_004 –>|employs| tech_t1027_014 tech_t1059_004 –>|leverages| tech_t1195_001 tech_t1059_004 –>|leverages| tech_t1127 tech_t1059_004 –>|collects| tech_t1082 tech_t1027_014 –>|enables| tech_t1070_004 tech_t1082 –>|enables| tech_t1219 tech_t1219 –>|communicates via| tech_t1102_002 tech_t1102_002 –>|facilitates| tech_t1570 tech_t1570 –>|results in| tech_t1036_005 tech_t1570 –>|results in| tech_t1036_003 tech_t1059_004 –>|downloads| process_curl tech_t1059_004 –>|sets permissions| process_chmod tech_t1059_004 –>|runs background| process_nohup malware_rat –>|is the| tech_t1219
攻撃フロー
検出
疑わしいMacOS – Plistの位置と名前 (file_event経由)
表示
疑わしいNodeJS子プロセス [Windows] (cmdline経由)
表示
標準ツールによるリモートファイルのアップロード/ダウンロード (cmdline経由)
表示
MacOS疑わしいTmフォルダのファイル権限修正 (cmdline経由)
表示
疑わしいCURL使用 (cmdline経由)
表示
chmodとnohupを単一コマンドで使用した可能性のある実行 (cmdline経由)
表示
疑わしいフォルダへのダウンロード (cmdline経由)
表示
LOLBAS WScript / CScript (process_creation経由)
表示
隠れたPowerShellコマンドラインを通じた実行の可能性 (cmdline経由)
表示
Nohup使用 (cmdline経由)
表示
IOC(送信元IP)を検出するため: Axiosを介したサプライチェーン攻撃により悪意のある依存関係がnpmから引き寄せられます
表示
IOC(宛先IP)を検出するため: Axiosを介したサプライチェーン攻撃により悪意のある依存関係がnpmから引き寄せられます
表示
IOC(メール)を検出するため: Axiosを介したサプライチェーン攻撃により悪意のある依存関係がnpmから引き寄せられます
表示
供給チェーン攻撃におけるPowerShellとVBScriptの回避戦術 [Windowsプロセス作成]
表示
悪意のあるnpmパッケージポストインストールフックの実行を検出 [Linuxプロセス作成]
表示
Linux供給チェーン攻撃における悪意のあるPythonスクリプトと一時ファイルの検出 [Linuxファイルイベント]
表示
リネームされたWindowsターミナルと自動削除のVBScriptが検出されました [Windowsファイルイベント]
表示
隠しおよびバイパスフラグを持つPowerShellスクリプトの実行 [Windows PowerShell]
表示
シミュレーションの実行
前提条件: テレメトリ&ベースラインの事前チェックが合格する必要があります。
根拠: このセクションでは、検出ルールをトリガーするように設計された具体的な敵の技術(TTP)の実行を詳述します。コマンドと物語は、特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリを生成することを目的とする必要があります。
-
攻撃の物語とコマンド:
制限されたユーザー権限を持って妥協された作業環境での攻撃者は、正規のnpmパッケージを介して悪意のあるVBScriptペイロードをダウンロードしたいと考えています(供給チェーンのシナリオ)。一般的なPowerShell検出を避けるため、攻撃者は
powershell.exeを新しいファイルにコピーしますpowershell_renamed.exeただし、ファイル名に「powershell」というサブストリングを保持しています (したがって、Image|containsチェックがまだ一致します)。その後、攻撃者は「where powershell」検索を実行してリネームされたバイナリのパスを列挙し、最終的には悪意のあるVBScriptペイロードをcscript //nologoを使用してシンプルに起動し、ロゴバナーを抑制します。 -
回帰テストスクリプト:
# ------------------------------------------------- # ステップ1: powershell.exeのリネームコピーを作成 # ------------------------------------------------- $src = "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe" $dst = "$env:Temppowershell_renamed.exe" Copy-Item -Path $src -Destination $dst -Force # ------------------------------------------------- # ステップ2: 'where'を使用してリネームされたバイナリを参照 # ------------------------------------------------- $whereOutput = & where.exe powershell_renamed Write-Host "リネームされたPowerShellを次の場所で見つけました: $whereOutput" # ------------------------------------------------- # ステップ3: 簡単な悪意のあるVBScriptペイロードを作成 # ------------------------------------------------- $vbsPath = "$env:Tempmalicious.vbs" @" Set objShell = CreateObject("WScript.Shell") objShell.Run "cmd.exe /c echo pwned > $env:Temppwned.txt", 0, False "@ | Set-Content -Path $vbsPath -Encoding ASCII # ------------------------------------------------- # ステップ4: cscript //nologoを使用してVBScriptを静かに実行 # ------------------------------------------------- & $dst -Command "cscript //nologo `"$vbsPath`"" # ------------------------------------------------- # シミュレーション終了 # ------------------------------------------------- -
クリーンアップコマンド:
# リネームされたPowerShellバイナリを削除 Remove-Item -Path "$env:Temppowershell_renamed.exe" -Force -ErrorAction SilentlyContinue # 悪意のあるVBScriptファイルを削除 Remove-Item -Path "$env:Tempmalicious.vbs" -Force -ErrorAction SilentlyContinue # 実行の証拠を削除 Remove-Item -Path "$env:Temppwned.txt" -Force -ErrorAction SilentlyContinue