渗透测试中的冷却启动攻击和其他取证技术

简介: 这是一个星期四的晚上,快乐时光即将开始。你会尽快走出办公室。你整天都忙于准备一份报告,第二天早上还需继续,因此你将电脑锁屏。这足够安全,是吗?因为你使用了高强度密码,并全盘加密,Ophcrack或者可引导的linux发行版例如kali不起作用。你自认为安全了,其实你错了。为了得到重要材料,攻击者越来越无所不用其极,这包括使用取证领域的最新技术。

是一个星期四的晚上,快乐时光即将开始。你会尽快走出办公室。你整天都忙于准备一份报告,第二天早上还需继续,因此你将电脑锁屏。这足够安全,是吗?因为你使用了高强度密码,并全盘加密,Ophcrack或者可引导的linux发行版例如kali不起作用。你自认为安全了,其实你错了。为了得到重要材料,攻击者越来越无所不用其极,这包括使用取证领域的最新技术。


计算机中存在一个单独的区块:活动内存,任何一个攻击者都愿意把手伸到这个存储有敏感信息完全未加密的区块。系统为了方便调用,在内存中存储了多种有价值信息;全盘加密机制也必须在内存的某个地方存储密钥。同样,Wi-fi密钥也是如此存储的。Windows在内存中存有注册表键值,系统和SAM hive。许多剪贴板内容和应用程序密码也在存储于内存中。即问题在于,内存存储了系统在某时刻需要的大量有价值信息。攻击者要获得它,需要使用一些同样的取证技术。本文有助于向渗透测试工具包中增加这些技术。

image.png

设置环境

信息转储可以很容易的构建系统全貌。近年来,内存捕获价值已经得到取证专家的高度重视,但却并未获得渗透测试人员的足够重视。这有众多原因。取证调查人员使用专业软件捕获内存,同时记录进设备中。他们使用这些捕获信息,寻找恶意软件或隐藏进程。渗透测试人员将会对哈希值、文件、运行进程更感兴趣。如果已经拥有系统的访问权限,他们很大可能不再需要内存捕获来得到这些信息。


但是,在一些情境下,内存捕获对渗透测试人员作用极大。设想如下场景:在一个内部行动中,测试人员获得了接触机器的权限。客户满信心认为测试人员不可能利用这些机器获得对系统的访问。这些机器使用了全盘加密,拥有阻止从Ophcrack和下载hash的功能。运行中的机器全部处于锁定状态。客户不知道的是,测试人员拥有丰富的技术经验,能够抓取运行系统内存中的内容。需要强调的是有两种技术可以用于这样的情景:冷启动攻击和火线接口攻击。


冷启动攻击

2008年年初,普林斯顿大学电子前沿基金会和温瑞尔系统公司的研究人员联合发表了一篇题为《鲜为人知的秘密:对密钥的冷启动攻击》的文章,该文详解了从运行系统获取内存信息的一种新型攻击方式。该类攻击基于数据遗留。人们的普遍看法是机器一旦断电,内存中的数据就会立刻丢失;即按开电源开关,所有数据在刹那间消失。


然而,研究人员指出真相并非如此。事实上,数据从内存中丢失需要一定的时间。断开一台机器的电源一到两秒,大部分数据会完好无损。该效果可通过冷却内存延长。研究人员借助一种老式社交游戏,倒置一灌压缩空气,做了测试。冷却内存确实可以使数据保持很多秒,甚至好几分钟。这促使研究人员开发一系列工具,用来从即将关闭电源的机器内存中提取信息,然后再次启动系统。


使用这种方法捕获内存,存在小错误的几率会相对较高,这就是它被取证组织大量摒弃的原因。但是,渗透测试人员并不需要内存的法律上的取证镜像。如果密钥或SAM数据库完好无损,即使内存有2%的破坏也是可以接受的。即使有点难,这种方法对内部渗透测试人员来说,也是一个合适的攻击向量。


The Lest We Remember团队创造了大量用于攻击的工具,可以在普林斯顿网站https://citp.princeton.edu/research/memory/code/ 下载到。主要工具是一个USB/PXE镜像工具,可以下载到源码。研究团队制作了许多makefiles文件使编译更容易,他们也在源码中打包了优秀的文档。32位的提取器应该在32位虚拟机或32位物理机器上编译,64位的提取器同样需要在64位虚拟机或物理机器上编译。需要为目标机器使用合适的提取器,如果32位提取器在64位机器上使用,它将不能抓取全部的内存空间,因为32位提取器不能完全访问到64位的内存地址空间。


Makefile编译的结果是一个命名为scraper.bin的文件,其实是一个可以拷贝到USB设备的可引导启动的镜像工具。该USB同时需要用于存储内存镜像,建议使用大存储量的USB设备;因为当前主流系统使用4G到8G的内存,所以建议使用至少16GB容量的USB设备。以root用户权限,使用dd工具把scraper文件拷贝到USB设备,命令中sdb是硬盘驱动器的挂载点:

sudo dd if=scraper.bin of=/dev/sdb

这个时候,为目标系统准备好USB设备。理想情况下,渗透测试人员准备好一个32位的8G和一个64位的16G可以在内部环境使用的USB设备,同时备好一罐压缩空气。目标机器必须是一个运行中,且锁定的系统,有无用户登录无关紧要。同时,目标必须被全盘加密,否则启动Kali或Ophcrack,只需少量工作,就可以获得出色效果。

一旦合适的目标被定位后,渗透测试人员(从客户处获得了适当的授权)应该打开机箱,露出内存。同时,他们需要插入USB设备。一切准备就绪后,渗透测试人员可以倒置灌装压缩空气并喷射覆盖,以冷却内存。由于这会导致在芯片上成霜,小心使用软管浇内存,不要碰到主板其他部分。图1显示了已经被冷冻用于攻击的笔记本内存。

image.png

图1 为冷启动攻击冷却内存

内存冷却足够后,渗透测试人员需要尽可能快地切断并恢复供电。在桌面计算机上,这相对简单,按reset电源键就可实现。但是大部分的笔记本并没有reset按键,进行这样快速的重置电源操作本质上很困难。最好的办法是快速替换电池,并按电源键。上述两种机器环境,越是快速恢复供电,内存镜像就越完好。


当渗透测试人员从USB启动机器,scraper工具会自动复制内存镜像至USB设备。图2的屏幕截图显示了scraper工具在工作。

image.png

图2 Scraper工具

根据内存大小和USB端口速率,捕获过程需要一会儿,对大容量内存则需要数小时。Scraper程序完全复制内存后,它将立即重新启动系统。渗透测试人员只需移除USB设备并插回编译scraper的机器。在源码中有一个叫做USBdump的工具,它只是简单地使用如下命令:

sudo ./usbdump /dev/sdb > memdump.img

把USB设备上的每个字节拷贝至渗透测试人员的机器。再次,根据内存捕获镜像的大小,这可能需要数小时。最终结果是内存镜像的完全拷贝文件,包含目标机器的一个字节一个字节的捕获镜像,同时有望使错误最少。


火线接口攻击

电气和电子工程师协会的1394接口,是初始设计用于取代SCSI的一个高速通信接口,更因为苹果公司以火线命名实现而知名。火线的主要部分是它的高速数据传输速率,这也是它大量应用于音视频传输的原因。火线接口高速率的一个主要特征是,它可以完全绕过CPU,通过直接内存访问DMA的方式访问内存。这对从相机下载数小时连续镜头的视频编辑者来说是一个好消息,对于渗透测试人员同样如此。


火线接口的直接内存访问使具有目标机器物理接触能力的渗透测试人员,可以通过重写包含访问控制功能的内存部分,绕过操作系统的密码保护机制。DMA同样可以让渗透测试人员下载小于4GB内存镜像。即使火线接口仅能访问少于4GB的内存且能使用反病毒软件保护DMA,这类型的访问还是揭示了IEEE1394标准中重大的安全缺陷。由于火线接口的热插拔功能,即使目标机器在锁定情况下,攻击同样能够进行。此外,虽然大部分操作系统试图对知名火线接口设备如iPods进行DMA授权限制,但是欺骗设备很容易。


由于攻击主要针对火线接口,对同一总线下的任何设备同样有效;这些包括ExpressCard,PC Card和所有苹果新产品都可以使用的雷电端口。

Carsten Maartmann-Moe已经开发了一个叫做Inception的工具,可以轻松利用火线接口。该工具可在http://www.breaknenter.org/projects/inception/ 找到。Inception必须从一个Linux桌面运行。这种情况下,Linux系统不能是一个虚拟机,因为虚拟机不能实现火线接口传输(出于安全原因)。另外,渗透测试人员需要Python3和Freddie Witherden的1394包。最后,攻击和目标机器都需要具备一个火线接口,EC,雷电或者PC card接口。


Inception安装准备就绪后,渗透测试人员仅需通过一个火线接口电缆,简单的连接攻击和目标机器,并在root权限模式下运行命令

incept

Incept将会访问内存中负责访问控制的部分并“修补”它们,使我们可以无密码访问机器。当然,目标机器内存含有丰富的信息,渗透测试人员可以使用

incept –d

命令转储小于4GB的内存镜像。


内存转储分析

转储内存镜像是一会事,分析数据则是一个更难的阻碍。幸运地是,一系列专注于此目的的工具可以获得。在思路上,很少工具是设计用于渗透测试的。许多是取证分析工具用于寻找运行的进程,恶意软件和隐藏的数据。内存取证仍然是一个相对崭新的领域,尤其是64位环境下的分析。许多出色的工具仍然局限于法律取证使用。这就是说,大量可执行的任务可以向客户揭示风险。


Lest We Remember团队也创建了一个分析工具,用于捕获内存镜像。他们论文的主题是密钥可以从内存中恢复;他们的工具命名为AESKeyFind,用于在捕获的内存镜像中搜索AES密钥次序表并恢复密钥。该工具可从下载Scraper程序的同一站点下载。最后,该工具携带一个易于编译的makefile文件。该工具编译后,可以用命令

./aeskeyfind –v memoryimage.raw

运行,在内存镜像文件中执行搜索AES密钥并在显示屏上打印它们。AESKeyFind将搜索128位和256位的密钥,即使镜像不完全或存在错误,该工具也可能恢复密钥。例如,图3显示了从一个包含大量错误的镜像文件中恢复AES密钥。

image.png

图3 在破损内存镜像中找打AES密钥

这些AES密钥序列可以被大量不同的应用使用。它们可能是用于全盘加密,VPN,无线网络的主要密钥。如果它们被恢复,接下来的步骤就是破译。

另一个有用的工具是Volatility,一个开源的内存取证分析框架。Volatility拥有众多模块可以让渗透测试人员抽取运行进程中有用信息和目标机器设置。如果内存镜像完好,渗透测试人员甚至能够抽取出Windows的hashes。

首先是识别出内存镜像的架构,这样Volatility才知道到哪个位置找,该项工作由imageinfo模块完成。图4显示了imageinfo模块被调用,且内存配置文件结果被Volatility识别。

image.png

图4 Imageinfo模块识别出镜像架构

使用这些信息,渗透测试人员可以用额外的模块识别出SAM和来自注册表的系统hives文件。由于在机器使用时,windows在活动内存中存储注册表信息;Volatility的hivelist模块可以用于识别内存中的每个注册表位置。图5显示了hivelist模块正在被imageinfo模块识别出的配置文件调用。

image.png

图5 hivelist模块显示SAM和System Hives地址

在32位系统中,Volatility有一个hashdump模块,当给出SAM和System hives地址时,能够自动抽取密码hash。遗憾的是,这个模块当前在64位系统中不能工作,所以限制了它的用途。就是说,Volatility是开源的,没有理由不能实现64位模块。另外,一旦SAM和System hives地址确定,一个技术性可能是从镜像文件中抽取它们并使用其他工具抽取密码hashes。


小结

微软公司的安全响应中心有10个不变的安全法则。第3号法则是,如果一个坏家伙不受限制地访问你的机器,这已经不是你的机器了。许多客户认为,全盘加密和强密码弥补了攻击者对机器的任何物理直接访问。他们没有考虑到活动内存的危险。活动内存中存储了足够多的信息,渗透测试人员可以从其中获得重要信息或对内部网络的访问权。这从来没有被认为是问题,因为对外部攻击者来说不存在事实方式获得内存镜像。但是,特定环境下冷却启动和火线接口攻击,不但使获得内存访问,而且使获得密钥的突破访问成为可能。


引用

  1. Dieterle,D.(2011).Memory Forensics:How to Pull Passwords from Memory Dump. Cyber Arms – Computer Security.Retrieved 2013-11-18.
  2. Halderman,J.Alex;Schoen,Seth;Heninger,Nadia;Clarkson,William;Paul,William;Calandrino,Joseph A;Feldman,Ariel J.;Appelbaum,Jacob et al.(2008-02-21).Lest We Remember: Cold Boot Attacks on Encryption Keys. Princeton University. Retrieved 2013-11-18.
  3. Maartmann-Moe(Last update 2013).Inception.

Available at http://www.breaknenter.org/projects/inception/ . Accessed 2013-11-18.

相关文章
|
4天前
|
机器学习/深度学习 存储 人工智能
现代软件测试技术的发展与应用
传统的软件测试方法在面对日益复杂的软件系统时已经显得力不从心。为了应对这一挑战,现代软件测试技术不断发展和演进,涌现出了一系列新的方法和工具,为软件质量保障提供了更加有效和全面的解决方案。本文将探讨现代软件测试技术的发展趋势以及其在实际应用中的价值和意义。
28 0
|
4天前
|
安全 测试技术
现代软件测试中的自动化技术应用及挑战
在当今数字化时代,软件测试的重要性日益凸显。本文探讨了现代软件测试中自动化技术的应用现状和挑战,分析了自动化测试在提高效率、降低成本、增强可靠性等方面的优势,同时也提出了自动化测试所面临的挑战和解决方案。
|
2天前
|
敏捷开发 Java Devops
深入理解与应用软件测试中的Mock技术
【5月更文挑战第17天】 在现代软件开发过程中,单元测试是保证代码质量的重要手段。然而,对于依赖外部系统或服务的功能,如何有效进行单元测试一直是一大挑战。Mock技术的引入为这一难题提供了解决方案。本文将详细探讨Mock技术的概念、应用场景以及在实际软件测试中的优势和局限性,同时提供一些最佳实践和常见框架的使用指南。
|
4天前
|
程序员 测试技术
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。
【5月更文挑战第11天】程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。复杂的系统易产生意外问题,需求变化导致初始设计难完备,测试无法覆盖所有情况,而技术更新和个体能力差异也会引入错误。因此,持续调试和优化是保证软件质量的关键步骤。
16 0
|
4天前
|
敏捷开发 JavaScript 测试技术
深入理解与应用软件测试中的Mock技术
【5月更文挑战第5天】 在现代软件开发过程中,单元测试作为保障代码质量的重要环节,其独立性和可靠性至关重要。Mock技术应运而生,为开发者提供了一种在隔离环境下模拟外部依赖的方法。本文将深入探讨Mock技术的概念、实现方式及其在软件测试中的应用,旨在帮助读者更好地理解和运用这一强大的测试工具,以提升测试效率和软件质量。
|
4天前
|
安全 IDE Java
Java串口通信技术探究2:RXTX库单例测试及应用
Java串口通信技术探究2:RXTX库单例测试及应用
29 4
|
4天前
|
数据采集 机器学习/深度学习 人工智能
自动化测试中AI辅助技术的应用与挑战
【4月更文挑战第30天】随着人工智能(AI)技术的飞速发展,其在软件自动化测试领域的应用日益增多。本文探讨了AI辅助技术在自动化测试中的应用情况,包括智能化测试用例生成、测试执行监控、缺陷预测及测试结果分析等方面。同时,文章还分析了在融合AI技术时所面临的挑战,如数据质量要求、模型的透明度与解释性问题以及技术整合成本等,并提出了相应的解决策略。
|
4天前
|
JavaScript 前端开发 安全
【TypeScript技术专栏】TypeScript与Cypress端到端测试
【4月更文挑战第30天】随着前端开发复杂度提升,测试成为关键环节,Cypress因其强大的端到端测试和与TypeScript的集成备受青睐。TypeScript增强了代码的可读性和维护性,确保测试准确性和可靠性。在Cypress中,TypeScript用于定义测试变量、自定义命令和断言,提高测试代码质量。Cypress的优势包括模拟真实用户操作、时间旅行功能和强大的调试工具,能有效提升测试效率和准确性。结合两者,前端开发者能实现高效、全面的端到端测试。
|
4天前
|
JavaScript 安全 编译器
【TypeScript 技术专栏】TypeScript 与 Jest 测试框架
【4月更文挑战第30天】本文探讨了TypeScript与Jest测试框架的结合在确保代码质量和稳定性上的重要性。Jest以其易用性、内置断言库、快照测试和代码覆盖率分析等特点,为TypeScript提供全面的测试支持。两者结合能实现类型安全的测试,提高开发效率,并涵盖各种测试场景,包括异步操作。通过实际案例分析,展示了如何有效利用这两个工具提升测试质量和开发效率,为项目成功奠定基础。
|
4天前
|
监控 JavaScript 前端开发
【TypeScript技术专栏】TypeScript的单元测试与集成测试
【4月更文挑战第30天】本文讨论了在TypeScript项目中实施单元测试和集成测试的重要性。单元测试专注于验证单个函数、类或模块的行为,而集成测试关注不同组件的协作。选用合适的测试框架(如Jest、Mocha),配置测试环境,编写测试用例,并利用模拟和存根进行隔离是关键。集成测试则涉及组件间的交互,需定义测试范围,设置测试数据并解决可能出现的集成问题。将这些测试整合到CI/CD流程中,能确保代码质量和快速响应变化。

热门文章

最新文章