0xKern3lCrush-M4te-CVE-2026-0828
Windows BYOVD研究与终端侦察笔记
严格用于教育/安全研究目的。
目标:通过公开披露文档理解和研究"自带易受攻击驱动"技术——不包含任何可工作的漏洞利用代码。
⚠️ 关键道德与法律警告(操作前必读)
- 本项目不是漏洞利用交付机制。
- 切勿在任何系统上加载包含的驱动样本——即使在实验室环境中,也需要隔离的虚拟机+快照回滚。
- 未经明确授权加载已签名的易受攻击驱动程序或发送恶意IOCTL在大多数国家属于重罪(计算机欺诈/滥用、未经授权访问等)。
- 仅用于您拥有或具有书面测试权限的系统。
- 即使是"研究"活动也可能导致机器损坏、操作系统安装损坏或触发不可逆的EDR警报。
项目动机
EDR/AV产品越来越注重保护自身进程(PPL、受保护进程、受限令牌)。
攻击者通过BYOVD进行绕过:投放合法但易受攻击的已签名驱动→滥用弱IOCTL处理程序→实现内核级任意进程终止/内存读写等。
本项目帮助红蓝队:
- 识别恶意软件中的BYOVD模式(MedusaLocker、Qilin、Storm-2603等)
- 理解弱驱动设计缺陷
- 构建更好的检测机制(驱动程序阻止列表、WDAC规则、IOCTL监控)
功能特性
核心功能模块
- 安全用户模式侦察代码:使用Toolhelp32 API进行进程枚举,列出常见EDR/AV/安全服务名称
- 静态分析文档:包含真实BYOVD案例的分析记录和静态分析工件
- 漏洞研究文档:详细分析CVE-2026-0828和CVE-2025-7771等技术细节
- 驱动哈希验证:提供已知易受攻击驱动的SHA256哈希值用于验证
研究内容覆盖
- BYOVD常见模式(2024-2026年)
- Safetica ProcessMonitorDriver.sys漏洞分析
- ThrottleStop.sys在MedusaLocker勒索软件中的滥用分析
- 安全研究和负责任披露流程
安装指南
系统要求
- Windows操作系统(Windows 10 x64及以上版本)
- C编译器(支持Windows API)
- 管理员权限(用于驱动相关研究,但代码本身不依赖)
依赖项
项目主要包含C代码,依赖以下Windows API:
- Windows.h
- tlhelp32.h
- 标准C库(stdio.h, string.h等)
环境配置
-
研究环境设置:
- 使用完全隔离的虚拟机环境
- 配置虚拟机快照以便随时回滚
- 禁用网络连接以防止意外传播
-
代码编译:
- 使用Visual Studio或MinGW编译研究代码
- 确保链接正确的Windows库
使用说明
基础研究代码示例
项目包含一个用于进程枚举的安全研究代码示例,演示如何识别潜在的安全产品进程:
#include "0xtargets.h"
// 示例:遍历目标进程列表(仅用于研究目的)
static const char* target_processes[] = {
"MsMpEng.exe", // Microsoft Defender
"NisSrv.exe", // Defender Network Inspection
"AvastSvc.exe", // Avast service
"WRSA.exe", // Webroot SecureAnywhere
"csfalconservice.exe", // CrowdStrike Falcon
"SentinelAgent.exe", // SentinelOne agent
NULL // 列表结束标记
};
研究流程
- 进程侦察阶段:使用Toolhelp32 API枚举系统进程
- 驱动分析阶段:分析已加载驱动,识别易受攻击的驱动
- 模式识别阶段:匹配已知的BYOVD攻击模式
- 防御策略制定:基于发现制定相应的防御策略
驱动验证
项目提供已知易受攻击驱动的SHA256哈希值用于验证:
# 验证驱动文件哈希(PowerShell)
Get-FileHash .\ProcessMonitorDriver.sys -Algorithm SHA256
已知哈希包括:
- ProcessMonitorDriver.sys版本11.11.4.0
- ProcessMonitorDriver.sys版本10.5.75.0
- Safetica终端客户端安装程序
核心代码
1. 进程枚举与目标识别(0xtargets.h)
#ifndef _0XTARGETS_H_
#define _0XTARGETS_H_
// 常见EDR/AV/安全产品进程名称
// 仅用于教育侦察研究
// 灵感来自真实世界的BYOVD和勒索软件目标列表
// (Safetica、MedusaLocker风格的终止列表等)
// 可根据实验室/研究目标自由扩展
static const char* target_processes[] = {
"MsMpEng.exe", // Microsoft Defender
"NisSrv.exe", // Defender Network Inspection
"AvastSvc.exe", // Avast service
"WRSA.exe", // Webroot SecureAnywhere
"csfalconservice.exe", // CrowdStrike Falcon
"SentinelAgent.exe", // SentinelOne agent
"cb.exe", // Carbon Black (旧命名)
"CylanceSvc.exe", // Cylance Protect
"mcshield.exe", // McAfee Endpoint Security
"ccSvcHst.exe", // Symantec / Norton
"avp.exe", // Kaspersky
"ekrn.exe", // ESET
"bdagent.exe", // Bitdefender
"SAVService.exe", // Sophos
"mbamservice.exe", // Malwarebytes
"SafeticaAgent.exe", // Safetica (与CVE-2026-0828研究相关)
NULL // 列表结束标记——请勿删除
};
#endif // _0XTARGETS_H_
2. 安全研究主程序框架(0xPoC.c片段)
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <string.h>
#include "0xtargets.h"
// 定义Safetica驱动使用的IOCTL代码(仅用于研究分析)
#define IOCTL_KILL_PROCESS 0xB822200C
int main(void) {
HANDLE hDevice = INVALID_HANDLE_VALUE;
BOOL bResult = FALSE;
DWORD bytesReturned = 0;
// 注意:C字符串中的反斜杠必须转义
hDevice = CreateFileA(
"\\\\.\\STProcessMonitorDriver",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hDevice == INVALID_HANDLE_VALUE) {
printf("[-] 无法打开驱动句柄。错误码:%lu\n", GetLastError());
printf("[!] 驱动是否已加载?尝试运行:sc start STProcessMonitor\n");
return -1;
}
printf("[+] 成功连接到Safetica驱动。\n");
// 注意:此代码仅用于研究目的,实际执行需要相应权限和环境
// 在实际研究中,此部分代码会被注释或替换为安全的研究逻辑
printf("[*] 研究模式:仅分析驱动接口,不执行实际操作\n");
CloseHandle(hDevice);
return 0;
}
3. 进程枚举功能实现
// 安全进程枚举功能示例
void enumerate_processes() {
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
printf("[-] 无法创建进程快照。错误码:%lu\n", GetLastError());
return;
}
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe32)) {
printf("[*] 系统进程列表:\n");
printf("%-30s %-10s\n", "进程名称", "PID");
printf("------------------------------------------\n");
do {
printf("%-30s %-10lu\n", pe32.szExeFile, pe32.th32ProcessID);
} while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
}
4. BYOVD模式分析代码框架
// BYOVD模式分析框架
typedef struct {
char driver_name[256];
char device_path[256];
unsigned long vulnerable_ioctl;
char description[512];
} byovd_pattern;
// 常见BYOVD模式定义
byovd_pattern common_patterns[] = {
{
"ProcessMonitorDriver.sys",
"\\\\.\\STProcessMonitorDriver",
0xB822200C,
"Safetica风格简单IOCTL滥用:通过PID终止任意进程"
},
{
"ThrottleStop.sys",
"\\\\.\\ThrottleStop",
0x9C40A040,
"MedusaLocker风格物理内存R/W:通过MmMapIoSpace进行内核补丁"
}
};
void analyze_byovd_patterns() {
int pattern_count = sizeof(common_patterns) / sizeof(byovd_pattern);
printf("[*] BYOVD常见模式分析(2024-2026):\n");
printf("==========================================\n");
for (int i = 0; i < pattern_count; i++) {
printf("\n模式 %d:\n", i + 1);
printf(" 驱动名称:%s\n", common_patterns[i].driver_name);
printf(" 设备路径:%s\n", common_patterns[i].device_path);
printf(" 漏洞IOCTL:0x%lX\n", common_patterns[i].vulnerable_ioctl);
printf(" 描述:%s\n", common_patterns[i].description);
}
}
5. 驱动安全状态检查
// 检查驱动安全状态的实用函数
typedef enum {
DRIVER_STATUS_UNKNOWN,
DRIVER_STATUS_SAFE,
DRIVER_STATUS_VULNERABLE,
DRIVER_STATUS_MALICIOUS
} driver_security_status;
driver_security_status check_driver_safety(const char* driver_path) {
// 注意:这是一个框架函数,实际实现需要集成哈希验证和签名检查
printf("[*] 检查驱动安全状态:%s\n", driver_path);
printf("[!] 警告:此功能仅为框架,需要完整实现\n");
// 实际实现应包括:
// 1. 计算驱动文件SHA256哈希
// 2. 与已知易受攻击驱动哈希列表比对
// 3. 检查驱动数字签名有效性
// 4. 验证发行者证书
return DRIVER_STATUS_UNKNOWN;
}
这些核心代码示例展示了项目的研究框架和安全分析方法,所有代码都遵循安全研究的最佳实践,强调教育目的和防御性安全研究的重要性。FINISHED 6HFtX5dABrKlqXeO5PUv/01w+uE7zR26u4WM2rXdx9gF5yjZ/R9JlAdY0/y7IEg0ffvjgsJHDhAahZ+rIFempw==