ESETリサーチ:FishMongerの武器強化:Windows用SprySOCKS
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
ESETの研究者は、FishMongerという脅威グループに関連するSprySOCKSバックドアの2つの新しいWindowsバリアント、WIN_DRVとWIN_PLUSを発見しました。WIN_DRVバージョンは、カーネルドライバを使用して強化されたステルス性能を実現しており、ネットワーク接続、プロセス、ファイルを隠すことができます。両方のバリアントは、複数の通信プロトコルをサポートしており、システム制御とデータ窃盗のための幅広いコマンドを提供します。
調査
この調査は、VirusTotalとESETのテレメトリを介して発見されたマルウェアサンプルに基づいており、2023年から2024年にかけての活動を明らかにしました。研究者たちは、DLLサイドローディング、DriverLoaderとRawWNPFによるカーネルドライバのロード、ダブルゲンガーテクニックを使用したプロセスインジェクションを含む完全な実行チェーンを分析しました。また、コマンド・アンド・コントロールの通信パターンや、複数のコンポーネントに共通するハードコードされた暗号化キーも明らかにしました。
緩和策
組織は、初期の侵害をNデイ脆弱性を通じて防ぐために、インターネットに面しているアプリケーションのパッチ適用を優先すべきです。強力なドライバ署名の実施と、許可されていないカーネルドライバのインストールを監視することは不可欠です。防御者はまた、疑わしいスケジュールされたタスク、Image File Execution Optionsの下でのレジストリの変更、および異常なプリントプロセッサの登録を監視する必要があります。
対応策
これらの脅威が検知された場合、影響を受けたシステムは、さらなる横移動やデータ窃盗を防ぐために直ちに隔離されるべきです。調査者は、最初の侵入ベクトルと完全な侵害範囲を特定するために詳細なフォレンジックレビューを実施し、特にカーネルレベルの持続性に注意を払う必要があります。また、既知の指令・制御インフラストラクチャと通信しているかどうかを確認するためにネットワークログをチェックし、新しいサービスや変更されたレジストリキーなどのシステムの変更を監査すべきです。
攻撃フロー
## シミュレーション実行
前提条件: テレメトリとベースラインの事前フライトチェックが完了している必要があります。
説明: このセクションは、検出ルールをトリガーするために設計されたアドバーサリーテクニック(TTP)の正確な実行を詳述しています。コマンドと記述は、特定されたTTPに直接関連し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的あるいは無関係な例は誤診を引き起こします。
-
攻撃ナラティブとコマンド: 攻撃者は、SprySOCKSバックドアを侵害されたWindowsホストに展開することに成功しました。指令・制御チャネルを確立するために、マルウェアはポート53781でリッスニングソケットを開きます。通信が彼らのカスタムC2サーバーによって認識されるように、マルウェアは初期のハンドシェイクパケットに魔法の16進値
0xACACBCBCを注入します。これは、傍受または転送されたトラフィックを介した信頼性のある通信を可能にするために、FishMongerグループの特定のプロトコル動作を模倣しています。 -
回帰テストスクリプト:
# シミュレーションスクリプト:SprySOCKSネットワークアーティファクトの生成 # このスクリプトはSprySOCKSバックドアのネットワーク動作を模倣します。 $TargetPort = 53781 $MagicValue = [byte[]] @(0xAC, 0xAC, 0xBC, 0xBC) $Listener = [System.Net.Sockets.TcpListener]$TargetPort try { Write-Host "[+] ポート$TargetPortでリスナーを開始しています..." -ForegroundColor Cyan $Listener.Start() $Client = $Listener.AcceptTcpClient() $Stream = $Client.GetStream() Write-Host "[+] 接続が確立されました。魔法の値$MagicValueを送信しています..." -ForegroundColor Yellow # 'selection1'ロジックをトリガーするためにストリームに魔法の値を注入 $Stream.Write($MagicValue, 0, $MagicValue.Length) Start-Sleep -Seconds 5 } catch { Write-Error "[-] シミュレーションに失敗しました: $($_.Exception.Message)" } finally { Write-Host "[+] 接続をクリーンアップしています..." -ForegroundColor Cyan $Stream.Close() $Client.Close() $Listener.Stop() } -
クリーンアップコマンド:
# 不正なリスナーがアクティブのままでないことを確認 Get-NetTCPConnection -LocalPort 53781 -ErrorAction SilentlyContinue | Remove-NetTCPConnection Write-Host "[+] クリーンアップ完了。" -ForegroundColor Green