动态分析基础技术

本文介绍了动态分析作为恶意代码分析的一种方法,它通过在安全的沙箱环境中运行代码来观察其行为。文章提到了沙箱如Cuckoo Sandbox在动态分析中的作用,以及动态分析的局限性,如恶意代码可能检测运行环境和设置潜伏期。此外,还讨论了进程监视器、RegShot等工具在监测系统调用和注册表变化中的应用,并列举了ApateDNS、Wireshark等网络监控工具。动态分析在分析恶意代码的网络行为、感染迹象和内存修改等方面具有重要作用。
摘要由CSDN通过智能技术生成

动态分析基础技术

原文链接:https://hvnt3r.top/2019/01/动态分析基础技术/

知识点

与静态分析不同,动态分析是将恶意代码加载运行之后观察代码运行状态的一个过程,一般来说,对恶意代码进行分析时先进行静态分析来大致了解软件的功能再进行动态分析以了解恶意代码运行时的更多细节,静态分析与动态分析都有各自的有点以及局限性,本章重点介绍了动态分析的一些手法和技巧。

用沙箱来分析恶意代码:沙箱是一种在安全环境下运行不信任的程序的安全机制,沙箱一般包含一个虚拟的环境,并可以定制虚拟网络等“欺骗”恶意代码让恶意代码认为自己所在的沙箱是一个正常的物理机的各种虚拟功能,但是运行在沙箱中的恶意代码并不会对物理机产生任何威胁,因此沙箱是一个很好的用来动态分析恶意代码的工具。

前一段时间我使用过布谷鸟沙箱(Cuckoo),这一款沙箱的结构是首先开启一个安装有Ubuntu14.04的系统用于安装Cuckoo,然后再向这个虚拟机上安装所有Cuckoo依赖的插件,安装完成后再向Ubuntu中安装一个Vmware虚拟机来安装一个用于运行Windows等系统的虚拟机,整体相当于是一个虚拟机的嵌套结构,布谷鸟对这个在虚拟机中运行的虚拟机的运行状态的存储状态进行记录,并对比运行病毒前后的镜像区别来确定恶意代码对主机做了什么,并会生成一个十分详细的报告,总的来说这种杀向在我们对一个恶意代码进行静态分析遇到困难时还是很有帮助的,但是缺点是此系统十分难于安装,因为很多安装条件会产生冲突,而且此沙箱运行起来也是对电脑性能的极大挑战,除非你有一台安装了Ubuntu14.04的物理主机。

类似于这样的沙箱还有NormanGFIAnubisJoeThreatExpertBitBlazeComodo等沙箱。

沙箱的缺点:

  • 有些恶意代码会检测运行环境是否为虚拟环境,如果是虚拟环境,则恶意代码通常不会表现出真正的功能。
  • 恶意代码通常会连接C2服务器来执行特定的功能,如果恶意代码设定了一个潜伏期,则沙箱就难以探测到长时间以后恶意代码可能发生的行为。
  • 沙箱不能很方便的分析一个DLL恶意代码

运行DLL文件如果碰到一个DLL恶意代码,Windows不知道如何运行DLL文件,因此我们需要使用rundll32.exe来运行DLL文件,使用命令格式如下:

rundll32.exe DLL_name, Export_arguments

Export_arguments必须是DLL文件导出函数的函数名或者是函数序号,使用函数名可以直接将函数名作为Export_arguments参数的值,如果使用函数序号需要写为井号加数字的形式来表示序号如#2

比如使用命令rundll32.exe shell32.dll,RestartDialog可以使计算机弹出重新启动窗口

进程监视器进程监视器是Windows下一款可以监视系统注册表和文件系统,进程和线程的软件,虽然此程序也可以监控网络流量,但是由于Windows不同版本可能存在不同程度的兼容问题,所以一般不采用进程管理器来监控网络行为。另外,进程监视器是使用内存来记录事件的,因此如果你在虚拟环境下调用此程序,每分钟超过5万次的调用行为可能很快就将内存耗尽,因此我们使用进程监视器来监控程序的系统调用时需要清空之前的调用记录并将监控时间缩短以避免内存空间被耗尽。

可以用进程监视器来分析恶意文档如PDF文档和Word文档,当文档被加载后,可以在进程监视器中看到文档启动的进程并通过Image字段来找到恶意代码在磁盘上的位置。

RegShotRegshot是一款注册表监视器,可以在运行恶意代码之前对注册表做一次快照,再在运行恶意代码之后做一次快照,然后通过对比运行恶意代码前后注册表内容的不同来得知恶意代码对注册表进行了哪些操作。

网络以下是几款模拟网络响应或者监视网络事件的好用软件的软件:

  • ApateDNS:此软件是一款免费软件,可以很方便的发现恶意代码进行的DNS请求。
  • WireShark:不必多说,神器。
  • NetCat:瑞士军刀,神器。
  • INetSim:INetSim是一款基于Linux的模拟网络的免费软件他可以模拟多种服务如HttpHttpsFTPIRCDNSSMTP等,而且可以根据恶意代码的请求做出尽量符合恶意代码要求的返回动作从而帮助我们研究恶意代码。

关于动态分析过程中用的软件,嘶吼上有一篇文章介绍:http://www.4hou.com/technology/3022.html

课后练习

Lab3-1

使用动态分析技术来分析在Lab03-01.exe文件中发现的恶意代码

1.找出这个恶意代码的导入函数与字符串列表

这个恶意代码只有一个导入函数函数,因此判断此程序可能是加了壳的

00400200		ExitProcess	   kernel32

PEiD查壳发现此程序确实加了壳,壳为PEncrypt 3.1 Final -> junkcode,但此题不需要脱壳。

字符串列表:

Address	Length	Type	String
.text:0040025A	0000000D	C	kernel32.dll
.data:00400EF7	00000005	C	\b1\a1G
.data:00401087	00000007	C	\n6I*h<8
.data:004010A7	00000010	C	^-m-m<|<|<|M\rM\r^
.data:00401247	00000006	C	ntdll
.data:0040125E	00000007	C	user32
.data:004014F7	00000008	C	advpack
.data:00401623	00000008	C	StubPath
.data:0040162F	00000029	C	SOFTWARE\\Classes\\http\\shell\\open\\commandV
.data:0040165B	00000035	C	Software\\Microsoft\\Active Setup\\Installed Components\\
.data:0040169C	00000022	C	www.practicalmalwareanalysis.com
.data:004016D4	00000007	C	admin\t\r
.data:004016E2	0000000B	C	VideoDriver
.data:004016F1	00000009	C	WinVMX32-
.data:004016FD	0000000D	C	vmx32to64.exe
.data:00401943	00000008	C	AppData

2.这个恶意代码在主机上的感染迹象特征是什么?

此题主要考察的时对应用程序在运行时动态行为的捕捉,打开Procmon捕捉当前所有事件,设置过滤器使得程序显示出与Lab03-01.exe相关的进程活动记录:

这样初步过滤后可以看到恶意代码的事件数量还是很大,我们可以通过其他过滤器来筛选出自己想看到的结果。

运行RegShot进行注册表快照时我发现Win10的注册表项目十分庞大,拍摄快照时会有很多干扰项,因此我尝试下载WindowsXP进行实验,幸运的是,在我使用WindowXP作为病毒分析环境时,很快就用RegShot分析出了病毒对注册表的改动:

3.这个恶意代码是否存在一些有用的网络特征,如果存在,他们是什么?

在分分析恶意代码中包含的字符串的过程中我们就已经发现了一个敏感的字符串www.practicalmalwareanalysis.com,看到这个网址我们八成就能猜出这个恶意代码很可能会与此域名建立连接。

使用ApateDNS,过程中发现此程序无法在我的虚拟机中正常启动,因为虚拟机的53端口被其他进程占用了,查看之后发现使svchost,kill掉此进程后ApateDNS即可正常启动

我们需要运行INetSim来捕捉恶意代码的网络请求

修改如下几处配置

  • 修改service_bind_address为安装了INetSim的虚拟机的IP地址:
#########################################
# service_bind_address
#
# IP address to bind services to
#
# Syntax: service_bind_address <IP address>
#
# Default: 127.0.0.1
#
service_bind_address	192.168.60.129
  • 修改dns_default_ip为安装了INetSim的虚拟机的IP地址,以接收DNS请求:
#########################################
# service_bind_address
#
# IP address to bind services to
#
# Syntax: service_bind_address <IP address>
#
# Default: 127.0.0.1
#
service_bind_address	192.168.60.129
  • 接着转到接近配置文件末尾的地方,开启重定向:
#########################################
# service_bind_address
#
# IP address to bind services to
#
# Syntax: service_bind_address <IP address>
#
# Default: 127.0.0.1
#
service_bind_address	192.168.60.129
  • 打开TCP端口用于连接:
#########################################
# redirect_exclude_port
#
# Connections to <service_bind_address> on this port
# are not redirected
#
# Syntax: redir
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值