隐藏在阴影中:通过QEMU虚拟化的隐蔽隧道
作者:Caroline Fenstermacher
事件响应 | 社交工程
目录
- 初始访问
- QEMU虚拟机部署
- SSH后门尝试
- 修复与预防
- IOC指标
攻击者不仅在其载荷上越来越有创意,而且在交付和操作方式上也日益创新。在最近的一次事件响应任务中,TrustedSec调查了一起案例,涉及攻击者使用社交工程、远程支持工具和虚拟机(VM)部署的组合来获取企业端点的访问权限,并尝试进行隐蔽通信。最初是一次Microsoft Teams语音钓鱼攻击,随后升级为入侵,涉及基于Qemu的Tiny Core Linux虚拟机和尝试的反向SSH隧道。尽管技术并不高度复杂,但这次任务突显了虚拟化如何用于规避基于主机的检测(如EDR和AV工具),以及社交工程的有效性。
初始访问
这次入侵始于一次执行良好的语音钓鱼尝试。一名用户通过Microsoft Teams被自称来自其IT支持团队的人联系。这位“支持技术人员”实际上来自外部Microsoft 365租户,由于Teams的默认设置,允许外部通信。
通话开始后,威胁行为者指示用户打开Quick Assist,这是一个本地Windows功能,允许通过依赖远程桌面协议(RDP)进行端点的交互式远程管理。本质上,这是一个内置的远程监控和管理(RMM)工具,类似于熟悉的第三方选项,如AnyDesk、Atera、TeamViewer等。威胁行为者随后指示用户下载Zoho Meeting,另一个远程管理工具。通常,攻击者会在主机上放置多个不同的RMM工具,以在其中一个被发现和移除时更好地保持持久性。
打开Quick Assist会话后,威胁行为者指示用户运行一个curl命令,从攻击者控制的IP地址下载ZIP文件。由于缺乏遥测数据,TrustedSec未能捕获此命令;但是,捕获了curl.exe进程的执行,随后在文件系统中引入了updqem.zip。
利用攻击者通过Quick Assist获得的访问权限,在主机的ConsoleHost_history.txt文件中捕获了以下文件提取命令:
图1 - 控制台主机历史
在一周的时间内,威胁行为者两次联系用户。在初次联系用户几天后,威胁行为者联系用户,告知他们几天前采取的“IT支持步骤”未起作用。在第二次实例中,威胁行为者似乎执行了相同的步骤。
QEMU虚拟机部署
深入主机的$MFT,跟踪到updqem.zip提取后的结果到端点上的一组嵌套目录:
- C:\ProgramData\update\
- C:\ProgramData\update\update
- C:\ProgramData\update\stl
- C:\ProgramData\update\update\share
- C:\ProgramData\update\stl\share
在这些目录中,两个可执行文件立即脱颖而出:C:\ProgramData\update\stl\stl.exe和C:\ProgramData\update\tc.exe(也出现在之前提到的控制台历史中)。这两个文件都与Qemu相关,Qemu是一个开源仿真工具,允许用户在现有操作系统之上运行VM。攻击者显然选择了便携式VM部署,而不是传统的恶意软件投放,这使他们能够避免检测。
除了Qemu二进制文件本身,还观察到两个VBS文件:
- C:\ProgramData\update\update\update.vbs
- C:\ProgramData\update\stl##START##.vbs
图2 - update.vbs内容
两个文件的内容都与通过Qemu部署VM有关,但使用了略微不同的方法。第一个脚本update.vbs利用Wscript shell执行tc.exe,使用配置文件(upd.conf)传递VM参数。
图3 - upd.conf内容
如文件内容所示,要创建的VM包括512MB RAM,附加tc.qcow2作为镜像文件,定义要仿真的虚拟硬盘(IDE),并允许基本互联网访问。
图4 - ##START##.vbs内容
相比之下,##START##.vbs文件放弃了配置文件的使用,而是在命令行中明确声明配置参数。此外,此方法使用了较小的RAM分配。这些方法上的差异可能与威胁行为者声称初始设置未起作用有关。
从进一步的$MFT分析中,识别出两个独立的镜像文件:C:\ProgramData\update\stl\tc.qcow2(首先引入系统)和C:\ProgramData\update\update\tc.qcow2(几天后引入系统)。似乎第一次虚拟环境未能交付结果后,攻击者尝试了更重的设置——可能带有更多工具或更完整的OS镜像。幸运的是,TrustedSec能够提取镜像文件,以更好地查看攻击者在部署的VM上的活动。
SSH后门尝试
两个镜像文件都部署了使用小镜像文件的Tiny Core Linux VM。尽管此OS占用空间最小,但我们仍然可以访问bash历史,这结果非常揭示性。
第一次构建后门的尝试似乎不成功。在此方法中,攻击者利用wget从攻击者控制的端点149.28.198[.]232下载载荷。
图5 - wget 123.out下载
此载荷疑似包含后门代码,以允许攻击者持续访问用户的机器。
为了尝试持久性,攻击者还被观察到编辑了Tiny Core Linux本地的几个关键文件。第一个被编辑的文件bootlocal.sh是一个在启动时运行定义命令的脚本。
图6 - bootlocal.sh编辑
查看bootlocal.sh文件的内容确认了此方法用于确保123.out载荷的持久性。此脚本创建一个循环,ping攻击者控制的端点45.77.4[.]101。如果ping失败,输出被忽略,并在两秒后重新启动进程。一旦ping成功,123.out作为tc用户执行。
图7 - bootlocal.sh内容
攻击者还更新了filetool.lst,该文件告诉OS哪些文件和目录应在重启后持久化,因为Tiny Core默认是无状态的。
图8 - filetool.lst编辑
filetool.lst的内容也确认了尝试持久性,通过定义以下目录包含在内。123.out载荷包含在home/tc目录中,因此确认此文件也将在重启后持久化。攻击者还通过包含opt目录确保其机器配置的持久性。
图9 - filetool.lst内容
几天后,攻击者确定此方法未起作用,并第二次联系用户。第二个镜像文件比第一个大得多,表明攻击者策略的变化。攻击者在第二个VM上开始通过再次利用wget确保SSL和NoSSL应用程序存在于主机上。
图10 - SSL/NoSSL下载
随后,攻击者被观察到编辑了一个非Tiny Core Linux OS本地的文件hostname.sh。
图11 - hostname.sh编辑
此自定义脚本生成了一个随机化的五字符主机名,前缀为tc-,可能用于帮助攻击者跟踪或掩蔽单个VM。
图12 - hostname.sh内容
接下来,攻击者利用Tiny Core包管理器命令tc-load安装openssh。
图13 - OpenSSH安装
一旦SSH设置完成,攻击者将相关配置、脚本和目录添加到filetool.lst,以确保一切在重启后持久化。
图14 - SSH持久性
图15 - filetool.lst内容
bootlocal.sh脚本文件也被更新,以在启动时自动运行hostname.sh、启动下载的SSL工具并启动SSH服务。
图16 - bootlocal.sh编辑
图17 - bootlocal.sh内容
随着机器配置的完成,攻击者尝试构建一个反向SSH隧道回其服务器137.184.4[.]169,通过端口443——努力使用HTTPS在明文中隐藏流量。
SSH命令还显示了一些反取证努力,通过指示SSH配置将已知主机存储在/dev/null中。通常,此信息定向到.ssh/known_hosts文件,该文件记录用户过去连接过的主机的公钥。此方法确保此信息不被存储,因此无法被调查人员引用。StrictHostKeyChecking也被禁用,另一项努力确保公钥信息不存储在主机上。
图18 - SSH隧道命令
这里突出的不是技术复杂性,而是方法的创意。使用客户VM构建反向SSH隧道是聪明的,尤其是在EDR工具专注于主机OS的环境中。这也提醒我们,即使是不复杂的参与者,在社交工程成功时也能造成隐蔽入侵。
修复与预防
在类似入侵中,防御者应确保通过系统重新映像和/或设备没收并为用户发放新设备,从系统中根除威胁行为者的所有痕迹。此外,应重置受影响用户的凭据并销毁任何活动会话。
组织可以采取几个步骤来预防类似入侵:
- 在Microsoft Teams中限制外部通信:除非明确需要,否则禁用外部租户通信。如果某些级别的外部通信是工作职能所必需的,考虑实施租户白名单。
- 禁用或限制远程访问工具:如果非业务关键,可以从端点移除Quick Assist。这可以通过组策略完成(计算机配置 > 管理模板 > 系统 > 远程协助)。阻止未经授权的远程工具,如Zoho Meeting、AnyDesk、Atera、TeamViewer等,如果未合法用于支持功能。
- 监控或限制未经授权的虚拟化软件:监控端点上的虚拟化软件,如Qemu、VirtualBox、VMware等,特别是如果未批准使用。如果某些用户没有合法的业务目的,也可以按用户组阻止此软件。
- 监控在未预期虚拟化行为的端点上引入镜像文件类型。
- 审查防火墙和网络分段策略:阻止出站SSH流量到外部IP地址,除非明确允许。防止客户VM流量穿越敏感网络段。
- 用户意识和培训:教育员工关于未经批准的远程管理工具的危险以及如何验证内部IT通信。
IOC指标
值 | 类型 | 描述 |
---|---|---|
ZA_Connect.exe | 文件名 | Zoho Meeting Assist |
8aa77293b0e26e2dc15ba912bc3e8c0a | MD5 | ZA_Connect.exe哈希 |
Tc.exe | 文件名 | Qemu软件 |
Stl.exe | 文件名 | Qemu软件 |
8697ff6c68e4d029b4980fed99f3ff96 | MD5 | Tc.exe和stl.exe哈希 |
##START##.vbs | 文件名 | Qemu设置脚本 |
a116b1ac07ba6f1286fbf12adbd6a29f | MD5 | ##START##.vbs哈希 |
Upd.conf | 文件名 | Qemu虚拟化参数 |
c4069197ac4dceb3ff4dd3e1155187a5 | MD5 | Upd.conf哈希 |
Update.vbs | 文件名 | Qemu设置脚本 |
dbe24234b231af446c655e3fbd2a694e | MD5 | Update.vbs哈希 |
Tc.qcow2 | 文件名 | Tiny Core Linux镜像文件 |
834614dea627f85863124de17a6a5f47 | MD5 | Tc.qcow2哈希 |
3e4a502948e4fc8ac39dcd5c152b78e2 | MD5 | Tc.qcow2哈希 |
Hostname.sh | 文件名 | 攻击者自定义脚本 |
D0A67FA9F13E7ED7B957F47C27EFA64B | MD5 | Hostname.sh哈希 |
123.out | 文件名 | 潜在后门 |
BB21E569F67807596C6C1C8768B15A53 | MD5 | 123.out哈希 |
82.118.16[.]49 | IP地址 | 攻击者控制端点 |
137.184.4[.]169 | IP地址 | 攻击者控制端点 |
143.28.198[.]232 | IP地址 | 攻击者控制端点 |