2010-08-30 17:23:11 来源:比特网
在众多的计算机安全威胁之中,冷起动内存映像攻击(Cold Boot Attack)应该是不被大家所了解的。有些读者在看到这个标题时,可能不太相信还可以在冷起动过程中,从计算机内存中得到相关的机密数据,例如某些密码等。
因为在大家的印象中,普通计算机使用的内存,由于其掉电易失的工作机制,在关闭计算机电源后,内存中的信息就会被消除。那怎么还能从中得到机密信息呢?
可是,一些安全专家发现当计算机电源关闭后,内存(RAM)中的信息不会立即自动擦除,而是还能够保持许多秒。这样就可以利用内存的这个“新漏洞”,在计算机运行、休眠或挂起时,直接关机,然后通过冷启动来获取内存中的信息映像,从而得到在内存运行时保存在其中的密码信息。
如此一来,在冷启动内存映像攻击的威胁下,内存中的信息再也不会像以前所说的那样安全,而是变得非常危险。如果攻击者可以直接接触计算机,那么,使用这种攻击方法,就可以破解所有的磁盘及文件加密技术。
这是因为在当前的几大操作系统上,例如windows、mac甚至linux都将其加密键保存至RAM中。如果一个攻击者掌握了这种冷启动攻击,当你离开计算机屏幕时,只是锁定了屏幕,或者只是暂将笔记本置于挂起状态,那么,只要攻击者可以单独在这些计算机面前几分钟,他就有足够多的时间按下计算机的电源重新启动它,然后收集RAM中的内容,最终分析并得到其中的加密键。
一、冷启动内存映像攻击的具体方法
当攻击者接触计算机之后,他们需要使用下列方法来实施一次冷启动内存映像攻击:
1、首先要做的就是将内存中的信息做一个完全的映像。
这个工作,有点像用ghost将操作系统分区做映像一样,但是由于内存本身工作机制的原因,在为内存中信息做完整映像拷贝时,虽然更多的细心操作。例如,如果你以系统安装盘的方式启动到一个安全的救援模式,这样虽然也可以获得内存中的一些信息,但是这种安全模式仍然会清除内存中原来的许多信息,也就不可能得到真正重要的信息了。
要将内存中的信息做一个完全的映像,可以通过如下两种方法来完成:
(1)使用USB磁盘驱动器或U盘来启动,然后自动执行安装在USB启动器上的内存映像拷贝工具,就可以将内存中的信息完全转储至USB磁盘中。
然后,攻击者可以将此USB连接至其它的计算机,再用相关的工具将USB磁盘上的RAM文件转储至一个文件中。
(2)第二种方法就是通过PXE网络远程启动方式来执行内存映像拷贝工具。由于内存映像拷贝工具体积非常小,通过PXE网络远程执行完全能够在几十秒内将内存中的信息,完全转储至PXE服务器中。
但是,这种方式虽然不需要攻击者直接接触计算机,但是,所攻击的计算机网络必需支持PXE启动,以及已经配置好PXE服务器。从这两个条件来看,通过这种方式进行内存信息远程转储,比第一种方式还要难以实现。除非所攻击的网络已经具备这种条件。
2、当内存中的信息已经完全转储至一个映像文件中,接下来要做的就简单许多,只需要使用内存映像信息搜索工具,就可以从已经有的内存映像文件中找到想要的信息。当前的内存映像信息搜索工具还不是很多,大多也只能做一些简单的搜索工具,主要都是针对密码等信息。例如一个名为 bios_memimage的工具包中就包含两个这样的工具,aeskeyfind工具用来搜索 AES密码, rsakeyfind工具用来搜索RSA密码。
二、冷启动内存映像攻击工具下载和创建
要完成内存映像文件的分析任务需要特定的工具,在此之前生成内存信息的映像拷贝同样需要专用的工具。
现在内存信息映像工具很少,而且只能在linux相关发行版本下运行。如果你想试试本文所描述的攻击方法是否可以正常完成,那么,你就需要先去citp.princeton.edu/memory
/code下载最新版的bios_memimage原码压缩包。但是,如果你是通过EFI方式引导系统来获取内存映像的,那么就需要下载efi_netboot源码压缩包。然后,你就可以解压缩并应用这些源码压缩包。在本文中,雪源梅香使用的是 bios_memimage源码包。
在使用它们之前,可以查看bios_memimage源码包中的相关文档,来了解如何建立和应用这些源码。
要特别注意的是,这个工具支持所有32位或64位硬件环境。但是,32位版本技术的工具不能用于64位的环境,因为它不能查询所有64位环境的内存空间。因此,你需要根据你的硬件环境,下载正确的版本。
在创建内存映像工具时,例如在32位硬件环境下,可以先解压缩下载回来的bios_memimage源码压缩包,打开一个字符终端,进入bios_memimage目录,然后输入 make命令进行编译,编译完成后,通过make install安装即可 。如果要在64-bit环境下使用它,进入bios_memimage目录后,用make -f Makefile.64命令进行编译。
如果在编译的过程中,出现无法定义的 __stack_chk_fail错误参考信息,这是由于 .GCC's新的堆栈保护所致。可以通过编辑bios_memimage目录下的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工具,需要一个USB存储设备,必需有足够的空间可以保存想要转储至USB存储设备上的RAM映像文件。
另外,要想USB磁盘在引导后可以自动执行内存映像工具,就必需将bios_memimage工具包中的一个名为scraper.bin的引导映像文件,写入USB磁盘的目录下。
这可以通过下列方式来完成:
将USB磁盘连接至使用Linux系统的PC上,了解其在系统下的显示方式,例如在我的计算机上为/dev/sdb,然后在一个终端下,用dd工具来写入上述这个引导映像:
sudo dd if=scraper.bin of=/dev/sdb
要注意的是完成引导映像文件的写入需要root权限。
当上述命令执行完成后,一个可以引导的、能够自动执行内存映像工具的USB磁盘就准备好了。
那么,按下来要做的,就是使用这个USB磁盘内存映像工具,去需要的计算机上获取想要的内存映像:
连接USB内存映像工具磁盘至正在运行的PC,按机箱上的重启按钮重新启动PC,然后,进入BIOS设置系统从USB磁盘引导。一旦从USB磁盘引导成功,在USB磁盘中的内存映像工具就会立即启动,并自动从内存中转储内容至USB磁盘中。 当其完成,它就会自动关闭计算机或重新启动计算。
此时,就可以将USB磁盘从该计算机上取下,然后拿至另一台计算机上查看。另外,还可以使用此USB磁盘目录下的usbdump转储工具,将制作好的内存映像文件从USB磁盘转储至本地驱动器。例如要将拷贝下来的内存映像转储为一个名为memimage.img的文件,用root权限进入一个终端,进入USB磁盘所在目录,输入下例命令就可完成这个工作:
sudo ./usbdump /dev/sdb > memimage.img
四、基于PXE方式的冷启动内存映像攻击
至于通过PXE方式获取目标计算机的内存信息映像,在已经配置好PXE服务器前提下,还要求目标计算机的网卡支持PXE方式远程启动。
另外,还必需在PXE服务器上运行TFTP服务,并将下载回来的PXE内存映像压缩包中PXE目录下的二进制文件,复制到PXE服务器的TFTP目录,并修改其中的pxelinux配置,使它指向该文件。
然后,需要一个人去关闭目标计算机的电源,并以最快的速度在控制计算机通过PXE方式远程启动目标计算机。当目标计算机获取一个DHCP地址并从网络启动时,就会显示一个状态消息。
此时,由于PXE方式不同于USB磁盘方式,内存映像工具不会自动执行,就需要在pxedump目录下执行如下的命令:
./pxedump 目录主机的IP地址 > memimage.img
从上面可以看出,使用基于PXE方式去进行内存映像攻击是很难一个人去实现,也就不太可能被攻击者经常使用了。因此,最需要我们关注的是基于USB磁盘方式的内存映像攻击。
五、分析内存映像文件
一旦从目标系统上得到了内存映像文件,就需要从中找到重要的信息,例如已经保存在内存中的密码。在本文的前部分,雪源梅香提到的bios_memimage包中,已经包含了2个用来扫描内存映像文件的工具:aeskeyfind和rsakeyfind,下面说说如何安装和使用它们。
这两个工具的安装非常简单,进入一个终端,解压后运行make命令进行编译,再用make install进行安装。
同样,这两个工具的使用也非常简单,在该文件所在目录下的 README文件中已经有详细的使用说明。如果只需要进行基本的搜索,只需要执行 aeskeyfind或rsakeyfind的二进制文件,并在其后指定内存映像文件所在目录,如果找到匹配的密码就会显示出来。
不过,目前还没有其它工具可以利用内存映像文件中的其它信息,但是,还是可以使用strings和grep命令去搜索内存映像中的各种字符串,如:
strings memimage.img | grep password
六、应对之策
当攻击者可以直接接触目标计算机时,使用冷启动方式的内存映像攻击是非常有效的,尤其是针对笔记本电脑时。
但是,这种攻击方式仍然有许多限制的。首先,被攻击的目标计算机在攻击前必需是运行的,或处于休眠或挂起状态。另外,一些计算机使用ECC内存,它们在断电后会清除内存中的信息的速度非常快,根本没有机会执行相对来说非常短暂的内存映像工作。
因此,要防范冷启动方式的内存映像攻击,在重要的服务器上使用ECC内存,从物理上防止人们接触到计算机,禁用计算机网卡的PXE远程启动功能,就可以达到非常好的效果。
但是,这些防范方法很难杜绝来自企业内部的攻击。例如一个拥有接触目标计算机权限的员工,就很容易使用USB内存映像工具,从锁定了屏幕的服务器的内存中获取重要的信息,然后将USB磁盘带出企业。这就说明在使用防范内存映像攻击方法的同时,还必需使用其它的安全防范策略,才有可能将这种安全威胁减小至最小的水平。
不过,内存映像工具并不只是可以用于进行攻击,它还可以作为一种积极的工具,帮助我们对受到攻击的计算机进行取证。或者当你不记得屏幕保护程序的锁定密码,以及忘记休眠后的系统登录密码时,也可以使用内存映像工具来得到正确的密码。
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。