2CLoader:VidarとRemusを配信する新しいマルウェアローダー
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
2CLoaderは、新たに発見されたマルウェアローダーで、VidarやRemus、XWorm RATを含む情報スティーラーを配信します。Hell’s Gateを介した間接システムコール、アンチ解析とアンチVMチェック、環境偽装のためのインライントランポリンフックなど、高度な回避技術を組み込んでいます。このローダーは高度に構成可能で、複数の永続性と実行メカニズムをサポートしています。
調査
Zscaler ThreatLabzは、2CLoaderのリソース構造、復号ルーチン、設定オプションを詳細に技術分析しました。研究者たちはローリングXORとAES-GCMを組み合わせた多段階復号プロセスを解明し、AESキーはマルウェアの.textセクションのSHA256ハッシュから生成されることを明らかにしました。この調査では、いくつかの永続化技術と広範なアンチ解析機能も記録されています。
緩和策
組織は、間接的なシステムコールやプロセスインジェクション活動を識別できる強力なエンドポイントセキュリティソリューションを導入するべきです。SecurityHealthService.exeを含む不審なスケジュールタスク、およびRun/RunOnceレジストリキーの予期しない変更を監視することが重要です。セキュリティチームは、不正なAPIフックや、explorer.exeが不審なプロセスを起動するなどの異常な親子プロセス関係にも注意を払うべきです。
対応
もし2CLoaderの活動が検出された場合は、情報スティーラーによる潜在的なデータ流出を制限するために、ネットワークから感染ホストを隔離してください。メモリーフォレンジック分析を実施し、フックされたAPIや注入されたペイロードを特定してください。aware-cr1[.]comを含む既知のC2インフラへの接続について、ネットワークログを確認し、スケジュールタスクや悪意あるレジストリエントリなどの永続化メカニズムを包括的に検索してください。
攻撃フロー
この部分はまだ更新中です。
検出
疑わしいスケジュールタスク(監査経由)
潜在的な永続性ポイント [ASEPs – ソフトウェア/NTUSERハイブ] (レジストリイベント経由)
自動起動位置にある疑わしいバイナリ/スクリプト (ファイルイベント経由)
直接IP経由での疑わしいファイルダウンロード (プロキシ経由)
検出用IOC(HashSha256):2CLoader:VidarとRemusを配信する新しいマルウェアローダー
検出用IOC(HashMd5):2CLoader:VidarとRemusを配信する新しいマルウェアローダー
検出用IOC(SourceIP):2CLoader:VidarとRemusを配信する新しいマルウェアローダー
検出用IOC(DestinationIP):2CLoader:VidarとRemusを配信する新しいマルウェアローダー
2CLoader C2通信検出 [Windowsネットワーク接続]
2CLoaderマルウェア回避技術の検出 [Windowsプロセス作成]
模擬実行
-
攻撃の物語とコマンド: 敵対者の目標は、サンドボックス検出を回避しながらペイロードを展開することです。これを実現するために、シミュレートされたマルウェアはまず
ProcessDebugPortviaNtQueryInformationProcessをクエリし、それがデバッグされているかを確認します。「クリーン」な環境を確認したら、自身のメモリスペースを操作して、具体的にはNtProtectVirtualMemoryを呼び出して、実行/読み取り/書き込み(RWX)にページ権限を変更するための悪意のあるステージをアンパックしようとします。シミュレーションは、C++ラッパーを使用して、これらを「間接」呼び出しとして実行し、2CLoaderの回避スタイルを模倣します。 -
回帰テストスクリプト:
#include <windows.h> #include <winternl.h> #include <stdio.h> // 2CLoaderスタイルのシステムコールシーケンスの簡易表現 typedef NTSTATUS (NTAPI *pNtQueryInformationProcess)( HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength); int main() { printf("[+] 2CLoaderの回避シミュレーションを開始します...n"); // 1. 反デバッグのシミュレーション (T1497.002) // これはProcessDebugPortをチェックするためのNtQueryInformationProcessの呼び出しを模倣します。 HANDLE hProcess = GetCurrentProcess(); DWORD_PTR debugPort = 0; // 実際のシナリオでは、これは間接的なシステムコールです。 // ここではAPIを介してロジックをトリガーし、テレメトリの可視性を確保します。 printf("[+] NtQueryInformationProcessを介してデバッガーをチェックしています...n"); // 2. メモリー操作のシミュレーション (T1055.005 / T1497) // メモリープロテクションを変更するためのNtProtectVirtualMemoryを模倣します。 printf("[+] NtProtectVirtualMemoryを介してメモリープロテクションを操作中...n"); void* buffer = VirtualAlloc(NULL, 1024, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); if (buffer) { BOOL success = VirtualProtect(buffer, 1024, PAGE_EXECUTE_READWRITE, &DWORD); if (success) { printf("[!] 成功: メモリープロテクションがRWXに変更されました.n"); } VirtualFree(buffer, 0, MEM_RELEASE); } printf("[+] シミュレーション完了.n"); return 0; } -
クリーンアップコマンド:
# このシミュレーションスクリプトでは永続的なアーティファクトは作成されません。 # コンパイルされたバイナリはすべて削除してください: Remove-Item -Path ".simulation.exe" -ErrorAction SilentlyContinue