TheMalwareGuardian/Rootkits-Development-Starter-Pack

GitHub: TheMalwareGuardian/Rootkits-Development-Starter-Pack

提供 Windows 内核模式 rootkit 的入门教程与概念验证驱动集合,帮助安全研究者从零学习内核级开发。

Stars: 22 | Forks: 5

# ***🐙 Rootkits 开发入门套件***

本仓库包含各种为演示 rootkit 基础功能而开发的 Windows 内核模式驱动程序。 每个概念验证都旨在说明特定的内核级行为(线程创建、DKOM、进程回调、文件系统过滤、WFP 拦截、网络操作等),并作为迈向更高级 Windows rootkit(例如 [Benthic](https://github.com/TheMalwareGuardian/Benthic))的模块化步骤。虽然包含了所有源代码,但我们建议新手首先了解构建工作流、驱动程序签名要求以及 Windows 内核开发的基础知识。 如果您是第一次接触内核模式代码,请从设置环境、启用测试签名模式并编译您的第一个驱动程序开始。您将在下面找到有关 Windows 驱动程序编译的手动说明,以及“开发环境/”文件夹中自动化脚本的参考。 ## ***📑 目录***
## ***🆕 第一次尝试?***

构建你的第一个 rootkit 不仅仅是编写隐蔽的代码,它在于重塑系统看待自身的方式。这不再是用户空间中的恶意软件。这是内核级的操纵,在这里进程会消失,文件会变成幽灵,而网络流量也会屈从于你的控制。你不再遵守操作系统的规则,而是在重写它们。但在你可以隐于无形之前,你需要了解你即将颠覆的内核内部机制.
## ***🛡️ 安全措施*** * **Secure Boot(防范 Bootkit 安装)**:[Secure Boot](https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot) 是一项安全功能,可确保设备使用受制造商信任的软件进行启动。它验证引导加载程序的数字签名,以防止在启动过程中运行未经授权的应用程序。Secure Boot 使用一组密钥(PK、KEK、db、dbx)来管理此验证过程,仅允许已签名的软件执行。 * **Early Launch AntiMalware - ELAM(防范 Rootkit 安装)**:[Early Launch AntiMalware](https://learn.microsoft.com/en-us/windows-hardware/drivers/install/early-launch-antimalware) 功能允许反恶意软件在所有其他驱动程序之前启动。这种早期启动确保了反恶意软件能够检查并验证启动驱动程序和服务的完整性,有助于防止恶意软件在启动过程的最早阶段执行。 * **Driver Signature Enforcement - DSE(防范 Rootkit 安装)**:[Driver Signature Enforcement](https://learn.microsoft.com/en-us/windows-hardware/drivers/install/driver-signing) 是一项安全功能,可确保只有受信任机构签名的驱动程序才能加载到 Windows 操作系统中。这有助于防止安装可能具有恶意或不稳定的驱动程序,从而维护系统的完整性和稳定性。 * **易受攻击驱动程序阻止列表 -(防范通过 BYOVD 安装 Rootkit)** - [Driver Blocklist](https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules) 阻止加载在 [BYOVD](https://blogs.vmware.com/security/2023/04/bring-your-own-backdoor-how-vulnerable-drivers-let-hackers-in.html)(Bring Your Own Vulnerable Driver,自带漏洞驱动程序)攻击中被利用的已知易受攻击驱动程序。此功能利用 HVCI 和 WDAC 等技术阻止过时或受损的驱动程序(即使已签名),从而确保系统完整性,提供额外的内核级安全层。 * **Kernel Patch Protection - Patchguard(防范 Rootkit 深度功能)**:Kernel Patch Protection(也称为 Patchguard)是 Windows 64 位版本中的一项功能,可防止未经授权修改 Windows 内核。此安全措施有助于保护内核免受试图将恶意代码插入内核空间的 rootkit 和其他形式的恶意软件的攻击。 * **Virtualization Based Security - VBS(全局)** - [Virtualization Based Security](https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-vbs) 利用硬件虚拟化功能,从正常操作系统中创建并隔离出一个安全的内存区域。VBS 可以帮助保护 Windows 免受操作系统漏洞以及试图篡改内核和系统进程的恶意软件的侵害。此安全环境用于托管多种安全解决方案,例如 [Credential Guard](https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/),从而提供针对高级安全威胁的增强保护.
## ***🪟 Windows 内核*** [Windows Kernel](https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/_kernel/) 是 Windows 操作系统的核心,负责在最低层管理硬件、内存、进程和安全。它在 Ring 0(特权模式)中运行,允许直接与系统资源进行交互。
### ***🔍 Windows 内核的主要职责*** - 进程和线程管理:处理进程调度、线程执行和同步机制。 - 内存管理:管理虚拟内存、分页和地址转换。 - 设备和驱动程序通信:为内核模式驱动程序(KMDF/UMDF)提供与硬件交互的 API。 - 安全和访问控制:实现用户模式与内核模式的隔离,以加强系统完整性。 - I/O 管理:处理文件系统、网络和系统服务。
### ***⚡ 内核模式 vs 用户模式*** | 特性 | 用户模式 | 内核模式 | |----------------------|---------------------------|---------------------------------| | 访问级别 | 受限(Ring 3) | 完全系统访问(Ring 0) | | 性能 | 较低(API 抽象) | 较高(直接硬件访问) | | 安全性 | 与操作系统核心隔离 | 以完全权限运行 | | 崩溃影响 | 仅影响当前进程 | 可能导致整个系统崩溃 |
### ***🛠️ 为什么要开发内核模式驱动程序?*** 内核模式开发对于以下方面至关重要: - 为新硬件或虚拟化开发自定义驱动程序。 - 实施安全工具,如反作弊引擎、端点安全解决方案和取证工具。 - 出于研究或 rootkit 开发的目的操纵系统行为。 ⚠️ *内核开发需要谨慎实施,以避免系统崩溃、权限提升漏洞和性能问题.*
## ***🧑‍💻 构建 Windows 内核模式驱动程序***
### ***🛠️ 环境要求*** 要在 [Windows](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems) 上使用 WDK 搭建内核模式驱动程序开发所需的环境,以下虚拟机(VM)、工具和软件包是必不可少的: * **计算机**:下载 [Windows 10](https://www.microsoft.com/en-us/software-download/windows10) 或 [Windows 11](https://www.microsoft.com/en-us/software-download/windows11) ISO 镜像,并使用 [VirtualBox](https://www.virtualbox.org/) 或 [VMware Workstation](https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion) 设置虚拟机,为其配置 70 GB 的存储空间和 8 GB 的 RAM。 * **Visual Studio 2022 Community**:下载 [Visual Studio 2022 Community](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022),在安装之前,请确保选择“[Desktop development with C++](https://learn.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-160)”工作负载,以及 'MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (latest)' + 'Windows Driver Kit' 单个组件。 * **Git**:通过下载适当的[二进制文件](https://git-scm.com/download/win)来安装 [Git](https://git-scm.com/)。 * **Windows Software Development Kit (SDK)**:安装 [SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/)。 * **Windows Driver Kit (WDK)**:安装 [WDK](https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk) 并选择 'Windows Driver Kit Visual Studio extension' 以完成与 Visual Studio 的集成(如果可用,在较新版本中不需要此步骤)。
### ***📜 脚本*** 为了简化在 Windows 上建立 Rootkit 开发环境的过程,我们创建了相应的 PowerShell 脚本 [Setup_Development_Environment.ps1](https://github.com/TheMalwareGuardian/Bootkits-Rootkits-Development-Environment/blob/main/Scripts/Setup_Development_Environment_Windows.ps1)。此脚本旨在引导您完成必要的下载和安装。
### ***🏗️ 项目设置*** 要开始开发内核模式驱动程序,请按照以下步骤创建您的项目和工作区: 1. 打开 Visual Studio 并点击“创建新项目”。 2. 搜索并选择“Kernel Mode Driver, Empty (KMDF)”模板。 3. 命名您的项目(例如 MyKernelDriver)并指定您的工作区位置。 4. 项目创建完成后,通过为 Windows Driver Kit (WDK) 设置适当的依赖项和包含路径来配置构建环境。确保正确选择了您的目标平台和配置(例如 Debug/Release、x64/x86)。
## ***💣 概念验证(恶意内核模式驱动程序)*** 此文件夹包含各种为演示 rootkit 基础功能而开发的 Windows 内核模式驱动程序: * _**KernelRootkit001_HelloWorld**_ * _**KMDFDriver_HelloWorld**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。该驱动程序的主要目的是加载到内核中,并在其初始化过程中打印一条“Hello World”调试消息。它还包括一个 DriverUnload 例程,用于处理驱动程序的卸载和清理。 * _**KernelRootkit002_Threading**_ * _**KMDFDriver_Threading**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。该驱动程序的主要目的是创建并管理一个持久化的系统线程,该线程定期向内核调试器记录消息。驱动程序通过生成一个定期执行的系统线程进行初始化,打印带有时间戳的“Hello World”消息。它还包括一个 DriverUnload 例程,用于正确终止线程并在从系统卸载驱动程序之前清理资源。 * _**KernelRootkit003_ZwFunctions**_ * _**KMDFDriver_ZwFunctions**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。该驱动程序的主要目的是使用 Zw (NTAPI) 函数与 Windows 内核交互,以执行文件操作并检索系统信息。具体来说,该驱动程序会创建一个文件,将操作系统版本详细信息记录其中,并使用 ZwCreateFile 和 ZwWriteFile 追加数据。它还包括一个 DriverUnload 例程,用于在移除时清理并删除该文件。 * _**KernelRootkit004_IOCTLs**_ * _**ConsoleApp_IOCTLs**_ 是一个用户模式应用程序,它通过发送 IOCTL(输入/输出控制)请求并处理其响应来与内核模式驱动程序进行交互。它作为从用户空间执行 rootkit 功能的接口。 * _**KMDFDriver_IOCTLs**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序负责处理由用户级应用程序发起的 IOCTL 请求。它定义了 IOCTL 命令代码,并为每个代码实现了相应的功能。 * _**KernelRootkit005_Callbacks**_ * _**KMDFDriver_Callbacks**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序注册内核事件回调以监视系统活动,特别是实时跟踪进程的创建和终止。通过利用 PsSetCreateProcessNotifyRoutine 和 PsSetCreateProcessNotifyRoutineEx,它在强制执行对特定可执行文件的限制的同时捕获父子进程关系,主动阻止某些进程的执行,以防止启动调试和监控工具。 * _**KernelRootkit006_DKOM**_ * _**ConsoleApp_DKOM**_ 是一个用户模式应用程序,它与内核模式驱动程序进行交互,以操纵内存中的进程结构。 * _**KMDFDriver_DKOM**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。它利用直接内核对象操纵(DKOM)来修改内核结构,方法是将进程从 ActiveProcessLinks 列表中取消链接,从而绕过标准的进程枚举方法来隐藏进程。 * _**KernelRootkit007_KeyboardFilter**_ * _**KMDFDriver_KeyboardFilter**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序通过将自身附加到键盘设备堆栈并在内核级别拦截击键事件,从而作为键盘筛选器运行。它包含一个检查按键事件并将其记录下来的完成例程,有效地演示了如何在内核级别实现键盘记录器。 * _**KernelRootkit008_Minilter**_ * _**ConsoleApp_MinifilterInstallation**_ 是一个用户模式应用程序,负责创建 minifilter 驱动程序加载所需的必要注册表项。与可以使用 sc.exe create 安装的标准内核驱动程序不同,minifilter 驱动程序需要进行额外的注册表修改,才能被 Windows Filter Manager 正确注册和加载。 * _**KMDFDriver_Minifilter**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序在 minifilter 级别拦截文件系统操作,以阻止对特定文件和目录的访问。 * _**KernelRootkit009_FilterCommunicationPort**_ * _**ConsoleApp_FilterCommunicationPort**_ 是一个用户模式应用程序,它通过 Filter Communication Port 与内核模式 minifilter 驱动程序进行通信。此应用程序作为发送命令和接收 minifilter 驱动程序响应的接口,实现了从用户空间与 rootkit 功能的交互。 * _**KMDFDriver_FilterCommunicationPort**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序建立 Filter Communication Port,以促进用户模式应用程序和内核之间的受控交互。通过拦截文件系统操作,它可以动态地修改、阻止或监视文件访问。 * _**KernelRootkit010_WindowsFilteringPlatform**_ * _**KMDFDriver_WindowsFilteringPlatform**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序通过与 Windows Filtering Platform (WFP) 集成,拦截并阻止指向特定 IP 地址的网络连接。 * _**KernelRootkit011_WinSockKernel**_ * _**KMDFDriver_WinSockKernel**_ 是一个 Windows 内核模式驱动程序,用作 rootkit 基础功能的演示。此驱动程序直接从内核建立网络连接并执行数据传输。通过利用 WinSock Kernel (WSK) API,它可以通过 TCP 和 UDP 发送和接收数据,而无需与用户空间应用程序进行交互。