安全路透社
当前位置:安全路透社 > 安全客 > 正文

【技术分享】“Selfie”:利用DynamoRIO实现自修改代码自动脱壳的神器

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

翻译:shan66

在本文中,我们将隆重向大家介绍一款脱壳神器:“Selfie”。有了它,大家就不用为了在基于自修改代码技术加壳的恶意软件中寻找OEP发愁了,因为在大部分情况下,Selfie都能自动完成这项任务。该工具现在已经开源了,大家可以从下列地址下载:https://github.com/BreakingMalware


引言 


对于恶意软件研究人员来说,我们经常会遇到经过加壳、加密或混淆处理的代码。恶意软件通常都会试图以这种方式来逃避安全检测。然而,为了研究这些恶意软件,我们需要摆脱加壳软件的干扰,找出恶意软件运行的起始点,即所谓的原始入口点(OEP)。不幸的是,脱壳工作通常是我们研究人员最耗时、最复杂的一项工作。

当我们遇到自修改代码的恶意软件时,脱壳工作就会格外的冗长乏味。自修改代码是加壳软件常用的技术,它通过增加额外的安全层来提高软件的复杂性。对于使用了自我修改代码来说,加壳后的恶意软件会对自身进行覆盖。在脱壳的时候,需要利用动态分配的内存脱壳,恢复其原始代码和映像,然后将脱壳后的代码拷回来。最令安全研究人员沮丧的事情,莫过于以手动方式来检索采用了自修改代码的恶意软件的OEP了。

由于这个缘故,我们开发了“Selfie”。对于Selfie来说,即使这些恶意软件利用自修改代码技术进行了加壳保护,它照样能够自动找出恶意软件的OEP。Selfie工具本身是基于DynamoRIO的,后者是一个动态代码插桩(Dynamic Binary Instrumentation,DBI)框架。

要注意的是,对于那些使用不太常见的方法实现的自修改代码,Selfie目前尚无法处理,例如,使用返回指令到达OEP或不改变IAT大小的自修改代码等。


手动方式为自修改代码脱壳 


下面,我们详细介绍如何通过手工方式为自修改代码脱壳的具体步骤,为此,我们以Trojan Shylock为例进行演示。

第一步:观察PE文件 

下面是我们得到的原始信息,我们将从这里开始我们的脱壳之旅。

http://p8.qhimg.com/t0126f8c4a557002674.jpg


Selfie在行动 


Selfie做得怎么样呢? 

首先,让我们对上面手动脱壳的恶意软件(Shylock)运行Selfie: 

http://p3.qhimg.com/t01cf36ff3d2a8434ec.jpg

图24:针对Shylock运行Selfie

现在让我们来考察一个Win32 / Xswkit(别名Gootkit)恶意软件。

对于那些不熟悉Xswkit恶意软件的人来说,它就是Win32 / Poweliks的一个克隆,只不过提供了一些额外的功能(它是通过使用微软的shim引擎以及不同的启动方法(rundll + mshta.exe)实现UAC绕过的)。

有关该样本的工作机制的详细信息,请参阅kernel_mode.info论坛中EP_X0FF提供的完整分析。

对于该样本加壳和脱壳后的代码,也可以从kernelmode.info论坛下载。感谢Tigzy和R136a1为我们提供了这些样本代码,以及EP_X0FF提供的未加壳的样本代码。

加壳之后的: 

https://www.virustotal.com/en/file/ed3d622c54b474c6caef540a3147731a1b2c7d4a7563b97731880bb15305d47d/analysis/1420287664/

在运行Selfie之前,我们看到的是这样的:

http://p5.qhimg.com/t0178f8f86ac876c3dd.jpg

图25:加壳后的恶意软件Xswkit的样本。

请注意映像基址和AddressOfEntryPoint(EP)字段。

脱壳之后的: 

https://www.virustotal.com/en/file/c3885c394a3ad75bc53e7ef2b2d8c8e9e5a12a7f3a52c7399d63814f05c52c96/analysis/1420287667/

http://p5.qhimg.com/t0176e96c529a992d05.jpg

图26:未加壳的Xswkit恶意软件样本。注意映像基址和AddressOfEntryPoint(EP)字段。脱壳后的样本中的EP是实际的OEP

现在让我们看看,利用Selfie工具是否能够得到类似的结果: 

http://p7.qhimg.com/t01ef9fc250c9e76b5c.jpg

图27:事实上,这里的OEP与未加壳的样本中的OEP的值是一致的


结束语 


我们已经在GNU / PL许可下公开发布了Selfie工具及其相应的代码。如果你是研究员,请随意使用该工具。

欢迎大家积极提供反馈、评论和改进建议。

可执行文件和代码下载地址:https://github.com/BreakingMalware


原文链接:https://breakingmalware.com/tools/selfie-a-tool-to-unpack-self-modifying-code-using-dynamorio/

未经允许不得转载:安全路透社 » 【技术分享】“Selfie”:利用DynamoRIO实现自修改代码自动脱壳的神器

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册