antocade/afdetect-CIS6520
GitHub: antocade/afdetect-CIS6520
afdetect 是一款 Windows 反取证分诊工具,通过规则引擎和异常检测自动识别磁盘镜像中证据被隐藏或销毁的迹象并给出可解释的评分。
Stars: 0 | Forks: 0
# afdetect
afdetect 用于寻找在 Windows 机器上试图隐藏或销毁证据的迹象,并以通俗易懂的语言解释其发现。
这涵盖了清除事件日志、运行安全删除工具、篡改文件时间戳(回溯时间)以及一次性删除大量文件等行为。afdetect 会读取 Windows 取证记录(artifacts),运行一系列规则和异常检测,并为每项发现返回置信度分数、严重程度及具体原因。
为 CIS\*6520(高级数字取证与事件响应)课程而开发。作者:Caden Anton。预期客户:加拿大皇家骑警 (RCMP) 国家数字取证项目。
## 检测内容
包含五条规则,每条规则基于一种 Windows 取证记录:
- R1:事件日志被清除(Security 1102 或 System 104)。权重 0.90。
- R2:运行了安全删除工具(如在 prefetch 中发现的 SDelete 或 BleachBit)。权重 0.80。
- R3:系统文件夹外的文件时间戳被篡改(回溯时间)且精确到整秒。权重 0.70。
- R4:整秒时间戳的出现频率超出正常水平。仅作为辅助信号。权重 0.45。
- R5:根据 USN 日志记录,在五分钟内发生大量用户文件删除。权重 0.60。
R3 至 R5 在更大的磁盘上会提高其阈值,因为更大的磁盘上会有更多恰好符合特征但无辜的文件。有关更多信息,请参阅“真实数据校准”部分。
此外还包含一项基于孤立森林 的异常检查,用于标记看起来异于正常状态的机器,并指出是哪项特征表现突出。它仅作为对规则的补充支持:它可以使分数升高,但绝不会使其降低;仅凭其自身也无法将主机的评级提升至 LOW 以上。
最终得分为 `rules + 0.25 * anomaly * (1 - rules)`,并转换为 MINIMAL、LOW、MEDIUM 或 HIGH。
## 环境要求
Python 3.10 或更高版本。通过以下命令安装:
```
pip install -r requirements.txt
```
你只需要 numpy 和 scikit-learn。解析器和测试均使用标准库。
## 运行说明
代码库中附带了两个示例案例。
```
python afdetect.py analyze case_tampered.json
python afdetect.py analyze case_clean.json
```
被篡改的案例得分为 0.999,评级为 HIGH,五条规则全部触发。干净的案例得分为 0.000,评级为 MINIMAL。
添加 `--html` 参数,可生成一份独立的 HTML 报告,你可以在浏览器中打开或打印为 PDF:
```
python afdetect.py analyze case_tampered.json --html case_tampered.html
```
对 50 个干净和 50 个被篡改的合成案例运行内置测试:
```
python afdetect.py evaluate
```
重新生成示例数据:
```
python make_data.py
```
## 输入格式
afdetect 将每个案例读取为一个 JSON 文件,其中包含四个列表:事件日志、`$MFT` 记录、USN 日志条目和 prefetch 条目。坚持使用固定的 JSON 格式使得检测器能够独立于任何特定的取证工具。请查看 `case_clean.json` 获取简短示例。
真实案例的数据源于磁盘镜像,而非 JSON。`parse_artifacts.py` 可以将 Eric Zimmerman 工具 (EvtxECmd, MFTECmd, PECmd) 输出的 CSV 文件转换为该格式:
```
python parse_artifacts.py sample_artifacts --out sample_case.json --case-id CASE-001 --host SUSPECT-LAPTOP
python afdetect.py analyze sample_case.json
```
## 真实数据校准
这些规则最初是在包含约 30 条记录的小型合成案例上调试的。但在针对真实的 Windows 11 镜像运行时,它们就失效了。该镜像包含 383,557 条 `$MFT` 记录、243,414 条 USN 条目和 83,300 个事件,全部使用 KAPE 收集。在这一阶段,主要工作就是控制误报。
在要求时间戳同时满足“被回溯”且“精确到整秒”,并跳过系统文件夹后,R3 在干净主机上的误报数从 89,388 次骤降至 1 次。通过跳过系统文件夹并根据磁盘大小进行调整,R4 的误报从 241 次降至 38 次。通过仅统计用户文件并忽略后台应用程序活动,R5 的误报从 9,552 次降至 14 次。
R3 曾是产生误报最严重的规则,因为 Windows 会在其自身的系统文件上保留初始安装时间戳,因此某条记录中的创建时间合理地早于另一条。仅在 WinSxS 文件夹中,就有 55,695 个文件出现了这种情况,在这种规模下是完全正常的。真正不正常的是那些被回溯、设置为整秒且位于系统文件夹之外的文件。在干净的主机上,只发现了 1 个这样的文件。Windows\Temp 被刻意保留在检测范围内,因为任何人都可以写入该目录,且它是暂存文件的常见位置。
R5 曾对 USN 日志中的常规后台活动(例如临时数据库和缓存文件被删除)触发警报。仅统计真正的用户文件(文档、媒体、归档文件)后,正常的最大数量从 9,552 降至了 14。
这两个镜像均来自同一台 Windows 11 机器,一份为干净状态,另一份为经历了真实篡改后的状态:清除日志、运行 SDelete、500 个被篡改时间戳的文件以及 300 个被删除的文档。干净的副本得分为 0.000,评级为 MINIMAL,没有任何内容被标记。被篡改的副本得分为 0.999,评级为 HIGH,五条规则全部触发。事件总数也从 83,300 下降到了 60,835,这正是清除日志行为在数据上的直接体现。
这些阈值并不是针对这两台机器拟合的。在包含从 30 个文件到 150 万个文件的合成案例中,干净样本始终保持 MINIMAL,而被篡改样本均返回 HIGH,并且合成测试依然报告精确率、召回率和 F1 分数均为 1.00。
请记住,这些完美的分数来自于合成数据,在这些数据中,篡改行为是被刻意设计得极其明显的。在真实数据中,信号会更加隐蔽,各项数值也会有所下降。合成测试的存在是为了捕捉系统回归,而非宣称为真实的准确率。
## 测试
```
python -m unittest -v
```
共有 18 项测试,涵盖了规则、评分机制、时间戳解析、文件删除爆发窗口、干净与篡改案例的完整评分、评估集、CSV 解析器以及校准工作。
## 文件
```
afdetect.py the detector and command line
report.py writes the HTML report
make_data.py builds the synthetic data
parse_artifacts.py CSV front-end for real tool output
sample_artifacts/ sample CSVs for the front-end
test_afdetect.py the tests
baseline_corpus.json benign baseline for the anomaly model
case_clean.json sample clean case
case_tampered.json sample tampered case
requirements.txt dependencies
LICENSE MIT
```
## 局限性
准确率数值均来源于合成数据。唯一的真实测试是来自单台机器的一对干净与被篡改的样本。这证明了该工具能够正常工作且不会误标记干净的磁盘,但这并不是对真实准确率的真正衡量。
它可能会漏掉小规模的篡改行为。提高大容量磁盘上的阈值虽然可以阻止误报,但也意味着隐藏在成千上万文件中的少数几个被回溯的文件可能会逃过检测。该工具是为批量活动而设计的。如果你怀疑存在小规模的、针对性的篡改,请针对较小的集合而不是整个磁盘运行此工具。
异常检测模型是在合成数据上训练的,在真实机器上的读数接近于零,因此在面对真实数据时,全部工作实际上都是由规则来完成的。基于真实的干净磁盘重新训练该模型是接下来的工作重点。
Prefetch 解析尚不完整。PECmd 1.5.0.0 无法读取测试镜像中 Windows 11 24H2 的 prefetch 格式,因此运行证据主要来自于 prefetch 文件名和元数据。这能提供程序名称和最后运行时间,但无法提供运行次数。
目前仅涵盖五种技术。注册表清理、卷影副本删除和浏览器痕迹清理已在计划之中,但尚未实现。
此外,它的检测效果取决于输入的数据质量。如果解析过程遗漏了某些内容,检测结果也会随之遗漏。
## 背景
隐藏或销毁证据会削弱案件在法庭上的效力。加拿大皇家骑警 (RCMP) 一直在加强其数字取证能力,安大略省也更加重视对数字证据的处理。一款能够尽早标记篡改行为并加以解释的工具,能够帮助检验人员确认证据是否完好无损。
## 参考文献
关于反取证策略的 Surakanti 等人 (2025) 研究;关于时间戳篡改的 Vanini 等人 (2024) 研究;关于时间线重构的 Breitinger 等人 (2025) 研究;关于 AI 辅助分诊的 Zamil & Khan (2025) 以及 Li & Liu (2023) 研究;关于反取证痕迹检测的 Park 等人 (2017) 研究。完整引文请参见项目报告。
## AI 使用声明
Claude 被用于代码审查、起草本文档以及搭建测试。本人审查并验证了所有内容,并对最终内容负责。
## 许可证
MIT。请参阅 LICENSE。
标签:Python, 反取证检测, 子域名变形, 库, 应急响应, 异常检测, 数字取证, 无后门, 自动化脚本, 逆向工具