
深入解析 NTFS $MFT 删除文件恢复基于 Anthropic-Cybersecurity-Skills 的取证分析实战指南【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills导读本文以skills/analyzing-mft-for-deleted-file-recovery技能包为核心系统讲解如何利用 NTFS 主文件表$MFT恢复被删除文件的元数据与内容。你将掌握 MFT 记录结构与关键属性的底层原理学会使用 MFTECmd、analyzeMFT 等工具解析 $MFT、$UsnJrnl、$LogFile 与 MFT slack 空间并能结合仓库附带的 Python 分析脚本自动识别已删除文件、检测时间戳篡改timestomping并生成取证报告。该技能在数字取证digital forensics场景下可用于 Windows 事件调查、文件系统时间线重建与反取证行为检测。一、背景为什么 $MFT 是删除文件取证的核心NTFS 主文件表$MFT是每个 NTFS 卷上所有文件与目录的中央元数据仓库。卷上的每个文件至少由一个 1024 字节的 MFT 记录表示记录中包含$STANDARD_INFORMATION时间戳、权限、$FILE_NAME文件名、父目录引用、时间戳以及$DATA文件内容或簇运行指针等属性。当文件被删除时其 MFT 记录的 InUse 标志位被清除标记为 inactive但元数据本身仍会保留直到该记录被新文件重新分配。这种持久性使得 MFT 分析成为恢复删除文件证据、重建文件系统时间线、检测 timestomping 等反取证活动的首要技术手段。从 MITRE ATTCK 映射看本技能主要覆盖T1070.004 - Indicator Removal: File Deletion与T1070.006 - Indicator Removal: Timestomping两类攻击技术的检测与取证相关标准还进一步扩展了T1485 - Data Destruction与T1561 - Disk Wipe的映射见 standards.md。二、适用场景与前置条件何时使用调查需要恢复删除文件证据的安全事件基于该领域构建检测规则或威胁狩猎查询SOC 分析师需要针对此类分析的结构化操作流程验证相关攻击技术的安全监控覆盖范围。前置条件类别要求镜像格式取证磁盘镜像E01、raw/dd、VMDK 或 VHDX解析工具MFTECmdEric Zimmerman或 analyzeMFTPython挂载工具FTK Imager、Arsenal Image Mounter 等镜像挂载工具分析工具Timeline Explorer 或 Excel 进行 CSV 分析脚本环境Python 3.8用于自定义分析脚本知识储备理解 NTFS 文件系统内部结构三、MFT 结构与记录布局3.1 MFT 记录头每个 MFT 记录以签名FILE0x46494C45开头其头部字段如下偏移大小字段0x004 字节签名FILE0x042 字节更新序列偏移0x062 字节更新序列大小0x088 字节$LogFile 序列号0x102 字节序列号0x122 字节硬链接计数0x142 字节第一个属性偏移0x162 字节标志0x01 InUse0x02 Directory0x184 字节MFT 记录已用大小0x1C4 字节MFT 记录分配大小0x208 字节基础文件记录引用0x282 字节下一个属性 ID从仓库附带的二进制解析脚本 agent.py 可以看到这些字段的实际读取方式通过struct.unpack_from(H, data, offset 22)读取 Flags第 22 字节偏移对应 0x16 偏移位并以flags 0x01判断in_use、flags 0x02判断is_directory同时解析 Sequence Number 与 First Attribute Offset再沿属性链逐条解析属性类型与长度直到遇到 0xFFFFFFFF 结束标记。3.2 关键 MFT 属性类型 ID名称说明0x10$STANDARD_INFORMATION时间戳、标志、所有者 ID、安全 ID0x30$FILE_NAME文件名、父 MFT 引用、时间戳0x40$OBJECT_ID文件的唯一 GUID0x50$SECURITY_DESCRIPTORACL 权限0x60$VOLUME_NAME卷标签仅卷元数据文件0x80$DATA文件内容700 字节为常驻或簇运行列表0x90$INDEX_ROOT目录的 B-tree 索引根0xA0$INDEX_ALLOCATION大型目录的 B-tree 索引条目0xB0$BITMAP索引或 MFT 的分配位图更完整的属性列表含 0x20 $ATTRIBUTE_LIST见 api-reference.md。$STANDARD_INFORMATION属性内部的时间戳布局为偏移 0创建时间、偏移 8修改时间、偏移 16MFT 修改时间、偏移 24访问时间均为 8 字节 FILETIME。仓库脚本 agent.py 正是按此布局逐一读取四个时间戳。FILETIME 的转换公式为FILETIME_EPOCH datetime(1601, 1, 1) dt FILETIME_EPOCH timedelta(microsecondsfiletime // 10)$FILE_NAME属性的结构则包含偏移 08 字节父目录引用、偏移 641 字节文件名长度按字符计、偏移 651 字节命名空间0POSIX1Win322DOS3Win32DOS、偏移 66 起为 UTF-16LE 编码的文件名。agent.py 中以data[fn_offset 64]读取文件名长度再用decode(utf-16-le, errorsignore)解码真实文件名并解析出父目录引用用于还原文件原始路径。3.3 NTFS 元数据文件的 MFT 固定条目理解以下固定 MFT 条目编号有助于定位取证目标见 standards.mdMFT 记录 0$MFT自引用MFT 记录 1$MFTMirr前 4 条记录的镜像MFT 记录 2$LogFile事务日志MFT 记录 5根目录MFT 记录 6$Bitmap簇分配位图MFT 记录 8$BadClus坏簇列表MFT 记录 11$Extend扩展元数据MFT 记录默认大小为 1024 字节这也是后续 slack 空间分析中记录尺寸的基础。四、删除文件恢复的四种核心技术4.1 技术一使用 MFTECmd 进行 MFT 记录分析# 使用 KAPE 或 FTK Imager 从取证镜像提取 $MFT # 使用 MFTECmd 解析 $MFT MFTECmd.exe -f C:\Evidence\$MFT --csv C:\Output --csvf mft_full.csv # 在 Timeline Explorer 中过滤删除文件InUse FALSE # 查找 InUse 列为 False 的记录在 CSV 输出中识别删除文件的关键列InUse False 表示已删除或已重新分配的记录ParentPath显示删除前的原始文件位置FileSize显示原始大小可能仍可恢复$STANDARD_INFORMATION与$FILE_NAME属性中的时间戳会持续保留。仓库中的 CSV 分析脚本 process.py 与 MFTECmd 输出格式完全对齐它用csv.DictReader读取 MFTECmd 导出的 CSV当row.get(InUse, ).lower() false时将该记录加入删除文件列表。脚本还支持按扩展名统计删除文件Extension列并按ParentPath归类帮助分析师快速聚焦攻击者常用的工具文件。4.2 技术二USN 日志$UsnJrnl:$J分析USN 日志记录 NTFS 卷上所有文件变更包括创建、删除、重命名和数据修改事件。# 使用 MFTECmd 解析 USN 日志 MFTECmd.exe -f C:\Evidence\$J --csv C:\Output --csvf usn_journal.csv # 与删除证据相关的关键 USN reason code # USN_REASON_FILE_DELETE 0x00000200 # USN_REASON_CLOSE 0x80000000 # USN_REASON_RENAME_OLD_NAME 0x00001000 # USN_REASON_RENAME_NEW_NAME 0x00002000USN 日志的价值在于提供精确的删除时间戳这是仅凭 $MFT 记录难以获得的。在实际工作中可将 USN 日志中的删除事件与 MFT 记录中的删除文件清单进行交叉比对为时间线重建提供时间锚点。4.3 技术三$LogFile 事务分析$LogFile 存储 NTFS 事务记录即使在 USN 日志被循环覆盖后仍可揭示文件操作。# 使用 LogFileParser 解析 $LogFile LogFileParser.exe -l C:\Evidence\$LogFile -o C:\Output # 查找指示文件删除的 REDO 与 UNDO 操作 # - DeallocateFileRecordSegment # - DeleteAttribute # - UpdateResidentValue清除 InUse 标志$LogFile 的优势在于其事务性即使 MFT 记录已被新文件重新分配日志中仍可能保留原始删除操作的痕迹是深层次反取证对抗中的重要数据源。4.4 技术四MFT Slack 空间分析MFT slack 空间存在于 MFT 记录已使用区域末尾与分配的 1024 字节末尾之间可能残留此前文件记录的碎片。import struct def parse_mft_slack(mft_path: str, output_path: str): Extract and analyze MFT slack space for deleted file remnants. with open(mft_path, rb) as f: record_size 1024 record_num 0 slack_findings [] while True: record f.read(record_size) if len(record) record_size: break # Verify FILE signature if record[:4] ! bFILE: record_num 1 continue # Get used size from offset 0x18 used_size struct.unpack(I, record[0x18:0x1C])[0] if used_size record_size: slack record[used_size:] # Check if slack contains readable strings or attribute headers if any(c 0x20 and c 0x7F for c in slack[:50]): slack_findings.append({ record: record_num, used_size: used_size, slack_size: record_size - used_size, slack_preview: slack[:100].hex() }) record_num 1 return slack_findings该脚本的核心逻辑逐一读取 1024 字节记录校验FILE签名从偏移 0x18 读取已用大小used size当已用大小小于记录大小时将中间区域视为 slack 空间检查其中是否存在可读字符串或属性头残留。五、仓库源码级的自动分析实践除了 SKILL.md 中的手动命令流程本技能仓库还提供了两个可直接运行的 Python 工具分别面向「已解析 CSV」与「原始二进制」两条分析路径。5.1 面向 MFTECmd CSV 的分析器process.py运行方式python skills/analyzing-mft-for-deleted-file-recovery/scripts/process.py mft_csv_path output_dir其核心类MFTDeletedFileAnalyzer完成三项任务识别删除文件解析 MFTECmd 输出的 CSV收集所有InUseFalse的记录process.py检测时间戳篡改对比同一记录的Created0x10$SI 创建时间与Created0x30$FN 创建时间当$SI 创建时间早于 $FN 创建时间即si_dt fn_dt时标记为 timestomping 嫌疑并计算时间差秒process.py生成综合报告输出 JSON 报告包含总记录数、删除记录数、timestomped 记录数、按扩展名分类统计以及前 50 条 timestomping 详情与前 100 条值得关注的删除文件process.py。[*] Total MFT records: 395264 [*] Deleted records: 149432 [*] Timestomped records: 2 [*] Report saved to: /analysis/mft_output/mft_deleted_analysis.json5.2 面向原始 $MFT 二进制的解析器agent.py运行方式python skills/analyzing-mft-for-deleted-file-recovery/scripts/agent.py --mft-file $MFT --output mft_report.json该脚本直接从二进制层面解析 $MFT以MFT_ENTRY_SIZE 1024为步长逐条读取记录校验FILE签名解析 Flags、Sequence Number、First Attribute Offset沿属性链解析$STANDARD_INFORMATION四个 FILETIME 时间戳与$FILE_NAME父目录引用、命名空间、UTF-16LE 文件名agent.py通过not e[in_use] and e.get(filename)筛选删除文件条目agent.py内置可疑扩展名列表.exe、.dll、.ps1、.bat、.cmd、.vbs、.js、.hta、.scr对删除文件中出现的可执行/脚本文件标记为high严重级别agent.py生成包含总数、活动记录数、删除记录数、可疑删除记录数及明细的 JSON 报告agent.py。这个脚本的价值在于不依赖第三方工具即可在只拿到 $MFT 原始文件如通过icat /dev/sda1 0 $MFT提取时独立完成核心取证判断。六、与辅助证据的关联分析6.1 与回收站$Recycle.Bin交叉关联# 使用 RBCmd 解析回收站 RBCmd.exe -d C:\Evidence\$Recycle.Bin --csv C:\Output --csvf recycle_bin.csv # 关联方法$I 文件包含原始路径与删除时间戳 # 将 $R 文件中的 MFT 条目号匹配回原始 MFT 记录6.2 与卷影副本Volume Shadow Copies交叉关联# 列出卷影副本 vssadmin list shadows # 挂载卷影副本并从每个副本提取 $MFT # 比较各卷影副本间的 MFT 记录以追踪文件随时间的变化6.3 标准取证工作流仓库 workflows.md 将上述内容整理为三条可复用的工作流工作流 1 — 基础删除文件发现提取 $MFT → MFTECmd 解析为 CSV → 过滤 InUseFalse → 分析 ParentPath/FileName/FileSize → 与 USN 日志交叉获取删除时间戳 → 记录原始路径与时间戳工作流 2 — MFT Slack 空间恢复提取原始 $MFT → 逐条解析 1024 字节记录 → 比较 used_size 与 1024 → 提取 slack 字节 → 搜索属性头0x10、0x30、0x80→ 从 slack 数据重建部分文件元数据工作流 3 — 时间线重建解析 $MFT 的全部时间戳$SI 与 $FN→ 解析 $J 变更记录 → 解析 $LogFile 事务记录 → 合并为统一时间线 → 识别文件的创建、修改、删除序列 → 标记 timestomping 迹象$SI Created $FN Created。七、取证价值与时间戳篡改检测取证价值总结删除文件元数据恢复原始文件名、路径、大小与时间戳时间线重建文件创建、修改、访问与删除事件Timestomping 检测对比 $SI 与 $FN 时间戳数据雕刻指引MFT 簇运行指针可指向磁盘上的文件内容反取证检测识别被擦除或篡改的 MFT 记录。其中 timestomping 检测是核心卖点之一$SI$STANDARD_INFORMATION时间戳可通过 API 调用被攻击者任意修改而 $FN$FILE_NAME时间戳通常需要底层 NTFS 写入操作才能改变二者出现显著偏差即构成篡改证据。SKILL.md 的示例输出中exfil_tool.exe的 $SI Created 为 2023-06-15 而 $FN Created 为 2024-01-15相差 214 天被判为TIMESTOMPED。process.py 的detect_timestomping方法正是基于这一原理自动计算 delta。报告模板取证结果可套用仓库提供的 template.md 结构化呈现包含案例信息案件编号、检验员、证据来源、MFT SHA-256 哈希、汇总统计总记录/活动记录/删除记录/timestomped 记录、重点删除文件清单条目号、文件名、原始路径、大小、创建/修改时间以及 timestomping 指标表$SI Created、$FN Created、Delta。八、完整输出示例以下为 SKILL.md 中给出的 MFTECmd 实际运行输出示例展示了删除文件恢复分析的典型结果形态$ MFTECmd.exe -f C:\Evidence\$MFT --csv /analysis/mft_output MFTECmd v1.2.2 - MFT Parser Input: C:\Evidence\$MFT (Size: 384 MB) Total MFT Entries: 395,264 Parsing MFT entries... Done (12.4 seconds) --- Deleted File Recovery Summary --- Total Entries: 395,264 Active Files: 245,832 Deleted Files: 149,432 Recoverable: 87,234 (resident data or clusters not reallocated) Partially Recoverable: 31,456 (some clusters overwritten) Unrecoverable: 30,742 (all clusters reallocated) --- Recently Deleted Files (Incident Window: 2024-01-15 to 2024-01-18) --- MFT Entry | Filename | Path | Size | Deleted (UTC) | Recoverable ----------|-----------------------------------|------------------------------------|-----------|-----------------------|------------ 148923 | exfil_tool.exe | C:\ProgramData\Updates\ | 1,258,496 | 2024-01-17 02:45:12 | YES 148924 | exfil_tool.log | C:\ProgramData\Updates\ | 45,312 | 2024-01-17 02:45:14 | YES 149001 | passwords.txt | C:\Users\jsmith\Desktop\ | 2,048 | 2024-01-17 02:50:33 | YES 149150 | scan_results.csv | C:\Users\jsmith\AppData\Local\Temp | 892,416 | 2024-01-17 03:00:01 | PARTIAL 149200 | mimikatz.exe | C:\Windows\Temp\ | 1,250,816 | 2024-01-18 01:15:22 | YES 149201 | sekurlsa.log | C:\Windows\Temp\ | 32,768 | 2024-01-18 01:15:25 | YES 149302 | .bash_history | C:\Users\jsmith\ | 4,096 | 2024-01-18 03:00:00 | NO 149400 | ClearEventLogs.ps1 | C:\Windows\Temp\ | 1,536 | 2024-01-18 03:01:12 | YES --- $STANDARD_INFORMATION vs $FILE_NAME Timestamp Analysis (Timestomping Detection) --- MFT Entry | Filename | $SI Created | $FN Created | Delta | Verdict ----------|---------------------|----------------------|----------------------|-----------|---------- 148923 | exfil_tool.exe | 2023-06-15 10:00:00 | 2024-01-15 14:34:02 | -214 days | TIMESTOMPED 149200 | mimikatz.exe | 2022-01-01 00:00:00 | 2024-01-16 02:30:15 | -745 days | TIMESTOMPED Recovered files exported to: /analysis/mft_output/recovered/ Full CSV report: /analysis/mft_output/mft_analysis.csv (395,264 rows) Timeline CSV: /analysis/mft_output/mft_timeline.csv从该示例可以看出实战要点入侵时间窗内被删除的exfil_tool.exe、mimikatz.exe、ClearEventLogs.ps1等文件可直接定位passwords.txt落在桌面且完全可恢复scan_results.csv因部分簇被覆盖仅部分可恢复.bash_history因数据已被重新分配而不可恢复。同时两个工具文件均被检测出显著的时间戳篡改痕迹属于典型的反取证行为。九、标准合规与后续深入方向本技能涉及的取证过程可对照以下标准执行详见 standards.mdNIST SP 800-86将取证技术集成到事件响应的指南ISO/IEC 27037数字证据识别、收集、获取与保全的指南SWGDE计算机取证最佳实践。工具链上MFTECmd 是解析 $MFT、$J、$LogFile、$Boot 的主力工具analyzeMFT 提供跨平台的 Python 解析能力配合本仓库的 process.py 与 agent.py 可实现从原始镜像到结构化报告的自动化取证分析。SKILL.md 中该技能的 NIST CSF 映射为 RS.AN-03分析事件、DE.AE-02异常活动分析、RS.MA-01遏制可在事件响应与安全监控覆盖审计中作为依据。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考