0x00 概述
基本信息
样本名称 | sample.exe |
---|---|
样本类型 | 远控、蠕虫病毒 |
样本大小 | 27.5KB(28,160字节) |
MD5 | 4D049BC 19B03572EF8A00980050BAFFF |
简介
经过分析,该病毒样本是一个远控与蠕虫病毒的结合体,通过弱口令进行爆破局域网内的主机,进行传播。并通过访问两个C&C服务器接收远程指令,根据接收到的指令执行不同的操作,包括:下载文件并执行,更新自身,DDOS等任务。
流程图
0x01 样本细节详细分析
样本行为分析
大量网络行为
运行样本后, 该样本进行了大量的网络请求,其中不断尝试与内网IP地址192.168.1.107:83进行连接。如图1
然后通过fiddler抓取到,该样本访问异常URL,下载telnet.exe。并且不断尝试与内网网段进行连接,如图2:
样本详细分析
脱壳
首先用查壳工具查下壳,发现该样本是UPX壳。如图:
然后尝试用OD进行脱壳,F8单步执行一次,然后在ESP下硬件断点,F9运行到该硬件断点处,再单步几次就到了OEP处。然后dump下来,并用ImportREC工具修复IAT,但发现再该OEP处无法找到有用的信息。如图:
这时再拿查壳工具查一下dump出来的文件,发现还有一层UPX壳,如下图:
所以目前的IAT表肯定是无法修复的,继续用OD单步跟,寻找下一个OEP。单步几步就会发现,该壳程序通过LoadLibrary和GetProcAddress获取了一些壳所需要的API,如图:
随后继续单步,发现该壳程序通过获取到的virtualAlloc开辟了一段空间,并往里存储了一些数据,然后将其全部释放掉了。这里我们不管,我们只寻找下一个pushad。再走没几步,就发现了pushad,这里再进行一次UPX脱壳。
然后继续单步,直到一个大跳便会跳到函数入口。出现如下图的55 8BEC。便可以dump下来,修复IAT表了。
创建互斥体
先创建名为121212的互斥体,然后进行判断,若互斥体存在,则退出当前进程。若不存在则执行主要行为函数sub_404BD7。如图:
创建服务
创建一个名为.Net CLR的服务,并设置该服务的状态。创建服务的目的可能是用来守护该进程。
再次创建互斥体
再次创建名为.Net CLR的互斥体,如图:
枚举资源
通过调用上图中的EnumResourceNames函数,枚举二进制模块中的资源,并将读取到的资源写入hra33.dll中。如图:
更新资源段
先检索注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.Net CLR中的ImagePath的值。
然后更新从ImagePath中获取的文件的资源段数据。
加载释放的文件
先拼接出hra33.dll,再通过LoadLibrary加载该模块。如图:
创建三个线程
连续创建了3个线程,其中第三个线程是一个死循环,不断创建执行线程3。如图:
线程1:传播扩散
-
初始化字典
首先初始化了一个简单的字典,后面用来弱口令爆破,如图:
-
将主机号与网络号拼接成IP地址
通过图中gethostbyname函数获取当前主机的IP地址信息,然后获取当前主机IP地址的所处的网段信息(网络号),并与初始化的主机号:inc_IP_408724进行拼接,将网络号与主机号进行拼接,IP地址:10.95.16.1。
-
弱口令爆破该网段的所有主机
利用如图黄色标识的主机号:inc_IP_408724,然后与当前主机所在的网段(网络号)拼接出的IP地址。通过调用如下图函数WNetAddCon_copy_exec_402A40,利用之前初始话的字典,进行爆破传播。然后执行完一个IP后,主机号自加1,爆破该网段的下一个地址。直到主机号为254时停止。如下图:
-
爆破传播函数WNetAddCon_copy_exec_402A40
WNetAddCon_copy_exec_402A40传入了三个值,分别是IP地址,用户名,密码。通过调用WNetAddConnection函数,用之前初始化的字典(用户名,密码),对该网段的网络资源进行连接。
若连接成功,将自身文件拷贝到网络共享资源的多个盘符中,看哪个盘符可以拷贝成功。当拷贝成功便跳到LABEL_14:再两分钟后运行复制后的程序,从而达到通网段的传播。拷贝的目标盘符,如下表:
拷贝的目标盘符: \10.95.16.1\admin$\g1fd.exe \10.95.16.1\c$\NewArean.exe \10.95.16.1\D$\g1fd.exe \10.95.16.1\E$\g1fd.exe \10.95.16.1\F$\g1fd.exe 创建网络资源连接,复制自身代码如下图:
线程2:与远控服务器通信,执行指令
首先初始化了winsock服务,然后是循环,获取当前系统时间,并进行了判断当日期大于2013年2月21日后,便不断创建线程2.1,创建套接字链接远程服务器,获取指令执行命令。如图:
线程2.1:与远控服务器通信,获取指令并执行
初始化套接字,并建立链接
现通过htons函数将整型变量8090转换成网络字节顺序,初始化端口。
然后通过Swap_init_IPaddr将域名“arwah.uy1433.com”转换为IP地址,然后初始化socket,然后通过函数connect连接该套接字。如下图:
- 其中Swap_init_IPaddr,转化IP的代码如图:
获取主机信息并发送致远控服务器
先与套接字建立连接,然后执行get_info_405150获取主机信息。包括版本信息,内存大小,CPU信息,以及适配器信息等。然后将这些信息,通过套接字发送到远控服务器上。
将获取到的数据发送给远程服务器,如下图:
获取到的主机信息,如下图:
- 其中get_info_405150获取系统信息函数,如下:
-
- 1.判断当前操作系统版本
- 通过Getversion函数,获取操作系统信息,再根据获取到的操作系统信息,判断当前操作系统的版本,如图:
-
- 2.获取CPU频率
- 通过获取注册表中的键值,来获取CPU的频率信息。
-
- 3.获取物理和虚拟内存信息
- 通过GlobalMemoryStatsEx来获取系统物理和虚拟内存信息。
-
- 4.获取适配器信息
- 通过GetAdaptersInfo检索本地计算机的适配器信息,然后获取到网络适配器的网络信息。
接收指令执行操作
创建死循环,通过调用receive_info_4036C8来接收远控服务器下发的指令,然后根据下发的指令进行相应的操作,如图:
- 其中receive_info_4036C8函数,通过函数rec来接收远控服务器下发的指令或数据,如图:
接收的指令为:0x10,下载并执行
当接收到是0x10时,通过URLDownloadToFileA将接收的数据写入临时文件夹下,并以系统自启动以来的毫秒数来命名。当下载完后,运行下载后的程序。如图:
接收的指令为:0x12,更新自身
先关闭之前创建的.Net CLR互斥体,通过URLDownloadToFileA将接收的数据写入临时文件夹下,并以随机字符串命名。然后关闭之前创建的.Net CLR服务,并删除注册表项.Net CLR,然后再删除自身,运行下载后的程序。这里推测是更新自身。
- 关闭之前创建的互斥体如图:
- 下载文件,并以随机字符串命名如图:
- 关闭服务如图:
- 删除注册表项和自身文件,并运行下载后的文件,如图:
接收的指令为:0x14,打开IE
打开Iexplore.exe,并执行接收到的参数,初步推断为访问某些特殊的网站刷流量。如图:
接受的指令为:0x06,删除自身
先关闭之前创建的互斥体.Net CLR,关闭服务.NET CLR,然后再删除注册表项.Net CLR,删除自身,退出进程。
- 关闭互斥体,关闭服务,如图:
- 删除注册表项,删除自身,退出进程,如图:
接收的指令小于0x06时,进行DDOS攻击
当收到的指令小于6时,再次进行switch case判断。根据接收的参数,构造套接字,或是请求包头来进行连接。推测是进行DDOS攻击,如图:
- 其中当接收的指令为:0x02,执行sub_4030A5,根据收到的数据,初始化不同的套接字,并最终都交由LABEL_29来创建循环,不断进行链接,如图:
-
其中当接收的指令为:0x03时,执行sub_4031F0,根据接收到的参数,构造请求包头,并最终创建死循环不断进行连接,如图:
- 其中sub_406C60构造的比较特殊的请求包头,如图:
线程3:与线程2.1基本一样,只是远控服务器地址为内网IP
线程3与线程2.1大体上都是一致的,唯一的区别在于远控服务器不再是arwah.uy1433.com,而变成了写死的内网IP:192.168.1.107:83。而且该IP地址是通过解密函数获取到的,如图:
除黄色标识处不同外,其他部分都与线程2.1一致,这里便不再分析。
0x02 样本溯源
C&C服务器 |
---|
arwah.uy1433.com |
192.168.1.107:83 |
0x03 查杀、防御技术方案
关闭服务
由于该样本设置了一个服务.Net CLR,所以首先先关闭服务,并删除该服务。
修复注册表
由于上面提到的该样本创建了服务,对注册表进行了修改,所以这里需要对注册表进行修复,操作如下:
- 删除注册表项HKEY_LOCAL_MACHINE\system\currentcontrolset\services.Net CLR中的所有内容。
删除病毒文件
-
删除样本本身。
-
删除释放出来的hra33.dll。
-
查看下表中的文件路径,若该文件存在,则删除。
拷贝的目标盘符: \10.95.16.1\admin$\g1fd.exe \10.95.16.1\c$\NewArean.exe \10.95.16.1\D$\g1fd.exe \10.95.16.1\E$\g1fd.exe \10.95.16.1\F$\g1fd.exe -
检查临时文件夹,是否存在以随机数命名的文件,且大小hash与该样本一致,若存在直接删除。
0x04 总结
这个样本是一个远控和蠕虫病毒的结合体,释放hra33.dll,由于该样本无法正常跑起来,因此没法详细分析该释放出来的hra33.dll。这次分析的蠕虫病毒是通过初始化一个简单的字典,通过爆破局域网内的主机来进行传播的。并且该蠕虫病毒可以通过C&C服务器获取指令,执行不同操作,主要操作有:下载文件并执行,更新自身,DDOS攻击等。