2023年12月11日发(作者:)

信息技术与安全Information Technology And Security电子技术与软件工程Electronic Technology & Software Engineering主机内存提取分析技术的研究与应用丁兆锟林思成(南京拓界信息技术有限公司江苏省南京市210014 )摘要:本文通过对主机内存提取与分析技术的研究,结合不同密码在内存中的存在形式,提出了不同加密场景下利用内存分析技术

解决密码问题的应用,为电子取证中主机密码的突破提供了 一定的思路与方法。关键词:内存提取;内存分析;密码突破1内存提取1. 1硬件提取方法在利用硬件提取内存数据的方法中,最主要的方式就是采用硬

件卡结合DMA

(Direct

Memory

Access,直接访问内存)指令来提

取内存数据。主要有以下几种方式:(1) 基于PCI扩展卡获取物理内存;(2) 基于IEEE 1394火线接口获取物理内存;(3) 基于固件、网卡或雷电接口获取物理内存。利用硬件提取内存的方法可以应用在Intel架构的操作系统中,

如Windows,Linux,Mac

OS等,由于使用的是DMA方式,所以

无需CPU参与,就能够读取内存,同时还能够避免运行程序导致

的内存数据变化。但这种方式需要硬件的支持,部分早期的PCI硬

件卡还需要在提取数据前就插入主板中,这对于现场取证来说适用

性不高,而且部分新版BIOS限制了利用固件接口获取物理内存。1. 2软件提取方法软件提取主要利用软件工具来获取内核内存区域的数据,并借

助于操作系统的内核数据结构和相关机制去解析重构内存数据。主

要有以下几种方法:1.2.1系统崩溃转储当操作系统崩溃时,系统会记录当前状态下的系统信息,方便

用来分析崩溃的原因。因此,可以利用操作系统的崩溃转储机制,

来获取系统崩溃时的内存状态记录数据。对于Windows系统来说,

系统崩溃后会在“C:WindowsMinidump”目录中生成一个内存转

储文件,或利用Windows系统内置的CrashOnCtrlScroll功能(默

认关闭,需手动开启),获取崩溃转储数据。但由于该方法需在系

统崩溃之后获取文件,所以可能会对目标系统的环境状态造成严重

破坏,从而不利于开展后续相关的取证工作。1.2.2系统休眠文件当系统进入休眠状态时,会先将内存中的数据全部写入到硬盘

的休眠文件中,然后停止对整机的供电,在下次开机时,系统会直

接读取生成的休眠文件,并加载到内存中,从而使得系统能够快速

恢复到休眠之前的状态。因此,休眠文件也成了获取内存数据的一

种方式,Windows系统进入休眠模式后,会在C盘根目录下生成休

眠文件,该方法就是通过文件来获取内存数

据。1.2.3内存取证工具当系统处于运行中时,可以通过运行内存取证程序来获取内存

镜像,不同的操作系统平台中都有对应的软件工具,例如Windows

系统中的Dumplt、FTK

Imager,Linux系统中的DD工具、LiME等,

利用对应工具就可以提取到正在运行状态下的程序所产生的内存数

据,但由于运行软件的操作也会将程序放入内存中,所以就会破坏

部分原始内存数据。2内存分析2.1进程分析进程是程序运行的实例,在内存中有其特殊的结构和映射关系。

进程取证分析主要通过定位内存中进程的相关内核数据结构来提取

关键的信息。目前主要有以下3种方法:(1)基于进程块EPROCESS结构和线程块ETHREAD结构的

取证分析;(2 )基于

KPCR

(Kernel

Processor

Control

Region)内核处理器控制区的取证分析;(3)基于

VAD

(Virtual

Address

Descriptor)虚拟地址描述符的取证分析。以进程块EPROCESS结构为例,Windows系统中的进程运行

后都会在内存中产生一个EPROCESS结构对象,操作系统会将该

进程的相关代码段序列化加载到对应的EPROCESS结构体中,该

结构体中包含了许多进程的重要属性与运行时属性,其中运行时属

性仅在进程运行过程中才会产生,所以这部分数据也是内存提取与

分析中的重点关注数据。以下是部分进程属性的说明:(DCreateTime:进程创建时间属性,其中存储了进程运行的

开始时间;图3:

Windows 7系统休眠功能00D208C000D2O8D000D208E0图1:内存进程列表00nnn〇ft«irnD9AAA6HQF8D51DRR

A9E450RA

0E23FC104r»705699DBEBR1T2

4590B7819FB4B7DCQOARS

图2:密钥位置88lD97flR

9581F8rn

331C0EHA

0E03ll00nn

4242ftrl

霣?..九?1JE3..FY

4641O0S

59C388A7

?i«. ?... BA7AX

?PP巧鼸存茗?" B. ?

45 9VM240电子技术与软件工程信息技术与安全Electronic Technology & Software Engineering(2)

ExitTime:进程退出时间属性,其中存储了进程结束的时间;(3)

2. 2密钥分析Information Technology And Security以文件的方式保存下来。在Windows 7系统进程中,进程负责验证用户登录

ProcessID:唯一标识符,其中包含了系统分配给每一个

系统时输入的用户名、密码是否正确,当成功登陆系统后,lsass.

exe进程会缓存用户名和密码,并将其加密存储在进程的内存中,

进程的具有唯一性的标示符。操作系统在运行过程中,内存中往往会存在很多的密钥信息,

比如系统登录密码、BitLocker全盘加密的密钥信息、第三方加密

工具的密钥信息,部分应用程序,如微信,QQ等的数据库密钥信息。

对于己加密的密钥,通常会在程序运行时在内存中进行解密。因此,

要想解密相关的应用系统,首先就需要获取系统的动态内存,进而

在内存中获取相关密钥信息。内存取证密钥恢复分析主要通过解析相关密码算法的内存存储

格式,从中还原出密钥信息,密钥提取技术较多运用了特征模式匹

配的方法。例如针对AES扩展密钥结构的内存镜像搜索方法,能

够匹配到有效的密钥结构特征的内存块。对于加密算法在内存中的

密钥结构特征识别与匹配的研宂,也是近年来内存取证分析中的重

点研宂领域。2. 3其他分析方法内存分析中还有其他方法用来分析特定的数据,如基于注册表

的取证分析能够找出用户使用系统相关的配置信息,交互过程等,

基于网络连接的取证分析可以快速定位系统中网络访问行为痕迹与

网络连接信息,如ip地址、端口号等。3内存分析在密码突破中的应用3.1解密Windows端微信数据库Windows端同时存储在内存中的还有用来加密用户名和密码的密钥。因此当

Windows系统休眠时,这些在内存中数据就会保存到休眠文件中,

通过分析休眠文件,就可以从中提取出加密的用户名、密码以及密

钥,从而解密出系统的明文密码。但由于休眠文件是以文件的形式存储在磁盘中,所以当目标系

统启用了

BitLocker全盘加密或系统盘加密后,则无法直接分析休

眠文件提取密码,此时的文件都是密文状态存储。3. 3解决主机全盘加密问题随着数据安全意识的提高,实际工作中碰到全盘加密的情况越

来越多,对于Windows和Linux系统来说,最常使用全盘加密方式

分别是

Bitlocker 与

LUKS

(Linux

Unified

Key

Setup),而开启全盘

加密后,传统方法获取到的数据是无法明文查看的。因此,需要在

内存分析技术的基础上,解决全盘加密问题。通过对Linux源码的分析,可以发现系统在登录过程中会调用

相应函数进行密码校验,该函数为启用selinux时的验证分支,此

时系统会调用unix_chkpwd模块进行验证。因此,通过相^硬件接口访问内存后,结合内存分析技术,检

索Linux系统内存中的相关函数,找出登录过程中调用的校验函数,

利用反汇编原理,修改校验用户名密码的代码,从而实现在登录界

面中输入任意密码都可以通过校验,直接登录系统。在Windows系统中,存在着和Linux类似的校验方法,其校验

过程不再资述。因此,对于Windows的BitLocker全盘加密来说,

也能够利用同样的方式通过校验,实现无口令进入系统,获取明文

数据。4总结内存提取分析作为计算机取证领域的一个研究方向,在主机密

码提取、数据解密等方面有着重要作用。本文通过分析内存镜像中

不同密钥的结构特征,提出了解密微信数据库、提取系统登陆密码

以及解决全盘加密问题的过程与方法,为主机取证中存在的密码难

题提供了一定的思路。参考文献[1] 张瑜,刘庆中,李涛,吴丽华,石春.内存取证研究与进展[J].

软件学报,2015, 26 (05): 1151-1172.[2] 殷联甫.计算机取证中的物理内存取证分析方法研究[J].计

算机应用与软件,2010, 27 (12): 295-298.[3] 王峰.基于Windows的易失性内存数据取证分析方法研究[D].

吉林大学,2012.[4] 李艳.电子取证中的隐形数据及其相关处理技术探究[J].警

察技术,2011 (04): 48-51.[5] 刘立根.内存镋像中BitLocker密钥提取及应用研究[D].重

庆邮电大学,2016.[6] 陈宇.Linux安全增强身份认证系统的研究与实现[D].中国科

学院大学(中国科学院工程管理与信息技术学院),2017.作者简介丁兆锟( 1978-),男,江苏省南京市人。大学博士学历,工程师。

研究方向为信息安全技术。林思成( 1993-),男,陕西省汉中市人。硕士研究生学历。研究

方向为电子数据取证。的微信数据库是加密的,默认存放于CA

Users%usemame%DocumentsWeChat

Files 微信账号

Msg 文件夹

中,不同于手机端的微信数据库7位密钥的加密方式,Windows端

的微信密钥是32字节,由于PC端的微信数据库仅在登录状态时才

会加载密钥进行解密,因此需要获取微信登录状态下的内存镜像,

进而分析出解密密钥。首先利用Volatility工具分析内存镜像的特性,确定该内存的分

析命令参数,可能存在多个建议的参数,可逐个尝试以获得最优结

果。然后分析该内存镜像中的进程列表,并确定微信进程的PID号,

如图1所示。利用该P1D可以从内存镜像中提取出微信进程的内存空间及内

存映射表。然后分析丨在内存镜像中的加载基址,根

据基址和该版本的偏移量,可计算出解密密钥在内存中的虚拟地址,

依据虚拟地址在内存映射表中记录的位置,找到对应微信进程内存

空间的密钥存储位置信息,再根据此位置信息查找内存映射表中密

钥偏移量,最后在内存空间中找到对应偏移量下的32个字节作为

rawkey,如图2所示。该微信数据库的

rawkey 即为:“EE4659AAD5E423

6995B71D9F81811C114241C3A61D50FCBEBDB797”,利用

rawkey并结合所要解密数据库的头部字节,可计算出该数据库的解密密钥,

使用该密钥即可解开加密数据库,读取明文字段。3. 2提取休眠文件中的登录密码上节中提到休眠文件也是内存的表现形式之一,对于系统为

Windows 7的主机,在锁屏界面点击切换用户后,右下角会出现电

源选项,且点击该选项后默认会有休眠按钮,如图3所示。点击休眠按钮后,系统会先在硬盘中生成休眠文件(hiberfil.

sys),然后进入休眠状态。Windows的休眠功能其实就是将内存

数据与会话保存至硬盘,以便计算机断电重新启动后可以快速读取

休眠文件,恢复系统和用户会话。休眠过程中,部分系统进程也会241