APP下载

基于“关键函数”断点设置木马的逆向取证方法

2018-11-02徐国天

中国刑警学院学报 2018年5期
关键词:断点注册表木马

徐国天

(中国刑事警察学院网络犯罪侦查系 辽宁 沈阳 110035)

1 引言

木马恶意程序隐藏在受害者计算机系统或智能终端设备内,在后台悄悄记录用户输入的敏感信息,窃取受害者主机内的涉密文件,甚至监听受害者的语音、视频和网络通信数据[1]。可以说,木马恶意程序已对互联网安全构成严重威胁,研究木马恶意程序的电子数据取证方法对公安机关的侦查办案工作有实际意义。

目前,木马恶意程序常用的取证方法是逆向分析法[2],这种方法是使用Ollydbg等反汇编分析工具将木马的样本程序反编译为汇编代码,再通过分析汇编程序了解木马的执行逻辑,进而提取出相关线索信息,完成取证分析工作。逆向分析方法要求取证人员具备汇编语言程序设计基础,同时需要阅读的汇编代码量也非常大,这些因素导致取证周期长、难度大。为了降低取证难度、提高分析效率,本文提出一种基于“关键函数”断点设置的木马恶意程序取证分析方法。

2 基于“关键函数”断点设置的木马恶意程序取证方法

通过对多个木马样本进行分析,我们发现不管是什么类型的木马恶意程序通常都要实现几个特定的核心功能,如进程隐藏、开机自动运行、躲避杀毒软件查杀、绕过防火墙拦截、实现与攻击者的远程通信联络、实现特定的恶意功能等[3]。这些核心功能在实现时都需要使用特定的系统函数,如发送邮件需要使用connect和socket函数,写注册表实现自启动需要使用RegOpenKey函数,实现键盘记录需要获得窗口标题,这时通常使用GetWindowText函数。在这些函数上设置访问断点可以获知木马的核心功能,也可以通过传递给函数的相关参数得到重要的线索信息,例如通过GetWindowText函数可以获知木马对哪个窗口标题进行了监控。

基于“关键函数”断点设置的木马恶意程序取证方法如图1所示,首先取证工具Lordpe分析木马程序使用了哪些系统函数,从一些关键的系统函数可以初步判断出恶意程序采用了哪些功能(例如木马使用了createfile和deletefile函数,说明它很可能向硬盘释放了特定文件,同时还进行了文件删除操作),在关键函数上设置访问断点,动态调试木马程序,程序会自动停在断点位置,从函数的传入参数可以提取出关键的涉案信息(例如创建或删除的文件名称和路径),使用这种方法可以简化木马程序的取证分析工作。

图1 基于“关键函数”断点设置的木马恶意程序取证分析方法

本文以一款名为“红蜘蛛”的盗号木马为例,研究基于“关键函数”断点设置的恶意程序取证分析方法。这款木马程序文件的名称是“红蜘蛛v119版.exe”,文件大小为57344字节,文件的MD5值为7C49FF0DE960DC67C1F52C00CD9E3423。本文研究对象为脱壳后的木马恶意程序,具体的脱壳技术不在文章讨论范围内。

3 木马文件操作行为取证分析

首先使用Loadpe工具打开“红蜘蛛v119版.exe”,查看木马程序使用了哪些系统函数,结果如图2所示。木马程序使用了KERNEL32.dll和ADVAPI32.dll两个动态链接库,点击每个dll文件名,会显示出木马使用了该dll文件中的哪些系统函数。

我们首先对CreateFile函数进行分析,函数的原型定义如图3所示。这是一个多功能函数,可打开或创建以下对象:通信资源、控制台、磁盘驱动器、目录、文件、管道、邮槽,返回可访问的句柄。函数共有6个参数,lpFileName表示即将打开的文件名称,通过这个参数可以确定木马创建的文件名称和存储路径。dwDesiredAccess指定访问对象的模式,如果值为GENERIC_WRITE 表示允许对设备进行写访问;如果该值为GENERIC_READ表示允许对设备进行读访问;如果值为零,表示只允许获取与一个设备有关的信息。dwShareMode表示共享模式,如果值为零表示不共享,例如值为FILE_SHARE_READ表示读请求可以成功执行;值为FILE_SHARE_DELETE表示删除请求可以成功执行;如果值为FILE_SHARE_WRITE表示写请求可以成功执行。lpSecurityAttributes指向一个SECURITY_ATTRIBUTES结构体指针,定义了文件的安全属性。dwCreationDisposition代表文件如何创建,具体含义结合木马实例分析。dwFlagsAndAttributes表示文件属性。hTemplateFile存储一个文件或设备句柄,表示以这个参数给出的句柄为模板创建文件。它将指定文件的相关属性复制到新创建的文件上,这个参数可用于将某个新创建文件的属性设置成与现有文件属性完全相同,这种情况下函数会自动忽略dwFlagsAndAttributes参数。通常情况下这个参数值设置为NULL,表示不使用任何模板。

图2 使用Loadpe查看木马程序使用了哪些系统函数

图3 CreateFile函数原型定义

使用Ollydbg在CreateFileA函数上设置访问断点,当木马程序中断在这个位置时,从lpFileName参数可以获得木马向硬盘释放文件的路径和名称。图4显示的是木马程序第一次中断时Ollydbg显示的系统堆栈状态,通过系统堆栈可以看到木马程序传递给CreateFileA函数的7个参数值。第一个参数FileName显示木马程序向C:WINDOWSsystem32路径释放了一个名为redspider.dll的文件。

图4 第一次中断时,系统堆栈显示的参数信息

再次按下F9键,木马程序第二次中断在CreateFileA函数的入口位置。图5显示的是第二次中断时,系统堆栈显示的参数信息。可见木马向C盘根目录释放了一个名为inflexible.wav的文件。

图5 第二次中断时,系统堆栈显示的参数信息

从扩展名来看,inflexible.wav应该是一个音频文件。但是,查看该文件属性显示大小只有303字节,显然不符合音频文件的容量特点。使用记事本打开这个文件,查看到的结果如图6所示。这组数据疑似木马设置的相关参数,发送邮件服务器使用的是smtp.163.com,发信邮箱是stp888@163.com,邮箱登录密码是86982430。其他信息的含义和作用需要通过汇编代码分析来加以确定。

图6 inflexible.wav文件内容

4 进程隐藏方式分析

为了防止恶意程序被发现,木马运行之后通常不会在受害者主机系统内产生一个独立的进程,而是将自身隐藏到某个合法进程之内。目前经常采用的进程隐藏技术是远程线程植入,木马源程序以dll文件形式存在,通过远程线程植入方式进入目标进程运行。这样一来,就可以获得合法进程的相关权限。例如用户计算机上的防火墙软件通常会拦截某个客户程序与因特网的主动连接请求,但是不会拦截IE浏览器进程与外界的通信连接,否则用户将不能浏览任何网页信息。木马程序只要将自身植入IE浏览器进程,就可以合法进程身份通过防火墙的拦截,与外界进行网络通信。

使用Loadpe查看到“红蜘蛛v119版.exe”木马程序使用了4个涉及远程线程植入的系统函数:OpenProcess、VirtualAllocEx、WriteProcessMemory和CreateRemoteThread。OpenProcess函数的主要功能是打开一个进程,同时返回该进程的句柄。WriteProcessMemory函数负责将dll恶意程序数据内容写入到合法进程的地址空间里。CreateRemoteThread函数负责远程启动dll恶意程序。

从这些系统函数传递的参数里可以获得重要的涉案信息,参数关系分析如图7所示。OpenProcess函数的第三个参数dwProcessId代表被打开的目标进程PID,利用这个数值可以确定木马附着到哪个系统进程上。OpenProcess函数的返回值是一个HANDLE类型的句柄,这个值和WriteProcessMemory函数的第一个参数以及CreateRemoteThread函数的第一个参数值相同,通过该值可以进行关联。WriteProcessMemory函数的第三个参数lpBuffer存储了dll恶意程序的路径和名称,第二个参数存储了恶意程序写入内存的起始地址,这个参数和CreateRemoteThread函数的第五个参数值相同。通过这些函数之间的相互关系,可以确定一个dll恶意程序被加载到哪个系统进程之中。

使用Ollydbg对“红蜘蛛v119版.exe”木马程序进行分析,在图7所示3个函数上设置断点,提取出函数中断时传递的内存参数,分析结果如图8所示。OpenProcess函数的ProcessId参数值为3784,调出任务管理器查询到这个PID对应的是explorer进程。函数返回一个句柄,值为0X0028,这个值与WriteProcessMemory函数和CreateRemoteThread函数的第一个参数相同,说明木马使用这两个函数向explorer进程写入数据。WriteProcessMemory函数的第三个参数存储了被写入dll文件的存储路径和名称,查看起始地址为0X00407CFC的内存区域可以看到“C:WINDOWSsystem32 edspider.dll”字符串,可见恶意dll程序被附着到explorer进程。

图7 从函数参数中提取涉案线索

图8 使用Ollydbg分析函数参数

5 木马的自动运行方式分析

木马程序为了实现对受害者主机的长久、稳定控制,通常要实现开机自动运行机制,即木马程序在受害者主机每次开机后自动运行。木马自动运行方式的分析对于从主机内清除恶意程序至关重要。使用Loadpe查看“红蜘蛛v119版.exe”,发现在ADVAPI32.dll链接库下存在3个与注册表操作相关的系统函数:RegOpenKeyExA、RegSetValueExA和RegCloseKey函数。对注册表执行写入操作是实现程序开机运行的常用方式,我们先来分析这几个函数的参数关系。

图9说明了RegOpenKeyEx和RegSetValueEx函数的参数关系,RegOpenKeyEx函数的第一个参数hKey存储了准备打开的主键、第二个参数lpSubKey存储了准备打开的子键、第三个参数phKResult和RegSetValueEx函数的第一个参数存储的是相同的句柄值,通过这个数值可以确定是对注册表哪个键值进行操作。RegSetValueEx函数的第二个参数lpValueName存储的是写入的变量名称,第五个参数存储写入的变量值。通过在这两个函数上设置断点,可以获得传递的参数值,进而明确木马向那个注册表键值写入了什么数据。

图9 注册表操作函数参数关系分析

图10 使用Ollydbg分析函数的参数关系

使用Ollydbg对“红蜘蛛v119版.exe”木马程序进行分析,在图9所示两个函数上设置断点,提取出函数中断时传递的参数值,分析结果如图10所示。RegOpenKeyEx函数的前两个参数hKey和SubKey指明木马操作的注册表键值为“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”,这个键值存储的是计算机的开机启动项,该键值下的应用程序将在计算机开机后自动运行。第五个参数存储的是打开句柄,本例值为0X00000024,这个数值与RegSetValueEx函数的第一个参数值相同,通过该值可以确定RegSetValueEx函数是对之前打开的键值进行写入操作,写入的变量名为RedSpider,变量值存储在第五个参数中,即内存地址0X00407C84位置。直接查看这个内存位置,可以看到存储的数值为“C:WINDOWSsystem32 edspider.exe”,说明计算机开机后,将自动运行系统目录下的redspider.exe程序,但此时该程序文件还没有生成。

6 木马主体程序分析结论

“红蜘蛛v119版.exe”主体程序引用的动态链接库中没有使用到网络通信函数和键盘监控等相关函数,因此,对主体程序的分析可以暂时告一段落,分析结论如图11所示。通过文件操作行为分析发现木马向系统目录下释放了一个名为redspider.dll动态链接库文件,向C盘根目录下释放了一个名为inflexible.wav的参数配置文件。通过进程隐藏方式分析发现木马程序通过远程线程植入的方式将redspider.dll植入explorer进程空间运行。通过自动运行方式分析发现木马在注册表启动键下写入键值,实现开机自动运行redspider.exe程序,但是此时这个exe文件还未生成。“红蜘蛛v119版.exe”的主要任务已经完成,接下来木马的主要功能转由redspider.dll恶意程序来实现。

7 总结

本文提出了一种基于“关键函数”断点设置的木马恶意程序取证分析方法,并通过一个实例对这种方法的具体应用进行了研究。这种取证方法从木马恶意程序使用的核心系统函数入手,通过设置断点、获取参数值,进而判断恶意程序的主要功能,可以规避大量汇编代码的阅读工作、简化分析难度、缩短取证周期。

图11 木马主体程序分析结论

猜你喜欢

断点注册表木马
一种适用于继电保护在线整定的极小断点集求取算法
小木马
骑木马
小木马
用Eclipse调试Python
一类无限可能问题的解法
旋转木马
三维地震在新疆伊宁矿区北区七号矿井勘探的应用
更上一层楼 用好注册表编辑器
注册表的便捷用法