mukendi/kratosminifilter
GitHub: mukendi/kratosminifilter
Kratos 是一个 Windows 内核态文件系统 Minifilter 驱动,通过多层行为分析和熵检测来实时拦截并持久化免疫勒索软件。
Stars: 3 | Forks: 1
# 🛡️ Kratos Minifilter — Windows 内核反勒索软件驱动
## 📋 目录
- [概述](#overview)
- [架构](#architecture)
- [检测机制](#detection-mechanisms)
- [基于指纹的黑名单](#blacklist-by-fingerprint)
- [安装](#installation)
- [配置](#configuration)
- [局限性](#limitations)
- [法律警告](#legal-warnings)
## 概述
Kratos (`Kratos.sys`) 是一个 Windows minifilter 驱动程序,通过 Filter Manager (`fltmgr.sys`) 在海拔 **425342**(反病毒层级)运行。与基于静态特征码的反病毒解决方案不同,Kratos 采用了**纯行为**检测方法:
- **无特征码数据库** — 可检测未知勒索软件
- **内核模式** — 在写入磁盘验证前进行原子拦截
- **多层次** — 行为 + 熵 + 结构
- **持久化** — 通过哈希黑名单阻止重复执行
### 目标
| 目标 | 结果 |
|----------|---------|
| 受影响文件 (首次运行) | < 5 |
| 受影响文件 (重复运行) | **0** |
| 误报率 | **0%** (调优后) |
| 兼容性 | NTFS / ReFS |
## 架构
```
User-Mode
│
▼
Filter Manager (fltmgr.sys) ← Altitude 425342
│
▼
┌─────────────────────────────────────────────────────┐
│ KRATOS.SYS │
│ │
│ IRP_MJ_CREATE → Initializing contexts │
│ IRP_MJ_WRITE → Entropic analysis │
│ IRP_MJ_READ → R/W ratio counting │
│ IRP_MJ_SET_INFORMATION → Delete/Rename Detection │
│ │
│ RTL_AVL_TABLE → KS_PROCESS_CONTEXT per PID │
│ FLT_FILE_CONTEXT → Entropy + state per file │
└─────────────────────────────────────────────────────┘
│
▼
NTFS / ReFS
```
## 检测机制
### 级别 1 — 行为
Kratos 使用 `KS_IsValuableFile()` 来区分对**高价值文件**(`.docx`, `.pdf`, `.jpg`...)的删除操作和对系统/缓存文件的删除操作:
- **ValuableDeleteCount** — 在系统目录之外的删除操作
- **RenameToSuspicious** — 重命名为未知扩展名
- **HighEntropyWrites** — 检测到熵值增加
### 级别 2 — 熵
通过**预计算的 LUT** (`KratosEntropyLUT512`) 进行计算 — 避免使用在内核模式下不可用的 `log2()`。每次写入操作抽取 512 字节样本。
- **Delta(增量)**:低熵的现有文件 → 加密数据
- **Absolute(绝对值)**:熵值 ≥ 7.5/8 比特的新 `.tmp` 文件
### 级别 3 — 结构(反向白名单)
```
Original extension is valuable? YES
New extension is recognized? NO
→ SUSPECT — regardless of the extension chosen
```
这种方法可以检测出 LockBit 3.0 (`.xmjzh8q`)、BlackCat/ALPHV(随机扩展名)以及任何未来使用未知扩展名的勒索软件。
### 评分公式
```
ValuableDeleteCount > 10 → +10 pts
RenameToSuspicious > 2 → +40 pts
HighEntropyWrites > 3 → +40 pts
RansomNoteCreated → +60 pts
ShadowCopyDeleted → +75 pts
Score ≥ 60 → WARNING
Score ≥ 80 → CRITICAL + Kill + Blacklist
```
## 基于数字指纹的黑名单
一旦检测到勒索软件,Kratos 就会针对可执行文件的前 4096 字节(PE Header + 代码起始部分)计算其 **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\ → Legitimate
chrome.exe + C:\Users\...\Desktop\ → IMPOSTOR
```
## 安装
### 前置条件
- Windows 10/11 (x64)
- Visual Studio 2022 以及 WDK (Windows Driver Kit)
- 禁用 Secure Boot(或开启测试签名)的虚拟机
### 编译
```
# 在 Visual Studio 中打开 KratosMinifilter.sln
# 配置:Debug 或 Release / x64
# 生成 → 生成解决方案
```
### 部署(测试虚拟机)
```
# 在目标 VM 上 — 启用测试模式
bcdedit /set testsigning on
# 复制 Kratos.sys 和 Kratos.inf
# 通过 Device Manager 或 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()`,根据您的环境调整 WARNING/CRITICAL 阈值。
## 局限性
- 在**首次**执行期间可能会有 1 到 3 个文件受到影响
- 没有针对加密文件的自动恢复机制
- FNV-1a 无法抵抗蓄意的碰撞伪造(生产环境推荐使用 SHA-256)
标签:UML