APP下载

恶意软件的取证分析方法研究

2014-02-23张俊

湖北警官学院学报 2014年11期
关键词:注册表进程内存

张俊

(湖北警官学院信息技术系,湖北武汉430034)

恶意软件的取证分析方法研究

张俊

(湖北警官学院信息技术系,湖北武汉430034)

针对恶意软件,提出了3种取证分析方法,即静态分析、动态分析和内存分析。在多数情况下,静态和动态分析将产生足够的效果,但是,内存分析有助于确定隐藏的痕迹,也有助于rootkit检测和解析,从而提供更详细和有价值的结果。

恶意软件;取证分析方法;静态分析;动态分析;内存分析

恶意软件(Malware),是一种未经使用者同意就进入并危害计算机系统的软件,包括病毒、木马、蠕虫、后门等类型。恶意软件取证,就是通过行为分析和特征描述,确定其产生的危害后果与其功能的因果关系,同时还为检测和消除提供技术指导。因恶意软件的种类和数量巨大,不断利用新技术进行演化和变形,加上检测和清除工具的滞后,所以成为电子数据取证的一个重要内容,调查人员对安全事件中的疑似恶意软件进行取证分析,就显得至关重要。

恶意软件取证分析工作有几方面:第一,确定恶意软件的性质和目的,即恶意软件是否属于信息窃取、HTTP僵尸、垃圾邮件机器人、Rootkit、后门、键盘记录器、远程访问工具(RAT)等。第二,描述恶意软件与操作系统的交互作用,如对文件系统、注册表、网络活动、权限控制及用户使用体验的影响。第三,建立恶意软件的危害方式和危害结果的联系,如1个木马程序在何时、从何处、以何种方式进入用户计算机,修改和影响了哪些文件和功能,窃取了哪些用户机密文件和数据等。最后,如果需要,可以建立和检测可识别的模式来预防和修复未来的感染,包括特征字符串、行为序列,利用的系统和程序漏洞,网络端口活动等。

一、恶意软件取证的类型

根据取证分析时所选取的恶意软件的运行状态不同,恶意软件取证可分为静态取证、动态取证和内存取证。这些取证分析方法,分别有不同的使用场合和功能特点。

(一)静态分析方法

静态分析,是指在不需要实际运行情况下,分析恶意软件功能和特性的方法,主要步骤有:

1.确定文件类型。文件的扩展名,不能用来作为唯一的确定其类型的标志。恶意软件编写者,可以把可执行文件(例如.exe文件)的扩展名去掉,或者改变成任何其他扩展名,例如.jpg,使用户误认为是图片文件。确定文件类型,还可以帮助了解恶意软件针对的环境类型,若文件类型是一种原生的Windows可执行文件格式,即PE(可移植可执行文件)格式,那么,就可以断定该恶意软件针对的是Windows系统。简单的文本文件,如脚本和html文件,可直接查看文件内容来确定其类型,其他文件可利用文件头的分析来确定。

2.确定哈希值。MD5和SHA1哈希值,可作为恶意软件的唯一标识符,或称为文件签名。恶意软件在执行后,会复制自身到别的地方或删除恶意软件某一部分,哈希值可帮助确定最新复制或删除的样品与原始样品是否为同一个,然后可决定分析是对单个还是多个样品。哈希值也可提交到在线杀毒扫描服务,如VirusTotal,以确定它是否先前已经被一些反病毒厂商检测过。哈希值还可用于搜索互联网上特定的恶意软件样本,用来计算特定的恶意软件被谁下载、下载了多少次。Linux系统的md5sum和Windows系统的md5deep、Hashcalc、HashMyFiles等,可用来确定恶意软件的哈希值。

3.字符串搜索。字符串是嵌入文件中纯文本的ASCII或UNICODE字符。虽然字符串搜索不能提供文件的功能和能力的全貌,但可提供与其关联的功能和命令的线索,如文件名、URL、域名、IP地址、注册表键值等信息。Linux的字符串实用程序和Windows的BinText、UltraEdit等,都可用来在一个可执行文件中找到嵌入的字符串。

4.加壳、封包和加密检测。为了逃避防病毒软件和入侵检测系统,恶意软件制作者经常使用加壳、封包和加密的方法来混淆文件内容。加壳使恶意代码难以定位,封包使恶意代码指令与其他普通指令混杂在一起,加密使关键数据和代码改变了形态,而且三者的合用使解包和逆向工程相当棘手。但是,一旦脱壳方法、封包类型或加密方法能确定,就有希望手工找到安装包或资源,那么解包或解密就有希望。ProcDump、PEID或RDG安装包探测器,可用来在可执行文件中检测封包。

5.提交给在线杀毒扫描服务。这将帮助确定可疑文件中的恶意代码签名。通过访问相应的防毒软件厂商网站,或在搜索引擎中搜索签名,可得到可疑文件的更多信息。这种信息可能有助于进一步调查,并减少分析时间。很多安全公司都提供这种在线服务,如国外的VirusTota(lhttp://www.virustotal.com)、Jot(thttp://virusscan.jotti.org)和国内的“火眼”(https:/ /fireeye.ijinshan.com/)、Virscan(http://www.vi rscan.org/)等,都是流行的基于恶意软件扫描服务的网站。

6.检查文件依赖性。Windows可执行文件会加载多个DLL(动态链接库)文件,并调用API函数来执行某些动作,如解析域名、添加注册表值、建立HTTP连接等。通过确定DLL的类型和可执行文件导入的API调用列表,可大致判断恶意软件的功能。Dependency Walker和PEview是可用于检查文件相关性的工具。

7.文件反汇编。也称为逆向工程(Reverseengineering),是指利用特殊的技术将可执行文件还原为容易理解的汇编程序。通过反汇编,调查人员能够探究恶意软件执行的指令,帮助追踪那些通常不会在动态分析中确定的路径。IDA Pro是一个流行的静态反汇编工具,支持多种文件格式。

(二)动态分析方法

动态分析,是类似“黑箱子(Black Box)”的分析方法,是指在受控环境中执行恶意软件样本(例如在其运行时候监测,或者在其执行后检查系统),以分析其本地感染及网络传播行为。通常情况下样本会释放出病毒体,并复制到系统目录下,通过添加到注册表的系统启动项、系统服务启动项、注入系统进程中等方式激活。动态分析需要使用文件监视工具、注册表监视工具等来确定其行为。有时由于文件封包和加密,静态分析得不到太多的信息,那么,动态分析就是识别恶意软件功能的最佳途径。以下是动态分析涉及到的步骤:

1.监控进程活动。运行恶意程序并检查其产生进程的属性,以及被感染系统上运行的其他进程。这种技术可以揭示进程信息,如进程名、进程ID、可执行程序的系统路径,以及可疑程序所加载的模块。可利用的工具包括进程资源管理器(ProcessExplorer)、Capturebat和Procmon等。

2.监控文件系统活动。在恶意软件运行的时候,实时检查文件系统的活动,以揭示有关恶意软件执行时打开文件、新建文件和删除文件的信息。Filemon和Capurebat是可用于检查文件系统活动的强大监控工具。

3.监视注册表活动。Windows注册表,用来存储操作系统和程序的配置信息。恶意软件经常用注册表来获得持久性或存储配置数据。监视注册表的变化可带来一些信息,如哪个进程正在访问主机系统的注册表键及正在读取或写入注册表中的数据。这种技术还可揭示计算机启动时自动运行的恶意软件组件。Regshot、RegMon、Procmon和Capturebat是用注册表来跟踪恶意软件交互的工具。快照工具RegSnap进行注册表和指定目录下的文件进行前后对比,快速找出病毒新建和修改的注册表,以及本地文件的释放行为。

4.监控网络活动。运行恶意软件样本的过程中,还可监测系统的网络流量,如后门与木马在成功感染后,会把搜集到的用户信息发送出去,或是主动连接远程主机,下载病毒主程序。通过网络监视工具发现病毒的网络行为,有助于确定该恶意软件样本的网络能力,也能确定一些基于网络的指标,这些指标可以用来在诸如入侵检测系统的安全设备里创建签名。常见的网络嗅探、抓包和分析工具,有sniffer、tcpdump、IRIS和Wireshark等。Tcpdump可捕捉实时网络流量到命令控制台,而Wireshark是基于GUI的数据包捕获工具,提供强大的过滤选项。TCPView是网络端口查看工具。此外,国内的综合性工具PowerTool的功能也非常强大。

(三)内存分析方法

内存分析(也称为内存取证),是分析从正在运行的计算机得来的内存镜像。内存分析可以从1台计算机的内存中提取痕迹,如运行进程、网络连接、加载模块等,也可进行解包、rootkit检测和逆向工程。以下是涉及到内存取证的步骤:

1.内存获取。指转储目标机器的内存。在物理机器上,Win32dd/Win64dd、Memoryze、DumpIt和FastDump等工具可用于获取内存镜像。在虚拟机(VMware工作站)上,获取内存镜像容易,可通过暂停虚拟机,抓获“.vmem”文件来完成。

2.内存分析。获取内存镜像后,下一步就是分析抓取的内存转储以获得相关的痕迹。Volatility是流行的用来分析内存镜像的开源工具。它用Python语言编写,可在多种常见操作系统上安装。

二、建立恶意软件取证分析环境

(一)分析环境的要求和特点

在执行恶意软件分析之前,需要建立一个安全的分析环境,并确保这些系统没有接入任何实时生产系统或互联网。建立恶意软件分析环境时,有几种方案选择。如果身边有方便的硬件,可以使用物理机器来建立,最好是在一个全新安装的操作系统上开始分析。否则,也可以建立虚拟的操作系统。使用虚拟化环境的优点在于:能够获得多个快照;恢复到原始状态很容易;无需额外的硬件;操作系统之间的切换速度更快。

但是,使用虚拟化环境也有一些缺点,一些恶意软件检测到将在虚拟环境中运行时,就拒绝运行或者改变其特性。在这种情况下,可能需要在物理机上分析恶意软件或进行逆向工程,而且要使用如OllyDbg或Immunity这样的调试器,来修补检查虚拟化环境的代码。

(二)取证分析环境实例

由运行Backtrack(现在改名为Kali,http:// www.kali.org)的Linux系统,安装有Volatility和Wireshark的物理机器组成。本机的IP地址设置为192.168.1.2,运行免费的INetSim,这是一个用于模拟常见互联网服务的基于Linux的软件套件。此工具可伪造一些服务,如DNS、HTTP、HTTPS、FTP和IRCSMTP等,通过模拟网络服务来分析恶意软件样本的网络行为。INetsim被配置为在IP地址192.168.1.2上,模拟网络接口上的服务。

Linux机器以hostonly模式运行VMwareWorkstation虚拟机软件,并在虚拟机中安装Windows XP SP3,并且Windows机器安装了静态分析工具和Capturebat来监视文件系统、注册表和网络活动。Windows机器的IP地址设置为192.168.1.100,默认网关为192.168.1.2,这个默认网关也是Linux机器的IP地址,这是为了确保所有的流量通过Linux机器进行路由。在Linux机器里将监测网络流量(使用Wireshark),还使用INetSim模拟互联网服务。Windows机器是分析机,可在它里面执行恶意软件样本。

三、分析恶意软件样本

在建立了分析恶意软件样本的安全环境后,就开始分析一个样本文件edd94.exe。首先从静态分析技术开始,然后进行动态分析,最后进行内存分析。

(一)静态分析

1.确定文件类型。文件签名显示它是一个PE32可执行文件。文件签名是位于文件头的独特的若干字节串。在Windows系统上的可执行文件,具有“MZ”或16进制字符4D 5A这样的文件签名,它是文件的前2个字节。

2.计算哈希值。md5sum工具显示了样本的md5sum(edd94.exe)。MD5算法由该文件的内容生成一个128位的值,通常表示成16进制的32个字符。

3.确定安装包。PEID可用来检测PE文件中最常见的一些封包方式、加密工具和编译器,它目前可检测出PE文件中超过600种不同的签名。在本案例中,样本没有封包。

4.检查文件依赖性。DependencyWalker工具显示了4个加载的DLL,以及由可执行文件(edd94.exe)输入的API调用列表,也显示出恶意软件样本输入了“CreateRemoteThread”的API调用,这是由恶意软件所使用的注入代码到另一个进程的API调用。

5.提交到在线恶意软件扫描服务。样本提交到VirusTotal服务后显示,恶意软件是一个ZeuS僵尸(ZBOT)。ZeuS是一种木马,通过浏览器中间人(Man -in-the-Browser,MITB)攻击的方式,记录击键登录和表格抓取来窃取银行信息。ZeuS主要是通过隐蔽强迫下载(drive-by download)和网络钓鱼骗局来传播。

(二)动态分析

在Linux机器上运行监控工具Wireshark来捕获恶意软件执行后产生的网络流量。运行INetSim来模拟网络服务,提供给该恶意软件虚假的响应。在Windows上运行Capturebat来捕捉进程、注册表和文件系统活动。

让edd94.exe在Windows虚拟机运行几秒钟后暂停虚拟机,然后抓取稍后将被用于内存分析的“.vmem”文件。以下是一些恶意软件执行后,监测工具抓到的活动。

图1显示explorer.exe(操作系统进程)也进行了大量的活动(设置注册表值,创建各种文件),表明该恶意软件代码注入到了explorer.exe中。

图1 Capturebat的输出文件显示进程、文件和注册表活动

edd94.exe还释放了一个新文件(raruo.exe)到“C:Documents and SettingsAdministratorAppcation DataLyolxi”目录,然后执行它并创建一个新的进程(图2)。哈希值将帮助确定释放的文件(raruo.exe)和原始文件(edd94.exe)是否一样。

图2 edd94.exe释放了一个新文件raruo.exe

另一个活动是explorer.exe在子键“HKCUSoftwareMicrosoftWindowsCurrentVersionRun”下,设置一个注册表值{F561587E-37AB-9701-D0081175F 61B}。恶意软件通常在这个注册键中增加一个注册值,从重新开机中得以生存,即无论该值是什么,在每次系统重新启动时增加的数据将被执行。当然,explorer.exe创建的这个注册表值是可疑的,可能是恶意代码注入到explorer.exe的结果。

Wireshark也抓获了恶意软件执行DNS查询来解析域名“users9.nofeehost.com”,也发现该域解析到IP地址192.168.1.2,这是因为运行在Linux机器上的InetSim给出一个假的回应来响应DNS查询。现在已经骗了恶意软件,让它认为“users9.nofeehost. com”的IP地址是192.168.1.2,也就是Linux机器,这样就禁止恶意软件连接到互联网。

然后,恶意软件试图建立HTTP连接,尝试从域“users9.nofeehost.com”下载一个配置文件(all.bin)(图3),INetSim也给了一个假的回应,当然也可配置INetSim去回应想要的任何自定义页面。

图3 恶意代码准备下载一个配置文件all.bin

ZeuS Tracker(跟踪世界各地的ZeuS命令和控制服务器的项目)显示,该域名以前被列为ZeuS命令和控制服务器,捕捉的模式和跟踪ZeuS提到的一样,证实了处理的正是ZeuS bot(ZBOT)。

(三)内存分析

执行内存分析之前,把刚才得到的“.vmem”文件改名为“infected.vmem”。

内存分析使用Volatility框架来进行,用PsList插件分析进程列表,它显示了进程edd94.exe(PID14 76)和raruo.exe(PID1492)。edd94.exe是在Windows虚拟机上执行的恶意可执行文件,raruo.exe是由edd94.exe文件删除的。在动态分析中确定恶意软件做了一个http连接,所以观察内存中的网络连接以确认。运行connscan模块显示explorer.exe的进程ID,也就是PID 1748(图4)做了一个可疑的http连接。

图4 由PID 1748发起的HTTP连接

运行Apihooks插件显示explorer.exe进程的多个内嵌API挂钩,有一个跳转到一个未知位置,这个位置可能是恶意代码在的地方。检查挂钩API函数之一的“HttpSendRequestA”的地址,显示在函数起始地址有一个前面看到的跳转未知位置。检查其周围字节,显示一个嵌入的可执行文件(注意Windows可执行文件的签名“MZ”)存在于explorer.exe进程中。既然知道的explorer.exe有一个嵌入式可执行文件,使用“malfind”插件,可转储explorer.exe(PID1748)的嵌入的可执行文件到所需的目录。

提交转储的可执行文件到VirusTotal(基于恶意软件扫描服务的在线网络),可证实该转储的可执行文件是ZBOT的一个组成部分。这证实了Explorer.exe被ZBOT注入了。

在动态分析中确定了在执行恶意软件样本后explorer.exe创建一个注册表值,从而在重新启动中得以生存。Printkey插件显示了由edd94.exe植入的可执行文件(C:Documents and SettingsAdministrator Application DataLyolxi a ruo.exe)。这表明每次系统启动的时候,raruo.exe就被执行。

在受感染的机器上发现可执行文件(raruo.exe),并将其提交到VirusTotal,能够证实这也是ZeuS bot(ZBOT)(图5)的组成部分。

图5 在VirusTatol网站上显示的raruo.exe文件的信息

四、总结

掌握并熟练运用恶意软件的3种取证分析方法,是取证调查人员必备的技能。综合利用静态、动态和内存方法,深入分析恶意软件可以产生有效的结果,能够发现恶意软件的代码特征、行为特征、网络特征,描述其与操作系统的交互作用,确定其性质和目的,进而建立其在安全事件中的因果关系。

[1]麦永浩等.计算机取证与司法鉴定[M].北京:清华大学出版社,20 14.

[2]张仁斌等.计算机病毒与防病毒技术[M].北京:清华大学出版社, 2008.

[3]奚小溪.恶意软件的行为与检测技术分析[J].安徽建筑工业学院学报(自然科学版),2012(6).

D631

A

1673―2391(2014)11―0162―05

2014-05-13 责任编校:李烽

电子数据取证湖北省协同创新中心项目,公安部公安理论及软科学研究计划项目“公安院校网络侦查专业理论建设与实战研究”,公安部应用创新计划项目2013YYCXHBST030,湖北省教育厅科学研究项目B20128201,鄂警院[2012]90号项目。

猜你喜欢

注册表进程内存
债券市场对外开放的进程与展望
“春夏秋冬”的内存
改革开放进程中的国际收支统计
更上一层楼 用好注册表编辑器
注册表的便捷用法
内存搭配DDR4、DDR3L还是DDR3?
社会进程中的新闻学探寻
基于内存的地理信息访问技术
俄罗斯现代化进程的阻碍
注册表编辑器也玩“失忆”