CoinMiner マルウェアが USB ドライブを介して拡散し続ける
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
CoinMiner マルウェアは、隠しショートカットを利用してVBSおよびBATスクリプトをトリガーし、最終的に暗号通貨マイニングペイロードを配布する複数のコンポーネントをステージングすることで、韓国では引き続きUSBドライブを介して拡散しています。
調査
レポートは、感染したUSB上のディレクトリ構造、ショートカットから複数のドロッパー段階までの実行チェーン、DcomLaunchサービスへの登録、およびPrintMinerとXMRig暗号通貨マイナーの展開を概説しています。
緩和策
ユーザーは、OSとソフトウェアをパッチ適用し、不明なショートカットファイルの実行をブロックし、最新のウイルス対策ツールを使用し、既知の悪意のあるインフラへのアクセスを拒否するべきです。
レスポンス
悪意のあるショートカットと関連するスクリプトを検出し、ドロッパーファイルとDCOM登録の作成を監視し、識別されたマイニングのコマンド・コントロールドメインおよびIPアドレスへのネットワークトラフィックをブロックします。
攻撃フロー
検出
USBショートカットとBATマルウェア活動の検出 [Windowsファイルイベント]
表示
特定のホスト名を介したC&CサーバーとのXMRig通信を検出 [Windowsネットワーク接続]
表示
Printui.exeとSvcinsty64.exeによる悪意あるファイルの実行 [Windowsプロセス作成]
表示
検出するためのIOC(HashMd5):USBを介して継続的に配布されるCoinMinerマルウェア
表示
検出するためのIOC(DestinationIP):USBを介して継続的に配布されるCoinMinerマルウェア
表示
シミュレーション実行
前提条件: テレメトリーとベースラインのプレフライトチェックが合格している必要があります。
理由: このセクションは、検出ルールをトリガーするために設計された敵の手法(TTP)の正確な実行を詳述しています。コマンドと説明は、識別されたTTPを直接反映し、検出ロジックに期待される正確なテレメトリーを生成することを目的とする必要があります。抽象的または無関係な例は誤診につながります。
-
攻撃の詳細とコマンド:
- 段階1 – 悪意のあるDLLをドロップします: 攻撃者は作成された
printui.dllをprintui.exeと同じディレクトリにコピーします(USBデバイスを介して配信されたドライバペイロードを模倣)。 - 段階2 – 実行
printui.exe: 呼び出すことでprintui.exeを/mlスイッチ(悪意のあるロード)で、悪意のあるDLLがロードされ、ルールの選択 (Image endswith printui.exe)に一致するプロセス作成イベントを生成し、またフィルター条件を満たします(Image contains printui.dllImage contains printui.dll)。ルールはこのケースを除外しているので、攻撃者はそれを回避するためにもう一つのステップを追加します。 - 段階3 – 実行
svcinsty64.exe: 攻撃者は、USBドライブに保存されたペイロードバイナリ(payload.exe)を指す新しいサービスを登録します。このアクションはsvcinsty64.exeに関するプロセス作成イベントを作成し、フィルターをトリガーせずにルールの選択を満たし、アラートを生成します。
- 段階1 – 悪意のあるDLLをドロップします: 攻撃者は作成された
-
回帰テストスクリプト:以下のスクリプトは3つの段階を自動化し、再現性を確保します。
# ------------------------------------------------- # 回帰テスト – printui.exe / svcinsty64.exeのシグマルールをトリガー # ------------------------------------------------- $dllPath = "$env:TEMPprintui.dll" $exePath = "$env:SystemRootSystem32printui.exe" $svcInstPath = "$env:SystemRootSystem32svcinsty64.exe" $payloadPath = "$env:TEMPpayload.exe" # 1️⃣ ダミーマルウェアDLLをドロップします(検出の際にはバイナリコンテンツは重要ではありません) Write-Host "[*] ダミーマルウェアDLLを作成しています $dllPath" Set-Content -Path $dllPath -Value ([byte[]](0..255)) -Encoding Byte # 2️⃣ printui.exeを実行します(無害なロード) – フィルターによりトリガーされないはずです Write-Host "[*] 無害なprintui.exeを実行しています(フィルターされるはず)" Start-Process -FilePath $exePath -ArgumentList "/p" -Wait # 3️⃣ 悪意のあるDLLをロードしてprintui.exeを実行 – フィルターケース(予想通り) Write-Host "[*] 悪意のあるDLLを持つprintui.exeを実行しています(フィルターケース)" Start-Process -FilePath $exePath -ArgumentList "/ml `$dllPath`" -Wait # 4️⃣ ダミーペイロード実行ファイルの準備(単純なCMDスクリプトをexeにコンパイル) Write-Host "[*] ダミーペイロード実行ファイルを作成しています" $payloadSource = @" @echo off echo Payload executed > $env:TEMPpayload_output.txt "@ $payloadScript = "$env:TEMPpayload.bat" $payloadSource | Set-Content -Path $payloadScript -Encoding ASCII # iexpress(組み込み)を用いて.batを.exeに変換 $iexpress = "$env:SystemRootSystem32iexpress.exe" $config = "$env:TEMPiexpress.sed" @" [Version] Version=3.0 [Options] ExtractTitle=Payload ExtractLocation=%TEMP% ShowProgress=0 HideExtractWindow=1 [SourceFiles] SourceFiles=0 %TEMP%payload.bat [Run] RunCommand="%TEMP%payload.bat" "@ | Set-Content -Path $config -Encoding ASCII & $iexpress /N /Q /M $config Move-Item -Path "$env:TEMPPayload.exe" -Destination $payloadPath -Force # 5️⃣ svcinsty64.exeを使用して悪意のあるサービスを登録 – トリガーされるはずです Write-Host "[*] svcinsty64.exeを介して悪意のあるサービスを登録中" $svcName = "MaliciousSvc" $svcDisplay = "Malicious Service" $svcCmd = "`"$payloadPath`"" $svcArgs = "/install `$svcName` `$svcDisplay` `$svcCmd`" Start-Process -FilePath $svcInstPath -ArgumentList $svcArgs -Wait # 6️⃣ サービスをクリーンアップ Write-Host "[*] 悪意のあるサービスを削除中" $removeArgs = "/uninstall `$svcName`" Start-Process -FilePath $svcInstPath -ArgumentList $removeArgs -Wait # 7️⃣ 一時的なアーティファクトを削除 Write-Host "[*] 一時ファイルをクリーンアップ中" Remove-Item -Path $dllPath -Force -ErrorAction SilentlyContinue Remove-Item -Path $payloadPath -Force -ErrorAction SilentlyContinue Remove-Item -Path $payloadScript -Force -ErrorAction SilentlyContinue Write-Host "[+] テスト完了" -
クリーンアップコマンド:(上記のスクリプトが失敗した場合、または手動でクリーンアップしたい場合)
# もし依然として存在する場合には悪意のあるサービスを削除 $svcName = "MaliciousSvc" $svcInstPath = "$env:SystemRootSystem32svcinsty64.exe" & $svcInstPath /uninstall $svcName # 一時DLLとペイロードを削除 Remove-Item -Path "$env:TEMPprintui.dll" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPpayload.exe" -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:TEMPpayload.bat" -Force -ErrorAction SilentlyContinue # (オプション)残りのサービスがないことを確認 Get-Service -Name $svcName -ErrorAction SilentlyContinue