01 背景

360安全大脑首次披露:兼容安卓64位的Android Native病毒——“假面兽”,其伪装手机系统文件、更新频繁,遂将其命名为“假面兽”病毒,感染总量达80万。该病毒目前处于活跃阶段,其利用加密混淆、HOOK和感染手机系统文件等多种技术手段,在中招用户手机上进行恶意推广、篡改系统文件、获取非法利益,将用户手机变成广告和垃圾APP的“乐园”,同时窃取用户的钱财。

“长老木马”、“百脑虫”、“地狱火”等病毒家族是32位Android Native病毒泛滥潮的元凶,随着技术的发展,64位Android手机已经成为主流。然而此前64位Android手机并未受到大规模Android Native病毒攻击。因此,360安全大脑发出预警:“假面兽”病毒的出现,可能意味着64位Android Native病毒进入泛滥时期。

02 “假面兽”感染疫情

据360安全大脑监测数据显示,“假面兽”病毒64位版本第一次出现于2018年5月,之后呈急速上升趋势,月新增感染用户迅速达到上万数量级。

受“假面兽”病毒影响的Android系统版本主要集中在Android4.4和Android5.1,其中“假面兽”病毒的64位版本影响范围主要为Android5.0和Android5.1。

从地域分布来看,感染“假面兽”病毒最多的省份为山东省,感染量占全国感染量的9.19%;其次为河南(8.57%)、四川(8.48%)。

下图列出了“假面兽”病毒感染量最多的十大城市。其中,重庆、成都、石家庄3个城市的受感染用户位居前三。

03 “假面兽”全解析

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)启动:

A.–deamon ——准备工作

FakeRunas以可读写权限重新挂载/system,并修改selinux的policy文件和enforce文件,达到暂时提权的目的,接着释放恶意文件/system/framework/servicestk.jar、/system/lib/utils.so、/system/lib64/utils.so,这几个文件在FakeRunas参数为“sparkinject”时被调用完成特定功能。

B. rt ——实现自启动

FakeRunas执行替换install-recovery.sh (开机启动脚本),;释放“假冒”debuggerd,debuggerd负责检测并以参数“--daemon”启动FakeRunas。

C. 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(),该函数分为两个部分:

A.检测当前进程

如果当前程序为/system/bin/app_process ,

即Zygote进程,则利用开源HookZz框架实现Native层 APIHook,hook对象是libc.so的epoll_wait函数:

B.执行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()方法实现短信监听,在用户不知情的情况下订购业务从中获益。主要恶意行为如下:

1)  获取手机phone进程权限

2)  监听、发送短信

3)  私自订购业务,造成用户经济损失

下图给出了恶意扣费模块进行短信监听的代码片段。

04 相关C&C服务器信息

05 相关APK列表

06 安全建议

针对本次“假面兽”AndroidNative病毒,360安全大脑已经支持对“假面兽”病毒的全面查杀,如果您担心手机中毒,请及时使用360手机卫士或360手机急救箱进行全面检测。

360安全大脑再次强调,未来一年内可能是兼容64位AndroidNative病毒的高发期。为了保证您的财产安全和手机使用安全,360安全大脑建议:

1. 对于来源不明的手机软件、安装包、文件包等不要随意下载;

2. 不明链接不随意点击;

3. 安全性未知的二维码不随意扫描。

声明:本文来自360核心安全,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。