我最近研究了一个来自客户提交的恶意软件。SHA-256为:
f4d9660502220c22e367e084c7f5647c21ad4821d8c41ce68e1ac89975175051
从技术角度来看,这并不是一个复杂的恶意软件。但是它说明了一些恶意软件作者最常用的用于反动态(自动)和静态(手动)分析的技术。
为了检测动态分析环境,它会检测下列程序列表:
OLLYDBG W32DASM WIRESHARK SOFTICE PROCESS EXPLORER PROCESS MONITOR PROCESS HACKER
该恶意软件列举了被感染系统上的所有窗口,如果发现其中任何一个属于上面列出的程序之一,恶意软件将进入一个循环并等待程序退出。这是一个很基本的技术,但是用代码实现起来相当容易和简单。
针对静态分析,该恶意软件使用了两个其他的技术:
1.在恶意软件中使用自定义的加密方案对任何明显的字符串进行加密。这对恶意软件作者和安全分析师有以下含义: C&C域名可以被硬编码在恶意软件中。对恶意软件编写者来说没有必要生成域名生成算法(DGA)。这些DGA很合适作为签名的候选人,并且恶意软件编写者在某些情况下会蒙受显著的“维修”成本来不断变化DGA。 所使用的恶意软件应用程序编程接口(API)在运行时会被解析;并且这些API的名称会在运行时被解密。这意味着安全分析师只有理解了加密方案后静态分析才变得有意义。 2.与C&C服务器通信使用了自定义的加密方案: 恶意软件与C&C服务器通信时,在常规的HTTP协议之上使用了自定义的加密/混淆技术。
现在,让我们深入的了解一下字符串的加密方案。例如,让我们来看看下面的字符串:
UHEOtTKwmsDb1J/2f8l/5w==
这看起来似乎是Base64编码,但是加密方案要稍微复杂一些。首先,恶意软件从硬编码的数据中生成密钥。密钥的生成步骤如下:
1.取硬编码字符串:
2.对1中的字符串进行Base64编码:
3.对2中的字符串进行MD5加密:
4.接着,恶意软件会计算下列硬编码字符块的MD5值:
5.MD5值为:
6.将第3步和第5步得到的MD5散列进行联接:
7.第6步中的字符串的MD5值将被用于微型加密算法(TEA)的key:
到此,准备工作已经完成,恶意软件准备解密字符串。
解密算法如下:
1.将加密的字符串-例如,“UHEOtTKwmsDb1J/2f8l/ 5W==”传参到一个可能是base64的函数。
2.使用TEA解密第1步中得到的结果,解密的key就是上面加密过程中第7步生成的key。
3.最终使用简单的循环获得解密的字符串:
4.解密后的字符串如下:
PAYLOAD分为收集关于系统的数据和通过硬编码字符串从“.DATA”节分离。这是恶意软件使用的一个非常标准的方案。
PAYLOAD生成方案如下所述:
1.创建一个伪随机串并用“&”连接 – 例如:
2.添加主机名称和PID:
3.创建一个伪随机串并用硬编码值连接:
4.将上面的字符串联接在一起:
5.之后再添加硬编码数据:
6.取"密钥生成步骤"中第5步中MD5散列的子字符串:
7.在第5步的字符串后面添加上一步的子字符串:
8.添加操作系统主/次版本和构建信息:
9.添加区域信息:
10.添加内存大小和时间信息:
将最终得到的PAYLOAD进行如下算法编码:
1.用"Dm1cL"字符串作为PAYLOAD的头部。
2.生成一个随机的key进行xor。
3.进行HTML-escaped编码。
被异或和escaped编码后的数据如下:
总结
首先,在许多现代恶意软件的家族中都可以发现与上述相同的技术的变种。这使得恶意软件作者能够一杆命中三个目标。这是一个非常简单的加密方案,并在恶意软件作者这一方面提供了不错的设计,这使得恶意软件作者能够相对有效的去改变它。其次,它的动态和静态分析稍微有些复杂。最后,它提供了一个有效的工具来创建同一种恶意软件的新变种,而且能够绕过杀毒引擎的特征。
相关的恶意软件的文件哈希,恶意域名和IP地址的集合可在X-Force Exchange找到。此外,下面提供了恶意软件中硬编码的C&C域名列表:
“76TtKl8ZwW6MU29wmPDtT1QNcj5UDbqn/KIVj42N4ZYkZEPTS6ByTw==” / “hxxp[:]//www[.]n-fit-sub.com/ec/index[.]php”
*参考来源:securityintelligence,编译/丝绸之路,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)