主要参考资料:《恶意代码分析实战》
本文是基于计算机病毒课程实践部分的总结,这些实践是自主尝试学习分析恶意代码的过程,如有疏漏不妥之处,还请不吝赐教!
我的相关博客
- 实践部分:
- 读书部分:《恶意代码分析实战》读书笔记 简单动态分析
恶意代码简单动态分析实践总结
1. 目标
动态分析技术是指恶意代码执行的情况下,利用程序调试工具对恶意代码实施跟踪和观察,确定恶意代码的工作过程,对静态分析结果进行验证。
- 动态分析技术有两种:
- 外部观察
- 跟踪调试
- 简单的动态分析属于外部观察方法。主要是利用系统监视工具在模拟的环境中直接运行恶意代码,通过观察运行效果和分析监视工具信息判断恶意代码功能。
- 虽然简单动态分析可以得到的信息有限,但是这种分析方法简单直接,效果明显。
2. 安全的运行环境
恶意代码需要在安全环境下运行,沙箱可以提供这一机制。
- 我们在沙箱中简单执行病毒程序,可以查看到一些基本的功能。
- 有许多沙箱软件:
- BUFFERZONE(我的沙盘使用体验)
- sandboxie
- defensewall
- malware defender
- 实际上,虚拟机就相当于一个有相当好的模拟计算机环境的“沙箱”,我们可以在里面进行恶意代码的运行,分析后可以恢复快照回到干净的环境。但是有一些恶意程序使用逃逸技术可以逃出虚拟机。
- 缺点
- 只能简单执行,无法输入控制指令。
- 根据沙箱功能的限制,大多数沙箱不能记录所有事件,只报告基本功能。
- 沙箱环境与真实计算机环境的差异导致一些功能无法触发或表现有所不同。
3. 尽量真实的网络环境配置
使用虚拟机作为沙箱能把病毒与外界完全隔离开,但是很多病毒需要连接网络才能触发特定的行为,所以我们需要搭建一个尽量真实的网络环境。
- 在断网模式下,病毒很可能保持静默或者做一些无关紧要的事来迷惑我们。
- 在不了解病毒之前直接把病毒接入互联网是非常危险的:
- 会将自己的主机以及网内的设备都会暴露在感染中
- 该虚拟机可能变成黑客所操控的僵尸机来执行DDOS攻击
- 可能让黑客知悉我们在解剖他的病毒。
- 因此我们需要在虚拟机之间搭建一个虚假的网络环境来欺骗病毒。
(1)利用本机回环地址
- 使用ApateDNS将DNS解析ip重定向到本机 127.0.0.1 的回环地址。
- 在本机上开启netcat监听相应端口信息。
(2)模拟网络服务交互
- 主要使用工具:
- INetSim:它可以伪装得像一个真正的服务器,提供大部分的网络协议和服务并且将它们很真实的模拟出来,并记录所有的连入请求与连接。
- ApateDNS
- 搭建方法详见:计算机病毒实践汇总五:搭建虚拟网络环境
- 由于开启INetSim后,与nc监听端口冲突,所以模拟服务器的机器上开启INetSim与使用netcat的监听不能同时进行。
4. 运行恶意代码
在搭建好环境后,简单动态分析要把恶意代码运行起来。对于exe文件,我们可以直接双击运行,而dll文件需要exe程序来调用。
-
工具:rundll32.exe
-
所有的Windows中包含的程序,提供了运行dll的平台。
C:\rundll32.exe DLL name, Export arguments - Export值必须是一个DLL文件导出函数表中的函数名或者序号。
-
我们可以通过从静态分析中找到的线索确定dll文件导出函数表的函数名。
5. 使用监视工具
(1)监控系统调用
-
工具:进程监视器
ProcessMonitor
-
用途:监控系统上能捕获的系统调用,包括监控注册表、文件系统、网络、线程、进程和线程行为。
-
关注部分:
- 注册表:通过检查注册表变化,发现恶意程序对注册表的操作。 - 文件系统:检查文件系统能显示恶意程序创建的所有文件,或它使用过的配置文件。 - 进程行为:检查进程行为,关注是否启动了其它的进程。 - 网络:识别网络连接能显示出恶意程序监听的任意端口(这个功能好像从来没有信息)。
-
查看事件信息:
- 界面显示每个事件的不同信息
- 双击行可以看到事件的详细信息
-
由于监控内容比较多,可以根据其他工具发现的恶意代码运行的相关信息,如进程号、主要操作(更改注册表),进行过滤:
-
常用的过滤选项:
- ProcessName进程名过滤 - PID进程号过滤 - Options操作项过滤 - RegSetValue注册表键值修改操作 - CreateFile创建新文件操作(但是由于在监视器中打开文件操作也被归为此项,会过滤出很多条) - WriteFile写文件操作
(2)监控执行进程
-
工具:进程浏览器
ProcessExplorer
-
用途:列出所有活跃的进程、被进程载入的DLL、各种进程属性和整体系统信息。
-
以树状结构显示所监视的系统执行进程
-
颜色高亮标记含义
- 服务:粉色
- 进程:蓝色
- 新进程:绿色(临时)
- 被终止进程:红色(临时)
-
双击进程,可以查看有关进程的属性、比对磁盘镜像和内存镜像、验证一个看似合法的程序是否被恶意程序篡改过。
-
如果运行的是dll文件,运行后可以通过在这里搜索一个dll文件查看它被哪个进程调用。
(3)比较注册表
由于很多恶意代码会把自己写入自启动项或者安装为一个服务,我们就可以通过注册表的变化情况获取信息。
-
工具:注册表比较
Regshot
-
用途:运行恶意代码前后,比较两次注册表的信息。
-
先使用快照A记录第一次注册表内容,变化后再用快照B记录第二次注册表内容。
-
通过比较与分析判断恶意代码行为。
-
但是注册表中会有随机数种子的更新,是干扰项,应排除。
(4)监控网络行为
- 工具:网络嗅探器
wireshark
- 用途:Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,可以找出有关网络连接的信息。
- 如果恶意代码需要与指定的网络连接,首先会进行DNS域名解析,我们可以找出这个包,找到解析出的ip,过滤出恶意程序与这个ip的通信包,分析恶意代码在网络上的特征。
6. 综合分析
通过简单静态分析找到一些关于恶意代码的线索,简单动态分析就可以有意识的启用相关软件监视运行程序,最大限度的搜集信息,用于验证恶意代码的行为特征。
(1)病毒常见行为:静态分析需要关注的线索
- 自启动
- 修改注册表键值
- 进程隐藏
- 依附于常见进程中
- 修改系统文件及配置
- 网络行为
- 链接指定网址进行上传或下载操纵
- 开启特定端口、服务或后门为下一步攻击行为做铺垫
- 不断发送不完整包实现DOS攻击
(2)搭建安全、真实的环境
- 安全:尽可能保护自己的主机不遭受恶意代码侵害。
- 真实:虚拟环境与真实计算机环境的差异可能导致恶意代码的一些功能无法触发或表现有所不同,为了能看到恶意代码的真正行为,需要模拟出尽量真实的环境。
(3)在监控下运行恶意代码:从主机行为、网络行为等方面解决“恶意代码到底做了什么”的问题
- 开启监视工具
- 运行恶意代码
- 整合相关监控信息
- 得出结论
参考资料1:恶意代码-智库百科
参考资料2:浅谈病毒分析中的虚拟网络环境配置