防御性安全研究项目 — 用 C++ 开发的 Windows 微过滤器驱动程序,用于在内核态 (Ring 0) 实时检测和消除勒索软件。
Kratos (Kratos.sys) 是一个 Windows 微过滤器驱动程序,通过筛选器管理器 (fltmgr.sys) 运行在海拔 425342(反病毒层级)。与基于静态签名的防病毒解决方案不同,Kratos 采用纯行为方法:
| 目标 | 结果 |
|----------|---------|
| 受影响文件(首次运行) | < 5 |
| 受影响文件(重新运行) | 0 |
| 误报率 | 0%(调优后) |
| 兼容性 | NTFS / ReFS |
用户态
│
▼
筛选器管理器 (fltmgr.sys) ← 海拔 425342
│
▼
┌─────────────────────────────────────────────────────┐
│ KRATOS.SYS │
│ │
│ IRP_MJ_CREATE → 初始化上下文 │
│ IRP_MJ_WRITE → 熵分析 │
│ IRP_MJ_READ → 读写比率计数 │
│ IRP_MJ_SET_INFORMATION → 删除/重命名检测 │
│ │
│ RTL_AVL_TABLE → 每个 PID 的 KS_PROCESS_CONTEXT │
│ FLT_FILE_CONTEXT → 每个文件的熵和状态 │
└─────────────────────────────────────────────────────┘
│
▼
NTFS / ReFS
Kratos 使用 KS_IsValuableFile() 来区分有价值文件(.docx, .pdf, .jpg...)的删除与系统/缓存文件的删除:
通过预先计算的查找表 (KratosEntropyLUT512) 进行计算 — 避免使用内核模式下不可用的 log2()。每次写入操作采样 512 字节。
.tmp 文件,熵 ≥ 7.5/8 位主要创新:Kratos 使用合法扩展名白名单,而非恶意扩展名黑名单。
原始扩展名有价值?是
新扩展名被识别?否
→ 可疑 — 无论选择哪个扩展名
这种方法可以检测 LockBit 3.0(.xmjzh8q)、BlackCat/ALPHV(随机扩展名)以及任何使用未知扩展名的未来勒索软件。
ValuableDeleteCount > 10 → +10 分
RenameToSuspicious > 2 → +40 分
HighEntropyWrites > 3 → +40 分
RansomNoteCreated → +60 分
ShadowCopyDeleted → +75 分
得分 ≥ 60 → 警告
得分 ≥ 80 → 严重 + 终止进程 + 加入黑名单
一旦检测到勒索软件,Kratos 会计算可执行文件前 4096 字节(PE 头部 + 代码开头)的 64 位 FNV-1a 哈希,并将其持久化到注册表中:
\Registry\Machine\SOFTWARE\Kratos\Blacklist
└── 1F81F13004B5B920 = "C:\Users\...\Hercule.exe"
每次创建进程时,ProcessNotifyCallback 会在执行之前检查黑名单。进程通过 CreationStatus = STATUS_ACCESS_DENIED 被阻止。
重命名抵抗性:无论文件名是什么(Hercule-AES.exe, HERCUL~1.EXE, chrome.exe...),FNV-1a 哈希都相同。
防冒充保护:受信任的进程通过预期名称 + 路径进行验证:
chrome.exe + \Program Files\Google\Chrome\Application\ → 合法
chrome.exe + C:\Users\...\Desktop\ → 仿冒
# 在 Visual Studio 中打开 KratosMinifilter.sln
# 配置:Debug 或 Release / x64
# 生成 → 生成解决方案
# 在目标虚拟机上 — 启用测试模式
bcdedit /set testsigning on
# 复制 Kratos.sys 和 Kratos.inf
# 通过设备管理器或 sc.exe 安装
sc create Kratos type= kernel start= boot binPath= "C:\Kratos\Kratos.sys"
sc start Kratos
修改 KratosDetection.cpp 中的 g_LegitExtensions[] 以调整重命名后被视为合法的扩展名。
修改 g_TrustedProcesses[] 以添加合法进程及其预期路径:
{ "myapp.exe", L"\\Program Files\\MyApp\\" },
修改 KratosDetection.cpp 中的 KS_EvaluateThreatScore() 以根据您的环境调整警告/严重阈值。
⚠️ 此驱动程序是在防御性安全研究框架内开发的。
- 使用严格限制在隔离的测试环境(无网络访问的虚拟机)中
- 在生产系统上的任何部署由用户自行承担全部责任
- 作者对因不当使用造成的任何损害不承担任何责任
- 未经授权修改此驱动程序以绕过安全系统是非法的