关于 analyzing-disk-images
用于检查磁盘镜像的数字取证技能,强调保护证据完整性。面向事件响应人员和取证分析师,涵盖只读处理、已删除文件恢复、时间线、系统痕迹提取及反取证迹象检查。
主要功能
- 01证据哈希与只读处理
- 02分区和文件系统检查
- 03已删除文件恢复与雕刻
- 04文件系统及超级时间线
- 05离线操作系统痕迹提取
- 06反取证与隐藏数据检查
适用场景
- 01从获取的磁盘镜像恢复文件
- 02重建特定时间段内的活动
- 03提取离线注册表和系统痕迹
- 04检查镜像中的擦除或隐藏数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trilwu/ secskills --skill analyzing-disk-images安装后在 Claude Code 中输入/analyzing-disk-images确认已加载。
详细介绍
分析磁盘映像
磁盘映像是一处冻结的犯罪现场,整个取证过程都应以保护它为前提。只对经过验证的只读副本进行操作,每一步都用哈希证明数据未发生变化,并记住:已删除和未分配空间中的内容往往比活动文件系统透露得更多——因为这正是有人试图移除的内容。
适用场景
- 你有一个已获取的磁盘映像(
.E01、.dd/.raw、.aff4、.vmdk、.vhdx)需要检查 - 恢复已删除文件,或重建被擦除或重新格式化卷上的内容
- 构建文件系统时间线,或覆盖整个映像的完整超级时间线
- 从未分配空间、松弛空间和空闲簇中雕刻文件和痕迹
- 从已挂载映像中离线提取注册表配置单元、浏览器数据、日志或其他痕迹
- 确认或排除反取证行为——篡改时间戳、擦除、隐藏或加密容器
不适用场景
- 你有的是 RAM 捕获文件,而不是磁盘映像——使用
analyzing-memory-images - 你有一台正在运行或用于分诊的 Windows 主机,需要逐项调查痕迹,而不是处理原始映像——使用
investigating-windows-endpoints - 你要扫描正在运行的 Linux 主机以查找持久化机制——使用
analyzing-linux-persistence - 你需要更广泛的事件响应流程——范围界定、遏制、根除——使用
responding-to-incidents - 你恢复了特定样本并想引爆它——使用
analyzing-malware
获取与完整性
如果无法证明映像就是原始磁盘,那么后续所有工作都毫无价值。切勿在没有写保护器的情况下接触原始介质,也绝不要分析原始映像——应使用副本。
# Acquire to E01 (EWF) with built-in compression and hashing — preferred format
sudo ewfacquire -t /evidence/host01 -f encase6 -c deflate:fast \
-C "IR-2026-014" -E "1" -D "Dell OptiPlex sda" /dev/sda
# Raw acquisition alternative — dd with error handling, hash inline
sudo dd if=/dev/sda bs=4M conv=noerror,sync status=progress \
| tee /evidence/host01.dd | sha256sum
# Verify an existing E01 against its stored hashes
ewfverify /evidence/host01.E01
# Hash the working copy and record it — MD5 and SHA-256 both, for legacy tooling
md5sum /evidence/host01.dd
sha256sum /evidence/host01.dd
在获取时记录,而不是事后补记:
Evidence ID | Source host/serial | Collected by | UTC timestamp | Tool + version
Write blocker used (Y/N + model) | MD5 + SHA-256 at acquisition
SHA-256 verified after each copy | Custodian at each handoff | Storage location
每次复制或传输后都要验证哈希。哈希不匹配就意味着必须停止——你手中的证据已不是你以为的那份。如果案件可能进入诉讼程序或提交给监管机构,应在获取前咨询法律部门。
以原始设备形式呈现映像,但不对其进行修改。 E01 和 AFF4 是容器;大多数 TSK 和挂载操作需要原始块设备或文件。
# Mount an E01 as a raw device (read-only, FUSE) — exposes ./ewf1
ewfmount /evidence/host01.E01 /mnt/ewf
# /mnt/ewf/ewf1 is now a raw image you can feed to mmls, fls, mount -o loop, etc.
# xmount can also convert on the fly (E01 -> raw or VDI) without a second copy
xmount --in ewf /evidence/host01.E01 --out raw /mnt/xmount
挂载与分区布局
在挂载之前先了解磁盘几何信息。偏移量很重要——挂载位置不正确,就会什么也看不到,或者看到一堆乱码。
# Sleuth Kit partition table — gives you the starting SECTOR of each volume
mmls /mnt/ewf/ewf1
# Slot Start End Length Description
# 002 0000002048 0000206847 0000204800 NTFS / exFAT (0x07)
# 003 0000206848 0976771071 0976564224 NTFS / exFAT (0x07)
# Cross-check with fdisk
fdisk -l /mnt/ewf/ewf1
# Loopback-mount a partition read-only. Offset = start_sector * 512.
# 206848 * 512 = 105906176
sudo mount -o ro,noexec,norecover,loop,offset=105906176 \
/mnt/ewf/ewf1 /mnt/evidence
ro,noexec 可防止写入和意外执行;norecover 可阻止 ntfs-3g 在挂载时重放 NTFS 日志(这会造成写入)。对于 ext4,应使用 ro,noload;日志重放是检查人员悄然修改证据的经典方式。
分层卷和加密卷:
# LVM — scan and activate, then mount the logical volume read-only
sudo losetup -r -f -P /mnt/ewf/ewf1
sudo pvscan && sudo vgchange -ay
sudo mount -o ro /dev/mapper/vg0-root /mnt/evidence
# LUKS — needs the passphrase or a recovered key file
sudo cryptsetup --readonly luksOpen /dev/loop0p2 evd_crypt
sudo mount -o ro /dev/mapper/evd_crypt /mnt/evidence
# BitLocker — dislocker with a recovery key, clear key, or FVEK
sudo dislocker -r -V /dev/loop0p2 -p<48-digit-recovery-key> -- /mnt/bde
sudo mount -o ro,loop /mnt/bde/dislocker-file /mnt/evidence
# macOS APFS / HFS+ — apfs-fuse for APFS containers, read-only
apfs-fuse -o ro /dev/loop0p2 /mnt/evidence # APFS
sudo mount -t hfsplus -o ro,loop /dev/loop0p2 /mnt/evidence # HFS+
没有 BitLocker 恢复密钥或 LUKS 密码短语,你面对的只是一块加密砖头——应设法获取密钥(托管存储、AD、MDM、内存映像、便利贴),而不是攻击加密算法。
The Sleuth Kit 工作流
TSK 可直接从映像读取文件系统——无需挂载,也不受操作系统解读方式的影响,还能看到活动视图中隐藏的已删除条目。每条 TSK 命令都要提供偏移量(以扇区为单位的 -o),确保命令针对正确的分区。
# List files including deleted (*) ones, recursively, from the NTFS at sector 206848
fls -r -o 206848 /mnt/ewf/ewf1
# r/r * 5613-128-1: Users/jdoe/AppData/.../invoice.xlsx <- deleted
# Detail a specific inode/MFT entry: timestamps, allocation, data runs
istat -o 206848 /mnt/ewf/ewf1 5613
# Extract a file BY INODE, even when deleted, straight out of the image
icat -o 206848 /mnt/ewf/ewf1 5613-128-1 > /evidence/recovered/invoice.xlsx
# Dump all unallocated blocks for carving
blkls -o 206848 /mnt/ewf/ewf1 > /evidence/unalloc.dd
# Bulk-recover every allocated and deleted file TSK can reconstruct
tsk_recover -e -o 206848 /mnt/ewf/ewf1 /evidence/recovered/
对 inode 使用 icat 是最简洁的恢复方式——只要 $MFT 记录和数据运行仍然存在,就能准确恢复文件,无需猜测雕刻结果。Autopsy 是 TSK 的图形界面;它将上述功能(fls/istat/icat、关键字索引、时间线、雕刻)整合到按案件管理的界面中,适合浏览而非编写脚本的场景。
文件系统时间线与超级时间线
时间线是其他所有工作都要支撑的成果。应构建两种时间线:先快速生成文件系统时间线,再在需要应用级事件时生成完整超级时间线。
# 1. File-system timeline (MAC times) from the whole image via TSK
fls -r -m "/" -o 206848 /mnt/ewf/ewf1 > /evidence/body.txt
mactime -b /evidence/body.txt -d -z UTC > /evidence/fs_timeline.csv
# Filter to a window:
mactime -b /evidence/body.txt -d -z UTC 2026-07-10..2026-07-13 > /evidence/window.csv
# 2. Super-timeline with Plaso across the ENTIRE image (all partitions, all parsers)
log2timeline.py --storage-file /evidence/host01.plaso /mnt/ewf/ewf1
# Render, filtered to the incident window, sorted, UTC
psort.py -o l2tcsv -z UTC \
-w /evidence/super_timeline.csv /evidence/host01.plaso \
"date > '2026-07-10 00:00:00' AND date < '2026-07-13 23:59:59'"
Plaso 可解析注册表、事件日志、预取文件、浏览器历史记录、LNK 文件、$MFT、$UsnJrnl 等数十种数据,将它们整合到一条标准化时间线中——其信息远比单独的 MAC 时间丰富。将 CSV 加载到 Timeline Explorer(Eric Zimmerman)中,即可交互式筛选、着色和切换视角;包含百万行数据的超级时间线无法在文本编辑器中使用。所有时间均采用 UTC,并在每一行注明来源痕迹。
已删除文件恢复与雕刻
两种不同的技术。恢复会利用仍指向数据的文件系统元数据;雕刻则完全忽略元数据,根据文件内容签名查找文件。两种方法都要运行。
# Metadata-based recovery (already shown) — precise, keeps filenames
tsk_recover -e -o 206848 /mnt/ewf/ewf1 /evidence/recovered/
# Signature carving over unallocated space — recovers files whose MFT record is gone
photorec /evidence/unalloc.dd # interactive; broadest format support
foremost -o /evidence/foremost -c /etc/foremost.conf /evidence/unalloc.dd
scalpel -o /evidence/scalpel /evidence/unalloc.dd # foremost successor, configurable
# bulk_extractor — structured artifacts across the RAW image, no file system needed
bulk_extractor -o /evidence/be_out /mnt/ewf/ewf1
# emails, URLs, credit-card numbers (with Luhn validation), search terms,
# PII, EXIF, PGP keys, and *_histogram.txt files. Read the histograms first —
# frequency-stacked domains and emails surface C2 and exfil targets fast.
如果只想获取已删除的内容,就从 blkls 的输出中雕刻;如果要获取所有内容,包括文件松弛空间,就从完整的原始映像中雕刻。雕刻出的文件没有时间戳,也没有名称——根据内容和位置将它们与时间线关联起来。
各操作系统的取证宝库
已删除文件只占一半。高价值的取证痕迹是系统自身对运行过什么、连接过什么、打开过什么的记录。
Windows — 以只读方式挂载,然后提取配置单元和日志:
# Registry hives (system-wide + per-user)
# SOFTWARE, SYSTEM, SAM -> C:\Windows\System32\config\
# NTUSER.DAT -> C:\Users\<user>\
RECmd.exe --f "/mnt/evidence/Windows/System32/config/SYSTEM" --bn Services.reb
rip.pl -r /mnt/evidence/Windows/System32/config/SOFTWARE -f software # RegRipper
# NTFS journals — extract by inode with icat, then parse
# $MFT (0), $LogFile (2), $UsnJrnl:$J
icat -o 206848 /mnt/ewf/ewf1 0-128-1 > /evidence/\$MFT
MFTECmd.exe -f "/evidence/\$MFT" --csv /evidence/ --csvf mft.csv
Windows 痕迹分析涵盖范围很广——预取文件、amcache、shimcache、shellbags、跳转列表、事件日志、SRUM。要逐项调查这些痕迹,请转交给 investigating-windows-endpoints;在这里,从映像中提取原始配置单元和日志,并完整地传递给后续人员。
Linux — 证据是文本,而且就在你预期的位置:
# /var/log/{auth.log,syslog,secure,journal} authentication + system events
# /home/*/.bash_history, /root/.bash_history command history
# /etc/{crontab,cron.d,rc.local}, /etc/systemd, ~/.ssh/authorized_keys
# /etc/passwd, /etc/shadow, /etc/ld.so.preload accounts + preload persistence
grep -aiE "sudo|ssh|useradd|wget|curl" /mnt/evidence/var/log/auth.log
要系统地检查 init 路径中的持久化机制,请参考 analyzing-linux-persistence。
macOS — 统一日志和属性列表:
# /var/db/diagnostics/*.tracev3 unified log (parse with `log show`)
# /Library/LaunchDaemons, ~/Library/LaunchAgents persistence plists
# ~/Library/Preferences/*.plist app state, recent items
plutil -p /mnt/evidence/Library/LaunchDaemons/com.suspect.plist
注册表与配置单元挖掘
离线解析配置单元是 Windows 映像中信息最丰富的来源之一——它记录了执行情况、设备历史和用户活动,而这些信息不会保留在任何日志中。
# Autoruns / persistence from the hives
rip.pl -r /mnt/evidence/Windows/System32/config/SOFTWARE -p soft_run
RECmd.exe --f "/mnt/evidence/.../NTUSER.DAT" --bn RunMRU.reb --csv /evidence/
# LastWrite times on keys are effectively per-key timestamps — treat them as evidence
# Shellbags — folders a user browsed, including now-deleted/removable paths
SBECmd.exe -d /mnt/evidence/Users/jdoe -o /evidence/shellbags/
# USB device history — SYSTEM\MountedDevices, USBSTOR; SOFTWARE\...\Windows Portable Devices
rip.pl -r /mnt/evidence/Windows/System32/config/SYSTEM -p usbstor
关键的 LastWrite 时间可用于将配置和持久化变更定位到时间线上。Shellbags 和 USBSTOR 经常能证明对数据的访问以及可移动介质的使用,而这些信息在实时文件系统中已无从查见。
反取证与隐藏数据
假设目标试图隐藏某些内容。隐藏行为留下的痕迹本身就是发现。
- 时间戳篡改 —
$STANDARD_INFORMATION时间戳很容易伪造;而$MFT中的$FILE_NAME属性则不然。如果两者不一致,或者亚秒级精度被可疑地清零,这就是篡改证据。MFTECmd会显示两者;请进行比对。 - 擦除痕迹 —
$MFT记录仍然存在,但其数据运行指向已被覆盖的簇;inode 编号存在间隙;或者预取文件/amcache 中留有擦除工具(sdelete、BleachBit)的痕迹。 - 松弛空间 — 文件松弛空间和卷松弛空间中会留有先前驻留数据的片段;
blkls -s可专门提取松弛空间。 - 备用数据流 — NTFS ADS 会将数据隐藏在主数据流之外:
fls -r会将其显示为额外的:stream条目;istat会列出所有$DATA属性。 - 隐写线索 — 图像远大于其可见内容、存在已知隐写工具痕迹,或文件逻辑 EOF 后附加了数据。
- 加密容器 — VeraCrypt/TrueCrypt 卷看起来像是没有文件头、熵很高且大小为整倍数的文件;隐藏卷位于外层卷的空闲空间中。
bulk_extractor的熵视图和异常文件大小可帮助标记候选对象。
# Enumerate ADS across a mounted NTFS image
fls -r -o 206848 /mnt/ewf/ewf1 | grep ':'
# Extract slack for carving
blkls -s -o 206848 /mnt/ewf/ewf1 > /evidence/slack.dd
大规模字符串与关键字搜索
当你不知道答案在哪里,或者需要在整块磁盘上验证某个假设时。
# bulk_extractor is the scalable default — indexed, structured, histogrammed
bulk_extractor -o /evidence/be_out /mnt/ewf/ewf1
grep -f keywords.txt /evidence/be_out/*_histogram.txt
# Raw strings + grep on the image (ASCII and UTF-16LE), when you need a specific token
strings -a -t d /mnt/ewf/ewf1 | grep -aiF -f keywords.txt
strings -a -t d -e l /mnt/ewf/ewf1 | grep -aiF -f keywords.txt
# YARA across the entire raw image — malware and IOC hunting on disk
yara -s -r /evidence/rules/incident.yar /mnt/ewf/ewf1
关于如何针对磁盘痕迹编写有效的 YARA 规则——解包形式的字符串、配置块和严谨的条件逻辑——请参阅 writing-yara-rules。将字符串命中的 -t d 字节偏移传给 mmls/ifind,即可将原始偏移映射到文件。
汇报时间线并移交
磁盘分析是更大规模调查的一项输入。请整理好材料,以便下一阶段无需重新推导即可使用。
- 提交时间线 — 使用 UTC,每行引用一个源证据,并分别标明观察结果与推断结果。结构请参见
reporting-security-findings。 - 证据登记表 — 镜像 ID、采集与验证哈希、保管链,以及每个恢复文件对应的源 inode/偏移量。
- 移交易失性证据 — 恢复的内存镜像或休眠文件/页面文件交给
analyzing-memory-images;要引爆分析的恢复可执行文件或文档交给analyzing-malware。 - 说明缺失项 — 明确记录已擦除区域、缺失分区、无法解密的数据以及日志保留期限限制,避免被误读为“那里什么都没有”。
需要驳斥的借口
- “文件已删除,所以它不见了。” 在簇被重用前,文件仍可从未分配空间恢复;其
$MFT记录及数据运行信息通常也会保留——icat或tsk_recover可以准确重建文件。 - “我直接挂载浏览就行。” 先以只读方式挂载并计算哈希,否则就会改动证据。默认挂载会重放日志——这会写入你试图保留的对象。
- “等我做完再算哈希。” 必须在采集时计算哈希,否则你永远无法证明镜像与磁盘一致,辩方专家也会这么说。完整性要么在采集时确立,要么就无法确立。
- “实时文件系统能显示所有相关内容。” 它会隐藏已删除条目、ADS、松弛空间和未分配数据——而这些恰恰是有人藏匿想要销毁内容的地方。实时视图只呈现磁盘中最小的一部分。
- “时间戳能告诉我事情发生的时间。”
$STANDARD_INFORMATION可在几秒内伪造;应信任$FILE_NAME、$UsnJrnl和 LastWrite 时间,并将它们之间的不一致视为发现,而非噪声。 - “它已加密,所以我无能为力。” 在断定卷无法读取前,应先寻找密钥——密钥托管、AD、MDM、恢复的内存镜像,以及可能残留口令或 FVEK 的未分配空间。
- “文件雕刻已经找回文件,这就够了。” 雕刻出的文件没有元数据、名称或时间戳。应将其与文件系统时间线和 inode 来源关联起来,否则无法说明文件来自何处或何时出现。
参考资料
analyzing-memory-images— 恢复的 RAM 捕获文件、hiberfil 或 pagefileinvestigating-windows-endpoints— 逐项分析 Windows 证据analyzing-linux-persistence— 系统地检查 init 路径持久化机制responding-to-incidents— 本分析所服务的更广泛 IR 流程analyzing-malware— 引爆分析恢复的样本writing-yara-rules— 使用 YARA 扫描镜像和雕刻输出reporting-security-findings— 组织时间线和证据登记表- The Sleuth Kit / Autopsy(sleuthkit.org)、Plaso / log2timeline(plaso.readthedocs.io)
- bulk_extractor(github.com/simsong/bulk_extractor)、PhotoRec / foremost / scalpel
- libewf / ewf-tools(ewfacquire、ewfverify、ewfmount)、RegRipper、Eric Zimmerman tools (MFTECmd、RECmd、SBECmd、Timeline Explorer)