细数恶意代码对抗技术之加密(三)-加壳

By | 2014年3月4日

恶意代码除了运用前两篇中提到的加密对抗技术以外,有少量的恶意代码还利用了类似于加壳的高级对抗手段,甚至会利用一些公开的应用加固方案,其中最为典型的当属Syrup家族。

从Syrup家族说起

Syrup家族是AVL移动安全团队在2013年上半年就发现的一类恶意样本,其首次运用了Tim Strazzere在BlackHat上演讲所提到的公开技术,其将恶意的可执行文件加密并插入到DEX头部,然后在运行时释放加载。

6A06733E-3474-4F24-B95E-4135F45A9CB5

通过上图可以看到DEX头部长度并不是标准的0x70字节,其将解密算法实现在so文件中,这样使其能够逃避VirusTotal上大部分安全厂商的检测。AVL移动安全团队对其解密算法进行了完整的逆向还原,并实现了自动化的脱壳。

下图是其DEX文件头部结构的示意图:

D6F861FB-32FA-4367-AA55-C48B3310D1C3

替换Application

AVL移动安全团队发现在少量恶意代码中已经出现运行时替换Application的方式,不过其对实际加载的可执行文件只是简单的异或加密:

87327C95-D46E-4112-9F2B-8FC8A5966339738BA4B2-7BB5-44DF-8B68-01BC5659759F

公开加固方案

AVL移动安全团队对目前公开的加固方案进行了原理分析,并且发现部分恶意代码或者Adware有利用公开的加固方案对自身应用进行保护,以达到逃避安全厂商检测的目的。

当前公开的加固方案大多采用的方式是对应用的classes.dex文件进行加密,然后在运行时解密并替换为真实的Application,其核心在于解决运行时如何不被获取明文的可执行文件,通常的解决办法是保证可执行文件在文件系统层面始终处于被加密的状态,并且依赖于加密算法的强度。部分加固方案还加入了运行时反调试和自校验技术来保证不会被进程注入和被恶意篡改。某知名加固方案就采用了通过inline hook关键IO系统调用来保证所有IO行为均处于加密状态。关于这些加固方案的实现原理在这里就不一一阐述了。

小结

这个系列对当前恶意代码运用的加密类方式对抗技术进行了总结,可以看出恶意代码在对抗技术上开始出现多样化的发展,并且复杂度更高,对抗手法变异更快,以至于对其静态分析的难度和成本也大大加强。

从恶意代码开始采用一些公开的加固方案进行自我保护逃避检测来看,加固方案服务商应该进一步加强对待加固应用的检测机制,保证不被恶意代码制作者钻了空子。

发表评论

电子邮件地址不会被公开。 必填项已用*标注