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)

Texte alternatif

## 法律警告
标签:UML