计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
re-disk-forensics【效率与协作】磁盘/文件系统取证:删除恢复、时间线、可疑文件定位。 触发词:磁盘取证、文件系统、删除恢复、时间线、ext4、NTFS
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
取证铁律:只读。本技能所有工具只读镜像文件、不挂载可写、不在原介质上写任何东西(见坑 1)。镜像获取与可疑对象提取的结果按 sha256 + 路径存档(取证要求可追溯,见 [[re-analyze/platform-tips]])。
apt install sleuthkitdnf install sleuthkitpacman -S sleuthkit(extra 仓库)brew install sleuthkitwinget install SleuthKit.Autopsy,内置 sleuthkit 工具)fls -h;mmls -h;tsk_recover -h;mactime -hapt install testdisk(photorec 在同一包内,官方文档确认无独立包)dnf install testdisk(photorec CLI 随包;GUI 版独立包 qphotorec)pacman -S testdisk(extra,photorec 随包)zypper install testdisk photorec(该发行版 photorec 为独立包)brew install testdisktestdisk /?;photorec /?apt install ewf-tools / Fedora dnf install ewf-tools / Arch pacman -S ewf-tools;验证: ewfacquire -Vapt install ntfs-3g / Fedora dnf install ntfs-3g / Arch pacman -S ntfs-3gmount -o ro,loop,noload ... 后 findmnt 输出包含 roapt 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]] 报告引用)。
只读镜像获取(先存证后动手):
sha256sum /dev/sdX > evidence.sha256 # 原始介质哈希存证(分析前后复核)
dd if=/dev/sdX of=evidence.dd bs=4M conv=noerror,sync status=progress
sha256sum evidence.dd >> evidence.sha256 # 镜像哈希复核,与源哈希一致才继续
blockdev --setro /dev/sdXdd if=/dev/sdX1 ... 只镜像目标分区;整盘镜像保留分区表与未分配空间(未分配空间常含残留证据,见步骤 5)ewfacquire /dev/sdX,内置校验与压缩)分区与文件系统识别(ext4 / NTFS / APFS):
file evidence.dd # 常见文件系统魔数初判
mmls evidence.dd # 分区表布局(含 start 扇区偏移)
fsstat -o <分区start> evidence.dd # 文件系统类型与元数据统计
-o 参数是扇区偏移,直接填 mmls 输出的 start 列;loop 挂载则换算字节 offset=$((start*512))删除文件恢复(元数据法 + 雕刻法):
# 元数据法(保留文件名/路径/时间)—— 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 则只导已分配)
r/r 12345-128-1: 文件名 [DELETED]——行首 inode 号供 icat;未删除文件也可用 icat 精确提取(比挂载拷贝可控)testdisk evidence.dd # 交互: 恢复丢失分区表 / Advanced → Undelete
photorec /d <输出目录> evidence.dd # 雕刻: 按文件签名扫描恢复(无文件名,见坑 6)
/d 指定输出目录时间线重建(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 指定时区
grep -i ',d,' timeline.csv(删除记录)可疑文件提取(未分配空间/隐藏分区):
# 未分配块(含删除文件残留、缓存、临时数据)
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
sqlite3 CLI 只读模式(sqlite3 -readonly)、页级解析脚本(python 按页结构遍历)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 只解析不写)而非挂载dislocker 挂载)② 用户密码/恢复密钥(BitLocker 48 位恢复密钥、FileVault 恢复密钥、LUKS passphrase)③ 未加密的启动分区(UEFI/Boot 分区不加密,可提取启动链证据);工具: dislocker(BitLocker)、cryptsetup luksOpen(LUKS);拿不到密钥则该镜像只能做非内容取证(分区结构/引导链),并如实标注局限noload(ext4)/ recover=no(ntfs-3g);镜像直接存两份(原始 + 工作副本),分析在副本上做,原始镜像永不挂载