wsb-detect 使您能够检测自己是否运行在 Windows 沙盒("WSB")中。该沙盒被 Windows Defender 用于动态分析,也常被安全分析人员等手动使用。在 2019 年末,微软引入了一项名为 Windows 沙盒(简称 WSB)的新功能。用于识别 WSB 的技术概述如下,请参阅技术部分。如果您有任何指纹识别方面的想法,欢迎提交拉取请求 🎉。我断断续续地摆弄过它,后续还会发布更多关于 Windows 沙盒的内容。
Windows 沙盒允许您在 15 秒内快速创建一个基于 Hyper-V 的一次性虚拟机,该虚拟机具有常见 VM 的所有特性,例如剪贴板共享、映射目录等。该沙盒也是 Microsoft Defender 应用程序防护(WDAG)的基础,用于启用 Hyper-V 的主机上的动态分析,可以在任何 Windows 10 专业版或企业版机器上启用。它并不是特别有趣,但无论如何,在植入物开发中可能很有用。感谢我的朋友 Jonas L 在我探索沙盒内部机制时给予的指导(后续还有更多相关内容)。
detect.h 头文件导出了所有可组合用于检测的函数。
#include <stdio.h>
#include "detect.h"
int main(int argc, char** argv)
{
// 示例:vmsmb 和用户名检查
if (wsb_detect_dev() || wsb_detect_username())
{
puts("我们在 Windows 沙盒中!");
return 0;
}
return 1;
}
wsb_detect_proc检查 CExecSvc.exe 是否存在,该进程是容器执行服务,负责处理大量内部繁重工作。
wsb_detect_time沙盒映像似乎构建于 2019年12月7日,星期六,上午9:14:52——这大约是 Windows 沙盒发布给公众的时间。此检查会交叉引用 mountmgr 驱动程序的创建时间戳。
wsb_detect_username此方法将检查当前用户名是否为 WDAGUtilityUserAccount,这是沙盒中默认使用的账户。
wsb_detect_suffix此方法将使用 GetAdaptersAddresses 遍历适配器列表,并将 DNS 后缀与 mshome.net 进行比较——这是沙盒中默认使用的后缀。
wsb_detect_dev检查能否打开原始设备 \\.\GLOBALROOT\device\vmsmb,该设备用于通过 SMB 与主机通信。
wsb_detect_cmd启动时,在 HKEY_LOCAL_MACHINE 的 RunOnce 键下搜索一条设置密码永不过期的命令。
wsb_detect_genuine一种更通用的沙盒检测方法,但根据测试,Windows 在虚拟机中似乎未被验证为合法副本。
如果您想更快地联系我,请通过 Twitter 或 电子邮件 联系我。此外,在主机上检测沙盒是否正在运行也是可能的,方法是检查是否能创建一个名为 WindowsSandboxMutex 的互斥体。这将沙盒限制为每台主机只能有一个虚拟机,但是,您可以通过复制该句柄并调用 ReleaseMutex 来释放此互斥体——瞧,您就可以有多个实例了。
