Muz1K1zuM/kslkatz_bof

GitHub: Muz1K1zuM/kslkatz_bof

KslBOF 是一个 Havoc C2 的 BOF 模块,通过 KslD.sys 驱动的 BYOVD 物理内存读取原语,在不触发常规 API 监控的情况下从 lsass 提取凭据。

Stars: 119 | Forks: 12

# KslBOF — 用于 Havoc C2 的 BYOVD BOF 套件 ## 概述 KslBOF 是一个用于 [Havoc C2](https://github.com/HavocFramework/Havoc) 框架的 Beacon Object File (BOF),实现了 **KslD.sys BYOVD 物理内存读取原语**,用于凭据提取。 这是将 KslD.sys 技术移植到 Havoc BOF 格式,基于 [KslKatz](https://github.com/ne1llee/xxx) 及相关的公开研究。原始技术使用 KslD.sys —— 一个由 Windows Defender 附带并经 Microsoft 签名的内核驱动程序 —— 来读取 lsass 内存,而无需打开该进程的句柄。 ## 有何不同之处 现有的 KslD.sys 技术实现都是独立的可执行文件。KslBOF 将相同的原语实现为 **Beacon Object File**: - 完全在 beacon 进程内运行 —— 不会生成新进程 - 除了系统上已存在的驱动程序外,不会在磁盘上留下任何文件 - 与 Havoc C2 的任务分配和输出原生集成 ## 驱动程序版本 —— 存在漏洞 vs 已修补 Microsoft 通过清零 `MmCopyMemory` 修补了正在运行的 KslD.sys 版本,但**将旧的易受攻击版本保留在磁盘上**。大多数系统上同时存在这两个版本: | 路径 | 大小 | 状态 | |------|------|--------| | `%SystemRoot%\System32\drivers\KslD.sys` | 333,216 字节 | **存在漏洞** | | `%ProgramData%\Microsoft\Windows Defender\Platform\\wd\KslD.sys` | ~82 KB | 已修补 | 该套件通过在加载前替换 SCM `ImagePath`,使用 `System32\drivers\` 中的存在漏洞的版本。 **验证存在漏洞的版本是否存在:** ``` Get-Item "$env:SystemRoot\System32\drivers\KslD.sys" | Select-Object Name, Length Get-FileHash "$env:SystemRoot\System32\drivers\KslD.sys" -Algorithm SHA256 ``` **预期输出:** ``` Name Length ---- ------ KslD.sys 333216 Algorithm Hash --------- ---- SHA256 BD17231833AA369B3B2B6963899BF05DBEFD673DB270AEC15446F2FAB4A17B5A ``` ## 为什么没有 CVE KslD.sys 漏洞已报告给 Microsoft MSRC,并被关闭为**“不是漏洞”** —— 因为该攻击需要预先具有管理员权限。没有分配 CVE,没有发布修复程序,该驱动程序仍保留在磁盘上。 该技术的价值在于**隐蔽性**,而不是权限提升。EDR 会监控 lsass 上的 `OpenProcess`、`NtReadVirtualMemory` 和 `MiniDumpWriteDump`。这里没有调用其中的任何一个。 ## BOF 模块 ### `ksl_lsa.o` — 凭据提取 将 KslD.sys 凭据提取技术移植到 Havoc BOF 格式。 从 lsass 内存中提取凭据,而无需在 lsass 上调用 `OpenProcess` 或使用任何标准的转储 API。没有 lsass 的句柄,没有 `NtReadVirtualMemory`,没有 `MiniDumpWriteDump`。 **提取的内容:** - MSV1_0 NT 哈希(感知构建版本的偏移量) - WDigest 明文密码(启用时,支持 Win11 24H2 的多签名) - AES-256 / 3DES LSA 加密密钥 - Credential Guard 检测(`isIso` 标志) **支持的构建版本:** Windows 7/8/10/11(包括 24H2 Build 26200+)、Server 2016–2022 **PrimaryCredential 偏移量:** ``` Win11 24H2 (>= 26100): isIso=0x28 NT=0x46 LM=0x56 SHA1=0x66 Win11 (>= 22000): isIso=0x40 NT=0x46 LM=0x56 SHA1=0x66 Win10 (>= 9600): isIso=0x28 NT=0x4a LM=0x5a SHA1=0x36 Win7/8 (< 9600): isIso=0x28 NT=0x38 LM=0x48 SHA1=0x18 ``` **用法:** ``` inline-execute /path/to/out/ksl_lsa.o ``` image ## Credential Guard 当 Credential Guard (VBS) 处于活动状态时,域凭据将被隔离在物理内存原语无法访问的 Hyper-V enclave 中。该模块会检测此情况(`isIso=1`)并进行报告。 **CG 保护的内容:** 域 NTLM 哈希、Kerberos TGT、交互式域会话凭据。 **CG 不保护的内容:** 本地账户、LSA Secrets、服务账户凭据。 ## 技术架构 ### 击败 KASLR ``` SubCmd 2 → IDTR → IDT → minimum ISR → scan backwards → ntoskrnl base Fallback: NtQuerySystemInformation(SystemModuleInformation) ``` ### EPROCESS 发现 ``` OpenProcess(PID 4) → NtQuerySystemInformation(class 16) → handle table → SYSTEM EPROCESS → ActiveProcessLinks walk → lsass → DTB from EPROCESS+0x028 → UserDTB from EPROCESS+0x388 (KPTI, Win10 1809+) ``` 所有 EPROCESS 偏移量都是动态检测的 —— 没有硬编码的值。 ### 物理内存读取限制 KslD.sys 具有大约 **4GB 物理地址**的内部物理内存读取限制。在内存更大的系统上,用户态进程的 DTB 通常会超过此限制。通过 `virt_read` 进行的内核 VA 读取不受影响 —— `ksl_lsa.o` 无论系统内存大小如何都能正常工作,因为它通过内核 VA 运行。 ## 构建 **要求:** `x86_64-w64-mingw32-gcc` ``` make clean && make ksl_lsa ``` ## 仓库结构 ``` KslBOF/ ├── include/ │ ├── beacon.h │ └── common_bof.h ├── src/ │ ├── bof_crt.c │ ├── ksl_driver_bof.c │ ├── ksl_memory_bof.c │ ├── ksl_crypto_bof.c │ ├── ksl_lsa_bof.c │ ├── ksl_lsa_go.c │ ├── ksl_wdigest_bof.c │ └── ksl_all_in_one_lsa.c ├── out/ │ └── ksl_lsa.o └── Makefile ``` ## 路线图 - `ksl_edr.o` — EDR 进程侦察 + inline hook 扫描器 — *测试中* - `ksl_ssdt.o` — SSDT 内核 hook 扫描器 — *测试中* ## 检测注意事项 - 针对 Defender 更新上下文之外的 KslD 服务启动发出警报 - 监控 `HKLM\SYSTEM\CurrentControlSet\Services\KslD` 下的 `AllowedProcessName` 修改 - lsass 上不会生成 `OpenProcess` 事件 —— 检测必须重点关注驱动程序的加载 - Credential Guard 处于活动状态时会阻止域凭据提取 ## 免责声明 本工具仅用于授权的安全测试和教育目的。请仅在您拥有或获得明确书面测试许可的系统上使用。
标签:BOF, BYOVD, Web报告查看器, 客户端加密, 欺骗防御