简介:面向网络空间安全专业学生与电子取证初学者,华中科技大学《Peter泄密案》教学资源包以真实化泄密案例为主线,串联现场保护、数据固定、镜像分析、证据链构建等关键环节,兼顾课程实验与课后自学两种使用场景。压缩包共743个文件,大小23.84MB;主要内容为HTML案件页面、GIF图解和PNG截图,同时含有JS/CSS交互脚本、MHT网页快照及RAR归档文件,便于按目录布局还原案情发展与取证操作过程。目前已有437人学习/下载,适合配合课堂讲解或集中复习;学习者可从素材中梳理泄密时间线、识别异常通信与加密痕迹,并围绕法律合规和隐私保护展开讨论。内容虽以静态页面与图片展示为主,但能帮助用户建立证据关联与取证报告意识,为课程设计、实验报告或入门演练提供完整参考样例。 最近接了个电子取证的活儿,整个流程走下来,从现场检材固定到最终出具报告,踩了不少坑,也积累了一些实战经验。今天不聊虚的,直接把这次取证项目里涉及的关键技术点、操作细节和排查思路捋一遍,给同样做取证、做等保、做数据恢复的兄弟们一个参考。
这篇东西的适用范围很广:不管你是刚入门想了解电子取证到底怎么干活的新人,还是已经有一定基础、想看看别人怎么处理加密磁盘和动态取证的老手,都能从里面抠出点有用的东西。我尽量把每一步的原理和为什么这么做讲清楚,而不是简单罗列命令。
1. 取证项目的整体设计思路
1.1 电子取证到底在解决什么问题
电子取证的核心目标就四个字:无损固定。说得更直白一点,就是把案发时计算机、手机、服务器里的数据状态原封不动地保存下来,并且让这个保存过程在法庭上经得起质询。这跟平时做数据备份完全不同,备份追求的是“数据能恢复就行”,取证追求的是“每一步操作都有据可查,数据不能被改动哪怕一个比特”。
这次项目里最典型的场景就是:检材是一台Windows笔记本,系统盘和历史数据盘分离,而且系统启用了BitLocker加密。这个组合在真实案件里太常见了,尤其是涉及内部资料外泄的场景。处理这种检材,第一步想的绝对不能是“怎么把文件拷出来”,而是“怎么在不改变原始数据的前提下,把整个磁盘的状态固定下来”。
1.2 为什么动态取证和静态取证必须双管齐下
很多人做取证有个误区,觉得把电脑拿回来慢慢分析就行,忽略了“开机状态下”的取证价值。实际上,一台正在运行的电脑,内存里可能藏着解密密钥、聊天记录、云盘登录凭证这些东西,一旦关机就全没了。所以标准的取证流程一定是:
- 如果检材处于开机状态,先做动态取证——采集内存镜像、网络连接状态、进程列表。
- 然后才是静态取证——对磁盘做只读镜像,再在镜像上做分析。
这次的检材送到手上的时候已经关机了,我们就省去了内存采集这一步,直接进入磁盘固定。但即使是这样,在拆硬盘之前也要先确认机器是否支持从外部启动,避免开机时BitLocker自动解锁带来数据变更风险。
1.3 取证方案的选型考量
选工具和选方案一样,要看场景。实验室里有商业取证软件,比如X-Ways Forensics、EnCase、火眼证据酷,但这次我主力用的是开源工具组合——GNU dd + EWFTools + Arsenal Image Mounter,再加一个磁碟机(Tableau TD3)做写保护。
为什么这么选?两个原因:第一,商业工具虽然功能全,但首次取证时如果只用黑盒界面,你根本不知道它背后执行了哪些命令,遇到需要出庭质证的情况很难说清楚。第二,开源工具逻辑透明,每一步操作都能记录命令和哈希值,报告更好写。当然,如果时间紧、案件量大,商业工具的效率优势还是很明显的,这个得承认。
2. 磁盘镜像与证据固定实操
2.1 写保护是取证的第一生命线
任何对原始检材的写操作都是不可逆的破坏。所以,在把硬盘从机器上取下来之后,第一时间必须接上硬件写保护器(Write Blocker),再连接到取证工作站。软件层面的只读挂载虽然也有用,但如果你用的是Linux系统,一个mount参数写错就可能变成可写挂载,风险太大。硬件写保护器把整个USB或eSATA通道的写指令直接掐断,是最稳妥的。
我这次用的是Tableau TD3,支持SATA和IDE接口。接好之后用lshw命令确认系统识别到的磁盘设备名(通常是/dev/sdb),同时确认写保护状态是enabled,然后在Linux下执行:
# 查看磁盘基本信息 fdisk -l /dev/sdb如果系统提示Device /dev/sdb doesnt contain a valid partition table,别慌,说明这块盘可能用了动态磁盘或BitLocker直接加密了整块盘,后面会细说。
2.2 镜像格式选择与dd实操
取证镜像的格式有好几种:raw(dd)、E01(EWF)、AFF等。raw格式兼容性最好,但文件体积大;E01支持压缩和分段存储,而且自带元数据,记录哈希、采集时间等信息,业界标准度更高。既然我们装了EWFTools,就直接用ewfacquire来采集E01镜像。
# 先算原始盘的sha256,用于后续比对 sha256sum /dev/sdb > original.sha256 # 使用ewfacquire采集镜像,分段大小2GB,压缩级别高 ewfacquire -t case_A_disk1 -C "Case A Disk 1" -D "Seagate ST1000DM003" -f encase7 -c high -S 2GB /dev/sdb这个命令里几个参数说明一下:-C是证据号,-D是描述信息,-f encase7指定输出E01格式(兼容EnCase 7),-S 2GB表示每个分段文件上限2GB,方便拷到FAT32格式的移动硬盘上。采集过程中ewfacquire会实时显示进度,根据磁盘大小和USB接口速度,一块1TB的盘大概需要4~6个小时。
采集完成之后,用ewfverify对镜像做完整性校验:
ewfverify case_A_disk1.E01校验结果会和采集前的原始哈希比对,完全一致才能算固定成功。
2.3 哈希校验的完整链条
这里有一个特别容易被忽略的细节:哈希校验必须覆盖采集前、采集后、分析后三个阶段。采集前对原始磁盘算一次哈希,采集后对镜像算一次哈希,分析过程中如果生成了解密后的副本,还要对副本再算一次。这条哈希链不能断,任何一环缺失都会影响证据链的完整性。
我习惯把哈希值存成sha256.txt文件,然后和镜像文件一起刻录到归档光盘里,光盘本身做一次md5sum记录。这套流程虽然繁琐,但在被质询的时候能让你站得住脚:从原始检材到分析副本,每一步都有校验值支撑,每一步都经得起复核。
3. BitLocker加密磁盘的处理与分析
3.1 先判断加密状态
这次检材的硬盘分区结构很典型:一个EFI系统分区,一个100MB的保留分区,一个C盘系统分区,最后一个D盘数据分区。用fdisk -l看的时候,C和D的文件系统类型显示为Microsoft basic data,但用parted查看详细标志时会多一个msftres标志,并不能直接判断是否加密。
最准确的判断方式是,在Linux下挂载看是否能读到文件,或者用bitlocker相关的取证工具扫描。我在现场用了一个快速方法:直接看Windows系统分区上的WinRE目录是否存在——如果系统启用了BitLocker,C盘根目录下会有一个$RECYCLE.BIN和一个System Volume Information,但这两个文件夹在加密状态下是看不到的。当然最靠谱的还是用工具的识别能力,比如dislocker或libbde。
3.2 获取密钥的几种途径
BitLocker的最大难点在于密钥获取。根据案件实际情况,密钥来源有以下几种:
- 恢复密钥文件:有些组织会把恢复密钥导出为
.BEK文件或打印成PDF,很多场景下在AD域里就能直接查到。 - 内存镜像中提取:如果是在机器开机状态下做的内存采集,可以用
aeskeyfind配合Volatility的bitlocker插件尝试从内存镜像中提取主密钥(FVEK)。 - 上次解锁后的缓存:Windows的
Hiberfil.sys(休眠文件)里可能缓存了解密密钥。 - 用户密码+启动PIN:如果知道用户的登录密码和启动PIN,理论上可以计算出一组恢复密钥。
这次走的是第一条路,在案件材料里找到了一个Recovery Key的TXT文件,里面是48位数字组成的恢复密钥,分8组,每组6位。这个格式就是标准的BitLocker恢复密钥,可以直接用。
3.3 用dislocker解密挂载
拿到了恢复密钥,剩下的就交给工具。我在Kali Linux上用dislocker做解密,它能在Linux下直接读取BitLocker加密的分区。
# 创建解密后映射目录和挂载点 mkdir -p /mnt/bde_mapper /mnt/decrypted # 使用恢复密钥解密分区( /dev/sdb4 是C盘在本文案例中的分区号) dislocker -r -V /dev/sdb4 -K recovery_key.bek -- /mnt/bde_mapper如果恢复密钥文件是纯文本的,也可以直接用-p参数指定恢复密钥字符串:
dislocker -r -V /dev/sdb4 -p '123456-123456-123456-123456-123456-123456-123456-123456' -- /mnt/bde_mapper执行成功之后,/mnt/bde_mapper目录下会生成一个名为dislocker-file的文件,这个文件就是解密后的C盘虚拟镜像。把它挂载为只读文件系统:
mount -o loop,ro /mnt/bde_mapper/dislocker-file /mnt/decrypted到这里,相当于在Linux下看到了完整的Windows系统盘内容。之后就可以用icat、fls这些TSK工具做深入分析,也可以直接浏览目录结构,寻找可疑文件。
3.4 解密后的取证分析重点
系统盘解密后,需要优先关注几个位置:
C:\Users\*\AppData\Roaming\Microsoft\Windows\Recent:最近打开的文件快捷方式,能反映用户近期的操作轨迹。C:\Users\*\AppData\Local\Microsoft\Windows\Explorer:缩略图缓存,删除掉的图片可能在这里有残留。C:\Windows\Prefetch:预读取文件,能记录程序运行历史。C:\Users\*\NTUSER.DAT:注册表用户配置单元,包含登录过的USB设备、RecentDocs、TypedPaths等关键信息。
我在这次项目里发现D盘根目录下有一个被删除的压缩包文件,经过photorec恢复之后,从里面提取到了一份与案件相关的Excel文档。这里想说的是,删除文件恢复永远是电子取证里的传统强项,即使文件系统是NTFS且开启了BitLocker,只要分区解开了,NTFS的MFT记录还在,就有可能把数据捞回来。
4. 常见问题与排查技巧实录
4.1 问题一:ewfacquire采集速度特别慢
现象:1TB硬盘采集了8个多小时还没完成,USB 3.0接口但速度始终只有30MB/s左右。
排查过程:先确认是不是写保护器影响了速度,换成直连之后发现速度依然上不去。后来用iostat监控磁盘IO,发现源盘本身的读写速度就只有50MB/s——这是一块5400转的笔记本机械盘,不是接口瓶颈,是磁盘本身的速度上限。
解决方法:换了一块7200转的3.5寸盘做测试盘,速度确实能到100MB/s以上。机械盘测速必须考虑磁盘本身型号和转速,不能看到USB 3.0就默认高速。
4.2 问题二:dislocker提示Invalid recovery key
现象:恢复密钥字符串是从案件材料里找的48位数字,但dislocker执行时报Invalid recovery key。
排查过程:一开始以为密钥格式有问题,后来对比了原始文件,发现是字符0和O、1和l在抄录时搞混了。BitLocker恢复密钥里只包含数字0-9和字母A-F(十六进制),但打印出来的文件中偶尔会有手写体的O,这其实应该是0。
解决方法:直接用原始TXT文件里的字符串,用cat命令复制粘贴,不要手动输入。如果只能手动输入,每个字符都用肉眼比对一遍,重点检查0/O、1/I。后来我干脆写了个小脚本,把字符串里的O统一替换成0,l统一替换成1,再跑dislocker,就成功了。
4.3 问题三:BitLocker解锁后挂载只读失败
现象:mount -o loop,ro挂载dislocker-file时,提示failed to setup loop device。
排查过程:先确认是不是内核没加载loop模块,用modprobe loop加载后依然报错。后来发现是dislocker生成的dislocker-file文件是稀疏文件(sparse file),某些文件系统不支持对它直接loop挂载。
解决方法:先对dislocker-file做一次完整拷贝,转成普通文件,再挂载:
cp --sparse=never /mnt/bde_mapper/dislocker-file /tmp/c_decrypted.img mount -o loop,ro /tmp/c_decrypted.img /mnt/decrypted整个过程大概多花了20分钟左右,但至少没有卡死在挂载环节。
4.4 问题四:取证报告怎么写才能过审
写报告是个被低估的环节。很多技术人员的报告写得像操作记录,缺少结论和推理过程。我一般按这个结构来:
- 案件背景与取证范围:说清楚检材来源、开机状态、取证时间。
- 取证环境与方法:写清楚使用的硬件型号(写保护器、硬盘盒)、软件版本(ewftools 2020xxx、dislocker 0.7.x)、步骤摘要。
- 证据提取明细:逐条列出在检材中发现的文件、注册表项、聊天记录等,每条都附上镜像偏移、文件哈希、提取路径。
- 分析结论:结合时间线、行为链和数据残留,得出主观判断——注意,取证报告的结论只能是“高度可能”,不能出现“确定是”这种绝对化表述。
- 附录:全套哈希值、操作命令日志、截图。
写报告的时候还要注意一点:凡是用于出庭的证据,必须走完整的取证链,不能直接从挂载好的解密盘里复制文件,因为这时候的文件时间戳可能已经被访问行为影响了。正确做法是在镜像层面直接用fls和icat提取,或者在挂载之前先对原始E01镜像做一次fls列表,确认路径后再提取。
5. 一点实操心得
写到最后,聊点工具之外的东西。
电子取证这行,很多功夫不在工具上,而在流程意识和抗压能力上。流程意识说的是,你做的每一步都可能被律师或技术专家拿着放大镜检查,所以任何操作前都要问一句“这一步会不会改变原始数据”;抗压能力则来自案件本身的紧张感,数据能不能恢复、密钥能不能解开、用户行为能不能还原,这些压力会一直在,但越急越乱,反而是按部就班把每一步走扎实,才能出结果。
这次项目里,BitLocker的密钥获取是最大的命门。如果没有那份恢复密钥文件,光靠穷举基本不可能,48位数字的密钥空间根本不是暴力破解能覆盖的。所以在这里也给做取证的朋友提个醒:以后遇到BitLocker加密,第一时间翻案件材料找恢复密钥,同时马上采集内存镜像,不要先急着关机通电解密,很多时候密钥都在你手边,只是你没往那个方向找。
另外,如果你在这个项目里用到的是Windows作为取证工作站,也有一个替代方案是直接用VeraCrypt挂载BitLocker加密分区,但VeraCrypt对BitLocker的兼容性不如dislocker,尤其在处理BitLocker To Go设备和某些特定版本加密方式时容易踩坑。我个人还是推荐Linux+dislocker这个组合,稳定、可控、好写报告。
最后再分享一个小技巧:做完一次取证之后,把每一步用到的命令和输出日志统一归档到证据文件夹里,命名规则是日期_步骤_命令行.txt。这堆日志看着不起眼,但真到需要复现取证过程的时候,能帮你节省好几个小时,这份时间远比省下来的写报告时间更值钱。
本文还有配套的精品资源,点击获取