menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 004-mobile chevron_right 01-“地狱火”手机病毒——源自安卓系统底层的威胁.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    01-“地狱火”手机病毒——源自安卓系统底层的威胁.md
    11.99 KB / 2021-07-17 00:01:32
        # “地狱火”手机病毒——源自安卓系统底层的威胁
    
    0x00 背景
    =======
    
    * * *
    
    近日,360安全中心收到多起用户反馈,手机中了一种难以清理的病毒,某些用户尝试自行清理掉病毒,发现删除病毒文件vold.apk后,会再次重现。通过分析,发现此病毒已经寄生到系统底层,定时恢复APK实现自我保护。随着反馈用户数量急剧上升,360急救箱已下发紧急查杀方案,全面支持清理该手机病毒。
    
    通过分析,我们发现在手机病毒发展史上,首次利用了在Android系统中通过修改系统Boot Image、替换系统核心文件的方式实现自我保护的病毒,目前感染量已过百万,因此我们命名它为:“地狱火”手机病毒。此病毒寄生于系统boot分区、替换系统vold文件、回写APK病毒母包。后面,我们来分析下这个源自系统底层的威胁。
    
    以下截图为百度贴吧众多中毒网友们的求助内容,可见此病毒传播量巨大,而且大多数用户不清楚如何中毒的,此病毒会下载诱导扣费的APP应用,对手机用户影响严重。
    
    ![](http://drops.javaweb.org/uploads/images/1ee28748f9687612099027ef9b1539ccb71ce8e9.jpg)
    
    图1:百度贴吧“地狱火”手机病毒求助
    
    ![](http://drops.javaweb.org/uploads/images/4b2474969a4cc4e2c56be9c69bc386b160f95c73.jpg)
    
    图2:百度贴吧“地狱火”手机病毒求助
    
    ![](http://drops.javaweb.org/uploads/images/1b92cbe8e3a6d6cda7a915cfa03ae8d7acca9e2e.jpg)
    
    图3:百度贴吧“地狱火”手机病毒求助
    
    0x01 病毒传播途径
    ===========
    
    * * *
    
    1.1 病毒传播途径
    ----------
    
    这个病毒主要靠色情诱惑类应用传播,也通过一些正规的应用捆绑传播,比如“超级锁屏”、“糗事爆料”等。病毒和正规APP捆绑并传播,导致用户也不清楚中毒来源。
    
    ![](http://drops.javaweb.org/uploads/images/b5edfcca440465038633a99d66817dc88efcac91.jpg)
    
    图4:传播病毒的APP应用
    
    1.2 病毒感染地区分布
    ------------
    
    ![](http://drops.javaweb.org/uploads/images/e01a5151d51b8b4bb0b6ae76e691c077b5d2c9db.jpg)
    
    图5:感染地区分布
    
    “地狱火”病毒感染量巨大,中毒手机超过150万部,由图可见感染量从大到小依次为:广东、河南、江苏、山东、四川、浙江、河北、湖南等。
    
    0x02 病毒详细分析
    ===========
    
    * * *
    
    首先,我们梳理出该病毒的主体功能和框架,如图:
    
    ![](http://drops.javaweb.org/uploads/images/e0b13dcffca6cd38056dcf4dbcb6a1d367983932.jpg)
    
    图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四个对象。
    
    ![](http://drops.javaweb.org/uploads/images/de5f404da286e28cbb98f7a07262243512303957.jpg)
    
    图7:MsgPushService功能
    
    SetupManager是vold.rp.apk的核心模块,首先设置时间启动MsgPushService,然后创建需要用到的对象,这些类的功能在构造方法中执行,因此在创建对象的时候就已经调用。SetupManager中的功能模块有(主要的):
    
    1.  ROOT模块(RootManager)
    2.  推广模块(PushManager)
    3.  寄生到系统底层模块(SysVoldInstaller)
    
    ![](http://drops.javaweb.org/uploads/images/b6800456bb56f3885fee9850bad6b25a943a9014.jpg)
    
    图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)。
    
    ![](http://drops.javaweb.org/uploads/images/4bebcfe75a8ea98780751315175b9ecd960b1a09.jpg)
    
    图9:ROOT包
    
    3.vold.rp.apk运行Matrix(ELF)进行ROOT。Matrix解密fileWork执行ROOT代码,其中包含开源的android-rooting-tools以及CVE-2015-3636代码;通过多种ROOT方案组合,能够适配大多数手机ROOT成功。
    
    ![](http://drops.javaweb.org/uploads/images/1886947d0ecee48587895c102770923b4d351dce.jpg)
    
    图10:ROOT方案之一
    
    2.2 推广模块
    --------
    
    “地狱火”手机病毒每隔3分钟获取云端json配置,根据云端配置安装APP应用。推广APP应用是病毒的主要目的,既可以推广正规应用赚取安装费用,也可以推广其他病毒安装到手机。静默推广的有:岛国直播、欧美直播、激情影院、欧美大片等等,这些应用程序打开后都会诱导扣费,有些用户经不住图片诱惑支付后,发现视频图片依旧无法观看,也只好忍气吞声上当。
    
    推广网址:
    
    `http://p.bluenemo.com:7354/push`
    
    `http://p. bluenemo.com:7354/p/`
    
    ![](http://drops.javaweb.org/uploads/images/d0775208ab3fb53a2cd3f93feb153696ff5b91de.jpg)
    
    图11:病毒推广扣费APP
    
    ![](http://drops.javaweb.org/uploads/images/095d498401b50cc9af847c178b1d2814b18ed11b.jpg)
    
    图12:诱导用户支付费用
    
    2.3 寄生到系统底层模块流程
    ---------------
    
    ### 2.3.1 替换系统vold (ELF文件)
    
    vold.rp.apk的RootMissionExecutor模块创建一条线程,调用installVold函数,installVold函数获取云端配置下载oracle(可执行文件)和bluePill(加密文件),oracle带参数运行时,会解密bluePill替换系统vold(ELF)文件。
    
    ![](http://drops.javaweb.org/uploads/images/c0bbcb6e54aab5d4408c6f9cde9df6426fe46236.jpg)
    
    图13:带参数运行oracle
    
    oracle运行后解密出work.sh并运行,完成替换系统vold,并且会在vold尾部写入更新网址。
    
    ![](http://drops.javaweb.org/uploads/images/4025cbf378543d17f48ba1fc1d0a35437d3bb9df.jpg)
    
    图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中包含的文件列表:
    
    ```
    ./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)
    
    ![](http://drops.javaweb.org/uploads/images/ac095c197a2c684932b42e9e20be87ef1dc224b7.jpg)
    
    (3)配置恶意文件主体使用的URL参数
    
    2.搜寻boot分区
    
    ![](http://drops.javaweb.org/uploads/images/4b921a2cbfb67fe46e0496f55f1a872592628739.jpg)
    
    3.找到boot分区之后,使用dd命令dump出boot分区
    
    ![](http://drops.javaweb.org/uploads/images/843718df1d476a0edc82ee09cc71ebf974ccbc8c.jpg)
    
    4.解boot分区
    
    ![](http://drops.javaweb.org/uploads/images/949ecc2721d136edde1b196838b75c22dbe52f39.jpg)
    
    5.首先会判断该分区是否已经被patch,准备执行patch Boot.img
    
    (1)创建备份
    
    (2)patch sepolicy
    
    ![](http://drops.javaweb.org/uploads/images/798ff28d69ce7f0ea7a8490166c48f136aff38a5.jpg)
    
    SeAndroid是Android平台的一种安全机制,而Sepolicy则是SeAndroid的安全策略文件。“地狱火”手机病毒通过patch sepolicy来扩大自己的权限。
    
    原始sepolicy的Allow规则有1175条,地狱火病毒patch之后增加了73条Allow规则。
    
    ![](http://drops.javaweb.org/uploads/images/4df655d0a6fccbf225e2ae08f04f260e740645e4.jpg)
    
    接着使用sesearch对比一下allow规则的详细信息:
    
    ![](http://drops.javaweb.org/uploads/images/53b5bb4ad5bcc7579f46cad9dfdc8931451897f7.jpg)
    
    我们发现之前很多不允许的规则现在都被允许,导致给了init域几乎完全的控制权限。将会导致用户的手机莫大的危险。
    
    (3)拷贝病毒主体文件heaithd、heaithd.sh到/sbin中
    
    (4)修复init.environ.rc
    
    (5)修复file_contexts
    
    (6)执行patch操作
    
    ![](http://drops.javaweb.org/uploads/images/a14bfa752098e13cf331a15b058861597221e637.jpg)
    
    ![](http://drops.javaweb.org/uploads/images/75707c7d2688743869406675de10d4e599ff4a70.jpg)
    
    patch分为两步:
    
    a:patch init.rc
    
    ![](http://drops.javaweb.org/uploads/images/5e6f07b7b7315523ce41453f753b5f361cc9e23c.jpg)
    
    b:patch dm_verify和patch forceencrypt
    
    6.当patch操作成功之后,重新打包
    
    ![](http://drops.javaweb.org/uploads/images/741bd6c4a3519da929d930e373bf8c34d31d0e4e.jpg)
    
    7.写入分区
    
    ![](http://drops.javaweb.org/uploads/images/3db8a29a739f3d1fef78c3c6feb62758d1fc996a.jpg)
    
    0x03 与其他病毒狼狈为奸
    ==============
    
    * * *
    
    经取样统计发现,百脑虫病毒与“地狱火”病毒的关系十分密切,他们之间存在互相推广的关系,中百脑虫病毒的手机中,约86%存在“地狱火”病毒。“地狱火”病毒的root模块也与另一种传播量很大的病毒的root模块使用的加密算法与功能一样。
    
    ![](http://drops.javaweb.org/uploads/images/ee5d4ba541a6fdaa4c93be98ee87641ce5253cbd.jpg)
    
    图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`文件,找到以下内容并删除
        
        ![](http://drops.javaweb.org/uploads/images/2b020a213894901afa42eaebd329ca4c634c5721.jpg)
        
    *   打开`Android Image Kitchen\ramdisk\sbin`目录,删除heaithd、heaithd.sh文件
        
    *   使用Android Image Kitchen重新打包
        
    *   使用dd命令还原修改后的boot.img到手机
        
    
    0x05 安全建议
    =========
    
    * * *
    
    防范此类技术高超、隐蔽性强的手机病毒,360手机卫士安全专家建议,安卓手机用户不要随意开放root权限;日常使用手机过程中,谨慎点击软件内的推送广告;来源不明的手机软件、安装包、文件包等不要随意点击下载;手机上网时,对于不明链接、安全性未知的二维码等信息不随意点击或扫描;使用360手机卫士等手机安全软件定期查杀手机病毒,养成良好的手机使用习惯。
    
    links
    file_download