SOC Prime Bias:

31 3月 2026 16:57

Elastic Security LabsがBRUSHWORMとBRUSHLOGGERを解明

Author Photo
Ruslan Mikhalov SOC Primeの脅威リサーチ責任者 linkedin icon フォローする
Elastic Security LabsがBRUSHWORMとBRUSHLOGGERを解明
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

Elastic Security Labsは、南アジアの金融機関に対して使用されている2つのカスタムマルウェアファミリー、BRUSHWORMとBRUSHLOGGERを発見しました。BRUSHWORMはモジュール式バックドアで、予定されたタスクで持続性を保ち、リムーバブルメディアを通じて拡散し、幅広い拡張子のファイルを盗みます。BRUSHLOGGERはDLLをサイドロードしたキーロガーで、キーストロークをウィンドウのコンテキストと共にキャプチャし、XOR暗号化形式でログを保存します。両方のマルウェアサンプルは、比較的低い高度化レベルを示し、継続的な試行錯誤開発の兆候を見せています。

調査

調査中に、アナリストはバックドア実行ファイルpaint.exeとサイドローディングされたキーロガーDLL libcurl.dllを回収し、その持続性の方法、設定ロジック、USB伝播の動作、データステージングディレクトリを調査しました。V1.exe, V2.exe, V4.exeといった古い開発ビルドもVirusTotalで発見され、それらはコマンド&コントロールのための無料のダイナミックDNSインフラにリンクされていました。報告書には、マルウェアの予定されたタスク、ミューテックス、ファイルパスの慣習も記載されています。

軽減策

防御者は、ProgramDataやPublicパスからの未知のバイナリの実行を防ぎ、MSGraphicsやMSRecorderという名前のスケジュールされたタスクの作成を監視し、ミューテックスWindows-Updates-KB852654856を検出するべきです。また、組織はリムーバブルメディアからのオートランを無効化または制限し、疑わしいルアースタイルのファイル名を検査すべきです。識別されたC2ドメインへのWinHTTPトラフィックのログ記録と検査は必須です。

対応策

BRUSHWORMまたはBRUSHLOGGERの活動が検出された場合、エンドポイントを隔離し、paint.exeとlibcurl.dllのサンプルを保存し、スケジュールされたタスクの証拠を記録し、すべてのユーザーおよびパブリックディレクトリから悪意のあるファイルを削除します。調査者はまた、リムーバブルドライブをスキャンしてルアーバイナリを削除し、ステージングされたデータのエクスフィルトレーションフォルダを消去し、影響を受けたクレデンシャルをリセットし、C2サーバーからの追加のペイロード取得の監視を行うべきです。

"graph TB %% Class definitions section classDef technique fill:#cfe2f3 %% Node definitions exec_check["<b>技術</b> – T1497.002 仮想化/サンドボックス回避:<br/>ユーザー活動、画面解像度、ユーザー名、コンピュータ名、ハイパーバイザーCPUID文字列、およびマウス動きを分析環境で中止するためにチェックします。"] class exec_check technique persistence_task["<b>技術</b> – T1053 スケジュールされたタスク/ジョブ:<br/>ユーザーがログオンするたびにバックドアを実行するWindowsのスケジュールされたタスクMSGraphicsを作成します。"] class persistence_task technique c2_contact["<b>技術</b> – T1071 アプリケーション層プロトコル:<br/>バックドアがWinHTTPを使用してHTTPSでC2サーバーに接続します。"] class c2_contact technique encrypted_channel["<b>技術</b> – T1573 暗号化チャネル:<br/>追加モジュールをダウンロードするために暗号化されたチャネルを確立します。"] class encrypted_channel technique shared_module["<b>技術</b> – T1129 共有モジュール:<br/>C2サーバーからDLLペイロード(Recorder.dll)をダウンロードします。"] class shared_module technique second_task["<b>技術</b> – T1053 スケジュールされたタスク/ジョブ:<br/>rundll32.exeを通じてRecorder.dllを起動する2番目のスケジュールされたタスクを作成します。"] class second_task technique dll_side["<b>技術</b> – T1574.001 DLLサイドローディング:<br/>悪意のあるlibcurl.dllがサイドロードされ、実行フローをハイジャックします。"] class dll_side technique keylogging["<b>技術</b> – T1056.001 キーロギング:<br/>DllMainが低レベルのキーボードフックをインストールし、キーストローク、ウィンドウタイトル、タイムスタンプをキャプチャします。"] class keylogging technique obfuscation["<b>技術</b> – T1027 隠蔽されたファイルまたは情報:<br/>ログファイルはXOR暗号化され、設定データはプレーンテキストで書かれてから削除されます。"] class obfuscation technique local_staging["<b>技術</b> – T1074.001 ローカルデータステージング:<br/>収集されたファイルはC:UsersPublicSysteminfoにコピーされ、重複するエクスフィルトレーションを避けるためにハッシュログが保持されます。"] class local_staging technique usb_propagation["<b>技術</b> – T1092 リムーバブルメディアを通じた通信:<br/>インターネットに接続可能な場合、マルウェアはルアーファイル名を使用して接続されているUSBドライブに自身をコピーします。"] class usb_propagation technique usb_data_exfil["<b>技術</b> – T1025 リムーバブルメディアからのデータ:<br/>USBドライブからのファイル盗難を続けます。"] class usb_data_exfil technique physical_exfil["<b>技術</b> – T1052.001 物理的媒体を介したエクスフィルトレーション:<br/>インターネットが利用できない場合、盗まれたファイルはリムーバブルメディアにコピーされ、物理的なエクスフィルトレーションが行われます。"] class physical_exfil technique %% Connections showing flow exec_check –>|triggers| persistence_task persistence_task –>|executes| c2_contact c2_contact –>|establishes| encrypted_channel c2_contact –>|downloads| shared_module shared_module –>|creates| second_task second_task –>|launches| dll_side dll_side –>|loads| keylogging keylogging –>|produces| obfuscation obfuscation –>|stores| local_staging local_staging –>|copies to| usb_propagation usb_propagation –>|exfiltrates from| usb_data_exfil local_staging –>|uses for| physical_exfil "

攻撃フロー

シミュレーションの実行

前提条件: テレメトリとベースラインの事前確認が合格している必要があります。

根拠: このセクションは、検出ルールをトリガーするように設計された敵の手法(TTP)の正確な実行を詳述します。コマンドと説明はTTPsを直接反映し、検出ロジックによって期待される正確なテレメトリーを生成することを目的としています。

  • 攻撃の物語とコマンド:
    攻撃者は悪意のあるDLLを取得しています(evil.dll)、これが実行されると rundll32.exeにより、ランサムウェアペイロードをドロップし、USBドライブに暗号化データを書き込みます。疑念を避けるために、攻撃者は最初に paint.exe を使用してリムーバブルメディア上に無害に見える画像を作成し、その後 rundll32.exe を同じディレクトリに隠された悪意のあるDLLをロードするために使用します。両方のアクションはSigmaルールに一致するプロセス作成イベントを生成します。

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

    # ------------------------------
    # PaintとRundll32悪用のシミュレーション
    # ------------------------------
    
    # 1. 一時的な作業ディレクトリを作成する
    $workDir = "$env:TEMPPaintRundllSim"
    New-Item -ItemType Directory -Path $workDir -Force | Out-Null
    
    # 2. 正当な画像をUSBにコピーする($workDirによるシミュレート)
    $imagePath = Join-Path $workDir "innocent.png"
    Invoke-WebRequest -Uri "https://via.placeholder.com/150" -OutFile $imagePath
    
    # 3. Paintを起動して画像を開く(ルールに一致するベナイン使用)
    Start-Process -FilePath "$env:WINDIRsystem32mspaint.exe" -ArgumentList "`"$imagePath`"" -PassThru | Out-Null
    
    # 4. 悪意のあるDLLのドロップ(シミュレート; 本物のペイロードは隠密である必要がある)
    $dllPath = Join-Path $workDir "evil.dll"
    $dllBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # 最小のPEヘッダープレースホルダー
    [IO.File]::WriteAllBytes($dllPath, $dllBytes)
    
    # 5. Rundll32を介してDLLを実行する(これは悪意のあるステップ)
    Start-Process -FilePath "$env:WINDIRsystem32rundll32.exe" `
                 -ArgumentList "`"$dllPath`,EntryPoint`"" -PassThru | Out-Null
    
    # 6. SIEMへのインジェストを許可するために一時停止
    Write-Host "シミュレーションが実行されました。SIEMにログが表示されるまで約30秒待機。"
  • クリーンアップコマンド:

    # 一時ファイルおよびプロセスの削除
    Stop-Process -Name mspaint -ErrorAction SilentlyContinue
    Stop-Process -Name rundll32 -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPPaintRundllSim" -Recurse -Force
    Write-Host "クリーンアップが完了しました。"