salmontts/DEADWEIGHT-Forensic-System-Purge

GitHub: salmontts/DEADWEIGHT-Forensic-System-Purge

一款模块化 C 架构的 Windows 持久化分析与清理工具,通过反伪装检测和 Authenticode 签名验证帮助 DFIR 分析师枚举、识别并清除恶意软件的持久化向量。

Stars: 0 | Forks: 0

# DEADWEIGHT **Windows 持久化分析与系统核武** —— 这是一款专为 对抗顽固的自我复制型感染而生的工具。其理念很简单: 有时候直接**彻底抹除并重建**,远比去追逐那些每次重启都会 死灰复燃的多态 payload 要快得多。 ## 两种模式,一个理念 DEADWEIGHT 像攻击者一样思考(持久化隐藏在哪里?),从而像 防御者一样行动(如何一次性将它们全部清除)。由此衍生出两种模式: | 模式 | 功能描述 | 是否具有破坏性? | |------|---------|---------------| | `--analyze` | 枚举**所有**持久化向量 + 进程,并标记可疑项 | ❌ 否 — 纯只读 | | `--nuke` | 清除持久化、temp/staging 文件,并终止除关键进程外的所有进程 | ✅ 是 — 焦土政策 | `--analyze` 可以安全地在活动系统上运行 —— 它展示了在采取任何实际行动之前,工具 *看到*的内容。而 `--nuke` 则是彻头彻尾的断头台。 ## DEADWEIGHT 理解的持久化机制 该工具熟悉恶意软件在系统中潜藏的位置(括号内为对应的 MITRE ATT&CK 映射): - **Autorun** — `Run` / `RunOnce`,HKCU + HKLM + Wow6432 (T1547.001) - **IFEO debuggers** — Image File Execution Options (T1546.012) - **AppInit_DLLs** — 向进程注入 DLL (T1546.010) - **Winlogon Shell** — 替换登录 Shell (T1547.004) - **WMI subscriptions** — event-consumer 持久化 (T1546.003) - **Scheduled tasks** — 不在 `\Microsoft` / `\Windows` 下的任务 (T1053.005) - **服务** — 位于可疑路径的二进制文件 (T1543.003) ## 反伪装:为什么白名单基于路径,而非文件名 这是 `--nuke` 模式中最关键的要素。简单的“杀死所有”进程策略通常会根据 **文件名**来豁免进程 —— 而这正是恶意软件藏身之处。一个名为 `svchost.exe` 却位于 `C:\Users\...\AppData\Roaming\` 的进程绝非真正的 `svchost`。 这是典型的**伪装**(MITRE T1036)。 DEADWEIGHT 会验证**文件名与路径的配对**: ``` svchost.exe w C:\Windows\System32\ -> prawdziwy, oszczędzony svchost.exe w C:\Users\...\AppData\... -> impostor, ubity + [MASQUERADE?] w logu ``` 真正的系统进程始终位于它们理应在的位置。任何仅仅*冒充* 系统名称的进程,都会像其他垃圾一样被清理掉。 ## 数字签名验证:如何避免误报 Windows Defender 仅凭路径进行标记存在一个弱点:大量**合法**软件会在 `ProgramData` 中运行(如 Windows Defender、NVIDIA)。初版 `--analyze` 尽职尽责地将它们全部标记为 `SUSPECT` —— 导致工具被误报淹没。 如果一款工具连 Defender 都要报警,那它对分析师来说就毫无用处。 解决方案:引入第二层决策机制 —— **Authenticode 签名**(`WinVerifyTrust`)。 可疑路径仅仅是一个信号;只有在缺乏可信签名时才最终决定是否标记: ``` Defender w ProgramData, podpisany przez Microsoft -> OK (signed), nie flaguj NVIDIA w ProgramData, podpisany przez NVIDIA Corp. -> OK (signed), nie flaguj random.exe w AppData, niepodpisany -> SUSPECT (unsigned) fake.exe w Temp, podpis zerwany / wygasły -> SUSPECT (bad-sig) ``` 这正是专业 DFIR 工具所采用的标准: 重点不在于文件*位于何处*,而在于*谁为其背书*。在 `--nuke` 模式下,同样的 逻辑也会保护已签名的系统服务免遭删除 —— 核武操作只会删除位于可疑路径中 且不受信任的二进制文件。 ## 已知局限性(及重要性说明) 没有任何工具能包揽一切。对自身盲点的认知是 可靠分析的一部分 —— 以下是 DEADWEIGHT 的局限性: **1. Process injection (MITRE T1055) —— 最大的盲点。** 签名验证仅检查**磁盘上的文件**。它无法检测到外部 代码在已签名的合法进程*内部*运行的情况 —— 例如 DLL injection、process hollowing、reflective loading。此时磁盘上的 `explorer.exe` 文件是干净的 且带有签名,但在其内存空间中却潜伏着 payload。要检测这一点,必须进行**内存 分析**:扫描 RWX 内存区域、将内存模块与磁盘文件进行比对、 检测 API hooks。这是未来的开发方向,而非当前功能。 **2. 签名 ≠ 绝对可信。** 有效的签名只能说明“该文件名符其实,且有人 为其背书” —— 但存在被盗证书和 先签名后入侵的情况。签名提高了门槛,但并不提供绝对保证。 **3. 权限依赖。** 部分进程(PPL, protected)即使在 管理员权限下也会返回“access denied” —— DEADWEIGHT 会将它们标记为 无法验证,并且为了安全起见,会放过已知的系统名称。 **4. 通过 `wmic` 操作 WMI。** 清理 WMI 订阅使用的是已弃用的 `wmic`; 在最新版的 Windows 上,这需要重写为基于 COM 的实现(已列入路线图)。 ## 架构 模块化设计 —— 一个轻量级的路由(`main.c`)加上各个独立的模块,每个模块都有 自己的头文件。所有配置(白名单、路径、向量)都集中在 同一个 `config.h` 中。 ``` src/ ├── config.h Wszystkie stałe, whitelisty, wektory persistence ├── log.h / .c Jednolite logowanie (purge + analysis) ├── persistence.h/.c Enumeracja + czyszczenie persistence (analyze | purge) ├── processes.h/.c Kill / monitor / lupa + ANTI-MASQUERADE (ścieżka!) ├── cleanup.h/.c Temp / prefetch / staging ├── forensics.h/.c Scan / prefetch / services / report (read-only) └── main.c Router CLI/GUI + dispatch trybów ``` ## 用法 ``` deadweight.exe --analyze # pełna enumeracja, NIC nie kasuje (start tu) deadweight.exe --persistence # tylko wektory persistence deadweight.exe --report # raport systemowy (CPU/RAM/dyski/prefetch) deadweight.exe --lupa svchost.exe # szczegóły procesu + wykrycie masquerade deadweight.exe --live 30 # monitor procesów przez 30 s deadweight.exe --scan D:\Downloads 60 # pliki nieużywane 60+ dni deadweight.exe --clean C:\Temp\Stuff # usuń drzewo (z potwierdzeniem) deadweight.exe --nuke # SCORCHED EARTH (wymaga wpisania "NUKE") ``` ## ⚠️ 前车之鉴 该工具的最初版本还会删除 DriverStore 中的驱动程序和 `.inf` 文件 —— 理论上是“激进清理”,实际上却导致了**Windows 安装损坏**。有一次在执行 `--nuke` 后,我在重启 Windows 之前启动了 Linux 双系统, 结果 Windows 再也无法启动了。 重构时有意识地裁剪了这部分功能。Nuke 依然是核武级别的操作,但它的目标是 **持久化机制和进程**,而不是系统的核心底层组件。这正是一款 仅仅*看起来*危险的工具与一款真正明白自己在触碰什么的工具之间的区别。 ## 构建 ``` x86_64-w64-mingw32-gcc src/*.c -o deadweight.exe \ -municode -lshlwapi -lpsapi -lcomctl32 -lwintrust -lcrypt32 ``` 依赖项:仅使用 Windows 标准库。无需 .NET,无需额外的 runtime。 详情请参阅 `BUILD.md`。 ## 状态与路线图 - [x] 模块化重构(从 1517 行的单体代码中抽离) - [x] 基于路径的进程白名单(反伪装) - [x] Authenticode 签名验证(消除误报) - [x] DFIR 级别的日志记录(记录实际发现,而不仅仅是“completed”) - [x] `--analyze` 模式(只读) - [x] 移除杀驱动程序的 bug - [x] 持久化逻辑去重 - [ ] 将发布者名称读取到输出中(代码中已包含 CryptQueryObject) - [ ] 检测 process injection(扫描 RWX,内存与磁盘模块比对)— T1055 - [ ] 通过 COM 枚举 WMI(替代已弃用的 `wmic`) - [ ] 将报告导出为 JSON(用于 DFIR pipeline) - [ ] Makefile + CI 构建 ## 免责声明 本工具仅供学习及在您自己的环境中进行授权测试使用。 请勿在他人系统或生产环境中运行。
标签:DNS 解析, Gophish, 客户端加密, 库, 应急响应, 持久化分析, 数字取证, 端点可见性, 紫队, 自动化脚本