Anthropic-Cybersecurity-Skills 实战指南:NTFS Slack Space 与文件系统痕迹的深度取证分析
2026/9/11 20:25:39 网站建设 项目流程

Anthropic-Cybersecurity-Skills 实战指南:NTFS Slack Space 与文件系统痕迹的深度取证分析

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, 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

本文聚焦 analyzing-slack-space-and-file-system-artifacts 这一数字取证技能所配套的 API 参考文档,系统讲解如何借助 The Sleuth Kit(TSK)、analyzeMFT、MFTECmd、bulk_extractor、foremost 等工具,对 NTFS 卷的 Slack Space、MFT、USN Change Journal 与 Alternate Data Streams(ADS)展开深度取证分析。读完本文,你将掌握从磁盘镜像中提取 slack 空间、解析 MFT 恢复已删除文件元数据、从 USN 日志重建文件操作时间线、以及发现隐藏在 ADS 中的数据与反取证痕迹(如时间戳篡改)的完整技术方案。

为什么需要"标准恢复之外"的取证分析

常规文件恢复只能还原仍在 MFT 中有记录的文件,而攻击者与隐蔽数据往往藏身在常规工具看不到的地方。NTFS 文件系统为取证分析提供了四个高价值的目标:

  • Slack Space(文件间隙):文件末尾到簇边界之间未使用的空间,可能残留上一份文件的数据;
  • MFT(主文件表):记录每个文件(含已删除文件)元数据的 NTFS 数据库;
  • USN Change Journal:记录 NTFS 卷上所有文件/目录变更的日志;
  • Alternate Data Streams(ADS):NTFS 允许每个文件携带多个数据流,是经典的隐蔽存储手段。

该技能被映射到 NIST CSF 2.0 的 RS.AN-03、DE.AE-02、RS.MA-01 与 MITRE ATT&CK 的 T1070.006(时间戳修改)、T1564.004(NTFS 文件属性隐藏)、T1070.004(文件删除)、T1005(本地数据收集)、T1006(间接数据访问),可见其对应的是典型的反取证对抗与隐蔽数据场景。

前置条件与工具准备

在进行此类深挖之前,需要满足以下条件(来自技能文档 SKILL.md):

  • 一份包含 NTFS 文件系统的取证磁盘镜像(如.dd格式);
  • The Sleuth Kit(TSK)工具集:istaticatflsblklsblkstat
  • MFTECmd(Eric Zimmerman 工具)用于 MFT 解析;
  • MFTExplorer 用于交互式 MFT 分析;
  • 对 NTFS 结构(MFT、$UsnJrnl$LogFile、ADS)的理解;
  • Python 环境(可安装 analyzeMFT 或 mft 库做自动化解析)。

仓库配套的自动化脚本位于 scripts/agent.py,它以子进程方式封装了 TSK 与 analyzeMFT 的调用,可以直接作为自动化取证的入口。

整体取证工作流

技能文档给出了一条五步式工作流,API 参考中的命令工具分散在各步骤中:

  1. 识别并提取 NTFS 文件系统痕迹:确定分区布局,提取$MFT$UsnJrnl:$J$LogFile与全部 slack 空间;
  2. 分析 MFT:解析条目,识别已删除文件元数据与时间戳异常;
  3. 分析 Slack Space 中的隐藏数据:字符串提取、关键字检索、文件签名雕刻;
  4. 解析 USN Change Journal:重建文件创建、修改、重命名、删除活动;
  5. 检测并分析 ADS:列出并提取隐藏流。

下文按照 API 参考的组织方式,逐一展开每个工具的使用方法与底层原理。

The Sleuth Kit(TSK)命令行工具

TSK 是整套流程的地基。API 参考文档(api-reference.md)给出了四个核心命令的用法。

blkls —— 提取 Slack Space

# Extract slack space from partition at offset 2048 blkls -s -o 2048 evidence.dd > slack_space.raw

-s表示只输出 slack 空间,-o 2048指定分区在镜像中的扇区偏移(sector offset)。若使用 512 字节扇区,偏移 2048 扇区对应约 1 MiB 处的分区起点。提取出的slack_space.raw是后续字符串检索、文件雕刻与 bulk_extractor 分析的输入。

fls —— 列出文件与 Alternate Data Streams

# Recursive file listing with ADS fls -r -o 2048 evidence.dd # Filter for ADS entries (lines containing ":") fls -r -o 2048 evidence.dd | grep ":"

fls -r递归列出目录与文件;由于 ADS 在输出中以文件名:流名形式呈现(行内包含冒号),因此用grep ":"即可快速筛选出所有 ADS 条目。这也是 agent.py 中find_ads_in_image函数的实现思路——它调用fls -r -o <offset> <image>并过滤含:的行。

icat —— 按 inode 提取文件内容

# Extract $MFT (inode 0) icat -o 2048 evidence.dd 0 > MFT # Extract ADS content icat -o 2048 evidence.dd 14523:Zone.Identifier

icat按 inode 号直接读取内容,无需挂载文件系统。NTFS 中$MFT固定为 inode 0,因此icat ... 0 > MFT可导出完整主文件表。提取 ADS 时使用inode:流名的语法,例如读取Zone.Identifier流。技能工作流中还使用了另外两个固定 inode:$LogFile(事务日志)为 inode 2,$UsnJrnl:$J(USN 日志数据流)可通过 inode 62-128 提取(见 SKILL.md):

# $MFT - Master File Table icat -o 2048 /cases/case-2024-001/images/evidence.dd 0 > /cases/case-2024-001/ntfs/MFT # $UsnJrnl:$J - USN Change Journal icat -o 2048 /cases/case-2024-001/images/evidence.dd 62-128 > /cases/case-2024-001/ntfs/UsnJrnl_J # $LogFile - Transaction log icat -o 2048 /cases/case-2024-001/images/evidence.dd 2 > /cases/case-2024-001/ntfs/LogFile

istat —— 显示 inode 详情

istat -o 2048 evidence.dd 14523

istat输出指定 inode 的元数据,包括属性类型、数据运行(data runs)与各时间戳。在 SKILL.md 的 slack 分析小节中,istat被用来确认文件占用的最后一个簇——文件末尾簇中可能包含 slack 数据,slack 大小可按下式估算:slack 大小 = 分配大小 - 文件大小

辅助命令:mmls 与 fsstat

在正式提取之前,先用mmls确定分区布局、用fsstat查看文件系统信息,这在技能工作流 Step 1 中已示范(见 SKILL.md):

# Determine partition layout mmls /cases/case-2024-001/images/evidence.dd # Extract all slack space from the volume blkls -s -o 2048 /cases/case-2024-001/images/evidence.dd > /cases/case-2024-001/ntfs/slack_space.raw # Get file system information fsstat -o 2048 /cases/case-2024-001/images/evidence.dd | tee /cases/case-2024-001/ntfs/fs_info.txt

agent.pyextract_slack_space函数将这条blkls调用封装为 Python 子进程(见 scripts/agent.py),并把输出重定向到文件。

MFT 解析:恢复已删除文件与检测时间戳篡改

MFT 的每个条目包含多个属性,其中两个时间戳属性对取证至关重要:

  • $STANDARD_INFORMATION($SI):用户态应用程序(含攻击工具)可以修改其时间戳;
  • $FILE_NAME($FN):仅内核可修改,更可信。

用 analyzeMFT 解析

pip install analyzeMFT analyzeMFT.py -f MFT -o mft_output.csv -c

-f指定 MFT 文件,-o指定 CSV 输出路径,-c表示输出 CSV 格式。技能工作流中的等价调用为:

analyzeMFT.py -f /cases/case-2024-001/ntfs/MFT \ -o /cases/case-2024-001/analysis/mft_analysis.csv \ -c

agent.py 的parse_mft_with_analyzeMFT函数正是此命令的封装。

用 MFTECmd(Eric Zimmerman)解析

MFTECmd.exe -f MFT --csv output/ --csvf mft_analysis.csv

MFTECmd 是 Windows 下的高性能解析器,--csv指定输出目录,--csvf指定 CSV 文件名。它的输出包含SI_ModifiedFN_Modified两列——这正是 agent.py 中detect_timestomping函数检测时间戳篡改的依据:遍历 CSV,凡是SI_ModifiedFN_Modified不一致的条目即被标记为可疑。

用 Python mft 库做定制分析

技能文档提供了一段完整的 PyMft 定制分析脚本,它完成两类工作:

  1. 枚举已删除文件:对not entry.is_active()且非目录、大小大于 0 的条目收集文件名、大小、创建/修改时间与条目号,用于后续恢复;
  2. 检测时间戳篡改:比较get_si_modified_timestamp()get_fn_modified_timestamp(),若差异超过 86400 秒(1 天)即标记为可疑——因为正常情况下$SI$FN的时间戳一致,而$SI时间戳早于$FN在正常操作中是不可能的(见 SKILL.md 场景 1)。

这段脚本还演示了通过entry.entry_number获取条目号,为后续用icat恢复数据簇做好铺垫。

Slack Space 分析:查找隐藏与残留数据

Slack space 分为两部分(见 SKILL.md):

  1. RAM slack:文件末尾到下一扇区边界之间的字节(历史上可能残留 RAM 内容);
  2. Drive slack:文件最后一个扇区之后、簇边界之前的剩余扇区。

字符串与关键字检索

# Search slack space for strings strings -a /cases/case-2024-001/ntfs/slack_space.raw > /cases/case-2024-001/analysis/slack_strings.txt # Search for specific patterns in slack space grep -iab "password\|secret\|confidential\|credit.card\|ssn" \ /cases/case-2024-001/ntfs/slack_space.raw > /cases/case-2024-001/analysis/slack_keywords.txt

strings -a提取全部可打印字符串,grep -iab-i忽略大小写、-a按文本处理、-b显示字节偏移)定位敏感关键字。仓库脚本 agent.py 的search_slack_keywords用二进制逐关键字扫描实现了等价逻辑,并记录每个命中的偏移量及前后各 20 字节的上下文,便于快速评估命中是否真正可疑。

文件签名雕刻(foremost)

foremost -t jpg,pdf,zip -i slack_space.raw -o carved_files/

foremost依据文件签名(magic bytes)从原始数据中恢复被删除或残留的完整文件。-t指定要雕刻的文件类型(jpg、pdf、zip),-i指定输入,-o指定输出目录。技能工作流中将其应用于整卷 slack 空间(见 SKILL.md):

foremost -t jpg,pdf,zip -i /cases/case-2024-001/ntfs/slack_space.raw \ -o /cases/case-2024-001/carved/slack_carved/

结构化数据挖掘(bulk_extractor)

bulk_extractor -o output_dir/ slack_space.raw

bulk_extractor擅长从原始数据中批量提取结构化特征——URL、邮箱、信用卡号、哈希、压缩文件等,输出到指定目录的多个特征文件中。它对 slack 空间这类"非结构化残留数据"尤其有效,因为它逐扇区扫描、不依赖文件系统结构。

USN Change Journal 解析:重建文件操作时间线

USN Change Journal($UsnJrnl:$J)记录 NTFS 卷上每次文件系统变更,即使文件已被删除,其变更记录仍可能保留在日志中,是重建"数据暂存—删除"等攻击活动的关键证据。

记录结构(USN_RECORD_V2)

API 参考给出了二进制记录的核心布局(api-reference.md):

OffsetSizeField
04Record length
42Major version
88MFT reference
168Parent MFT reference
328Timestamp (FILETIME)
404Reason flags
562Filename length
582Filename offset

Reason Flags

FlagMeaning
0x100FILE_CREATE
0x200FILE_DELETE
0x1000RENAME_OLD_NAME
0x2000RENAME_NEW_NAME
0x80000000CLOSE

技能文档中的 Python 解析器还补充了更完整的标志映射(见 SKILL.md):0x01DATA_OVERWRITE、0x02DATA_EXTEND、0x04DATA_TRUNCATION、0x10NAMED_DATA_OVERWRITE、0x20NAMED_DATA_EXTEND、0x400EA_CHANGE、0x800SECURITY_CHANGE、0x4000INDEXABLE_CHANGE、0x8000BASIC_INFO_CHANGE、0x10000HARD_LINK_CHANGE、0x20000COMPRESSION_CHANGE、0x40000ENCRYPTION_CHANGE、0x80000OBJECT_ID_CHANGE、0x100000REPARSE_POINT_CHANGE、0x200000STREAM_CHANGE。同一记录的reason字段可能是多个标志的按位组合。

用 MFTECmd 解析 USN 日志

MFTECmd.exe -f UsnJrnl_J --csv output/ --csvf usn_journal.csv

用 Python 手工解析 USN 日志

技能文档提供了一段完整的 USN 记录解析器,仓库 agent.py 中parse_usn_journal是它的精简工程化版本,两者要点一致:

  • struct.unpack_from按小端序逐字段解析(Record length、Major version、MFT reference、Parent reference、USN、FILETIME 时间戳、Reason flags、Filename length/offset);
  • 防御性校验record_len < 56> 65536或超出文件长度时跳过 8 字节继续扫描,处理日志中的空洞与零填充;
  • MFT reference 掩码& 0xFFFFFFFFFFFF取低 48 位,去掉序列号;
  • FILETIME 转换:Windows FILETIME 以 1601-01-01 为纪元、单位 100ns,因此datetime(1601, 1, 1) + timedelta(microseconds=timestamp // 10)
  • 文件名解码:以utf-16-lefilename_off处读取filename_len字节。

解析后即可按事件类型分类统计并重建时间线:

deletions = [r for r in records if 'FILE_DELETE' in r['reasons']] creations = [r for r in records if 'FILE_CREATE' in r['reasons']] renames = [r for r in records if 'RENAME_NEW_NAME' in r['reasons']]

Alternate Data Streams(ADS)检测与提取

列出镜像中的 ADS

# Using Sleuth Kit to find ADS fls -r -o 2048 /cases/case-2024-001/images/evidence.dd | grep ":" | \ tee /cases/case-2024-001/analysis/ads_list.txt

提取指定 ADS 内容

# Format: icat image inode:ads_name icat -o 2048 /cases/case-2024-001/images/evidence.dd 14523:hidden_stream \ > /cases/case-2024-001/analysis/extracted_ads.bin

批量提取 Zone.Identifier

Zone.Identifier流标记文件下载来源(如浏览器下载),对追踪恶意载荷投递链路价值很高。技能文档给出批量提取脚本(SKILL.md):

fls -r -o 2048 /cases/case-2024-001/images/evidence.dd | grep "Zone.Identifier" | \ while read line; do inode=$(echo "$line" | awk '{print $2}' | tr -d ':') echo "=== $line ===" icat -o 2048 /cases/case-2024-001/images/evidence.dd "${inode}:Zone.Identifier" 2>/dev/null echo "" done > /cases/case-2024-001/analysis/zone_identifiers.txt

Zone.Identifier 内容格式如下,ZoneId=3表示文件来自 Internet,ReferrerUrl/HostUrl记录来源地址:

[ZoneTransfer] ZoneId=3 (3 = Internet, indicating file was downloaded) ReferrerUrl=https://malicious-site.com/payload.exe HostUrl=https://cdn.malicious-site.com/payload.exe

关键概念速查

ConceptDescription
File slackUnused space between file end and cluster boundary containing residual data
RAM slackPortion of slack from file end to sector boundary (historically filled with RAM)
MFT ($MFT)Master File Table - NTFS metadata database with entries for every file
USN Journal ($UsnJrnl)Change journal recording all file/directory modifications on NTFS
Alternate Data StreamsNTFS feature allowing multiple data streams per file (hidden storage)
$STANDARD_INFORMATIONMFT attribute with timestamps modifiable by user-mode applications
$FILE_NAMEMFT attribute with timestamps only modifiable by the kernel
TimestompingAnti-forensic technique modifying file timestamps to avoid detection

工具与系统清单

ToolPurpose
MFTECmdEric Zimmerman MFT and USN Journal parser with CSV output
MFTExplorerInteractive GUI tool for MFT analysis
analyzeMFTPython MFT parser with CSV/JSON output
The Sleuth KitFile system forensics toolkit (fls, icat, blkls, istat)
bulk_extractorFeature extraction from raw data including slack space
NTFS Log TrackerTool for parsing $LogFile transaction records
streams.exeSysinternals tool for listing NTFS Alternate Data Streams
PlasoSuper-timeline tool parsing MFT and USN Journal

典型实战场景

场景 1:反取证检测(时间戳篡改)比较 MFT 条目中$STANDARD_INFORMATION$FILE_NAME的时间戳,标记$SI时间戳早于$FN(正常操作中不可能出现)的文件,识别被刻意修改时间戳的证据,并与时间线其他证据关联。

场景 2:ADS 中的隐藏数据扫描除标准Zone.Identifier之外挂载在文件上的 ADS,提取内容分析,检查是否存在隐藏的可执行文件或文档,将 ADS 的创建与用户活动时间线关联,形成证据链。

场景 3:从 MFT 重建已删除文件解析 MFT 中非活跃(已删除)条目,提取文件名、大小与时间戳;若数据簇未被覆盖,用icat恢复内容;建立删除证据清单并与 USN Journal 的删除事件关联。

场景 4:从 USN 日志重建文件活动解析调查时间窗口内的 USN 变更记录,识别创建、修改、重命名、删除事件,重建文件操作序列,检测"创建—复制—压缩—删除"式的数据暂存模式,以及反取证的文件擦除行为。

自动化封装:agent.py

仓库提供了可复用的自动化入口 scripts/agent.py,其命令行参数设计如下:

  • --image:取证镜像路径(必填);
  • --offset:分区扇区偏移,默认 2048;
  • --case-id:案件标识,默认CASE-001
  • --output-dir:输出目录,默认./analysis
  • --action:可选extract_slackparse_usnfind_adssearch_slackparse_mftdetect_timestompingfull_analysis(默认执行完整分析);
  • --mft-path/--usn-path:已提取的$MFT$UsnJrnl:$J文件路径。

脚本内部以子进程方式调用blklsflsanalyzeMFT.py(超时 120 秒,见 agent.py),并将结果汇总为 JSON 报告。其generate_report函数输出包含report_typecase_idgenerated_atfindings的结构化报告,便于直接写入 SIEM 或取证管理平台。

输出报告示例

技能文档给出了标准化的分析报告输出格式(SKILL.md),涵盖 MFT、USN、ADS、Slack Space 四大维度的统计与可疑发现:

File System Artifact Analysis: Volume: NTFS (Partition 2, 465 GB) Cluster Size: 4096 bytes MFT Analysis: Total Entries: 456,789 Active Files: 234,567 Deleted Entries: 12,345 (8,901 with recoverable metadata) Timestomped Files: 23 (SI/FN mismatch detected) USN Journal: Records Parsed: 2,345,678 Date Range: 2024-01-01 to 2024-01-20 File Creations: 45,678 File Deletions: 23,456 File Renames: 12,345 Alternate Data Streams: Total ADS Found: 1,234 Zone.Identifier: 890 (downloaded files) Custom/Suspicious ADS: 5 (hidden data detected) Slack Space: Total Slack: 12.3 GB Keyword Hits: 45 (passwords, credit cards) Carved Files: 23 from slack space Suspicious Findings: - 23 files with timestomped timestamps - 5 files with hidden ADS containing data - USN shows mass deletion on 2024-01-18 (anti-forensics) - Slack space contains residual email fragments Reports: /cases/case-2024-001/analysis/

结论与延伸阅读

通过本技能与配套 API 参考,你可以系统性地完成 NTFS 深度取证:用 TSK 工具提取 slack 空间与关键系统文件,用 MFT 解析器恢复已删除文件元数据并检测时间戳篡改,用 USN 日志重建文件操作时间线,用 ADS 检测发现隐蔽数据。这套方法超越了标准文件恢复的能力边界,正对应 MITRE ATT&CK 中 T1070.006、T1564.004、T1070.004、T1005、T1006 等反取证与隐蔽技术的对抗场景。

继续深入研究可参考仓库内的以下材料:

  • 技能主文档 SKILL.md:完整五步工作流与全部命令脚本;
  • API 参考 api-reference.md:本文所依据的工具命令速查;
  • 自动化脚本 agent.py:可运行的取证分析封装实现;
  • 仓库 ATT&CK 覆盖矩阵 与 MITRE Navigator 层文件:了解该技能在整个框架覆盖体系中的定位。

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询