一、背景
360安全大脑首次披露:兼容安卓64位的Android Native病毒——“假面兽”,其伪装手机系统文件、更新频繁,遂将其命名为“假面兽”病毒,感染总量达80万。该病毒目前处于活跃阶段,其利用加密混淆、HOOK和感染手机系统文件等多种技术手段,在中招用户手机上进行恶意推广、篡改系统文件、获取非法利益,将用户手机变成广告和垃圾APP的“乐园”,同时窃取用户的钱财。
“长老木马”、“百脑虫”、“地狱火”等病毒家族是32位Android Native病毒泛滥潮的元凶,随着技术的发展,64位Android手机已经成为主流。然而此前64位Android手机并未受到大规模Android Native病毒攻击。因此,360安全大脑发出预警:“假面兽”病毒的出现,可能意味着64位Android Native病毒进入泛滥时期。
二、 “假面兽”感染疫情
据360安全大脑监测数据显示,“假面兽”病毒64位版本第一次出现于2018年5月,之后呈急速上升趋势,月新增感染用户迅速达到上万数量级。
受“假面兽”病毒影响的Android系统版本主要集中在Android4.4和Android5.1,其中“假面兽”病毒的64位版本影响范围主要为Android5.0和Android5.1。
从地域分布来看,感染“假面兽”病毒最多的省份为山东省,感染量占全国感染量的9.19%;其次为河南(8.57%)、四川(8.48%)。
下图列出了“假面兽”病毒感染量最多的十大城市。其中,重庆、成都、石家庄3个城市的受感染用户位居前三。
三、“假面兽”全解析
3.1 “假面兽”特点
1)病毒危害大
一旦安装此类病毒APP,将被推送霸屏广告、卸载手机正常应用、大量下载安装推广软件,并造成直接经济损失。
2)伪装能力强
病毒常伪装成系统软件(媒体设置等)、小游戏(捕鱼达人等),种类繁多,令人防不胜防。
3)防护手段高
模拟器检测、加密混淆玩得不亦乐乎,HOOK注入更是不在话下。
4)传播途径广
据不完全统计,“假面兽”病毒的载体包括:伪装热门小游戏(物理画线、捕鱼达人最新版)、伪装系统软件(com.android.system.tool)、色情应用(美女诱惑、午夜影院)等,这些应用要么伪装精湛,依附正常界面“暗渡陈仓”,要么采用极具诱惑性的封面诱使用户主动上钩,加上“假面兽”病毒应用覆盖面较广,一旦感染,势必会产生不小的影响。下图例举了该病毒依附的几种典型应用。
3.2 “假面兽”结构图
“假面兽”病毒主要由恶意推广模块、ROOT提权模块、Native病毒模块、恶意扣费模块四大模块组成,其使用众多广告SDK进行恶意推广,并将核心文件打包在data.save文件中,方便本地加载释放。
病毒应用首先检查运行环境(对抗模拟器),接着从云端下载并执行ROOT提权方案,提权成功后便卸载手机正常应用;在Native病毒模块完成手机Phone进程注入后随即调用恶意扣费模块,私自订购业务,造成用户经济损失。如下便是该病毒的整体执行流程。
3.3 详细技术分析
恶意推广模块
病毒应用安装后首先检查手机环境,以获取有效的appid或channelid,否则会提示
申请的动作或appid或channelid无效,TGSDK无法完成初始化。完成初始化后,病毒应用主dex文件会加载广告SDK文件进行推广行为,下图汇总了该病毒广告SDK主要的推广情况。
同时,病毒应用还会解密assets目录下的kernel.dat文件,并得到tmpbl.jar文件,其主要功能仍是进行恶意推广,如下是其访问的网址。
ROOT提权模块
接着,病毒应用会解压assets目录下的data.save文件,并得到Native病毒模块、ROOT提权模块、恶意扣费模块等核心模块。ROOT提权模块主要包含perm.jar文件,用于获取手机ROOT权限。之后病毒应用会动态加载perm.jar文件,从云端下载ROOT提权方案,并调用其getRoot( )方法,进行提权操作,以获取手机ROOT权限。
在获得手机ROOT权限后,病毒应用会调用S_i.sh脚本文件,以卸载手机/system/app目录下的系统文件(包含各类ROOT软件及安全软件),为后续作恶准备空间。
Native病毒模块
在获取到手机ROOT权限后,病毒应用会执行加载Native病毒模块B_s64实施so注入、调用恶意扣费模块等恶意行为;另外,该病毒还会在B_s64中,调用E_d这个ELF文件并释放debuggerd守护进程文件,防止该病毒被卸载。
FakeRunas
在“假面兽”病毒中,存在大量“冒充”系统文件的恶意ELF文件,它们或“无中生有”,或“以假乱真”,甚至 “取而代之”。
其中 “假冒” run-as(/system/bin/run-as)为“假面兽”病毒核心ELF文件(以下称为FakeRunas),系统run-as原本是一个命令,利用这个命令用户可以在超级用户、普通用户之间自由地进行“变脸”。
从下面的程序执行块缩略图可以看到,FakeRunas运行方式与系统run-as类似——由命令参数驱动其执行的具体功能。
只不过FakeRunas接收的是“假面兽”病毒自定义的参数:
FakeRunas主要功能由上图参数中的3个(–deamon、rt、spark)启动:
- –deamon ——准备工作
FakeRunas以可读写权限重新挂载/system,并修改selinux的policy文件和enforce文件,达到暂时提权的目的,接着释放恶意文件/system/framework/servicestk.jar、/system/lib/utils.so、/system/lib64/utils.so,这几个文件在FakeRunas参数为“spark inject”时被调用完成特定功能。
- rt ——实现自启动
FakeRunas执行替换install-recovery.sh (开机启动脚本),;释放“假冒”debuggerd,debuggerd负责检测并以参数“–daemon”启动FakeRunas。
- spark inject ——感染系统库文件
FakeRunas感染系统库文件/system/lib/libcutils.so和/system/lib64/libcutils.so,在库文件的导入表里添加FakeRunas释放的恶意文件/system/lib/utils.so和/system/lib64/utils.so的路径,使恶意文件utils.so随系统库文件加载执行。
为什么是libcutils.so?在Android 系统中,应用程序进程都是由Zygote 进程孵化出来的,Zygote的程序为app_process,它所依赖的文件如下:
可以看到libcutils.so是app_process链接的依赖库,因此感染这个库不仅可以使恶意utils.so存在于所有进程,更为接下来的Hook准备了良好时机。
utils.so
动态链接器在加载ELF可执行文件或动态链接库,并完成装载、映射、重定向后,首先依次执行pre_init、init、init_array节中描述地址指向的函数,这些函数都是早于入口点执行的。utils.so正是利用这一特性,将功能函数入口点置于init_array节中:
当程序执行到init_array时,就会进入utils.so的main_func( ),该函数分为两个部分,
- 检测当前进程
如果当前程序为/system/bin/app_process,即Zygote 进程,则利用开源HookZz框架实现Native层 API Hook,hook对象是libc.so的epoll_wait函数:
- 执行handle_func()
如果当前为Phone进程或MMS(多媒体短信)进程,程序会调用FakeRunas释放的恶意扣费模块进行相应操作。
恶意扣费模块
恶意扣费模块主要包含adroid.jar文件(即servicestk.jar),在Native病毒模块B_s64将utils.so恶意文件注入到手机phone进程后,病毒应用会调用servicestk.jar中的a.a.a.a.a.h.b()方法获取Phone进程权限,以及调用a.a.a.a.a.h.i()方法实现短信监听,在用户不知情的情况下订购业务从中获益。主要恶意行为如下:
- 获取手机phone进程权限
- 监听、发送短信
- 私自订购业务,造成用户经济损失
下图给出了恶意扣费模块进行短信监听的代码片段。
四、相关C&C服务器信息
五、相关APK列表
六、安全建议
针对本次 “假面兽”Android Native病毒,360安全大脑已经支持对“假面兽”病毒的全面查杀,如果您担心手机中毒,请及时使用360手机卫士或360手机急救箱进行全面检测。
360安全大脑再次强调,未来一年内可能是兼容64位Android Native病毒的高发期。为了保证您的财产安全和手机使用安全,360安全大脑建议:
1. 对于来源不明的手机软件、安装包、文件包等不要随意下载;
2. 不明链接不随意点击;
3. 安全性未知的二维码不随意扫描。
发表评论
您还未登录,请先登录。
登录