恶意代码分析实战07-01

Posted Elwood Ying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战07-01相关的知识,希望对你有一定的参考价值。

本次实验分析lab07-01.exe,lab07-02.exe,先来看lab07-01.exe的问题
Q1.计算机重启后,这个程序如何确保它继续运行(达到持久化驻留)
Q2.为什么这个程序会使用一个互斥量?
Q3.可以用来检测这个程序的基于主机特征是什么?
Q4检测这个恶意代码的基于网络的特征是什么
Q5这个程序的目的是什么
Q6这个程序什么时候完成执行
先进行基础的静态分析,peid载入后分析其导入表,注意到一些关键的函数

比如上图的openscmanager和createService,startservicectrlDispatcher,用来创建一个服务,保证在系统被重启后运行
Q1.计算机重启后,这个程序如何确保它继续运行(达到持久化驻留)
A1.这个程序创建服务MalService(该名称在稍后的分析中可以看到), 来保证它每次在系统启动后运行

这里的internetopen和Internetopenurl的调用说明程序可能会连接到一个url并下载内容
接下来载入ida分析

可以看到,main中只调用了startservicectrldispatcher
从msdn可知,这个函数被程序用来实现一个服务,并且它通常立即被调用。这个函数指定了服务控制管理器会调用的服务控制函数。往上看,可以知道,会在调用该函数后调用sub_401040
跟进sub_401040

首先是调用openmutexa,尝试获取名为HGL345的互斥量句柄
如果调用成功,则走左边,退出程序
否则走右边。
先是创建了一个名为HGL345的互斥量。
用于确保任意时刻至于只有一个实例在运行,如果超过一个则退出。
Q2.为什么这个程序会使用一个互斥量?
A2.这个程序使用一个互斥量,来保证在同一时间这个程序只有一份实例在运行。
Q3.可以用来检测这个程序的基于主机特征是什么?
A3我们可以搜索- -个名为HGL345的互斥量,以及MalService服务
之后调用openscmanager,会打开一个服务控制管理器的句柄,以便这个程序可以添加或修改任务。
调用getmodulefilename,返回当前正在运行的可执行程序或一个被加载dll的全路径名。
再之后是调用createserviceA来创建一个新的服务。Createservicea调用有许多参数,关键的参数如binarypathname,dwstarttype,dwservicetype.
Dwstarttype这里是0x02,对应的是service_auto_start,说明这个服务在系统启动时自动运行。

ida标记了systemtime结构体,是windows多个结构体之一。
由xor edx,edx及之后的指令可知,程序中该结构体的所有值首先被设置为0
然后表示年yaer的值被设置为834h,10进制的2100,该事件表示2100年1月1日的午夜
之后通过systemtimetofieltime,在不同时间格式之间转换

可以看到调用了setwaitabletimer,关键参数为lpduetime,这个参数是systemtofiletime返回的filetime
然后通过waitforsingleobject进入等待,直到2100年1月1日
接下来看到了一个循环

进入循环前Mov esi,14h将其设置为计数器0x14(十进制的20)
循环的末尾dec esi起到递减的作用
递减到0时是则退出循环
调用createthread时的参数中,我们关注offset startaddress;lpstartaddress参数说明startaddresse被当做该线程的起始地址
跟入startaddress

看到首先调用internetopen来初始化一个到网络的连接,接着在一个循环中调用internetopenurl,在循环中一直访问下载www.malware……的主页。
Q4检测这个恶意代码的基于网络的特征是什么
A4.这个恶意代码使用用户代理Internet Explorer 8.0,并和www.malwareanalysisbook.com通信
由于createthread被调用20次,所以会有20个线程一直调用internetopenurla。
基本就清楚功能了:在多个机器上安装同一个服务,如果在2100年1月1日同一时间连接到服务器,则可以造成ddos攻击。由于互斥量的存在,一台机器只会运行一个实例。
Q5这个程序的目的是什么
A5.这个程序等待直到2100年1月1日的半夜,那时发送许多请求到htp://www. malwareanalysisbook.com/,大概是为了对这个网站进行一次分布式拒绝服务(DDoS)攻击。
Q6这个程序什么时候完成执行
6.这个程序永远不会完成。它在-一个定时器上等待直到2100年,到时候创建20个线程,每- -个运行一个无限循环。

接下来分析lab07-02.exe。
Q1这个程序如何完成持久化驻留
Q2这个程序的目的是什么
Q3这个程序什么时候完成执行
首先peview载入后可以看到字符串打印出来就一个网址

看看导入表

这些函数都是和COM相关的,为了使用COM功能尤其需要CoCreateInstance,OleInitialize.
尝试启动

可以看到会打开这个网址,程序运行后就退出了
Q1这个程序如何完成持久化驻留
A1.这个程序没有完成持久化驻留。它运行一次然后退出。
Q2这个程序的目的是什么
A2.这个程序给用户显示-一个广告网页。
接下来在IDA中分析
在main中可以看到

首先是初始化COM,并调用OleInitialize,CoCreateInstance获得一个COM对象。
返回的COM对象被保存在栈上的一个变量中,IDA将其标记为ppv。
为了判断使用了什么COM功能,需要检查接口标志符IID和类标识符CLSID
单击riid

可以看到riid为D30C1661-CDAF-11D0-8A3E-00C04FC9E26E(16进制在计算机中表示时,如果第一位为字母,前面会加上一个0,我们需要舍掉;另外最后一行是byte,单位是8位,而一个16进制数是4位,所以这里的0要写成00)
再看看clsid

第一行是d,表示的是dword,双字,是32位,而2DF01才20位,需要前面补3个0,第二,三行是w,表示word,单字,是16位,需要还需要补3个0,第四行,是byte,8位,主要注意6 dup(0),填充6个byte的0,也就是要12个0
所以rclsid为0002DF01-0000-0000-C000-000000000046
搜索后得知

iid是IWEBBROWSER2,clsid对应Internet Explorer

可以看到,通过CoCreateInstance返回的COM对象会被后面的一些函数访问
首先是初始化为字符串分配空间
move eax,[esp+28h+ppv],esp指向COM对象的位置,mov edx,[eax],EAX被解引用,并且EDX执行这个COM对象的基址
之后是call dword ptr[edx+2ch],该对象的偏移0x2c处的一个函数被调用。
我们知道iwebbrowser2接口的偏移0x2c是navigaete函数,当它被调用时ie就会打开那个网址。
再后面就是执行一些清理函数,然后程序终止。
Q3这个程序什么时候完成执行
A3.这个程序在显示这个广告后完成执行

以上是关于恶意代码分析实战07-01的主要内容,如果未能解决你的问题,请参考以下文章

恶意代码分析实战14-1

恶意代码分析实战11-1

恶意代码分析实战13-01

恶意代码分析实战14-03

恶意代码分析实战21-1

恶意代码分析实战13-03