最近百度安全实验室发现一款“黑暗潜伏者”新型手机病毒。该病毒附着在众多壁纸和游戏类应用中。截至眼下。已经发现感染该病毒的应用超过1万多款,感染用户超过3000万。
该病毒恶意行为例如以下:
1、 后台利用系统漏洞获取暂时Root权限。
2、 获取暂时Root权限后,安装SysPhones.apk恶意程序为系统软件,安装Root后门程序zy到/system/bin文件夹。
3、 SysPhones.apk依据server端指令静默下载、安装推广应用,并可以依据指令安装推广应用为系统软件,从而使其无法卸载。
4、 其他未知的潜在恶意行为。
一、利用系统漏洞获取暂时Root的方式
该手机病毒利用知名的Root工具FramaRoot的漏洞能力获取暂时Root权限。
(http://forum.xda-developers.com/apps/framaroot/root-framaroot-one-click-apk-to-root-t2130276)
FramaRoot集成了众多Android系统漏洞Root利用代码。眼下可以提供对近400款Android设备的Root能力,支持设备列表例如以下:
(http://forum.xda-developers.com/apps/framaroot/framaroot-supported-devices-t2722980)
FramaRoot关键功能都集成在libframalib.so库中。该so库提供了两个接口供JAVA层调用:
Check接口: 检測设备漏洞,返回漏洞列表。
Launch接口:依据传入的漏洞名称,运行对应漏洞利用代码获取Root。
Root成功后安装so库中附带的Superuser.apk和su文件到系统文件夹。
该手里病毒巧妙利用了FramaRoot的工作机制,通过重要数据替换的方式,构建了恶意的FakeFramaRoot。
例如以下图所看到的:
通过重要数据替换方式巧妙的利用了FramaRoot的Root能力,在获取暂时Root权限后。安装替换后的恶意SysPhones.apk为系统应用。安装zy到/system/bin文件夹,zy作为后门程序。提供SysPhones.apk以Root用户运行命令的能力。
二、躲避安全检測和逆向分析的方式
依据检測到的数据显示,附带该木马的应用2014年2月份首次出现,到被检測发现已默默潜伏9个月。该病毒採用了例如以下方式达到恶意行为隐蔽性:
1、 通过反调试技术、关键恶意代码native化、关键代码数据加密、网络通讯数据加密等方式阻碍逆向分析。
2、 关键恶意行为代码云端下载、动态载入。
3、 恶意行为云端动态触发,行为可控。
三、黑暗潜伏者工作原理
经过对代码的完整逆向分析。整个手机木马的工作原理例如以下图所看到的:
四、恶意代码分析
内嵌在应用中的恶意代码有两部分组成:
1、 com.android.luahc[Java]
主要上传设备信息到指令server,并依据指令server的返回的指令下载恶意代码FakeFramaRoot.so库。
2、 libluahc.so[Native]
调用FakeFramaRoot.so库。触发获取暂时Root权限,安装SysPhones.apk 和zy的恶意行为。
该手机木马安装后并不会马上触发。仅仅有在设备下次又一次启动后。才会触发恶意行为。
全部keyword符串如网址、路径等信息经过加密处理并以byte数组形式存放。这样可以躲避眼下杀毒软件的查杀。
全部的网络通讯数据都进行了加密处理,下面是com.android.luahc[Java]请求指令server获取FakeFramaRoot.so库下载地址的网络交互数据:
请求server获取FakeFramaRoot下载地址指令:
server返回数据例如以下:
解密后server返回数据内容例如以下:
http://106.187.44.144/qwe
com.android.luahc[Java]获取到下载地址后,下载文件并保存为libframalib.so1。libframalib.so1为压缩文件,解压后获取libframalib.so文件:
com.android.luahc[Java]通过调用libluahc.so间接载入FakeFramaroot.so库函数。
libluahc.so 以assets/tenatt文件附带在应用安装包中,运行时释放到文件文件夹并被com.android.luahc[Java]层载入。
功能例如以下:
1、在JNI_OnLoad中通过调用ptrace达到反调试目的:
2、载入fakeframaroot.so库并调用check接口获取漏洞列表
3、载入fakeframaroot.so库并调用launch接口进行Root
FakeFramaroot.so在获取暂时Root权限后。安装恶意SysPhones.apk为系统应用。安装zy到/system/bin文件夹。zy作为后门程序。提供SysPhones.apk以Root用户运行命令的能力。
SysPhones.apk恶意程序代码结构例如以下:
SysPhones.apk开机后自己主动启动,后台请求server获取指令,并依据server指令静默下载、安装推广应用。
请求数据例如以下:
解密server返回结果例如以下:
org.zxl.appstats 4.0 http://dl.appfreestore.com/1104/AppStats.apk 1 0
返回指令格式为:
[包名] [版本号] [下载地址] [是否安装为系统应用(1:系统应用)] [保留]
解密并解析返回结果代码例如以下:
依据指令构建命令脚本:
通过SysPhones.apk的libSysPhones.so获取调用zy可运行文件所需的password參数:
调用zy程序运行构建的命令脚本:
zy做为Root后门在系统文件夹,它接收外部转过来的指令,并以Root身份运行传入的shell命令。
调用格式为:
zy password command
password:通过SysPhones.apk中的libSysPhones.so获取,这样可以保证该后门仅供恶意开发人员使用。