# “地狱火”手机病毒——源自安卓系统底层的威胁

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-06-22T04:06:00Z
Canonical: https://wepostx.com/topics/323

> 乌云历史资料归档
>
> **原始作者：** 360手机卫士
> **原始编号：** superkieran-wooyundrops:1263
> **原始发布时间：** 2016-06-22 12:06
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 背景

近日，360安全中心收到多起用户反馈，手机中了一种难以清理的病毒，某些用户尝试自行清理掉病毒，发现删除病毒文件vold.apk后，会再次重现。通过分析，发现此病毒已经寄生到系统底层，定时恢复APK实现自我保护。随着反馈用户数量急剧上升，360急救箱已下发紧急查杀方案，全面支持清理该手机病毒。
通过分析，我们发现在手机病毒发展史上，首次利用了在Android系统中通过修改系统Boot Image、替换系统核心文件的方式实现自我保护的病毒，目前感染量已过百万，因此我们命名它为：“地狱火”手机病毒。此病毒寄生于系统boot分区、替换系统vold文件、回写APK病毒母包。后面，我们来分析下这个源自系统底层的威胁。
以下截图为百度贴吧众多中毒网友们的求助内容，可见此病毒传播量巨大，而且大多数用户不清楚如何中毒的，此病毒会下载诱导扣费的APP应用，对手机用户影响严重。

![原文图片](/media/2016/06/f4dd04352aa00cf93efb99158bf5ba93)

图1：百度贴吧“地狱火”手机病毒求助

![原文图片](/media/2016/06/86c6c39c6c766ac727b3970ad87e65f7)

图2：百度贴吧“地狱火”手机病毒求助

![原文图片](/media/2016/06/956ace25f9e3896b69629cc49ac884d5)

图3：百度贴吧“地狱火”手机病毒求助

# 0x01 病毒传播途径

## 1.1 病毒传播途径
这个病毒主要靠色情诱惑类应用传播，也通过一些正规的应用捆绑传播，比如“超级锁屏”、“糗事爆料”等。病毒和正规APP捆绑并传播，导致用户也不清楚中毒来源。

![原文图片](/media/2016/06/47ec26544e1563f6800b5ca99e71af60)

图4：传播病毒的APP应用

## 1.2 病毒感染地区分布

![原文图片](/media/2016/06/8f8689a72cfddc24f2fc24b196be27bf)

图5：感染地区分布
“地狱火”病毒感染量巨大，中毒手机超过150万部，由图可见感染量从大到小依次为：广东、河南、江苏、山东、四川、浙江、河北、湖南等。

# 0x02 病毒详细分析

首先，我们梳理出该病毒的主体功能和框架，如图：

![原文图片](/media/2016/06/69768d438d26709aa6f5d3efca7c5fa2)

图6：病毒框架
携带“地狱火”手机病毒母包的APP应用运行后会释放android.system.vold.v50.apk（v50为版本号：v36~v50，版本号还在持续递增），病毒母包安装后使用DES加密算法解密出android.system.vold.v50.rp.apk（下面简称为vold.rp.apk），vold.rp.apk调用startService启动MsgPushService，MsgPushService的onCreate方法创建TestNotifier、SetupManager、VersionClean、RootModule四个对象。

![原文图片](/media/2016/06/452cf9c00b74caf222d23d935fd9af48)

图7：MsgPushService功能
SetupManager是vold.rp.apk的核心模块，首先设置时间启动MsgPushService，然后创建需要用到的对象，这些类的功能在构造方法中执行，因此在创建对象的时候就已经调用。SetupManager中的功能模块有（主要的）：

- ROOT模块（RootManager）

- 推广模块（PushManager）

- 寄生到系统底层模块（SysVoldInstaller）

![原文图片](/media/2016/06/0cadfc948c0fe63afe7d10abaa9cfc61)

图8：SetupManager模块

## 2.1 ROOT模块
1.上传手机SDK版本获取云端ROOT方案，下载ZIP压缩包。HTTP请求参数不同，返回的ROOT方案也不同，分为android4.3之前版本ROOT方案、android4.3版本ROOT方案和android4.3之后版本ROOT方案。
2.ROOT压缩包内容为wsroot.sh(SH脚本)、fileWork(加密文件)、Matrix(ELF)。

![原文图片](/media/2016/06/7966961cb4e385449e504eb97b5d73cf)

图9：ROOT包
3.vold.rp.apk运行Matrix(ELF)进行ROOT。Matrix解密fileWork执行ROOT代码，其中包含开源的android-rooting-tools以及CVE-2015-3636代码；通过多种ROOT方案组合，能够适配大多数手机ROOT成功。

![原文图片](/media/2016/06/e4406014a14a68286ea96f356cd414f5)

图10：ROOT方案之一

## 2.2 推广模块
“地狱火”手机病毒每隔3分钟获取云端json配置，根据云端配置安装APP应用。推广APP应用是病毒的主要目的，既可以推广正规应用赚取安装费用，也可以推广其他病毒安装到手机。静默推广的有：岛国直播、欧美直播、激情影院、欧美大片等等，这些应用程序打开后都会诱导扣费，有些用户经不住图片诱惑支付后，发现视频图片依旧无法观看，也只好忍气吞声上当。
推广网址：
http://p.bluenemo.com:7354/push
http://p. bluenemo.com:7354/p/

![原文图片](/media/2016/06/78c50577c84bbfd369a3edb9e760589a)

图11：病毒推广扣费APP

![原文图片](/media/2016/06/066e132273353b9f5298ca86a7f882da)

图12：诱导用户支付费用

## 2.3 寄生到系统底层模块流程

### 2.3.1 替换系统vold (ELF文件)
vold.rp.apk的RootMissionExecutor模块创建一条线程，调用installVold函数，installVold函数获取云端配置下载oracle（可执行文件）和bluePill(加密文件)，oracle带参数运行时，会解密bluePill替换系统vold（ELF）文件。

![原文图片](/media/2016/06/1e4834df1cb317d4956183b06a851632)

图13：带参数运行oracle
oracle运行后解密出work.sh并运行，完成替换系统vold，并且会在vold尾部写入更新网址。

![原文图片](/media/2016/06/f0a7b61a07489c8b2f73b019b043b1ab)

图14：替换系统核心文件vold
如上图所示，“地狱火”将系统原始vold重命名成vold_original，然后在/system/bin/目录建立一个名为vold的链接，指向病毒文件/system/xbin/vold。系统启动时，会按照链接执行病毒文件，病毒自身功能完成后，又会去执行vold_original。病毒就像一个代理，如果此病毒被直接删除的话会导致系统无法启动。因为安卓中的vold文件是Android核心系统文件，管理和控制外部存储设备，包括SD插拨、挂载、卸载、格式化等。病毒vold核心功能为执行shell代码，shell脚本代码加密存放在病毒vold文件靠近尾部的位置，病毒vold主要功能是回写vold.rp.apk与更新vold.rp.apk，保证apk文件被杀毒软件清理后依旧能死而复活。

### 2.3.2 修改Boot.img
Android系统以正常模式启动后会加载boot.img分区。Boot.img分区包含Linux内核和ramdisk。ramdisk是一个小型文件系统，包括了初始化系统所需要的全部核心文件，例如：初始化init进程以及init.rc（可以用于设置很多系统的参数）等文件。以下是一个典型的ramdisk中包含的文件列表：

```text
#!shell ./init.trout.rc ./default.prop ./proc ./dev ./init.rc ./init ./sys ./init.goldfish.rc ./sbin ./sbin/adbd ./system ./data
```
该病毒与“不死木马”（[http://blogs.360.cn/360mobile/2014/01/18/oldboot-the-first-bootkit-on-android_cn/](http://blogs.360.cn/360mobile/2014/01/18/oldboot-the-first-bootkit-on-android_cn/)）都有修改boot.img、拷贝病毒核心文件到/sbin以及修改init.rc的行为；而该病毒在此这些的基础上还新增了修改sepolicy（seandroid策略文件）、dm_verify（每次开机检验分区是否被修改）等行为。
目的：修改boot分区，修改init.rc文件，将主体文件隐藏到boot分区，写入病毒启动脚本，绕过seandroid、dm_verify等Android系统安全防护。病毒操作如下：
1.配置本地环境
（1）安装busybox
（2）配置DNS服务器（便于busybox使用wget）

![原文图片](/media/2016/06/5d4c1fb490cf5d3b177bfeae31548cbb)

（3）配置恶意文件主体使用的URL参数
2.搜寻boot分区

![原文图片](/media/2016/06/2ca308e0cc875ddcc5ca7b3aaabf106e)

3.找到boot分区之后，使用dd命令dump出boot分区

![原文图片](/media/2016/06/060f2a681429da6b5b9e698e4c1f5b6f)

4.解boot分区

![原文图片](/media/2016/06/58010c52824b296c69931801afc281ac)

5.首先会判断该分区是否已经被patch，准备执行patch Boot.img
（1）创建备份
（2）patch sepolicy

![原文图片](/media/2016/06/827eb5c8f45b45aba57b7a56257015f7)

SeAndroid是Android平台的一种安全机制，而Sepolicy则是SeAndroid的安全策略文件。“地狱火”手机病毒通过patch sepolicy来扩大自己的权限。
原始sepolicy的Allow规则有1175条，地狱火病毒patch之后增加了73条Allow规则。

![原文图片](/media/2016/06/8bba9e6e6f4a2af74c8fbaddacba50ed)

接着使用sesearch对比一下allow规则的详细信息：

![原文图片](/media/2016/06/cbcc5b14974c7e8711019f62931eb2c2)

我们发现之前很多不允许的规则现在都被允许，导致给了init域几乎完全的控制权限。将会导致用户的手机莫大的危险。
（3）拷贝病毒主体文件heaithd、heaithd.sh到/sbin中
（4）修复init.environ.rc
（5）修复file_contexts
（6）执行patch操作

![原文图片](/media/2016/06/f006d8c3f2711203a8ddb4c27132fb28)

![原文图片](/media/2016/06/d60e3aa849eb5dde238641b8f0b36611)

patch分为两步：
a：patch init.rc

![原文图片](/media/2016/06/17ffba7cd8598fc8adac877eab1b6d4e)

b：patch dm_verify和patch forceencrypt
6.当patch操作成功之后，重新打包

![原文图片](/media/2016/06/1bc8991e04b635e850ecf09852c5ec33)

7.写入分区

![原文图片](/media/2016/06/16c936d3fba584095dd3a50e7f251982)

# 0x03 与其他病毒狼狈为奸

经取样统计发现，百脑虫病毒与“地狱火”病毒的关系十分密切，他们之间存在互相推广的关系，中百脑虫病毒的手机中，约86%存在“地狱火”病毒。“地狱火”病毒的root模块也与另一种传播量很大的病毒的root模块使用的加密算法与功能一样。

![原文图片](/media/2016/06/4b4724713b631cac76acd0277d3bb69e)

图17：“地狱火”病毒和百脑虫病毒的关系

# 0x04 “地狱火”病毒清理

删除此病毒必须将手机ROOT，给予360手机急救箱ROOT权限。目前，360手机急救箱支持此病毒的安全删除与修复。
手动删除病毒方案与前提条件：手机有Root权限、一台Windows主机、ADB工具包和Android Image Kitchen工具包
步骤：

- 删除APK文件

- 恢复/system/bin/vold_original到/system/bin/vold

- 删除/system/xbin/app_process

- 找到boot分区表

- 使用dd命令备

- 份boot分区到/sdcard目录

- 使用Android Image Kitchen解开boot.img

- 打开Android Image Kitchen\ramdisk\init.rc文件，找到以下内容并删除

![原文图片](/media/2016/06/e6a760163b4a5da80bc7bb4509e7eab1)

- 打开Android Image Kitchen\ramdisk\sbin目录，删除heaithd、heaithd.sh文件

- 使用Android Image Kitchen重新打包

- 使用dd命令还原修改后的boot.img到手机

# 0x05 安全建议

防范此类技术高超、隐蔽性强的手机病毒，360手机卫士安全专家建议，安卓手机用户不要随意开放root权限；日常使用手机过程中，谨慎点击软件内的推送广告；来源不明的手机软件、安装包、文件包等不要随意点击下载；手机上网时，对于不明链接、安全性未知的二维码等信息不随意点击或扫描；使用360手机卫士等手机安全软件定期查杀手机病毒，养成良好的手机使用习惯。

## Replies
