原创作者:shuxiang

一、背景介绍

Mirage:中文译为——幻影

MD5  : FB17FFC7495880A7C19DF0EBE5C97AD7

Mirage 是一个2012年的后门木马,攻击目标是政府组织、能源公司、军队机构等。一旦在受感染的主机上执行,它就会创建一个后门,该后门会主动连接远程服务器,发送被感染主机的敏感信息等,同时接收服务器的指令。

该后门是一个很老的样本,很简单,适合新手入门学习,本篇也是新手作者分析的第一个样本,特此记录一文。

二、样本行为总览

Mirage样本首先释放出两个文件:ARAHAN GERAKAN (revised).docx和svabice.exe,其中docx是白文件,svabice.exe是核心模块,功能都在此模块里实现。在运行svabice.exe的同时,打开了上述的docx文件,而Mirage的图标正是word形式,因此有很大欺骗性,用户可能误以为打开的是一个docx文件,而实际上svabice.exe已经运行起来。svabice.exe运行后复制自身到系统临时目录下生成Reader_SL.exe,并执行之。svabice.exe会收集主机的系统信息、用户名称等敏感信息,通过发送HTTP请求到C&C服务器,同时也可接受C&C服务器的控制指令并执行。详见图1:

图1 样本行为总览

三、技术细节

1、Mirage释放出文件

该样本伪装成word格式的图标文件,首先释放出两个文件,分别为ARAHAN GERAKAN (revised).docx和svabice.exe(图2所示),然后运行svabice.exe。同时打开ARAHAN GERAKAN (revised).docx,掩饰svabice.exe的执行(图3所示),最后删除自身。下面来分析一下svabice.exe文件。

图2 Mirage释放出两个文件

 

图3 同时执行svabice.exe和打开docx文件

图4 打开的ARAHAN GERAKAN (revised).docx文档

2、拷贝自身

(1)、Svabice.exe开始读取自身文件末尾的300字节的数据,然后解密,解密后的数据含有许多字符串,包含域名和端口等信息,这些字符串后面将会被程序用到。解密算法在下文中也会有详细解释。

图5 读取svabice.exe文件末尾的300字节数据

图6 解密svabice.exe中的300字节数据

(2)、Svabice.exe开始创建互斥体,互斥体的名称为: flbbaby.dyndns.org:8080-1.20,即使用内存地址[00405510]和[00405550]两处的字符串拼接而成。如果已经存在互斥体,程序则退出,保证程序只执行一次。

图7互斥体名称为: flbbaby.dyndns.org:8080-1.20

如果互斥体不存在,则在系统临时目录下新建一个logs文件夹:

图8 创建互斥体和logs文件夹

将原文件svabice.exe写入到新文件Reader_SL.exe,即拷贝自身到临时目录下\Temp\logs,命名为Reader_SL.exe。Reader_SL.exe字符串正是之前解密出的配置信息里的(图6)。

图9 原文件Svabice.exe写入到新文件Reader_SL.exe

图10 生成 Reader_SL.exe文件

(3)、设置随机启动

在开始\程序\启动目录下,生成Update.bat,设置注册表值,使Reader_SL.exe文件在每次系统重启时自动运行起来。

图11 生成Update.dat文件

图12 Update.dat文件

然后打开Reader_SL.exe,执行起来~~

(4)、获取系统信息

图13 获取计算机名称和用户名、系统版本等信息

图14 获取主机敏感信息

3、获取C&C服务器IP 地址

(1) 首先获取本地网卡的MAC地址。

(2) 通过查找注册表值,找到代理服务器的IP,如果不存在,则继续查找图16的两个域名。

图15 查找代理服务器IP地址

通过函数gethostbyname获取域名flbbaby.dyndns.org的地址为: 81.166.122.234;第二个域名为: zongtong.9966.org,通过Wireshark抓包发现第二个域名已经查找不到。

图16 查找的两个域名

图17 Wireshark抓包DNS请求

通过对代理服务器,两个域名的查找,得到远程服务器的IP地址,然后构造数据包 ,发送到远程服务器上。

4、构造数据包过程

构造的数据包是通过HTTP的POST方法发送到C&C服务器上的8080端口,过程分为:构造HTTP报文头部,并对特殊字符(如&,:,/等)编码;构造HTTP报文实体数据部分,对数据部分进行简单加密,然后将完整的HTTP请求发往远程C&C服务器。

首先构造HTTP URL :

result?hl=en&meta=dnvhrqrgaafxtbhbaesxycwyqipjqrf(31位随机字符串)

然后对URL中的特殊字符进行URLencode编码,将URL编码为:

result%3Fhl%3Den%26meta%3Ddnvhrqrgaafxtbhbaesxycwyqipjqrf

图18 构造URL

编码后:

图19 URL编码

HTTP头部数据为:

图20 URL编码后的HTTP头部数据

HTTP正文数据部分以字符串Mirage开始,随后包含收集的系统信息。正文数据会进行简单加密。算法如下,将每个字符的ascii码值与该字符相对于payload的位置偏移值相加,得到新的字符。

汇编代码如下:

00401970  |  8B55 0C       MOV     EDX,[EBP+C]
00401973  |  8D3C01        LEA     EDI,[ECX+EAX]
00401976  |  8A143A        MOV     DL,[EDX+EDI]
00401979  |  02D0        ADD     DL,AL
0040197B  |  40         INC     EAX
0040197C  |  3BC3        CMP     EAX,EBX
0040197E  |  8817        MOV     [EDI],DL
00401980  |  7C EE       JL      SHORT 00401970

Mirage会被加密为Mjtdkj,详见如下示意:

加密前:        M     i     r     a    g    e
Ascii码值(十进制): 77    105   114  97  103  101
偏移:          0      1     2    3    4     5
Ascii码+偏移值:   77   106    116  100  107   106
加密后:        M     j      t     d    k     j    

图21 HTTP正文数据部分加密前

 

图22 HTTP正文数据部分加密后

5、和C&C服务器通信

发送的数据长度为HTTP头部长度加上正文数据部分长度,发送POST请求如下图:

图23 完整的HTTP请求数据

实际抓包如下图:

图24 Wireshark抓包发送的HTTP请求

C&C服务器的返回数据即包含控制命令,若服务器没返回数据,则样本每隔1分钟重复发送HTTP请求。

图25 每隔1分钟重新发送HTTP请求

C&C服务器返回HTTP正文数据也是以Mirage开始,见下图:

样本在检测前7字节是否为Mirage,如果是则认为是合法的控制命令,随后进入sub_4021C1函数执行之。因为目前服务器不再返回数据,笔者无法动态调试样本如何控制命令,以及各个其功能的详细细节。

图26 各个功能对应函数

四、总结

该样本后门比较简单,主要功能是获取被感染机器的敏感信息上传到C&C服务器,并可以执行简单的控制命令。可使用最新的杀毒软件查杀。

五、参考

The Mirage Campaign  http://www.secureworks.com/research/threats/the-mirage-campaign/

指导教师:FangSir

*作者:shuxiang,本文属FreeBuf原创奖励计划文章,未经作者本人及FreeBuf许可,切勿私自转载

源链接

Hacking more

...