Linux 冷启动攻击工具

作者:Kyle Rankin

如果您使用电脑有一段时间了,您应该了解 RAM 存储和硬盘存储之间的区别。除了 RAM 比硬盘存储速度更快之外,我们通常还认为存储在 RAM 中的任何内容都只能持续到电脑断电,而存储在硬盘上的数据即使在电脑拔掉电源后仍然存在。任何在学校作业时遇到断电情况的人都可以证明 RAM 存储的临时性。

冷启动攻击

事实证明,我们对 RAM 的了解并不完全正确。2008 年 2 月 21 日,一篇题为“谨防遗忘:针对加密密钥的冷启动攻击”的论文发布。在这篇论文中,研究人员描述了他们关于 RAM 持久性的发现,以及如何利用这些发现。研究人员发现,RAM 在断电后不会自动擦除。相反,RAM 会随着时间的推移而衰减,即使在断电几秒钟后,您仍然可以恢复大量数据。他们还发现,如果您首先冷却 RAM,使用液氮甚至倒置的压缩空气罐,您可以将 RAM 状态保持 30 秒到几分钟以上——足够的时间将 RAM 从机器中物理移除并放入另一台电脑中。

就其本身而言,虽然这一发现令人惊讶,但最有趣的是如果 RAM 内容能够在重启后幸存下来,会产生哪些影响。事实证明,许多用于 Windows、Mac 甚至 Linux 的常用磁盘加密工具都将加密密钥存储在 RAM 中。通过这种冷启动攻击,如果人们锁定屏幕甚至暂停笔记本电脑,您可以拔掉电源,抓取 RAM 内容并扫描任何加密密钥。从本质上讲,如果您有几分钟时间单独与电脑相处,您可能会危及所有常见的磁盘加密技术。

当我听到这个发现时,我首先想到的不是加密,而是取证。我之前在 Linux Journal 上写过关于取证的文章[参见 2008 年 1 月刊的“取证入门”],在那篇文章中,我讨论了关于当您的服务器被黑客入侵时最初应如何响应的辩论。一种观点主张立即拔掉被入侵服务器的电源。其想法是您希望冻结文件系统,并且不希望攻击者,甚至调查人员破坏证据。另一种观点认为,拔掉电源会破坏大量仅存在于 RAM 中的有价值的数据,因此应该首先从 RAM 中收集数据,然后再拔掉电源。有了这种冷启动攻击,现在您不必做出这种选择。如果服务器已被入侵,您可以先拔掉电源,然后再重启并抓取 RAM 的内容。

冷启动攻击工具发布

在该论文中,研究人员不仅概述了冷启动攻击,还描述了他们创建的利用此漏洞的工具。2008 年 7 月 16 日,这些工具的完整源代码在 citp.princeton.edu/memory/code 上公开发布。真正的 UNIX 风格,每个工具都很小且用途单一

  • RAM 镜像工具:第一组工具使您能够对系统的 RAM 进行镜像。虽然您可能会从像 Knoppix 这样的救援磁盘启动,然后复制内存,但救援磁盘本身会覆盖大量的 RAM。使用提供的工具,您有一个小型可执行文件,您可以从 USB 磁盘或通过 PXE 网络启动。USB 可执行文件将 RAM 的全部内容转储到 USB 磁盘,然后关闭电源或重启主机。然后,攻击者可以将 USB 磁盘带到另一台电脑,并使用相应的工具将内存从磁盘转储到文件中。PXE 可执行文件设置目标以进行远程控制,因此攻击者随后可以通过网络将 RAM 转储到 PXE 服务器。

  • 密钥扫描工具:站点上的第二组工具可以扫描您创建的 RAM 镜像以查找加密密钥。工具的名称是不言自明的。aeskeyfind 工具搜索 AES 密钥,而 rsakeyfind 工具搜索 RSA 密钥。

下载和构建冷启动攻击工具

由于所有这些工具的源代码都已发布,您可以下载并自行使用它们,而无需太多设置。首先,访问 citp.princeton.edu/memory/code,下载最新版本的 bios_memimage tarball,或者如果您想对使用 EFI 启动的机器进行镜像,则下载 efi_netboot tarball。然后,解压缩 tarball。在本文的示例中,我使用 bios_memimage 包。

bios_memimage 包包含一个 doc 目录,其中包含关于该项目以及如何构建和使用源代码的良好文档。这些工具支持 32 位和 64 位环境。虽然 32 位版本在技术上可以在 64 位系统上工作,但它无法寻址 64 位环境的所有内存空间,因此您可能无法获得完整的镜像。要为 32 位环境构建,请进入 bios_memimage 目录并键入make。要为 64 位环境构建,请进入 bios_memimage 目录并键入make -f Makefile.64.

注意:我注意到当我在我的环境中编译代码时,构建报错,提示未定义的 __stack_chk_fail 引用。这是由于 GCC 的新堆栈保护。作为一种解决方法,编辑 pxe/Makefile 文件并将读取的行更改为

CFLAGS= -ffreestanding -Os -Wall -I../include -march=i386

CFLAGS= -ffreestanding -Os -Wall -I../include 
 ↪-march=i386 -fno-stack-protector
基于 USB 的冷启动攻击

代码成功编译后,您就可以安装这些工具了。USB 和 PXE 工具的步骤不同。对于 USB 工具,您需要一个您愿意擦除且足够大以容纳您要转储的 RAM 的 USB 驱动器。在 usb 目录中有一个名为 scraper.bin 的可引导镜像。连接您的 USB 磁盘(在我的示例中,/dev/sdb),然后以 root 身份使用 dd 工具覆盖驱动器的开头,使用引导镜像

$ sudo dd if=scraper.bin of=/dev/sdb 
19+1 records in
19+1 records out
9792 bytes (9.8 kB) copied, 0.0101028 s, 969 kB/s

现在磁盘已准备就绪。转到您想要镜像的机器,连接 USB 驱动器,然后强制 CPU 复位或快速拔出并恢复电源。然后,将 BIOS 设置为从 USB 密钥启动。这将因电脑而异。在某些 BIOS 上,您将按 F12 或其他键以查看启动选项列表;其他则需要您进入 BIOS 配置以更改启动顺序。无论如何,一旦您从 USB 密钥启动,scraper 工具将立即开始将 RAM 的内容转储到磁盘。完成后,它将尝试 APM 断电,否则将重置机器。然后您可以拔下 USB 驱动器并返回您的机器。

您可以使用提供的 usbdump 工具在同名目录下将 RAM 从 USB 磁盘转储到您的本地驱动器。只需指定 USB 驱动器作为参数,然后将输出重定向到您选择的文件即可

$ sudo ./usbdump /dev/sdb > memdump.img
recover segment0 [base: 0x0 size: 653312]
recover segment1 [base: 0x100000 size: 1062993920]
基于 PXE 的冷启动攻击

基于 PXE 的 scraper 的工作方式与基于 USB 的 scraper 有些不同。首先,如果您还没有 PXE 服务器,则需要配置一个。该过程超出了本文的范围,但我已经在 2008 年 4 月刊的 Linux Journal 的文章“PXE Magic”中解释了如何设置 PXE 服务器。一旦您拥有一个功能正常的 PXE 服务器,将 pxe/scraper 二进制文件复制到您的 tftp 目录,并更改您的 pxelinux 配置,使其指向该文件。

接下来,将目标系统连接到网络(或者如果您在笔记本电脑上设置了 PXE 服务器,只需通过交叉线将目标系统连接到笔记本电脑)。然后,启动 CPU 复位或断电,然后立即打开目标系统的电源。与 USB 启动一样,不同的 BIOS 具有不同的从 PXE 启动的方式。在某些 BIOS 上,您可以按功能键,而另一些则需要您从 BIOS 配置中更改启动顺序。

一旦目标机器获得 DHCP 地址并从网络启动,它将显示状态消息,然后等待 pxedump 实用程序连接。与基于 USB 的 scraper 不同,PXE scraper 不会自动通过网络转储内存。相反,您需要执行 pxedump 目录下的 pxedump 二进制文件,如下所示

$ ./pxedump target_machine_IP_address > memdump.img
扫描内存转储

一旦您从目标系统的 RAM 中获得转储,您可以对其进行哪些操作?嗯,您可以执行的主要操作之一是扫描图像以查找加密密钥。在与 bios_memimage 包相同的页面上,您会找到 aeskeyfind 和 rsakeyfind 实用程序的 tarball。要使用这些实用程序,只需从 tarball 中提取源代码,然后运行make在源代码目录中。每个源代码树都包含一个 README 文件,其中描述了这些实用程序的选项,但对于基本扫描,只需执行 aeskeyfind 或 rsakeyfind 二进制文件,并将内存转储的路径作为参数即可。这些工具将输出它们找到的任何密钥。

不幸的是,目前还没有很多其他公开可用的工具可以从内存转储中重建其他有用的信息;但是,您始终可以使用 strings 实用程序和 grep 来扫描图像以查找关键字

$ strings memdump.img | grep keyword
冷启动攻击的局限性

这种攻击可能非常有效,尤其是针对笔记本电脑。话虽如此,这种攻击存在许多局限性。首先,您攻击的机器必须已开机、挂起或休眠,因为一旦机器断电,RAM 就会开始衰减。其次,某些 BIOS 和所有具有 ECC RAM 的系统将在启动操作系统之前擦除 RAM。在这些情况下,您要么必须尝试禁用此擦除,要么冷却 RAM 并将其移动到不进行任何擦除的系统。

资源

冷启动攻击官方页面:citp.princeton.edu/memory

研究论文直接链接:citp.princeton.edu/pub/coldboot.pdf

冷启动攻击工具源代码:citp.princeton.edu/memory/code

Kyle Rankin 是旧金山湾区的高级系统管理员,也是多本书的作者,包括 O'Reilly Media 出版的 Knoppix HacksUbuntu Hacks。他目前是北湾 Linux 用户组的主席。

加载Disqus评论