磁盘取证与文件系统分析

SkillDev tools

磁盘/文件系统取证:删除恢复、时间线、可疑文件定位。 触发词:磁盘取证、文件系统、删除恢复、时间线、ext4、NTFS

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the 磁盘取证与文件系统分析 skill

What this skill tells your AI

The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-disk-forensics/SKILL.md and read by ahel’s review.

何时使用 / 何时不用

  • 用:拿到磁盘镜像(dd / E01)或介质做取证——删除文件恢复、时间线重建、可疑文件/残留数据定位
  • 用:事件响应需要"介质上发生过什么"(删了什么、什么时候写的、留了什么痕迹)
  • 用:分区丢失/损坏后的分区表重建与文件抢救(testdisk)
  • 不用:内存取证(那是 [[re-mem-forensics]],与磁盘取证并列的另一个取证分支)
  • 不用:普通文件系统挂载使用(那要可写挂载;取证一律只读,见坑 1)
  • 不用:加密卷且无密钥——先找密钥(见坑 2)

工具准备

取证铁律:只读。本技能所有工具只读镜像文件、不挂载可写、不在原介质上写任何东西(见坑 1)。镜像获取与可疑对象提取的结果按 sha256 + 路径存档(取证要求可追溯,见 [[re-analyze/platform-tips]])。

sleuthkit —— 取证分析主力(fls/icat/tsk_recover/mmls/fsstat/blkls)

  • Debian/Ubuntu: apt install sleuthkit
  • Fedora: dnf install sleuthkit
  • Arch: pacman -S sleuthkit(extra 仓库)
  • macOS: brew install sleuthkit
  • Windows: WSL 内 Linux 版优先(见 [[re-analyze/platform-tips]] WSL 分支);GUI 用 Autopsy(winget install SleuthKit.Autopsy,内置 sleuthkit 工具)
  • 验证: fls -hmmls -htsk_recover -hmactime -h

testdisk / photorec —— 分区修复与文件雕刻(cgsecurity)

  • Debian/Ubuntu: apt install testdisk(photorec 在同一包内,官方文档确认无独立包)
  • Fedora: dnf install testdisk(photorec CLI 随包;GUI 版独立包 qphotorec
  • Arch: pacman -S testdisk(extra,photorec 随包)
  • openSUSE: zypper install testdisk photorec(该发行版 photorec 为独立包)
  • macOS: brew install testdisk
  • Windows: WSL 内 Linux 版(chocolatey 上 testdisk 包极旧,不推荐)
  • 验证: testdisk /?photorec /?

dd / ewf-tools —— 镜像获取

  • dd: coreutils 自带(Linux/macOS/WSL 均可用)
  • ewf-tools(E01 证据格式,带校验块): Debian/Ubuntu apt install ewf-tools / Fedora dnf install ewf-tools / Arch pacman -S ewf-tools;验证: ewfacquire -V
  • Windows: 只读镜像工具 FTK Imager(GUI,exterro 官网免费版)或 WSL 内 Linux 版

只读挂载 —— loop + ro(需要直接读文件内容时)

  • mount 内置(util-linux);NTFS 需 ntfs-3g: Debian/Ubuntu apt install ntfs-3g / Fedora dnf install ntfs-3g / Arch pacman -S ntfs-3g
  • 验证: mount -o ro,loop,noload ...findmnt 输出包含 ro

autopsy —— 可选 GUI(团队/可视化)

  • Debian/Ubuntu: apt install autopsy;Fedora: dnf install autopsy;Arch: pacman -S autopsy(AUR 或 extra);Windows: winget install SleuthKit.Autopsy;macOS: brew install --cask autopsy

操作步骤

按顺序执行,每步产物(镜像/提取文件/时间线)存档 sha256 + 路径(供 [[re-ioc]] 报告引用)。

  1. 只读镜像获取(先存证后动手)

    sha256sum /dev/sdX > evidence.sha256     # 原始介质哈希存证(分析前后复核)
    dd if=/dev/sdX of=evidence.dd bs=4M conv=noerror,sync status=progress
    sha256sum evidence.dd >> evidence.sha256 # 镜像哈希复核,与源哈希一致才继续
    
    • 物理盘优先用写保护器(USB write-blocker);软件写保护 blockdev --setro /dev/sdX
    • 分区镜像: dd if=/dev/sdX1 ... 只镜像目标分区;整盘镜像保留分区表与未分配空间(未分配空间常含残留证据,见步骤 5)
    • 证据格式: raw dd 最通用;长期保存用 E01(ewfacquire /dev/sdX,内置校验与压缩)
    • 已有多份镜像(事件响应常用方案)时直接进入步骤 2,别重复取
  2. 分区与文件系统识别(ext4 / NTFS / APFS)

    file evidence.dd                          # 常见文件系统魔数初判
    mmls evidence.dd                          # 分区表布局(含 start 扇区偏移)
    fsstat -o <分区start> evidence.dd         # 文件系统类型与元数据统计
    
    • sleuthkit 的 -o 参数是扇区偏移,直接填 mmls 输出的 start 列;loop 挂载则换算字节 offset=$((start*512))
    • ext4: fsstat 输出 superblock/mgroup;NTFS: 输出 $MFT 位置;APFS: mmls 显示 Apple_APFS 容器分区(APFS 内部卷需要 apfs 工具,sleuthkit 对 APFS 支持有限,必要时用 macOS 本机工具)
    • 无分区表(整盘文件系统 / 隐藏分区 / 被删分区表)→ mmls 无输出:直接对镜像 fsstat;分区表重建用 testdisk(步骤 3)
    • 识别失败且熵高 → 加密卷(BitLocker/FileVault/LUKS),见坑 2
  3. 删除文件恢复(元数据法 + 雕刻法)

    # 元数据法(保留文件名/路径/时间)—— sleuthkit
    fls -r -o <分区start> evidence.dd                       # 全部文件,含 [DELETED]
    fls -o <分区start> evidence.dd <inode>                  # 指定目录 inode 下文件
    icat -o <分区start> evidence.dd <inode> > rec.bin       # 按 inode 提取(含删除文件)
    tsk_recover -o <分区start> evidence.dd out/             # 恢复已删除(未分配)文件——这是默认行为
    tsk_recover -e -o <分区start> evidence.dd out_all/      # -e = 已分配 + 未分配全部导出(-a 则只导已分配)
    
    • fls 输出 r/r 12345-128-1: 文件名 [DELETED]——行首 inode 号供 icat;未删除文件也可用 icat 精确提取(比挂载拷贝可控)
    • 删除恢复结果不是 100%(SSD TRIM/覆写),见坑 5
    • 分区丢失/损坏、元数据法失效 → testdisk / photorec(雕刻)
      testdisk evidence.dd          # 交互: 恢复丢失分区表 / Advanced → Undelete
      photorec /d <输出目录> evidence.dd   # 雕刻: 按文件签名扫描恢复(无文件名,见坑 6)
      
    • photorec 恢复类型可交互过滤(只雕刻目标扩展名,缩小结果集);/d 指定输出目录
  4. 时间线重建(fls -m → mactime)

    fls -r -m / -o <分区start> evidence.dd > bodyfile      # -m 生成 body file(挂载点写 /)
    mactime -b bodyfile -d -z UTC > timeline.csv           # -d CSV、-z 指定时区
    
    • 时间线回答"什么时候创建/修改/删除/访问"——找异常窗口(凌晨批量写、删除+复制组合、反常的访问时间)
    • 时间戳可被伪造(timestomp),见坑 4——时间线要与其他来源(USN Journal、系统日志、[[re-mem-forensics]] 内存时间线)交叉验证
    • CSV 里按 MAC 时间过滤删除动作: grep -i ',d,' timeline.csv(删除记录)
  5. 可疑文件提取(未分配空间/隐藏分区)

    # 未分配块(含删除文件残留、缓存、临时数据)
    blkls -o <分区start> evidence.dd > unallocated.bin
    strings -n 8 unallocated.bin | grep -iE 'key|password|flag|http' | head -50
    # 分区表空隙(slack space)/隐藏分区: 按 mmls 相邻分区起止手工截取
    dd if=evidence.dd of=gap.bin bs=512 skip=$((A_end+1)) count=$((B_start-A_end-1))   # mmls 的 End 是含端点的末扇区(Length=End-Start+1);两分区之间的空白 = A_end+1 .. B_start-1。更省事:直接用 mmls 列出的 Unallocated 项 Start/Length
    
    • 未分配空间是"删除≠消失"的主战场:凭据/密钥/URL/文档残片常留在那里
    • 被删除/隐藏分区: testdisk 扫描重建分区表项后,把重建分区按步骤 3 流程恢复文件
    • 提取对象(文件/残片)先算 sha256 再分析;可疑二进制转 [[re-binary-core]] 深挖,敏感串进 [[re-ioc]] IOC 列表

数据库文件格式

  • SQLite 结构:页头(page header 字段)、btree 页(interior/leaf 类型)、记录格式(varint 长度编码 / 类型码)、溢出页(大字段跨页)
  • WAL 恢复:WAL 文件帧解析(未 checkpoint 的事务)、checkpoint 边界判定(恢复点)
  • 取证应用:浏览器/App 数据库——删除记录恢复(freelist 页残留)、未提交事务提取(WAL 内)
  • 工具sqlite3 CLI 只读模式(sqlite3 -readonly)、页级解析脚本(python 按页结构遍历)

跨域联合

  • [[re-forensics]]:本技能是该网关的磁盘侧取证分支(内存侧为 [[re-mem-forensics]])——网关选择树按"内存 vs 磁盘"分派
  • [[re-mem-forensics]]:并列的取证分支——内存残留与磁盘证据互证(进程行为 ↔ 文件落地);BitLocker 密钥可先从内存取证插件拿(再回本技能解密卷)
  • [[re-ti]]:提取对象(哈希/域名/IP)做情报查询
  • [[re-ioc]]:磁盘证据(文件/时间线/残留数据)汇总成 IOC 与报告证据段
  • [[re-binary-core]]:提取的可疑二进制/脚本深挖([[re-ghidra]] / [[re-ida]])
  • [[re-crypto-keys]] / [[re-crypto-decrypt]]:加密卷密钥提取(BitLocker/LUKS)与加密文件解密
  • [[re-firmware]]:固件/嵌入式存储镜像同样按"磁盘镜像"流程处理(binwalk 解包层)
  • [[re-memdump]]:内存转储是磁盘取证的上游佐证(密钥/凭据/执行痕迹,默认转储优先)
  • 引用 [[re-analyze/platform-tips]] WSL 分支(Windows 盘镜像在 WSL 内用 Linux 取证工具)与取证证据链要求

常见坑与陷阱

  • 写操作污染证据(必须只读):现象——分析完镜像哈希对不上、文件系统状态前后不一致、报告无法自证;原因——mount 默认可写(ext4/NTFS 挂载会重放日志、更新访问时间),或在原设备上直接跑了恢复工具;对策——镜像一律 mount -o ro,loop,noexec,nodev,nosuid,ext4 加 noload、NTFS 用 ntfs-3g -o ro,recover=no 跳过日志重放(见坑 3);分析前 sha256 存证、分析后复核;物理盘用写保护器或 blockdev --setro;只读数据尽量用 sleuthkit 工具(fsstat/fls/icat 只解析不写)而非挂载
  • 加密卷(BitLocker/FileVault/LUKS):现象——fsstat/testdisk 报"无法识别文件系统",扇区全是高熵;原因——全卷加密,无密钥看不到内容;对策——密钥路径: ① 系统运行时的内存转储取密钥([[re-mem-forensics]] 的 Bitlocker FVEK 扫描插件 → dislocker 挂载)② 用户密码/恢复密钥(BitLocker 48 位恢复密钥、FileVault 恢复密钥、LUKS passphrase)③ 未加密的启动分区(UEFI/Boot 分区不加密,可提取启动链证据);工具: dislocker(BitLocker)、cryptsetup luksOpen(LUKS);拿不到密钥则该镜像只能做非内容取证(分区结构/引导链),并如实标注局限
  • 文件系统日志干扰:现象——fls 看到的文件状态与分析时不一致(文件"回滚"到旧状态),或挂载后镜像哈希变化;原因——ext4 jbd2 / NTFS 日志在挂载时被重放,未提交事务被写回;对策——只读挂载必须带 noload(ext4)/ recover=no(ntfs-3g);镜像直接存两份(原始 + 工作副本),分析在副本上做,原始镜像永不挂载
  • 时间戳伪造(timestomp):现象——时间线里成批文件的时间戳完全一致或明显不合理(如删除时间早于创建时间、全部改为同一时刻);原因——攻击者/样本用 timestomp 类手法改写 MFT/inode 时间戳([[re-malware]] 常见收尾动作);对策——交叉验证: NTFS 的 USN Journal(记录了真实变更序列)、ext4 的访问时间 vs crtime、系统日志、[[re-mem-forensics]] 内存时间线;发现伪造行为本身就是重要取证结论,写进报告而不是当脏数据滤掉
  • 删除 ≠ 可恢复(SSD TRIM/覆写):现象——fls 列出一堆 [DELETED] 但 icat 读出来全 0 或取不到;原因——SSD TRIM 已擦除物理块、数据被后续写入覆盖、NTFS 压缩/加密文件;对策——先确认介质类型(HDD/SSD)与删除时间窗口(越早恢复概率越高);未分配空间走 blkls 看是否有残留,全 0 就如实报告"已被擦除"
  • photorec 雕刻误报:现象——恢复出大量"文件"但打不开/内容与扩展名不符;原因——签名雕刻只认文件头,真实文件碎片化或被覆写后拼接出假文件;对策——交互菜单按文件类型过滤(只恢复目标类型)、优先验证小文件与关键类型、恢复结果抽查内容并算 sha256 入库([[re-ioc]])

Signals

GitHub stars
57
Forks
8
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
re-disk-forensics
Source
github.com/dslsdzc/rev-skills