近期百度安全实验室发现一款“黑暗潜伏者”新型手机病毒。该病毒附着在众多壁纸和游戏类应用中。截至目前,已经发现感染该病毒的应用超过1万多款,感染用户超过3000万。
该病毒恶意行为如下:
1、 后台利用系统漏洞获取临时Root权限。
2、 获取临时Root权限后,安装SysPhones.apk恶意程序为系统软件,安装Root后门程序zy到/system/bin目录。
3、 SysPhones.apk根据服务器端指令静默下载、安装推广应用,并能够根据指令安装推广应用为系统软件,从而使其无法卸载。
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]
主要上传设备信息到指令服务器,并根据指令服务器的返回的指令下载恶意代码FakeFramaRoot.so库。
2、 libluahc.so[Native]
调用FakeFramaRoot.so库,触发获取临时Root权限,安装SysPhones.apk 和zy的恶意行为。
该手机木马安装后并不会立即触发,只有在设备下次重新启动后,才会触发恶意行为。所有关键字符串如网址、路径等信息经过加密处理并以byte数组形式存放,这样可以躲避目前杀毒软件的查杀。
所有的网络通讯数据都进行了加密处理,以下是com.android.luahc[Java]请求指令服务器获取FakeFramaRoot.so库下载地址的网络交互数据:
请求服务器获取FakeFramaRoot下载地址指令:
服务器返回数据如下:
解密后服务器返回数据内容如下:
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开机后自动启动,后台请求服务器获取指令,并根据服务器指令静默下载、安装推广应用。
请求数据如下:
解密服务器返回结果如下:
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获取,这样能够保证该后门仅供恶意开发者使用。
原文地址:http://blog.csdn.net/androidsecurity/article/details/41207959