Android加壳与脱壳(3)—— 一次加壳恶意应用的对抗
一、前言
Android恶意应用的研究也是热点之一,近些年来,恶意应用的检测逐渐变成难点,以往常见的Android恶意应用的检测方式为:特征码、熵值、机器学习/深度学习等,但随着防护技术的进一步发展,Android恶意应用的检测又进入一个新的难点。现有的恶意应用检测的难点包括:
(1)恶意行为具备定制性,比如很多的恶意应用针对不同的厂商有不同的定制策略,这样使得机器学习效果较差
(2)恶意行为进行加壳,一些恶意样本采用vmp等加壳技术,将恶意行为进行隐藏
(3)恶意行为难为难以触发溯源:一些恶意样本的触发具备一定的条件限制,比如采用云控触发的方式,在某个时间点进行触发
(4)恶意行为变种较快:一些恶意应用变种较快
今天我们关注恶意应用中的加壳类,加壳恶意应用是否能有效规避一些在线沙箱呢,上篇文章中我们借用开源代码实现了一个简易的一代壳加壳器,这里我们就趁热打铁来开展一次小实验,帮助大家了解恶意应用的对抗。
二、实验
1.实验准备
一代壳自动加壳器ApkPacker(上篇文章我们已经给出,大家自取)
恶意锁机样本hl.apk
在线病毒沙箱:
奇安信 威胁情报中心 https://sandbox.ti.qianxin.com/sandbox/page
腾讯哈勃分析系统 https://habo.qq.com/
2.实验过程
(1)恶意样本分析
我们这里先静态查看一下我们的恶意样本,并动态运行一下查看实际效果
静态分析:
从静态层面可以看出十分符合锁机病毒的特征,感觉可能是三层锁机样本
动态运行:
不出任何意外,这里已经成功的锁机,这里我们在模拟器中运行,模拟器已经无法响应,这个原理我在看雪上有文章解释,大家可以去查看,这里大家不要在真机运行
(2)沙箱分析
经过前面的分析,我们已经很明显知道这是一个病毒锁机样本,下面我们用网上免费的两个沙箱来识别下
腾讯:
奇安信:
可以看出无论是腾讯还是奇安信都很快识别出是病毒,其实这两个沙箱既可以静态分析,又有动态分析过程,那么沙箱到底是通过静态特征码还是动态行为去识别恶意样本,我们来具体实验下
(3)加壳
sh ApkPacker.sh hl.apk
我们打开我们前面的一代壳加壳器,这里我重新编写的自己的壳代码,加壳步骤很简单,参考上篇文章,这里我们就直接看加壳后的样本
可以发现加壳成功,这里就是简单的一代壳,我们在模拟器中也是可以正常的运行的
(4)实验对比
我们将前面加壳前后的样本在沙箱中运行进行对比
腾讯:
加壳前:
加壳后
奇安信:
加壳前
加壳后
综述我们可以推测这两个免费版沙箱是通过特征码进行检测,而且对apk解析不彻底,因为这里我们的源代码并未加密而是直接保存在样本中,但是沙箱好像还是没检测出来
(5)VirusTotal
我们这里因为用了很简单的加壳技术,也并未对源样本加密,所以应该是很容易检测出来的,我们使用ViruTotal来检测
加壳前
加壳后
可以明显看见ViruTotal有很丰富的病毒引擎,还是可以检测出来,不过我们加壳后的分数变低说明是有效果的,如果我们使用更为复杂的加壳技术,分数一定会进一步增加
当然不少朋友说,还可以检测病毒的行为特点,但是如果我们在病毒中隐藏行为,比如行为只在特定时间、特定设备、特定人群去触发,这样就难以通过行为来进行捕获
从一定程度来说,加壳防护+行为隐藏+云端下发等进一步加大了当前恶意应用检测的难度
三、实验总结
本文只是一次Android恶意应用检测的对抗实验,实验的技术十分简单,但却很明显的揭示了当前的恶意应用检测初步对抗,感兴趣朋友可以加入知识星球进一步探讨研究