Hack 和 / - 使用 Ext4 进行取证

作者:Kyle Rankin

从我的错误中学习,了解如何在 ext4 文件系统上收集取证数据。

撰写技术文章的一大好处是,您可以获得大量的文档资料以供参考。我告诉人们,我可能比任何人都更频繁地参考我的书籍和文章,因为虽然我可能并不总是记得执行任务的具体步骤,但我总是记得我是否写过关于如何执行它的文章。

我发现自己不时参考的一篇文章是我在 2008 年 1 月刊的《Linux Journal》上撰写的“取证入门”文章(我在《Linux Journal》上的第一篇专题文章)。在那篇文章中,我详细介绍了如何使用 Autopsy(Sleuthkit 的前端)对遭受黑客攻击的服务器执行您自己的取证调查。最近,我不得不对一台遭受 SSH 暴力攻击(使用 SSH 密钥!)的服务器进行调查,并发现我的个人文档不再有效。在本文中,我将介绍这个问题的症状,以及最终我是如何解决这个问题的。

受害者

正如我所提到的,最近我对一台服务器(为了保护无辜者,我们称之为 alvin)进行了调查,该服务器受到了暴力攻击的破坏。我完全按照我在取证文章中记录的步骤进行操作。当我检测到服务器被入侵的那一刻,我立即拔掉了服务器的电源插头,立即创建了整个驱动器的映像,在单独的驱动器上创建了映像的第二个副本,我将从该副本进行工作,一旦我的证据安全,我就用干净的操作系统重新安装了受影响的服务器。

与过去的调查相比,我遇到的这个系统的第一个重大区别是数据的庞大程度。为 10-20GB 的磁盘创建映像是一回事,而驱动器是数百 GB,并且每个操作——创建初始映像、映像复制和 md5sums——都需要数小时,则是另一回事。至少可以说,这是一个缓慢的过程。一旦我有了我的工作映像,我就启动了 Autopsy 并开始了我的调查。最初,一切都很好——Autopsy 看到了映像,并且能够检测到它的分区,当我开始浏览文件系统时,我可以看到根目录的内容。

问题

当我尝试使用 Autopsy 浏览文件系统时,第一个问题出现了——根目录下的所有目录似乎都是空的。我知道这不可能是正确的,但我不确定问题是什么。起初,我以为我可能只是有一个损坏的映像副本,但由于 md5sum 似乎花费了几乎与复制映像相同的时间,我再次从我的黄金母盘重新开始了映像复制,以确保万无一失。当这仍然不起作用时,我尝试从命令行使用 Sleuthkit,甚至尝试了 The Coroner's Toolkit 中的工具,但我得到了相同的结果。我以为也许 Autopsy 无法支持如此大的磁盘映像。在我进行过多的研究之前,我决定尝试将映像环回挂载,看看它是否是损坏的映像。毕竟,如果是这样,我需要在继续进行之前创建一个新的映像。

这里的挑战在于,我创建的是整个磁盘的映像,而不仅仅是单个分区的映像。通常,当您环回挂载某些东西时,您挂载的是分区的映像,语法类似于


$ sudo mount -o loop /path/to/image /mnt/image

然后,您可以像浏览任何其他已挂载的文件系统一样浏览 /mnt/image。在这种情况下,由于映像是完整分区的映像,我必须弄清楚如何在映像中向前跳过并仅挂载分区。Mount 有一个名为 offset 的选项,允许您指定在将其作为文件系统挂载之前在文件中跳过多少距离,但诀窍在于知道应该将该 offset 设置为什么值。事实证明,如果您安装了 parted,则相对容易找到 offset。首先,我对 alvin 的完整磁盘映像运行 parted,并告诉它以字节为单位打印出完整的分区表


$ sudo parted /media/Forensics2/images/alvin-sda
GNU Parted 2.2
Using /media/Forensics2/images/alvin-sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit                                                             
Unit?  [compact]? B                                                       
(parted) print                                                            
Model:  (file)
Disk /media/Forensics2/images/alvin-sda: 251059544064B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start          End            Size           Type     ...
 1      32256B         242242721279B  242242689024B  primary  ...
 2      242242752512B  249999160319B  7756407808B    extended ...
 5      242242753536B  249999160319B  7756406784B    logical  ...

(parted) quit                         

在这种情况下,我对第一个分区感兴趣,从这个输出中,我可以看到分区从字节 32256 开始。现在我可以使用该 offset 来环回挂载分区


$ sudo mount -o loop,ro,offset=32256 alvin-sda /mnt 

请注意,我在这里以只读方式挂载了文件系统。我不想冒险向此分区写入任何新数据!从那时起,我发现我可以很好地浏览 /mnt 下的文件系统——问题似乎出在 Autopsy 和 Sleuthkit 上。我进行了研究,但我真的找不到任何证据表明我接近映像大小的上限,但尽管如此,我还是决定尝试仅创建初始分区的映像。几个小时后,Autopsy 仍然无法使用新映像,但奇怪的是,我可以很好地在我的文件系统上环回挂载分区。在尝试了无数其他方法之后,我开始意识到问题不可能是我的分区大小。一定是其他原因,那时我注意到这个文件系统是 ext4。

像 Ext3 Plus One More

老实说,除了 ext4 声称在处理大量文件时速度更快,同时声称向后兼容 ext3 之外,我并没有过多考虑这个文件系统。我在一些新系统上使用了它(它是现代 Ubuntu 安装上的默认设置),并且它似乎工作正常。因为它应该向后兼容,所以我最初认为它不是我问题的起因。但在更多研究之后,我发现不仅其他用户抱怨 Sleuthkit 中缺乏对 ext4 的支持,而且向后兼容性并不像您想象的那么兼容。虽然您可以将 ext2 和 ext3 文件系统作为 ext4 挂载,但只有当 ext4 文件系统使用区段(区段是 ext4 的一项主要新功能,因此通常会启用)时,您才能将 ext4 文件系统作为 ext3 挂载。因为我无法将这个 ext4 文件系统视为 ext3,所以 Sleuthkit 也无法做到。

因此,如果我可以环回挂载分区,那么如果 Sleuthkit 和 Autopsy 不起作用,又有什么大不了的呢?虽然能够浏览文件系统是取证工具的一个有用功能,但另一个非常有价值的功能是创建文件系统时间线的能力。文件系统时间线将所有文件组织到一个巨大的文本数据库中,其中它们根据其 MAC 时间(文件上次修改、访问或更改其元数据的时间)排序。借助文件系统时间线,如果您对攻击者可能在系统上的时间有一个很好的了解,您可以开始跟踪他们在系统上执行程序、浏览目录并将脚本解压到系统上的虚拟足迹。通常,我会让 Autopsy 为我生成此文件。幸运的是,事实证明,来自 The Coroner's Toolkit 的一个名为 mactime 的工具能够从映像或已挂载的文件系统生成时间线。以下是我用来从挂载在 /mnt 的文件系统创建时间线的命令


$ sudo mactime -d /mnt -R -g /mnt/etc/group -p 
 ↪/mnt/etc/passwd 1/2/1970 > timeline.txt

-d 选项指定文件系统的挂载目录,-R 告诉 mactime 递归扫描该目录。-g 和 -p 选项告诉 mactime 从我的已挂载文件系统中的 group 和 passwd 文件获取组和用户 ID 信息,最后,date 指定要开始的日期范围。日期必须在 1970 年 1 月 1 日之后(我将把原因留给读者作为练习),所以我选择了第二天。

虽然我没有获得我习惯的 Autopsy 用户体验,但一旦我可以浏览文件系统并查看时间线,我就可以使用相同的调查技术。最终,我能够拼凑出攻击者何时通过弱密码入侵机器的时间线,更改了密码,以便其他人无法以相同的方式入侵,然后下载并启动 SSH 暴力攻击脚本以传播到其他服务器。

我承认我真的很惊讶地看到我最喜欢的一些取证工具不再起作用了。虽然 Linux 文件系统不断改进是件好事,但一个意想不到的缺点(或者如果您是攻击者,则可能是优点)是,取证工具必须不断升级才能在现代文件系统上工作。虽然我能够挂载分区并创建时间线,但我不知道我是否能够从分区中恢复任何已删除的文件——这是取证工具的另一个有价值的用途。尽管如此,至少如果我(或您)需要再次分析 ext4 映像,我现在已经记录了所有步骤。

Kyle Rankin 是《Linux Journal》的技术编辑和专栏作家,也是 Purism 的首席安全官。他是《Linux Hardening in Hostile Networks》、《DevOps Troubleshooting》、《The Official Ubuntu Server Book》、《Knoppix Hacks》、《Knoppix Pocket Reference》、《Linux Multimedia Hacks》和《Ubuntu Hacks》的作者,也是许多其他 O'Reilly 书籍的贡献者。Rankin 经常就安全和开源软件发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论