取证入门
系统管理的一些方面只能从经验中学习。计算机取证(其中包括从系统中拼凑线索以确定入侵者如何入侵的能力)可能需要数年甚至数十年的时间才能掌握。如果您从未对计算机进行过取证分析,您可能甚至不知道从哪里开始。在本指南中,我将介绍如何使用 Sleuthkit 中的取证工具集及其 Web 前端 Autopsy 来组织您的第一个取证案例。
您可能希望在系统上使用取证工具的最常见场景之一是入侵事件。如果您的系统遭到入侵,您必须找出攻击者是如何入侵的,以便您可以修补该安全漏洞。在您做任何事情之前,您需要做出一个重要的决定——您是否计划让执法部门介入并起诉攻击者?如果答案是肯定的,您应该保持受损系统原样,不要对其进行任何更改。您在攻击后进行的任何更改都可能使证据复杂化和受到污染,因此,许多人制定了一项策略,即一旦检测到攻击就拔掉系统的电源,并使其保持关闭状态,直到执法部门到达。调查人员可能需要完整的系统,或者至少是驱动器,以便他们可以安全地存储它;因此,在您的系统返回之前,您的取证分析可能会在此结束。
如果您不打算起诉攻击者,您仍然需要预先制定一些关于如何响应攻击的策略。您应该创建的第一个策略是关于是否立即从受损服务器上拔掉电源。关于这一点,存在两种主要的思想流派。一种思想流派认为,由于实时服务器的 RAM 中包含有价值的数据,例如正在运行的进程、已登录的用户等等,因此您应该尝试首先收集所有这些实时数据,然后再关闭服务器电源。另一种对立的思想流派认为,一旦系统被入侵,系统的所有部分都可能被入侵并且不可信任,包括您可能用来获取实时系统数据的任何工具,因此您应该立即从服务器上拔掉电源。否则,攻击者也可能已入侵关机脚本以删除其踪迹。我个人更倾向于第二种思想流派,并认为一旦发现入侵,就不应运行任何命令,也不应对系统进行任何更改。
您应该预先创建的第二个策略是关于如何以及是否对系统上的硬盘驱动器进行镜像,以及如何以及何时将系统恢复服务。如果您的系统不能容忍太多停机时间,您可能需要创建驱动器的精确镜像以在其他地方进行检查,然后在原始驱动器上重新安装操作系统。请记住,一旦系统被入侵,您就不能再信任该系统。很可能存在您错过的后门。值得再次强调的是,如果您计划起诉,您将无法将系统恢复服务,至少不能使用原始驱动器,因为调查人员将需要它们。如果您有额外的空间,我建议创建驱动器的镜像以供使用,并保持原始驱动器不动。如果您不小心写入了镜像,您可以随时从原始驱动器创建新的镜像。Autopsy 可以管理原始磁盘或分区镜像,因此任何镜像工具,从 dd 到 Ghost,都可以工作。
就本指南而言,我假设您已创建了系统上任何驱动器的镜像,并将它们存储在您将用于取证分析的单独机器上。这台新机器需要安装 Sleuthkit 和 Autopsy。某些发行版同时提供 Sleuthkit 和 Autopsy 的预编译软件包,因此您可以使用发行版的软件包管理器来安装它们。否则,您可以从主项目站点 sleuthkit.org 上的 tarball 下载和编译这些工具。
Autopsy 作为所有 Sleuthkit 工具的 Web 前端,使您可以轻松地检查文件系统,而无需学习每个不同的命令行工具。Autopsy 还使您可以轻松地将多个取证分析组织到不同的案例中,以便您以后可以参考它们。安装 Autopsy 后,获取 root 权限,然后键入autopsy到终端以启动程序。Autopsy 设置的说明将出现在终端中,包括证据的默认位置 (/var/lib/autopsy) 和它监听的默认端口 (9999)。打开 Web 浏览器并键入http://localhost:9999/autopsy以查看默认的 Autopsy 页面并开始您的调查。
从主 Autopsy 页面,单击“打开案例”以打开您已创建的案例,或者对于本示例,单击“新建案例”。在“新建案例”页面中,您可以命名和描述您的案例,还可以提供将参与案例调查的调查员列表。一旦您的案例被命名和创建,您将看到案例库——一个简单地列出您已创建的所有案例的页面。如果这是您的第一个案例,只需单击“确定”即可继续进入主机库。主机库列出了您正在为此案例调查的所有服务器。在我们的示例中,只有一个主机被入侵,但攻击者通常会从一个受损主机移动到另一个受损主机,因此请在此库中包含您需要调查的尽可能多的主机。与案例库一样,单击“添加主机”以填写有关您要添加的主机的信息。
您将在“添加主机”页面上看到一些与时间相关的有趣字段。如果主机设置为与您的本地时区不同的时区,请务必将其时区放入“时区”字段中。当您拼凑一系列事件时,尤其是在多个主机之间,正确同步的时间非常重要。“时间偏差调整”字段允许您考虑时间不同步的服务器,Autopsy 会自动调整时间以反映您在此字段中输入的任何偏差。
当您添加主机并返回到主机库时,选择要分析的主机,然后单击“确定”以转到主机管理器页面。如果这是一个新主机,您应该做的第一件事是单击“添加镜像文件”以添加您之前创建的镜像。镜像页面只有三个字段:“位置”、“类型”和“导入方法”。Autopsy 期望镜像在本地计算机上的某个位置可用——实际在本地磁盘上,或者通过 NFS 或 SMB 挂载。“位置”字段中键入镜像文件的完整文件路径。“类型”字段允许您告知 Autopsy 您创建的镜像类型。如果您镜像了整个驱动器,请选择“磁盘”;否则,请选择“分区”。如果您选择“磁盘”,Autopsy 会扫描分区表并列出镜像的所有分区。
Autopsy 需要以某种形式将镜像文件放在其证据柜中,“导入方法”字段允许您选择如何将镜像文件放在那里。如果您将所有 Autopsy 证据存储在单独的 USB 驱动器上,您可能需要选择“复制”,以便镜像的副本与其余证据一起保留。如果您的证据柜与镜像位于本地磁盘上(这很可能在默认设置下),请选择“符号链接”或“移动”,具体取决于您是否希望镜像保留在其原始位置。重复这些步骤以为主机添加任何其他镜像。
现在您已经创建了案例,添加了主机并选择了任何磁盘镜像,您就可以开始分析了。在主机管理器页面上,您将看到所有可用于分析的分区。根 (/) 分区是一个不错的起点,因此选择它,然后单击“分析”。“分析”页面列出了许多不同的调查文件系统的方法,但单击屏幕顶部的“文件分析”按钮以进入您将用于此分析的主要页面之一。
“文件分析”页面为您提供了文件系统的完整视图,从其根目录开始。右上角的框架列出了当前目录中的所有文件,以及每个文件的附加信息,分别在自己的字段中,包括 MAC 时间、权限和文件大小。MAC(修改时间、访问时间和更改时间)是指文件系统为每个文件跟踪的三种不同更改。修改时间是上次实际写入文件或目录的时间。例如,如果您打开一个文本文件,编辑它并保存更改,这将更新修改时间。访问时间是上次访问文件或目录的时间。读取文件会更新其访问时间,列出目录的内容也会更新其访问时间。更改时间跟踪上次更改文件元数据(例如文件权限和所有者)的时间。在某些情况下,这些时间中的一些或全部可能匹配。
“文件分析”页面中的每个文件或目录都是超链接。如果您单击目录,页面将更改为列出该目录的内容。如果您单击文件,右下角的框架将更改为列出文件的内容(即使它是二进制文件),以及您可以对该文件执行的许多功能。您可以显示文件的 ASCII 或十六进制版本,或者让 Autopsy 扫描文件并仅显示内部的 ASCII 字符串。此功能对于尝试可疑的特洛伊木马文件特别方便。通常,特洛伊木马二进制文件内部的 ASCII 字符串列出了奇怪的 IRC 频道或其他远程服务器或攻击者正在使用的密码。您还可以将文件的副本导出到本地磁盘以进行进一步检查。
攻击者通常喜欢删除文件以掩盖他们的踪迹,但 Autopsy 可以尝试从文件系统的可用空间中恢复它们。转到“文件分析”页面,单击左侧框架底部的“所有已删除文件”按钮,Autopsy 将列出它在系统上找到的所有已删除文件。如果 Autopsy 可以恢复这么多信息,您还可以看到 MAC 时间,甚至可以单击文件并恢复其原始内容!
所有这些功能都很方便,但最有用的功能之一是“添加注释”功能。例如,如果您在 /bin 目录中注意到一个系统二进制文件,该文件具有奇怪的最近修改日期,并且您在其中注意到一些可疑的 ASCII 字符串,您可以单击“添加注释”并列出您的发现。在“添加注释”页面上,您还可以根据 MAC 时间添加序列事件。如果您认为修改时间可疑,您可以在“添加注释”页面上选择“M-Time”。当您为许多文件或目录添加类似这样的注释时,您最终会得到一系列关于您发现的内容以及有趣时间的大量注释。从“主机管理器”窗口(列出主机分区的窗口)中,单击“查看注释”以查看列表。当您试图拼凑攻击者的事件序列时,特别是当您想与他人分享您的发现时,这是一个非常宝贵的功能。
如果您在扫描文件时发现一条信息,例如 IP 地址或特定服务器名称,您还可以单击“分析”页面顶部的“关键字搜索”以扫描整个文件系统以查找该关键字。您可能会找到日志条目或攻击者上传的其他文件,这些文件在不太可能的位置引用了该关键字,使用此工具。
您将发现的一件事是,在弄清楚攻击者的步骤时,事件的顺序非常重要。“文件分析”窗口允许您按任何标题排序,包括 MAC 时间。攻击者通常会将 /bin 或 /sbin 下的系统二进制文件替换为特洛伊木马,因为这将更新文件的修改时间,如果您在“文件分析”窗口中按修改时间对 /bin 和 /sbin 目录进行排序,您可以快速看到可疑的文件更改,例如一系列核心程序,如 ls、vi 和 echo,都在几天前您知道您没有更新任何程序的时间修改过。
如果您是取证新手,您可能不确定确切地从文件系统的哪个位置开始查找。一些目录通常包含攻击的证据,至少可以为您提供一个起点。我已经提到了 /bin 和 /sbin 目录,因为攻击者经常用特洛伊木马替换这些目录中的核心系统二进制文件。/tmp 和 /var/tmp 目录也是最受欢迎的位置,因为系统上的任何用户都可以写入它们,因此攻击者通常从这些目录开始他们的攻击,并在此处下载 rootkit 和其他工具。特别注意 /var/tmp 中的隐藏目录(以 . 开头的目录),因为这是攻击者从随便的观察者那里掩盖其踪迹的一种方法。最后,扫描 /home 和 /root 以查找可疑文件或每个用户的 .bash_history 文件中的奇怪命令。
您希望找到的是关于攻击者何时在您的系统上处于活动状态的一些想法。一旦您知道攻击者何时在那里,您就可以检查该期间的文件访问和修改时间,以跟踪攻击者在系统上的位置以及他们接触了哪些文件。虽然您当然可以逐目录浏览“文件分析”窗口,但 Autopsy 通过其“文件活动时间线”提供了一种更简单的方法。如果您当前在“文件分析”窗口中,请单击“关闭”返回到列出您为主机添加的镜像的主机管理器窗口。从那里,单击“文件活动时间线”按钮。接下来,单击“创建数据文件”,单击它列出的所有镜像旁边的复选框,然后单击“确定”。这项工作将花费一些时间,具体取决于您的磁盘大小和速度以及 CPU。
一旦数据文件创建完成,单击“确定”以继续进入“创建时间线”窗口。在此窗口中,您可以缩小时间线范围,使其仅列出特定时间段;但是,现在只需将所有选项保留原样,然后单击“确定”。由于您永远无法确切知道调查将走向何方,因此您不想排除可能包含有价值线索的时间段。创建时间线后,单击“确定”以查看基于 Web 的时间线查看器,但该页面上的注释给出了一个宝贵的提示——通过文本编辑器查看时间线比从 Web 界面查看更容易。在 /var/lib/autopsy/case/host/output/timeline.txt 下找到原始时间线文本文件。如果您将您的案例命名为 Investigation1,并将您的主机命名为 Gonzo,您可以在 /var/lib/autopsy/Investigation1/Gonzo/output/timeline.txt 下找到该文件。
timeline.txt 文件列出了您的镜像上的每个文件,按 MAC 时间排序。此文件包含大量信息,但一旦您弄清楚每个字段代表什么,就更容易理解了。第一列列出了文件的相关时间,后跟文件大小。下一个字段表示此时间是文件被修改、访问、更改的时间还是这三者的任意组合。如果一个文件在此时间被修改和访问,但其元数据未更改,您将在此字段中看到“ma”。下一个字段列出文件权限,后跟拥有该文件的用户和组。最后两个字段列出文件系统 inode 和文件的完整路径或目录。请注意,如果一组文件具有相同的时间,则仅填充第一个时间字段。
如果您找到了攻击者的文件之一,请尝试在时间线中找到它,并查看在该时间段内访问和尤其是修改了哪些其他文件。使用此方法,您通常可以看到一系列访问的文件,这些文件显示有人正在编译或执行程序。如果您注意到攻击者在系统上使用了特定帐户,请使用“文件分析”窗口检查该用户的 /home/用户名/.bash_history,并查看攻击者可能运行的任何其他命令。
此外,查看登录历史记录,通常可以在 /var/log/messages 下找到,以了解该用户登录的其他时间,并尝试将这些时间与 timeline.txt 文件中系统上的任何其他文件活动相关联。请记住为找到的每个线索添加注释——当您越来越深入地挖掘文件系统时,可能很难跟踪所有不同的文件以及它们之间的关联方式,但注释页面使您可以轻松查看。最终目标是尝试找到攻击者在系统上留下踪迹的最早时间,并使用该信息来弄清楚他们是如何进入的。
您可能会收集到,彻底的取证分析可能是一个耗时的过程。即使使用像 Autopsy 这样的工具,仍然需要时间和经验才能理解它呈现的所有数据,以便您可以拼凑出攻击。获得经验的一种简单方法是镜像您的个人系统并通过 Autopsy 查看它。创建时间线,看看您是否可以跟踪到您上次运行的一些命令或上次编辑的文件。您甚至可能想攻击您自己的机器,看看您是否可以使用 Autopsy 来追溯您的步骤。虽然没有什么可以替代真实数据,但这种练习对于理解取证非常有帮助,以便您在真正发生攻击时做好准备。
Kyle Rankin 是旧金山湾区的一名高级系统管理员,也是许多本书的作者,包括 O'Reilly Media 出版的 Knoppix Hacks 和 Ubuntu Hacks。他目前是 North Bay Linux 用户组的主席。