Windows注册表取证分析

ang010ela 新闻 2019年3月27日发布
Favorite收藏

导语:本文介绍FireEye咨询师开发的Windows注册表取证分析工具。

简介

FireEye咨询师在应急响应过程中经常需要对计算机网络进行取证分析,其中经常会使用Windows注册表数据。Windows注册表数据对发现恶意活动,找出哪些数据通过网络被窃取了非常有用。注册表中许多不同类型的数据都可以提供一些程序执行、应用设置、恶意软件驻留等的证据。

从过去的经验来看,对攻击活动执行取证分析非常困难。许多高级的攻击者都会使用一些反取证技术来隐藏攻击活动。因此,研究人员提供一个可以恢复历史和删除的注册表数据的方法,以执行注册表取证。分析过程主要针对以下历史注册表数据:

· 注册表事务日志(.LOG)

· 事务型注册表事务日志 (.TxR)

· 删除的注册表记录

· 备份的系统数据 (REGBACK)

· 用系统备份(System Restore)备份的数据

Windows注册表格式

Windows注册表保存在许多hives文件中。Hives是含有一个保存了key、值、数据和相关元数据的单元的简单文件系统的二进制文件。注册表hives在4KB的页面中读写,这个4KB的页也叫做bins。对Windows注册表hive的格式详细描述参见http://sentinelchicken.com/data/TheWindowsNTRegistryFileFormat.pdf或https://github.com/msuhanov/regf/blob/master/Windows%20registry%20file%20format%20specification.md。

注册表事务日志

为了最大化注册表的可靠性,windows在执行注册表文件写操作时可以使用事务日志。当注册表hive由于锁定或破坏无法直接写的时间可以使用事务日志。

注册表日志会写入与对应注册表hive相同目录中的文件。文件名也是相同的,唯一的区别是hive文件的扩展为.log。Windows可能会使用多个日志,那么使用的扩展可能就是.LOG1、.LOG2等。更多关于注册表事务日志格式的信息,参见https://github.com/msuhanov/regf/blob/master/Windows%20registry%20file%20format%20specification.md#format-of-transaction-log-files

注册表事务日志是Windows 2000中引入的,原始事务日志格式数据在事务日志开始时写入的。位图被用来表明日志中有哪些页面,以及页面的顺序。因为文件的开始位置经常会被覆写,因此很难从这些日志中恢复原来的数据。因为每次使用后,都有不同量的数据会写入到事务日志中,因此文件经过多次使用后仍然有可能存在一些以前的页面。但每个页面的位置必须通过当前hive中搜索页面来引用,恢复连续数据的可能性很小。

Windows 8.1中引入了新的注册表事务数据。新的日志使用的方式相同,但是格式是不同的。新的日志工作方式像一个环,其中最老的数据回被新数据覆写。新日志格式中的每个记录都含有一个序列号和注册表offset来使其很容易决定写的顺序以及哪些页面会被覆写。因此日志格式修改,数据被覆写的频率变低了,因此从这些日志文件中可以恢复出一些老的事务数据。

恢复的数据量取决于注册表的活动。从真实系统的事务日志样本数据来看,恢复需要的时间从几天到几周不等。但Windows系统更新这类注册表经常更新的活动会导致减少可恢复的数据的范围。

虽然新的日志格式含有更多可恢复的信息,但将注册表页集合变成有用的数据非常复杂。

首先,需要追踪注册表的所有页面以确定每次写导致的数据变化。还需要确定这些变化是否会导致新数据和记录的产生。

目前处理注册表事务文件使用的算法如下:

· 用序列号降序对所有写操作进行分类,这样可以处理最近的写操作。

· 对分配和未分配的单元进行分析来找出分配和删除的记录。

· 与原始hive中的记录进行比较。现在没有的记录都被标记为删除或logged。

事务日志示例

本例中,研究人员在Run key下创建了注册表值,可以在用户登入系统后开启执行malware.exe。

图1: 恶意用户在Run key中创建值

之后,恶意软件会被移除。注册表值在删除前就被覆写了。

图2: 恶意值被覆写和删除

虽然被删除的值仍然在hive中,但是因为被覆写了,因此现有的取证工具无法恢复出数据。

图3: 覆写的值仍然在注册表hive中

但本例中,事务日志中的数据仍然在,而且可以恢复。

图4: 事务日志中含有原始值

Transactional Registry Transaction Logs (.TxR)

除了transaction log journal外,也有事务注册表子系统使用的日志。应用可以使用事务注册表来执行复杂的注册表动作。这是应用安装器最常用的,因为可以简化失败的操作回滚。

Transactional registry logs会使用Common Log File Sytstem (CLFS)格式。日志文件保存的格式为<hive><GUID>.TxR.<number>.regtrans-ms。

这些文件都保存在和hive相同的目录中,当用户登出后就会被清理。但系统hive日志保存在%SystemRoot%\System32\config\TxR中,这些日志文件并不会被自动清除。因此,可能从系统事务日志数据中恢复出来历史数据。

transactional logs的格式并不好理解,而且没有现成的文档。

研究人员实验确定了基本的记录格式,确定了创建和删除注册表的记录,以及注册表值写和删除的记录。相关的key路径、值名、数据类型和数据都在日志记录中,事务日志记录格式详情参见。

虽然大多数注册表事务日志中的数据对入侵调查并没有什么用,但是在一些案例中这些数据是非常有用的。尤其是研究人员发现创建和删除计划任务都回使用注册表事务。通过对注册表事务日志进行分析,研究人员找出了攻击者在系统中创建计划任务的证据,而这些数据只存在于这一个位置。

计划任务从Windows Vista到Windows 8.1都使用transactional registry操作,但是从Windows 10开始没有这样的行为。目前仍不清楚为什么Windows 10中的行为不同。

Transactional Registry示例

本例中,研究人员创建了一个计划任务,该计划任务可以周期性的运行恶意软件。

图5: 创建计划任务来运行恶意软件

关于计划任务的信息保存在注册表中。

图6: 任务计划创建的注册表记录

因为计划任务会被写入事务的注册表操作使用的注册表中,这是事务的注册表事务日志(transactional registry transaction log)中可用的数据副本。当计划任务从系统中移除后日志中仍然存在该数据。

图7: TxR日志中的恶意计划任务

删除的记录恢复

除了事务日志外,研究人员还验证了从注册表hive文件中删除的记录的恢复方法。

删除的记录恢复需要对hive文件中的注册表单元进行分析,这是相对直白的。FireEye有许多可以读取原始注册表hive文件和从单元中分析相关的key、值和数据。恢复删除的数据更加复杂,因为一些信息在元素被删除时丢失了。更复杂的方法需要处理导致的模糊性。

现有恢复已删除记录的方法

研究人员分析总结了从注册表hive文件中恢复已删除元素的方法,相关变种有:

· 通过所有未分配的单元搜索删除的key的单元

· 从删除的key中找出引用的删除的值

· 通过所有现有的未分配的单元搜索未引用的删除的值单元

· 从所有删除的值中找出引用的数据单元

· 恢复删除记录的新方法

研究人员重新设计以改进该算法来增加恢复删除的注册表元素的准确度和效率。经过多轮实验和改进后,研究人员最终得出一个可以以最优性能来准确恢复删除的注册表元素的新算法。算法发现和追踪了注册表hive中的所有cell来更好地执行验证,处理cell slack space,发现orphaned keys and values.

新算法总结见https://www.fireeye.com/blog/threat-research/2019/01/digging-up-the-past-windows-registry-forensics-revisited.html

删除后恢复示例

下面的例子证明删除的记录恢复算法可以执行更加精确地数据恢复,避免假阳性的出现。图8是一个驻留注册表取证工具数据恢复错误的例子:

图8: 未正确恢复的注册表数据

从key中恢复的ProviderName是混乱的,因为它引用了一个被覆写的位置。当删测注册表恢复工具运行在协同hive时,会识别出该区域已经被覆写了,因此不会输出不准确的文本。图9中的data_present域中的值0表示删除的数据不能从该hive中恢复。

Key: CMI-CreateHive{2A7FB991-7BBE-4F9D-B91E-7CB51D4737F5}\
     ControlSet002\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0019
Value: ProviderName  Type: REG_SZ  (value_offset=0x137FE40) (data_size=20)
     (data_present=0) (data_offset=0x10EAF68) (deleted_type=UNALLOCATED)

图9: 验证过的注册表数据

注册表备份

Windows有一个机制可以周期性的备份系统注册表hive。Hive是用一个计划任务RegIdleBackup备份的,RegIdleBackup默认每隔10天运行1次。备份的hive保存在%SystemRoot%\System32\config\RegBack中,而且只有最近的备份文件才保存在该位置。因此对系统的最近活动取证非常有用。

RegIdleBackup特征最早是Windows vista中引入的,之后再Windows所有版本中都引入了,但是Windows 10系统中并不是默认运行的,即使手动运行,也不会创建备份。RegIdleBackup从win 10中移除的原因尚不清楚。

除了RegBack,注册表数据还可以用System Restore来备份。当软件安装或卸载后,包括Windows更新后,默认会创建System Restore快照。因此,System Restore快照至少每个月会创建一次。System Restore snapshots中含有包括系统和用户hive在内的所有注册表hive。

总结

注册表对取证来说就是一笔数据宝藏。因为有许多删除的和历史数据源,因此在调查取证过程中可以聚集一个完整的攻击者活动图谱。调查和分析者需要发现和应对攻击者的整个攻击过程中遗留的线索。

本文翻译自:https://www.fireeye.com/blog/threat-research/2019/01/digging-up-the-past-windows-registry-forensics-revisited.html如若转载,请注明原文地址: https://www.4hou.com/info/news/15731.html
点赞 2
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论