原创作者: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服务器,并可以执行简单的控制命令。可使用最新的杀毒软件查杀。
五、参考
http://www.secureworks.com/research/threats/the-mirage-campaign/
The Mirage Campaign指导教师:FangSir
*作者:shuxiang,本文属FreeBuf原创奖励计划文章,未经作者本人及FreeBuf许可,切勿私自转载