therustymate/0x9C
GitHub: therustymate/0x9C
一个基于 Detours 库的 Windows 用户态 Rootkit 概念验证项目,演示通过 Hook NtQuerySystemInformation 实现进程隐藏的技术原理。
Stars: 1 | Forks: 0
# 0x9C
PoC Ring3 RootKit | 0x9C - ERROR_SIGNAL_REFUSED
## 免责声明
本文档及所有相关材料仅用于**合法的安全研究、教育以及经授权的反病毒检测能力测试目的。**
本文描述的技术和概念涉及高级软件安全、恶意软件分析及开发方法,**严禁在未经明确许可的情况下对此进行任何未经授权的使用、复制、分发或针对系统的恶意部署。**
访问并使用本材料即表示您承认并同意遵守所有适用法律法规,
并在进行任何安全测试或研究活动之前获得适当授权。
作者及相关方**明确声明不对因滥用、未经授权的操作或因使用本信息而产生的任何损害承担所有法律责任。**
此外,这项研究旨在研究当前反病毒检测的局限性,开发用于教育目的的规避技术,并增强网络安全专业知识。
该技术的披露纯粹是为了推动安全行业和学术研究的发展。
因此,使用或滥用本文档产生的所有风险、法律责任和后果均由用户独自承担。
作者及相关方免除任何直接或间接损害的责任。
阅读或使用本文档即视为您已接受上述所有条件。
## 用户模式 Rootkit 是如何工作的?
用户模式 Rootkit 通常通过向目标进程注入 DLL(动态链接库)来工作,它 Hook(挂钩)进程调用的 API,并从实际返回值中移除特定信息。
Rootkit 主要隐藏关于进程、网络活动、文件、注册表等的信息,以避免被检测。
## 如何隐藏进程信息?
`NtQuerySystemInformation` API 是一个 Windows 原生 API,用于返回有关系统上当前进程的信息。
```
__kernel_entry NTSTATUS NtQuerySystemInformation(
[in] SYSTEM_INFORMATION_CLASS SystemInformationClass,
[in, out] PVOID SystemInformation,
[in] ULONG SystemInformationLength,
[out, optional] PULONG ReturnLength
);
```
```
NTSTATUS NTAPI Hooked_NtQuerySystemInformation(
ULONG SystemInformationClass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength
);
```
`SystemInformation`(类型为 PVOID)返回有关进程的信息。
您可以将其强制转换为现有的 `PSYSTEM_PROCESS_INFORMATION` 类型,并从每个进程条目中通过 `ImageName.Buffer`(`UNICODE_STRING` 内部的 `PWCHAR`)读取进程名称。
利用这一点,您可以从进程列表中过滤掉特定的进程名称并返回过滤后的结果。
因此,当被注入 DLL 的进程调用 `NtQuerySystemInformation` 时,它将看不到那些被过滤掉的进程名称。
## 如何 Hook 函数?
`Detours` 库是一个 Windows 库,支持 Hook 特定函数。使用它,您可以 Hook 原生 API 并修改其结果或记录(日志)它们。
```
vcpkg install detours
vcpkg integrate install
```
使用 `vcpkg` 工具,您可以自动将 C++ 头文件和库文件包含在 `Visual Studio 2022` 中。对于 `Detours`,头文件位于 `detours/detours.h`。
```
#include
```
在处理被 Hook 的函数时,代码使用 `NextEntryOffset` 遍历进程信息。它将 `ImageName.Buffer` 与目标进程名称进行比较,如果匹配,则通过操作 `NextEntryOffset` 将该条目从列表中移除,使其直接链接到下一个进程。(当前目标进程名为 `Notepad.exe`。更改 `TARGET_PROCESS` 值可设置要隐藏的目标进程。)
## 总结
总之,用户模式 Rootkit 以 DLL 形式注入到目标进程中。注入后,它会 Hook `NtQuerySystemInformation`,检查 `PSYSTEM_PROCESS_INFORMATION` 结构中的 `ImageName.Buffer`,如果匹配应隐藏的进程,则修改 `NextEntryOffset` 以将该进程从列表中移除并直接链接到下一个条目,从而防止该进程被看到。
标签:API Hooking, Conpot, DLL注入, EDR绕过, NtQuerySystemInformation, PoC, Ring3 Rootkit, Rootkit, Windows安全, Zeek, 中高交互蜜罐, 免杀技术, 嗅探欺骗, 开放策略代理, 恶意软件开发, 数据展示, 暴力破解, 暴力破解检测, 权限维持, 流量审计, 漏洞利用概念验证, 用户态Rootkit, 私有化部署, 红队, 网络可见性, 进程隐藏, 防御规避, 高交互蜜罐