记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

Android勒索软件的逃逸和分析对抗技术(上篇)

2015-08-27 03:45

分享到:

http://pic1.hackdig.com/pp/caef4276da6ef4784d52dd7d3c29517c97e4f1a2d764ddfa4b0ba39b8e567a7cd2ad52cd5a12d020971d37c47d5ce95e.jpg

赫•乔•威尔斯曾经说过:“适者生,不适者灭,这是自然界一如既往、永不变更的规律。” 尽管说这句话的时候,是针对人类而言的,但它同样也适用于恶意软件。

虽然在恶意软件作者和安全供应商之间的战斗没有硝烟,但却从来就没有停止过:攻击者总是试图入侵计算机搞破坏,而安全专业人员总是试图阻止他们。 恶意软件作者制作恶意软件并投入使用之后,如果这些软件无法不断适应不断变化的环境的话,那么安全供应商就能定位、分析并阻止这些软件,让它们彻底报废。当然,攻击者也是知道这一点的,即恶意软件要么适应,要么消亡。

我们公司的安全相应部门最近公布了一份勒索软件的深入分析报告,详细介绍了它是如何发展为当今Windows电脑上最为棘手的恶意软件种类之一。然而,现在移动设备已经开始成为勒索软件的主要攻击目标,并想方设法避免被静态分析工具和静态签名系统侦测到,从而实现长久生存的目的。

自从2013年出现第一款设备锁定类型的恶意软件(Android.Fakedefender)以来,Android勒索软件已经取得了长足的进步。 不到一年之后,第一个文件加密型的Android勒索软件(Android.Simplocker)就出现了,不出意料,移动勒索软件变得越来越先进了。这一趋势一直持续到今天,因为恶意软件作者实已经意识到了潜在的移动受害者数量巨大,所以,我们可以肯定这一威胁将继续发展下去。 

通过Android.Lockdroid和Android.Simplocker这两个恶意软件系列,可以很好地展示勒索软件作者是如何不断采用各种方法来确保恶意软件不断进化的。通过考察这两个恶意软件系列的适应手段,我们就能了解勒索软件作者是如何利用此前基于桌面的恶意软件的手法,从而使检测和分析变得更加困难的。

教新狗老把戏

图标——藏身于你的眼皮底下

在过去,虽然恶意软件的变种会故意把代码和数据弄得据看上去不一样了,但是对于一些资源文件,例如图像和图标则保持不变。后来,这些恶意软件的新变种则连图像文件也要使用不一样的(有一些只是修改几个像素,以便能够生成新的哈希值)。 然而,这些做法已经证明是无效的,因为图像文件中即使有细微差别也是很容易被识别出来。于是,新的变种便采取更先进的方法,不将图像以PNG文件的格式存储在应用程序包中了,而是开始使用的数据的URI(统一资源标识符)方案来存储图像。 数据URI方案允许在网页中使用内联(inline-code)的方式在网页中包含数据,即使这些数据是外部资源也是如此。换句话说,我们可以把图像数据以Base64编码的形式嵌入到页面中。

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

图1 利用数据URI将数据嵌入到页面

字符串化

通过操纵数据的字符串,Android勒索软件可以让自己在被扫描工具分析期间变成另外一种模样。到目前为止,赛门铁克已经在这些勒索软件变种中发现了许多此类诡计,有的很简单,有的非常具有创造性:

1.以相反的顺序表示字符串

在静态形式中,这些字符串是以逆序的方式进行存放的,只有到了运行期间,它才会被纠正过来使用。 这就意味着,静态分析期间看到的字符串与实际的字符串是不一样的,这个诡计用来骗过比较简陋的分析工具。

http://pic1.hackdig.com/pp/caef4276da6ef4784d52dd7d3c29517c2c5cc539f42655ef10cccba04ed4d7f1cb91f7791a9f903c6d48187e3be1e9de.jpg

图2 逆序存储的字符串

2.填充过垃圾字符的简单Base64编码

这种策略的做法是,在实际的字符串中填充一组垃圾字符序列,从而得到一个新的字符串,然后使用Base64编码,最后放入恶意软件的代码中。 在运行时,为了得到实际的字符串,需要先进行Base64解码,然后删除添加的垃圾字符序列。

http://pic1.hackdig.com/pp/69703ce7a46d1e2ebe4a3bf5791266bf542bb580d2af1ac1e8b020317a3e81e44574784a2bf8b40e2a3da7508f878ea3.jpg

图3 填充垃圾字符后的Base64编码字符串

http://pic1.hackdig.com/pp/2922be572a83b8a8c47e1e825dc54607c94b7b602d9a3be3d2d86d6013ac6250cef2e9fc171473665096c93f97fd34f3.jpg

图4 静态字符串——“我们看到的内容”

http://pic1.hackdig.com/pp/69703ce7a46d1e2ebe4a3bf5791266bf95ff67ef582b75c6f07699d30925a16130afbdb1e95fa8d5fc702c833f6356cd.jpg

图5 运行期间的字符串——“我们得到的字符串”

3.字符串加密

有时,勒索软件作者会用硬编码的加密密钥对字符串实施AES加密。 字符串一旦被加密,那么到了静态分析工具那里,就只会看到一堆毫无意义的乱码。这些字符串,只有在运行过程中被解密以后,才会恢复其本来的面目。 这给代码分析带来了很大的困难。

http://pic1.hackdig.com/pp/d2bd8ab8780efecdb70a25b22e968cee2227b6a54d715a7872b8be88ebb3c1d87a0e029b173bedf8583d653286a739c2.jpg

图6 带有硬编码密钥的AES加密程序

4.碎片化的字符串与碎片化的Unicode字符串

为了防止某些字符串被静态分析工具发现,一些变种会使用空格符和逗号或其他类似字符将字符串分割开来。除此之外,还可以使用Unicode,举例来说,单词“Child’s”可以表示为“Child\u2019s”,因为\u2019是上撇号(’)的Unicode编码形式。 这一点平时看不出来,但是执行的是很就很明显了。

http://pic1.hackdig.com/pp/69703ce7a46d1e2ebe4a3bf5791266bfd22d2bd2a083bc3a1e2e6320ca9056a076378002d418a72d5a8a1cc8954a7f91.jpg

图7. 碎片化字符串举例

需要注意的是,前面列出的方法并不是相互排斥的,相反,它们有时候可以组合使用。例如,恶意软件可以首先利用垃圾字符来填充字符串,然后进行Base64编码,最后使用AES加密。

小结

在本文的上篇中,我们详细介绍了Android勒索软件常见的逃避检测的手法,在下篇中,我们将继续介绍它们用来对抗分析的各种方法。

本文由 360安全播报 翻译,转载请注明“转自360安全播报”,并附上链接。
原文链接:http://www.symantec.com/connect/blogs/android-ransomware-tricks-trade

知识来源: bobao.360.cn/learning/detail/610.html

阅读:97260 | 评论:0 | 标签:Android

想收藏或者和大家分享这篇好文章→复制链接地址

“Android勒索软件的逃逸和分析对抗技术(上篇)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云