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