隐蔽代码执行
Hunt & Hackett 提供了一系列工具和技术性文章,描述了在 Windows 上依靠隐蔽代码执行的攻击技术。你将在这里找到这些技术的工作原理解释、检测建议以及用于测试检测覆盖范围的示例源代码。
内容
本仓库涵盖了两类大量使用 Windows 内部机制的攻击技术,并提供了检测它们的建议和工具:
- 进程篡改——一系列在进程范围上隐蔽代码的技术。
- 代码注入——一系列允许在其他进程中执行代码而不干扰其功能的技巧。
- 检测——针对各种隐蔽代码执行技术的防御建议汇编。
本项目的核心价值:
- 系统化方法。本仓库不仅仅是一个工具集合或外部资源链接列表。每个主题都提供了基础概念的详细解释;每个具体案例都被归类到通用类别中。
- 概念验证工具。文章附带用 C 语言编写的示例项目,演示了所描述功能在实际中的应用。
- 从初学者到专业人员。你不需要是网络安全专家就能理解我们描述的概念。然而,即使是对应领域的专业人士,也能因为对细节和陷阱的关注而发现内容有价值且具有教育意义。
实现
本项目另一个显著特点是示例中广泛使用 Native API。选择这一方式的理由如下:
- 功能性。一些最先进技术(如进程篡改)所需的操作无法通过其他 API 暴露。
- 控制力。作为与操作系统交互的最低层级,它提供了对其行为的最强控制。Win32 API 是在 Native API 之上实现的,因此前者能实现的一切,后者也能实现。
- 可用性。由 ntdll.dll 暴露的 Native API 在所有进程中均可用,包括系统进程。
- 一致性。该 API 暴露的接口非常一致。在学习了基础设计选择后,仅凭 API 名称就能正确预测大多数函数原型。
- 抗钩子能力。使用 Native API 时,移除或绕过用户模式钩子要简单得多,从而在一定程度上致盲安全软件。由于没有更低层级的库可能被修补,取消钩子变得像加载第二个 ntdll.dll 副本并将调用重定向到那里一样简单。
编译说明
示例代码使用了 PHNT 项目提供的 Native API 头文件。请确保使用 git clone --recurse-submodules 命令克隆仓库以获取此依赖项。或者,在克隆仓库后使用 git submodule update --init。
要构建仓库中包含的项目,你需要最新版本的 Windows SDK。如果你使用 Visual Studio,请参考内置的 SDK 安装。或者,你也可以使用 EWDK 的独立构建环境。要一次性编译所有工具,请使用 MSBuild AllTools.sln /t:build /p:configuration=Release /p:platform=x64。