mcpField
A
analyzing-disk-images

analyzing-disk-images

github.com/trilwu安全17749 次安装12 周前更新
代码仓库

关于 analyzing-disk-images

用于检查磁盘镜像的数字取证技能,强调保护证据完整性。面向事件响应人员和取证分析师,涵盖只读处理、已删除文件恢复、时间线、系统痕迹提取及反取证迹象检查。

主要功能

  1. 01证据哈希与只读处理
  2. 02分区和文件系统检查
  3. 03已删除文件恢复与雕刻
  4. 04文件系统及超级时间线
  5. 05离线操作系统痕迹提取
  6. 06反取证与隐藏数据检查

适用场景

  1. 01从获取的磁盘镜像恢复文件
  2. 02重建特定时间段内的活动
  3. 03提取离线注册表和系统痕迹
  4. 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 或 pagefile
  • investigating-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)

评论

支持 Markdown