7.7 数字取证

Kali Linux 1.0包含了一些用于满足取证需求的工具。取证是调查证据并完善跟事件有关的事实的过程。本节将会针对数字取证做一些介绍。我们认为当你的一些资产,例如服务器或Web应用,受到危害时,你有必要制定一个应对计划。你最好调研一下其他资源,接受更完善的培训。取证本身的内容已经超出了Kali Linux中自带的这些取证工具。数字取证是信息安全领域中发展迅猛的一个领域,很少有人真正在行。

在你进行数字取证时,一定要记住三条规则。如果没能很好地遵守这三条规则,那么,你基于自己的调研所得出的结论,看起来可能会很业余,或者你的取证调查看上去用处不大。

第一条规则是不要直接对原始数据进行操作。一定要用副本来进行取证。确保在创建副本时你并没有修改数据。一旦动了或修改了原始数据,你的调查结果就毫无意义了。篡改过的证据不能用于任何法律诉讼,不管你从中找到了什么。原因是一旦原始数据被修改了,就存在找出的是伪证进而遮盖事实真相的可能性。举个修改原始数据的例子,调整系统日志中的时间戳就可能改变事实真相。而我们无法甄别这是业余分析师的失误还黑客尝试掩盖痕迹而做的这类修改。

许多取证专家都会用专用设备来一个比特一个比特地复制数据。有一些声誉很好的软件也可以达到同样的效果。详细记录整个过程也很重要。法律诉讼中出示的许多数字副本最终都被打回了,原因是存储媒介如硬盘的散列跟复制出来的数据的散列不一致。硬盘的散列肯定无法跟受污染的副本的散列一致,即使只是修改了其中一个比特位的信息。散列一致意味着基本上可以确定原始数据,包括文件系统访问日志、删除的数据磁盘信息及元数据,就是原始数据源的精确副本。

数字取证的第二条规则是能存储数据的一切媒介都要检查。在涉及数字媒介的知名案件中,重要证据都存储在相机、数字摄像机、视频游戏控制台、手机、iPod和其他一些数字设备中。如果一个设备带有存储用户数据的功能,那么该设备在取证调查中就有可能用到。不要只是因为可能性不大就错过一些设备。汽车导航系统会将地图和音乐存储到SD卡中,不法分子可能会用它隐藏数据。另外,还可以基于下载音乐的标记提供互联网使用的证据。

数字取证的最后一个重要规则是确保你记录下来了所有发现。达成结论的所有证据和步骤都必须易于理解,这样才能受信。更重要的是,你的发现必须是可重现的。独立调查员根据你的文档和技术必须能得出跟你一样的结论。还有很重要的一点是你的文档必须能够保持一个记录了什么时候发生了什么、怎么发生的事件时间线。所有的时间线结论都应该被记录下来。

取证调查实质上就是检验安全专家对跟事件关联的证据的洞察力。人们很容易基于个人观点推断发生了什么以及谁是坏人。这么做很快就会让你在圈子里名声拜尽。作为取证专家,你必须只陈述事实。看看下面这两个描述有什么差异:1. Alice窃取了Bob的文件;2. 登录的用户名为Alice的账户发起了一个从用户账户Bob的主目录,到序列号为XXX的USB硬盘的复制操作,日期为XXX,时间戳为XXX。真正的坏人可能窃取了Alice的登录凭据(使用本书中介绍的方法),并窃取了Bob的数据,而表现为是Alice在操作。你得出结论的那一刻,你的案例因为个人干扰立即变得没有说服力了。记住,作为取证的专业人士,你可能会被要求宣誓给出有关发生了什么的证词。当有任何事实以外的内容被记录了下来时,人们都可能会质疑你的可信性。

7.7.1 Kali取证启动模式

Kali Linux有个选项是使用取证启动模式(Forensics Boot) 。如果你是使用Kali启动盘(如Live CD)来启动系统,你可以选择Kali取证模式。如果你要将Kali作为一个取证工具集,我们强烈建议你将Kali Live CD作为你的工具集中的一部分。Kali Live CD可以从Kali Linux网站上以ISO映像文件的形式下载(参见1.5节)。在Kali启动后,你能看到Forensics mode 会是一个可选择的选项。

以取证模式(Forensic mode)使用Kali Linux可以帮助你达成第一条黄金规则:不修改原始文件系统。它不会使用内部硬盘,也不会自动挂载内部硬盘。交换(SWAP)分区和所有其他担当内存或缓存的分区也都不会以任何形式使用。

在取证模式中,可移动媒介不会自动挂载。如果有CD或U盘插入到了系统上,它什么也不会做。很有可能你会通过手动挂载的方式在取证模式中使用可移动媒介。这便于取证专家对系统上已挂载的文件系统和媒介进行完全控制。

如前面所述,你一定要使用数据源的副本来开展工作。在做取证工作时,保证副本的文件系统完好无损很重要,这样你就能说明自己并没有做任何修改,并且你提供的步骤也可以被重复执行。让我们看看如何使用Kali中带有的工具来对数据进行复制和散列计算。

使用Kali进行文件系统分析

dd 是Linux/Unix系统中最常见的文件系统复制工具之一。该工具可以用来生成文件系统的一份完全复制,包括已删除的扇区和启动扇区。在许多情况中,该工具用于创建外部媒介或是硬盘的映像文件。在dd 创建好磁盘映像文件后,该文件可以在其他系统上挂载或检查。如有必要,dd 可以将磁盘映像文件保存到网络共享上或是USB硬盘中,这样取证分析就不会使用本地文件系统。下一个例子会演示如何使用dd 来生成内部硬盘的一份副本。第一步是选择目标机器,并使用Kali Live CD启动取证模式。

我们将会运行sfdisk -l 命令来查看我们要进行分析的系统上的磁盘信息。

前面的截图显示了五个分区。分区1、2、5 看起来比较有用,而分区3 和分区4 显示为空。记住,交换分区可能会包含用户活动和缓存遗留下来的一些信息。如果用Live CD来启动一个基于Windows的系统,我们可能会看到一个不同的分区结构,不过,整体概念基本一致。

下一步是决定要复制哪个分区。我们选择前面的映像文件中第一个分区列出的/dev/sda1。

dd命令的基本使用方法如下:

dd if=<媒介/媒介上的分区> of=<映像文件>

在本例中,我们将会输入以下命令来创建第一个分区的副本:

dd if=/dev/sda1 of=sda1-image.dd

它会创建一个映像文件,作为跟我们本地文件系统上sda1分区的一个完全副本。希望你能看出我们操作中的一个重要问题。我们刚刚违背了黄金法则之一,那就是不要修改原始数据;而我们将该文件写到了本地文件系统中,这样会被认为修改了原始数据。最佳方式是将该映像文件写到另外一个文件系统中,比如一个不同的分区、网络共享或是USB硬盘中。本人的个人偏好是使用USB硬盘,不过,在这个例子中,使用本地文件系统仅仅是为了演示,因此也可以接受。

要使用USB硬盘作为被复制的系统的存储设备,你需要先将一个大的USB硬盘插到系统上。因为在Live CD的取证模式中,Kali不会自动挂载该USB硬盘。通常,你要保持该文件系统不被挂载,然后用dd工具来处理该硬盘的详细内容。要这么做,你需要运行下面截图中显示的命令:

该USB设备的位置是/dev/null,不过,你可以选择任意位置。你也可以将该映像文件直接保存到NFS网络共享中。你可以用以下命令来完成:

dd if=/dev/sda1 | nc 我的主机IP地址 可选填的端口号

在下面的例子中,我们会把分区sda1 克隆到IP地址为10.0.0.5的NFS存储服务器上:

dd if=/dev/sda1 | nc 10.0.0.5

还有其他一些工具可用来克隆文件系统。我们建议使用dd 工具来克隆特定分区,因为它在Kali以及许多其他Linux和Unix系统中都是自带的。克隆系统的过程可能会非常耗时,这取决于你要复制的分区有多大。尽管dd 是一个非常好的工具,但它并非所有情况下都是最佳工具。如果你是要克隆整个磁盘,这里还有其他一些流行的工具,比如AIMAGE或AIR Imager。它们都不是Kali中预装的,但非常受欢迎。重要的是如果该调查结果有可能会用在法律诉讼中,一定要确保取证调查中用的工具符合证据收集相关规定。

7.7.2  dc3dd

dc3dd 是增加了取证功能的dd 工具。dc3dd可以一比特一比特地计算你正复制的硬盘和源硬盘之间的散列。这对证明你正在研究的数据副本跟原始数据完全一致至关重要。你可以通过创建一份原始数据和副本的散列来供后面验证是否一致。

在下个例子中,我们会运行sfdisk -l 命令来查看现有的硬盘和分区。如下面的截图所示:

dc3dd 工具运行的方式跟dd 工具很像。你可以选定一个源硬盘或一个源分区以及要存储该映像文件的目标位置。它还提供了一个散列选项。在下个例子中,我们会选择分区/dev/sda2 ,并将它复制到一个名为CopyofDrivedc3dd 的映像文件中,同时用sha256 计算散列。

这个例子是为了演示。实际的取证调查中,我们不会将映像文件保存到同一个硬盘中。

dc3dd会在复制完成后提供一个针对被复制硬盘的输入文件的唯一散列码。

重要的是证明副本的散列跟原始数据文件的散列是一致的。我们可以使用命令sha256sum 来计算散列。如果我们在文件CopyofDrivedc3dd上计算了散列,也在分区/dev/sda2上计算了散列,我们能看到他们是一致的。我们甚至能看到dc3dd副本的输出也是一样的。既然散列都一致,我们可以确信取证调查中用到的文件是完全一样的。

7.7.3 Kali中的其他取证工具

Kali在标为Forensics 的目录下有无数的取证工具。这里有一些Kali中常用的工具,主要用于Web应用取证。

1.chkrootkit

chkrootkit 可以在Linux系统中运行基于签名和进程来检查系统中是否存在rootkit。你可以将它当成针对Linux系统的反病毒软件或反恶意软件。

要运行chkrootkit 工具,打开一个命令行终端窗口,输入chkrootkit 。它会检查本地操作系统中是否有已安装的rootkit。

chkrootkit 是一个保证你的Kali副本没有被影响的简单工具。你也可以在其他Linux发行版上安装并运行chkrootkit 工具。

2.Autopsy

Autopsy 是一个开源的数字取证工具,可以运行在Windows、Linux、OS X及其他Unix系统上。Autopsy可以用于分析磁盘映像文件并对文件系统进行深入分析,如NTFS、FAT、HFS+、Ext3、UFS以及一些其他卷系统类型。Autopsy最常见的用法是作为管理映像文件分析的案例管理工具。还记得我们是如何使用dd 工具来创建映像文件的么?Autopsy可以帮助我们研究该映像文件。

要运行Autopsy,你可以浏览到Kali Linux > Forensics > Digital Forensics ,并选择Autopsy。它会调起一个终端窗口,并运行该应用。你可以让那个窗口开着,在Web界面上使用该工具。要访问Web界面,打开Web浏览器,并转向http://localhost:9000/autopsy

选择New Case 创建一个新的案例。它会跳到下面的示例截图:

Autopsy会在继续进行之前弹出一些问题。问题包括设置时区、输入你的Kali系统和要调查的系统之间的时间偏移,以及描述,如主机名等。

在下面的这个例子中,我们会用Autopsy来检查前面例子中通过dd 工具创建的一个映像文件,如下面的截图所示:

第一步是向Autopsy加载映像文件,如mytestimage.dd

它会给出一个选项让你设置使用dd 工具创建文件时生成的该文件的散列值。你可以让Autopsy计算散列值。本书作者建议你自行计算MD5校验码。可以在文件运行md5sum 命令时生成。

你可以将计算出的散列值直接填入Autopsy。

Autopsy是一个可以帮助收集用于文档目的的取证信息的工具。当某个分区可以进行检查时,你可以用Autopsy来查看特定磁盘、文件信息、原始文件以及它们的元数据。Autopsy也可以连接美国国家标准和技术研究所的国家软件参考库(National Institute of Standards Software Reference Library),通过比较已知文件的散列来判定它们是正常的程序还是非正常程序。

3.Binwalk

在取证调查中,我们通常很难看出找到的二进制文件的用途。原因是我们通常拿不到二进制文件对应的源码文件。Binwalk 是一个固件分析工具,用来辅助对固件映像文件和其他二进制软件进行分析、提取和逆向工程。Binwalk的关注点是固件二进制文件;不过,我们也看到了一些更新可用于家庭网络和无线设备及其他消费电子产品。

Binwalk有一些不同的选项,你可以参考https://code.google.com/p/binwalk/wiki/Usage 。你可以将命令binwalk和你要检查的二进制文件的文件名一起运行。下个例子中我们会针对家庭无线路由器的二进制固件使用Binwalk,如下图所示:

Binwalk会输出该二进制文件的结果:

前面的截图显示,管理员下载了一个二进制文件并对其进行了重命名,使其看起来更像是来自另外一个厂商(FW_WRT54G是一款Linksys路由器)。Binwalk可以分析该文件并警告该文件是一个Sercom的固件文件,即使文件被重命名为Linksys格式。

4.pdf-parser

pdf-parser用来解析和分析便携式文件格式 (PDF,Portable Document Format)的文档,以及从PDF文档中提取原始信息,如代码、图片和其他元素。它是一款用来检查和销毁被判为包含恶意代码的PDF文档的工具。

5.Foremost

Foremost是一个数据切分工具,可以基于文件的首部、尾部和内部数据结构来恢复文件。Foremost可以用于映像文件,如通过dd、Safeback和Encase工具生成的映像文件,或是直接用于硬盘。映像文件的首部和尾部可以通过一个配置文件来指定,或是用命令行来识别文件的类型。这些内建类型会查看给出文件格式的数据结构,从而允许更可靠、更快的恢复动作。

6.Pasco

Pasco是一款取证工具,它可以读取由微软的IE创建的index.dat文件。index.dat文件会存储用户的浏览记录,这在对主机进行调查时非常有用。微软会在主机系统硬盘中的各种位置存储index.dat。举个例子,一些index.dat文件是在用户的主目录中,用以保存用户的配置信息。

Pasco只针对IE有效。其他浏览器如Firefox和Chrome不会保留index.dat文件。 Firefox和Chrome会将浏览器信息存储到SQLite数据库中。数据库的位置在各个操作系统中都不相同,但它们可以通过SQLite数据库查看器打开查看。本书作者喜欢的SQLite客户端工具之一是一款Firefox插件,名为SQLite Manager。

7.Scalpel

Scalpel是一款文件切分工具,用于搜索已知文件首部和尾部签名数据库、尝试从硬盘映像文件中切分出文件。你可以用你要定位的文件类型来对scalpel.conf文件进行配置,然后针对某个数据库运行该工具。

8.bulk_extractor

bulk_extractor可以用来从映像文件中提取各种内容,包括信用卡号、手机号、URL和电子邮件地址。bulk_extractor也可以通过映像文件生成单词列表,进而用于字典攻击。bulk_extractor可能要运行数个小时,但提取出来的数据在取证中的作用对得起这份等待。