译者:eridanus96
预估稿费:100RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
前言
在九十年代末和二十世纪初,文件感染型病毒成为了一个主要的威胁。文件感染型病毒将恶意代码添加到计算机的其他文件之中,如果简单地通过删除病毒文件来实现杀毒,被感染的合法文件也会随之丢失,这样一来,杀毒工作就变得非常棘手。时至今日,一些文件感染型病毒仍然流行,而且其感染过程变得日益复杂,例如W32/VirRansom、W32/Sality、W32/Xpaj和Expiro。本文就对其中比较典型的Expiro病毒最新变种进行分析。
Expiro病毒已经存在了超过10年,在此之间,作者对它的功能特性不断进行更新。Expiro的特性在于,它通过将病毒附加到主机上,从而在32或64位Windows系统上实现针对可执行文件的感染。这一病毒可以用来安装浏览器恶意扩展、修改浏览器安全设置或窃取账户凭据。
最近,我们发现了一个新的Expiro变种,它的感染方式发生了重大变化。在以前的变体中,Expiro会在入口点修改并获取代码,并在原始文件的末尾附加了病毒的payload,是一种典型的附加病毒。
但是,新的变种更改了基址重定位表(Base Relocation Table)的大小,并对内部的地址进行加密。因此,我们只能在正确还原原始的基址重定位表后,才能修复被损坏的文件,不能使用常规附加病毒的修复工具。由于加密了地址,直接增加了对该病毒分析的难度,并且还需要针对这一病毒再研发相应的修复工具。
病毒新变种分析
Expiro旧变种感染的文件,其基址重定位表不受影响,如下图:
并且,旧的变种不会修改重定位表的内容:
新的变种则减小了基址重定位表的大小(以红色标出):
而且,还会对其中的一部分进行加密:
为了在执行原始文件代码之前修复重定位,Expiro病毒首先会执行自己的恶意payload,随后,它解密重定位表,并动态重新加载所有地址,以确保原始文件能够正确运行。
重定位表的解密过程
解密过程涉及一个简单的XOR操作。第一步,先使用硬编码的XOR密钥对重定位表进行解密:
在解密后,将恢复原始基址重定位表的其余部分。EDI寄存器现在包含解密的重新定位数据:
第二步,使用公式Relocation_Address = NewImageBase + Offset + VirtualAddress来计算包含重定位地址的地址。
如图所示,这里的Relocation_Address = 0x950000 + 0x354 + 0x1000,所以在0x951354中的地址应该被重新定位(存储在eax中)。
第三步,使用公式Relocation_Value = OldValue + (NewImageBase-OldImagebase)计算重定位值。
在这里,Relocation_Value = 0x01001354 + (0x00950000 – 0x01000000),因此重定位值为0x00951354。
使用上述方法,我们就可以解密和修复Expiro感染文件的整个重定位表。此外,这还有助于我们在可执行文件的可选头部(Optional Header)中使用正确的值来计算和替换重定位表的大小。这样一来,就能确保感染病毒的文件,在删除恶意payload后可以恢复正常运行。
SHA-256值
f15b8fc3ca117ab38e3074adc6208666b2189259e447db8202ef85b9bbfc4537