【病毒分析】文件感染型病毒Expiro的新变种分析

https://p5.ssl.qhimg.com/t01ead6ca6875235763.jpg

译者:eridanus96

预估稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

在九十年代末和二十世纪初,文件感染型病毒成为了一个主要的威胁。文件感染型病毒将恶意代码添加到计算机的其他文件之中,如果简单地通过删除病毒文件来实现杀毒,被感染的合法文件也会随之丢失,这样一来,杀毒工作就变得非常棘手。时至今日,一些文件感染型病毒仍然流行,而且其感染过程变得日益复杂,例如W32/VirRansom、W32/Sality、W32/XpajExpiro。本文就对其中比较典型的Expiro病毒最新变种进行分析。

Expiro病毒已经存在了超过10年,在此之间,作者对它的功能特性不断进行更新。Expiro的特性在于,它通过将病毒附加到主机上,从而在32或64位Windows系统上实现针对可执行文件的感染。这一病毒可以用来安装浏览器恶意扩展、修改浏览器安全设置或窃取账户凭据。

最近,我们发现了一个新的Expiro变种,它的感染方式发生了重大变化。在以前的变体中,Expiro会在入口点修改并获取代码,并在原始文件的末尾附加了病毒的payload,是一种典型的附加病毒。

但是,新的变种更改了基址重定位表(Base Relocation Table)的大小,并对内部的地址进行加密。因此,我们只能在正确还原原始的基址重定位表后,才能修复被损坏的文件,不能使用常规附加病毒的修复工具。由于加密了地址,直接增加了对该病毒分析的难度,并且还需要针对这一病毒再研发相应的修复工具。


病毒新变种分析

Expiro旧变种感染的文件,其基址重定位表不受影响,如下图:

http://p4.qhimg.com/t01ef200f0b1397831a.png

并且,旧的变种不会修改重定位表的内容:

http://p0.qhimg.com/t015ee595a77241be86.png

新的变种则减小了基址重定位表的大小(以红色标出):

http://p4.qhimg.com/t01b6138a4a795a8111.png

而且,还会对其中的一部分进行加密:

http://p9.qhimg.com/t0140245dc6459e283e.png

为了在执行原始文件代码之前修复重定位,Expiro病毒首先会执行自己的恶意payload,随后,它解密重定位表,并动态重新加载所有地址,以确保原始文件能够正确运行。


重定位表的解密过程

解密过程涉及一个简单的XOR操作。第一步,先使用硬编码的XOR密钥对重定位表进行解密:

http://p5.qhimg.com/t018e6ff79120757eb6.png

在解密后,将恢复原始基址重定位表的其余部分。EDI寄存器现在包含解密的重新定位数据:

http://p8.qhimg.com/t0121fe2ffed5702ad7.png

第二步,使用公式Relocation_Address = NewImageBase + Offset + VirtualAddress来计算包含重定位地址的地址。

http://p1.qhimg.com/t01c2e1e4c4915f1951.png

如图所示,这里的Relocation_Address = 0x950000 + 0x354 + 0x1000,所以在0x951354中的地址应该被重新定位(存储在eax中)。

http://p1.qhimg.com/t0189ce05ef407a8233.png

第三步,使用公式Relocation_Value = OldValue + (NewImageBase-OldImagebase)计算重定位值。

http://p9.qhimg.com/t01e49598a7c76f74b9.png

在这里,Relocation_Value = 0x01001354 + (0x00950000 – 0x01000000),因此重定位值为0x00951354。

http://p5.qhimg.com/t01bb44e73170ad3da4.png

使用上述方法,我们就可以解密和修复Expiro感染文件的整个重定位表。此外,这还有助于我们在可执行文件的可选头部(Optional Header)中使用正确的值来计算和替换重定位表的大小。这样一来,就能确保感染病毒的文件,在删除恶意payload后可以恢复正常运行。


SHA-256值

f15b8fc3ca117ab38e3074adc6208666b2189259e447db8202ef85b9bbfc4537

(完)