我想知道如何证明从正在运行的机器(例如:内存映像)获得的计算机取证证据的完整性。只要我对那个盒子做任何事情,例如连接一个笔式驱动器,我就会改变内存中的注册表配置单元,并且可能在磁盘上也会被改变。我怎样才能确保证据仍然可以接受?如何确保记忆图像与考试时相同?恐怕没有解决办法。有人有这方面的法庭经验吗?法院可以接受什么?
为了避免任何误解,我并不是在谈论使用 writeblocker 和其他东西对独立 HDD 进行成像。
我想知道如何证明从正在运行的机器(例如:内存映像)获得的计算机取证证据的完整性。只要我对那个盒子做任何事情,例如连接一个笔式驱动器,我就会改变内存中的注册表配置单元,并且可能在磁盘上也会被改变。我怎样才能确保证据仍然可以接受?如何确保记忆图像与考试时相同?恐怕没有解决办法。有人有这方面的法庭经验吗?法院可以接受什么?
为了避免任何误解,我并不是在谈论使用 writeblocker 和其他东西对独立 HDD 进行成像。
免责声明:我不是律师,所以我的建议不具有约束力。
没有一种万无一失的方法可以将内存保持在特定状态。然而,有一种方法可以证明可以复制内存转储和/或争论您可以判断内存的哪些部分可能已更改。
在您进行完整内存转储的那一刻,有几个进程正在运行并且内核正在调度它们。而且,它可能在物理内存和磁盘区域之间交换内存页面(交换)。
因此,您需要做的第一件事是获取内存转储和交换位于单个时间点。其次,您需要获取 CPU 寄存器的状态(我稍后再讨论)。
我在考虑 Linux 机器,因为它是我最熟悉的操作系统。对于该操作系统,您可以转储/dev/mem
和dd
交换区域,或使用 LiME 之类的东西。对于其他操作系统,有几种选择。
现在,为了能够证明可以复制内存转储,您需要找到并分析全局分页表 (PT)。该表驻留在内存中,并将内核的内存访问链接到内存的实际部分。表的位置应该在一个寄存器中(寄存器 CR3)。但这就是为什么你需要寄存器的原因,它们不仅仅是 RAX、RBX、RCX、RDX、R5、R6、RSP 等),因此负责分页的 CPU 单元可以访问它。
可以争辩说,如果您可以制作 PT 的索引,您就可以知道内存的哪一部分可能会被更新。如何?
现在,根据机器的功能,您可以判断哪些内存页面可能受到了影响,哪些没有。例如,连接笔式驱动器(假设机器不执行udev
智能规则或类似操作)应该只更改内核页面(嗯,几乎,虚拟文件系统,例如/proc
也将被更新)。
不幸的是,今天的大多数操作系统都将运行守护进程,这些守护进程将定期扫描内核的用户空间可见部分并对其采取行动。可能会严重混淆用户空间 (DPL 3) 页面。你肯定需要对机器进行物理控制,并分析当你对机器做某事时会发生什么(用户空间)。
从好的方面来说,当您将内存转储分成页面时,您可以重现机器的状态(在很大程度上)。例如,您可以启动 VM,启动内核调试器并一一覆盖所有内存页面。
法院将如何看待这一点,可能仍取决于更经典的法医观点。例如,您如何证明有问题的内存转储属于您声称的机器。但这可以通过准确记录取证如何在机器上执行的程序来解决。