恶意代码分析之行为分析及样本收集

 

0x00 前言

之前讲的内容,都是在以不运行样本为前提进行分析,这种分析方法是最安全的,可以直接在真机上通过IDA进行分析,但是很多时候,我们不得不调试样本才能对样本的恶意行为进行一个完整的分析,此外,调试节结合IDA的分析方式,也能大大的加快样本分析的速度。当我们决定要对样本进行动态调试或是行为分析的时候,由于会运行样本,我们就需要在虚拟机中执行此类操作。

在本节中,主要介绍一下我平时分析样本的来源,以及分析样本时候常用的一些行为检查工具,通过行为分析,可以让我们很快的了解样本的大概功能。然后介绍如何通过在本地捕获到的一些行为,去挖掘和寻找与样本相关的情报。

 

0x01 分析样本从哪儿来

目前来讲,virustotal应该是全球最大的情报机构。
也是大家在样本分析时,使用的最多的情报平台。
但是很可惜,virustotal没有对个人用户提供下载接口。
免费用户只能进行一些简单的查询,所以对于个人用户来讲,virustotal显得不是那么的”友好”。

app.any.run

app.any.run是一款非常火的在线交互式沙箱。相比其他沙箱,app.any.run最大的优势就是界面友好、可与用户交互。即使用app.any.run分析样本的时候,我们可以简单操作沙箱机器的,比如我分析一个恶意样本,样本运行后会弹框,需要用户单击确定按钮后,恶意功能才会触发,此时普通的沙箱可能就跑不出恶意行为,但是使用app.any.run的话,我们就可以在运行过程中单击弹框选项,从而执行后续的操作。

同样的,app.any.run也分为免费用户和付费用户,但是在app.any.run中,个人用户可使用的功能也非常多,是否需要开通付费可以自行斟酌。

app.any.run的主页面如下所示:

app.any.run在主页中心位置展示了一个Threat map,以表示全世界方位内当前恶意样本的流行情况。

左边的一排是工具栏,我们可以单击<+ New task> 以新建一个分析任务
或是单击<Public stask> 查看app.any.run上公开的样本信息。

<History>标签记录了当前账号在app.any.run提交的样本记录。

首先是<+ New task> :

我们单击New task之后,app.any.run就会弹框以提示用户创建任务。左上角的框中可以对沙箱机器进行配置,如操作系统版本、操作系统位数、UAC等信息。当然,这么强大的功能是需要付费的,app.any.run给免费用户提供了win7x32的操作系统,如果想要使用其他的操作系统,就需要升级为app.any.run的付费用户。

右上角的选项框中表明了当前选择的操作系统上所安装的应用信息以及补丁信息。

左下角选项框让用户上传待分析的文件。

右下角的选项框中可以对此次分析进行配置,如沙箱运行时间、样本是否公开(app.any.run默认会将所有用户上传的样本作为开源情报公开,当然app.any.run保留了私有分析的功能,但是这得加钱。),以及网络是否使用匿名网络等。

当我们配置好这些信息之后(通常只需要选择上传文件,其他内容都默认),我们就可以单击最右下角的Run开始执行任务。

沙箱运行之后,就会生成一个在线报告,以我们分析的一个样本的报告为例:

同样的,中央位置是沙箱的运行界面。

左下角显示了样本在运行过程中所有的网络行为,包括HTTP Request Connections DNS Requests 以及app.any.run检测到的Threats请求。

右边的窗口,是显示了样本运行后的进程信息。
以及app.any.run提取出的IOCs信息:

关于app.any.run沙箱的使用暂时就介绍到这里,接下来我们看看如何通过app.any.run获取一些特殊样本。

我们在app.any.run的主页界面单击Public tasks。

可以进入到如下的界面:

这里就默认显示了app.any.run最新公开的样本,也就是说,只要有人通过app.any.run的沙箱测试了样本,基本上就能在这里找到。

该页面的右上角有一个搜索框,我们可以在搜索框中输入样本的hash或者标签即可找到样本。
搜索hash是最基础的一个功能,我们可以单击搜索框旁边的filter打开筛选框,在筛选框中进行条件筛选。包括文件类型、请求地址、tag信息等等。

我们甚至可以直接输入apt以搜索所有在app.any.run上被打上了APT标签的样本:

然后想要下载或是查看某个样本的分析报告,直接点进去即可。

关于app.any.run就暂时介绍到这里,由于app.any.run沙箱的友好界面,以及app.any.run的开源情报共享,目前app.any.run的样本量已经很大了,甚至有很多样本vt上没有的,app.any.run都会有。所以,在样本分析中,可以多多去查看app.any.run的Public submissions,说不定啥时候就能先人一步捕获到新情报。

MalwareBazaar

还有一个个人比较常用情报来源是MalwareBazaar:https://bazaar.abuse.ch/browse/

MalwareBazaar界面也非常简洁,每天都会更新很多样本,并且这些样本基本上都带了初始的tags

除此之外,MalwareBazaar还提供了API接口、搜索、导出功能。想要在MalwareBazaar下载样本也非常简单,只需要单击某个md5,进入到详情页面,然后单击Download sample即可,需要注意的是,国外的这种情报共享平台,下载回来的样本默认解压密码都是:infected

 

0x02 行为检测

个人推荐多配置几个虚拟机环境,个人目前搭建了xp、win7x32、win7x64、win10x64等虚拟机环境。行为检测的工具推荐使用工SysTracer.exe、火绒剑、Procmon、sysmon等。

此外,在对样本进行行为分析的时候,最好能够断网分析或是使用一个干净的网络。

首先是为什么要断网分析,我们在分析的时候,如果目标的服务器还是存活的,那么样本运行之后,就会和目标服务器建立通信,然后进行交互。样本大多会有收集当前主机信息并上传到服务器的功能,如果虚拟机的配置被打包上传到攻击者服务器,一方面,攻击者将会知道你的出口IP地址。另一方面,攻击者将知道自己的样本已经暴露,已经有分析人员在分析,从而导致攻击者关闭服务器或是采取其他行为。

还有一个重要的因素是,如果是在公司的网路环境进行分析的,公司一般都会有流量监控,如果检测到连接了已经确认是恶意的C2服务器,就会触发警报,一方面公司可能请你喝茶,另一方面如果样本具备其他的功能,可能会出现公司网络未授权访问xxx的情况。

所以综上所述,断网分析恶意样本是一个好习惯。

但是有时候,样本会检测网络是否正常,如果不正常就直接退出了,遇到这种情况,可以

1 修改样本判定网络的条件,使得可以正常运行
2 搭建安全的网络进行分析

个人推荐使用fireeye的开源工具:fakenet:https://github.com/fireeye/flare-fakenet-ng
在联网的虚拟机中安装该工具后,将会构建一个虚拟网络,此时,通过主机产生的所有网络请求、流量将不会发送出去,而是发送到fakenet中。此外,fakenet还会根据请求的内容进行对应的响应。

 

0x03 SysTracer.exe

首先来说SysTracer.exe这款行为检测工具,目前来说,个人最喜欢这款,因为非常简洁,一目了然。

以我们静态分析的第一个样本为例,首先在虚拟机(xp)中打开SysTracer.exe,然后通过左上角的图标选择待分析的文件:

选择创建并且跟踪一个新进程,然后点击运行打开选择窗口

选中我们待分析的文件,选择打开:

最后点击确定,即可运行该程序并监控程序的行为:

可以看到,样本行为很简单,首先是进行了一次网络请求,然后就弹框显示

点击弹框之后,进程退出:

由于该样本过于简单,我们可以随便找一个其他的恶意样本跑下行为试试:

这里可以看到,该恶意样本运行后,会不断的进行网络请求,并且创建和销毁进程,我们可以在左边的选项中选中某一栏进行赛选,比如选中左边的<网络>:

可以看到,程序不断创建和销毁进程的同时一直在循环请求firestormy.duckdns.org
目前虽然我们还不知道该地址是用来干嘛的,但是可以猜测这是攻击者的服务器地址,我们可以通过开源的情报搜索一下该地址。
首先是通过VT查看该域名的关联情况:

这里可以很直观的看到,与该地址通信的文件,基本全是确定恶意的木马,所以我们可以确定该域名是一个恶意域名。

此外,我们可以尝试通过各家的情报中心对该地址进行查询。
个人常用的两个威胁情报平台是微步和奇安信的。
微步威胁情报查询:https://x.threatbook.cn/
奇安信威胁情报查询:https://ti.qianxin.com/

以微步的为例,在平台上查询我们通过行为分析工具跑出来的地址,得到如下结果:

通过查询,我们知道该域名已经被打上了很多标间,如僵尸网络、Scar、DarkComet、远控等。像这种已经和某些家族打上标签的域名,我们可以尝试直接在搜索引擎中搜索该家族,看是否已经有分析报告,以及分析报告中的样本代码结构是否与手里的样本匹配。在具体分析样本的时候,可以参考这些信息。

 

0x04 火绒剑

火绒剑是现在比较流行的一款行为分析工具,官方也提供了该工具的单独下载。
火绒剑安装好之后,以管理员身份启动,开启监控,然后进行过滤设置:

选择进程过滤,添加,然后将待检测的样本名字复制进去

然后确定,设置好第一条过滤条件

然后选择动作过滤

个人建议是可以把注册表监控取消勾选,因为正常情况下来讲,一个程序运行之后,哪怕什么都不做,都会大幅度的进行注册表操作。

所以如果不取消注册表监控,行为可能是如下:

这里面的操作,很多不是恶意程序发起的,而是windows系统,加载这个pe文件到内存执行的时候操作的。
当把注册表过滤了之后,就只显示了51条记录,但是这里比较奇怪没有跑出网络行为。

这个时候,我们可以尝试结合Fakenet,看看是否能跑出网络行为。
解压下载回来的fakenet,然后以管理员身份启动fakenet:

此时,fakenet成功启动,此电脑上的所有网络请求都将发送到fakenet中:

接着重新使用火绒剑监控样本行为:

可以看到,此时火绒剑已经成功捕获到网络请求行为,并且在fakenet中也成功记录请求内容,并且模拟服务器返回了对应的数据。

 

0x05 Procmon

procmon是微软官方提供的行为监控工具,打开之后默认会监测所有的进程:

可以选择如下图标或者Ctrl + L 进行过滤

根据个人选择,第一个框可以选择ProcessName对指定的进程进行过滤

第二个下拉框有如下的过滤条件:

然后在输入框中填入需要过滤的ProcessName,点击Add,然后选择OK

此时窗口中将会只剩下我们选择的进程的相关行为

由于是微软自己开发的行为监控工具,Procmon可以说是巨细无遗,检测能力相比其他来说也更全面,这里尴尬的是Procmon检测到了fakenet的流量欺骗,所以网络行为这里显示如下,没有显示真实的请求地址

Procmon在使用的时候,会多出很多系统相关的行为,这里需要分析的时候自行鉴别~

 

0x06 Sysmon

Sysmon是一款轻量级的监视工具。属于Windows Sysinternals出品的一款Sysinternals系列中的工具,用来监视和记录系统活动,并记录到windows事件日志。

Sysmon相比前面几款工具,安装要稍微麻烦一些,但同时也具备了一些优势。

官网下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon

下载好之后,需要根据github上的配置文件进行配置。
git地址:https://github.com/SwiftOnSecurity/sysmon-config

安装过程如下
1 使用管理员启动cmd
2 进入到下载的sysmon目录下
3 将git下载下来的配置文件和sysmon放在同一个目录下
4 执行命令Sysmon64.exe -accepteula -i z-AlphaVersion.xml

将sysmon启动起来之后,win+r 运行eventvwr打开日志管理器

然后在:
应用程序和服务日志->Microsoft->Windows目录下会有一个SysMon文件夹
然后就能看到启动sysmon之后的日志。
新版本的sysmon有了dns查询功能,非常实用

可以看到每个事件之后都有一个事件ID

Event ID 1: Process creation
Event ID 2: A process changed a file creation time
Event ID 3: Network connection
Event ID 4: Sysmon service state changed
Event ID 5: Process terminated
Event ID 6: Driver loaded
Event ID 7: Image loaded
Event ID 8: CreateRemoteThread
Event ID 9: RawAccessRead
Event ID 10: ProcessAccess
Event ID 11: FileCreate
Event ID 12: RegistryEvent (Object create and delete)
Event ID 13: RegistryEvent (Value Set)
Event ID 14: RegistryEvent (Key and Value Rename)
Event ID 15: FileCreateStreamHash
Event ID 17: PipeEvent (Pipe Created)
Event ID 18: PipeEvent (Pipe Connected)
Event ID 19: WmiEvent (WmiEventFilter activity detected)
Event ID 20: WmiEvent (WmiEventConsumer activity detected)
Event ID 21: WmiEvent (WmiEventConsumerToFilter activity detected)
Event ID 22: DNSEvent (DNS query)
Event ID 255: Error

对应解析如下:

Event ID 1: 创建进程
Event ID 2: 进程更改了文件创建时间
Event ID 3: 网络连接
Event ID 4: Sysmon 服务状态已更改
Event ID 5: 进程终止
Event ID 6: 驱动程序加载
Event ID 7: 镜像加载
Event ID 8: 创建远线程
Event ID 9: 驱动器读取
Event ID 10: 进程访问
Event ID 11: 文件创建
Event ID 12: 注册表事件(Object create and delete)
Event ID 13: RegistryEvent (Value Set)
Event ID 14: RegistryEvent (Key and Value Rename)
Event ID 15: 文件流创建
Event ID 17: 管道事件(Pipe Created)
Event ID 18: PipeEvent (Pipe Connected)
Event ID 19: WmiEvent (WmiEventFilter activity detected)
Event ID 20: WmiEvent (WmiEventConsumer activity detected)
Event ID 21: WmiEvent (WmiEventConsumerToFilter activity detected)
Event ID 22: dns解析(DNS query)
Event ID 255: Error

使用一个简单的木马来测试Sysmon的功能.
启动sysmon之后,启动木马文件Cannon.exe

从图中可以很清楚的看到Cannon.exe调起了cmd.exe执行b.bat文件

包括bat文件的创建:

注册表操作(加入开机自启动以实现本地持久化):

以及dns查询:

关于Sysmon,还有更多高级和强悍的用法,可参照https://github.com/nshalabi/SysmonTools

 

0x07 总结

通过行为分析,可以让我们从宏观的角度了解样本执行后,会做了哪些行为。
比如我们只在行为分析中看到样本进行了网络请求,那么我们可以猜测,样本是否是一个简单的Downloader,或是由于未成功建立连接导致样本提前结束运行。
此外,我们还可以通过各个平台对样本的网络请求地址进行查询,通常来说,只要该域名曾经被攻击者使用过,那么大概率是可以关联到对应的家族的。毕竟域名的申请,还是有一定的成本在里面,大多数情况下,攻击者也不会那么浪费的一个域名只使用一次就舍弃。

比如我们在行为分析中看到创建进程操作,那么我们可以根据样本创建的进程去推测样本大概做了什么操作,是带参数重新启动自身 还是去启动了一个异常的进程。

比如我们在行为分析中看到文件创建操作,那么我们可以根据文件创建的路径去找到对应的文件,看看样本释放的文件到底什么内容,是一个PE 还是 一个vbs脚本。

根据行为检测的内容,我们在调试的时候,也可以针对性的设置断点,大大加快我们的分析速度。

(完)