05月23, 2014

Oldboot鬼影又现,另一例山寨手机中运用云端远控技术的木马

作者:张海 孙年忠 石浩然

一、 行为概述

近日,用户反馈称在不知情的情况下手机中会被安装上四款游戏软件,即便主动卸载后又在一天之内被重复安装. 360手机安全专家分析,该android手机木马通过修改系统设置程序(setting)的源代码以及在云控指令下可安装或删除在/system/base目录下的四个游戏软件,另外通过云端及本地参数的适配,木马可实现的功能包含自更新、ROM更新、安装Apk、卸载Apk、执行任意程序任意命令等.据统计,该木马通过专业厂商定制的第三方ROM所感染,其中所感染的机型多达180余种,感染用户预计在数十万以上。详见下文分析。

image1

图1.被木马安装上的四款游戏

image2

图2.网上关于该手机窃取用户金融财产的反馈

二、 样本结构

两个恶意文件均预装在ROM里

文件1

包名: com.android.settings

文件路径: /system/app/HctSettings_vivo.odex

文件2

包名: com.cooee.mcesys

Md5: e42fb505b5d09652d252b09e09ba63c9

文件路径: /system/app/Mcesys.apk

三、 架构分析

1. com.android.settings分析

云控安装/卸载apk

通过ContentProvider与com.cooee.mcesys进行进程间通信,获取PhoneInfo及发送安装卸载/system/base下的apk文件.

image3

图3.声明的Provider

image4

图4./system/base下的apk文件

获取/system/base目录下apk包名等属性加入到app_packs_db数据库文件中,表名为cooee_hide_packs.

image5

图5.cooee_hide_packs表

注册下列URI用来给com.cooee.mcesys提供PhoneInfo及对com.cooee.mcesys发送的安装卸载包做响应.

uriMatcher.addURI(“com.android.settings.CooeeAppCtrlDataProvider”,”users/ctrl_status”, 2);

uriMatcher.addURI(“com.android.settings.CooeeAppCtrlDataProvider”,”users/package_info”, 6);

uriMatcher.addURI(“com.android.settings.CooeeAppCtrlDataProvider”,”users/all_item_no_pack”, 5);

uriMatcher.addURI(“com.android.settings.CooeeAppCtrlDataProvider”,”users/phone_info”, 8);

image6

图6.Uri类型

其中PhoneInfo中的factory_id,push_time等参数用于给com.cooee.mcesys云控.

image7

图7.获取的PhoneInfo

安装卸载/system/base下的apk文件(卸载包时会排除QQ手机管家)

image8

image9

image10

图8.安装/卸载包

2. com.cooee.mcesys分析

六大模块介绍

  1. Background模块负责后台静默查询云端,响应指令结果分发给callback.
  2. Common模块封装了常见的压缩,root,http,log,calc md5,reboot recovery等操作.
  3. Download模块封装了下载,分发callback.
  4. Localdata模块封装了一个Sqlite数据库用于给manager做交互及对云控包做管理.
  5. Update模块封装了对下载回来的文件进行子命令解析,执行,分发给callback.
  6. Xml模块封装了对BackgroundRequest返回包的描述.

image11

图9.子模块列表

对服务器请求的BackgroundRequest分类

云控服务器配置信息

BackgroundRequest.SERVER_CONFIGURE_INFO_REQ

服务器返回的推广包信息

BackgroundRequest.UPGRADE_INFO_AIRPUSH_INFO_REQ_FORCE

BackgroundRequest.UPGRADE_INFO_AIRPUSH_INFO_REQ_NORMAL

BackgroundRequest.UPGRADE_INFO_LIST_REQ

BackgroundRequest.UPGRADE_PACKAGE_INFO_GET_REQ

单个推广包信息

BackgroundRequest.UPGRADE_PACKAGE_FILE_INFO_GET_REQ

BackgroundRequest.UPGRADE_PACKAGE_FILE_DOWNLOAD_REQ

发送下载/安装完成至云端

BackgroundRequest.UPGRADE_PACKAGE_FILE_DOWNLOAD_FINISH_CONF

BackgroundRequest.UPGRADE_PACKAGE_INSTALL_COMPLETE_CONF

获取用户隐私并上传

上面所提到的请求都会获取设备隐私信息发送到服务器

http://rota01.nt928.com/airpush

http://rota01.nt928.com/app

http://rota01.nt928.com/saveinfo

image12

图10.获取的隐私信息

Mcesys使用到的权限

image13

图11.权限使用

云控自动联网下载配置文件

Mcesys安装后无图标,响应BOOT_COMPLETED,CONNECTIVITY_CHANGE, PACKAGE_ADDED等广播,最终触发到com.cooee.mcesys.service.RotaService.该服务开启BackgroundThread线程监视当前机器环境,满足一定条件联网发送BackgroundRequest请求。具体为当前联系人/通话记录/收件箱/发件箱任一数量超过20条并且开机超过四个小时并且没有发送过BackgroundRequest中的airpush相关请求包并且不在0-8点.

苛刻的触发条件,增加了分析的难度,并且会导致很多自动化分析工具失效,另一方面也会让恶意行为出现在真正的用户设备上。

image14

图12.相关触发点条件设置

image15

image16

图13.联网条件

联网后通过BackgroundRequest.SERVER_CONFIGURE_INFO_REQ返回的请求包相关字段来判断是否强制安装/卸载/system/base下的apk(由com.android.setttings模块执行)。这一步判断逻辑为本地PHONE_RUNTIME, SMS_COUNT, CALL_COUNT是否超过服务器返回的值并且RETURN_CODE字段值不等于0x262。

image17

图14. SERVER_CONFIGURE_INFO

image18

图15.更新本地配置与服务器同步

发送安装/卸载请求到com.android.settings并执行(通过ContentProvider)

image19

图16.发送安装卸载请求

发送AirPush请求, BackgroundRequest.UPGRADE_INFO_AIRPUSH_INFO_REQ_NORMAL返回包如下

image20

图17.AirPush返回包结构

其中FILE_ID字段为关键key,如果DESCRIPTION字段包含”com.cooee.mcesys”与” MCE_YZFA_COMMON_MTK001”则分发给callback做自更新,包含”ROTA_DELETE”则执行删除本地路径操作,否则就弹出通知栏诱导用户点击安装.

image21

image22

发送UPGRADE_PACKAGE_FILE_INFO_GET_REQ与UPGRADE_PACKAGE_FILE_DOWNLOAD_REQ下载推广包,返回的压缩包结构为

image23

图18.File_Download返回包结构

Cmd.xml文件标识着子命令及参数的组成

image24

图19.cmd.xml文件结构

云控自动更新ROM、安装/卸载APK、执行任意命令、自更新

其中CMD NAME为ROTA_INSTALL,子命令分类如下:

UpdateCommandEnum.DEFF – 更新ROM

image25

UpdateCommandEnum.ROTA_COPY – 拷贝res中的文件到system目录

image26

UpdateCommandEnum.ROTA_DELETE – 删除文件

image27

UpdateCommandEnum.ROTA_INSTALL – 静默安装apk

image28

UpdateCommandEnum.ROTA_UNINSTALL – 静默卸载apk

image29

UpdateCommandEnum.ROTA_SHELL_CMD – 以root权限执行任意命令

image30

UpdateCommandEnum.ROTA_SHELL_REBOOT – 暂未实现

UpdateCommandEnum.ROTA_UPDATE – 自更新mcesys

image31

image32

四、 感染机型

经我们不完全统计,仅最近半个月,该木马的感染机型达到180多种,感染数量近3万。

部分机型列表如下:

image33

五、 解决方案

目前,我们已经独家发布了专杀工具,下载地址是:

http://msoftdl.360.cn/mobilesafe/shouji360/360safesis/OldbootKiller_v2.apk

该专杀工具可以对Android设备进行深度地精确扫描,判断其中是否存在云端远控木马及其变种。我们在其中开发了全新的查杀技术,能够有效的保护您的手机免受云端远控木马的侵害。

如果目前暂不支持您的设备或者专杀工具在您的手机上无法正常工作,我们的建议您:

  1. 定期检查该专杀工具的更新,我们将逐步增强专杀工具的防御能力;
  2. 在专杀工具检测到云端远控木马后,将您的机型信息和样本上报给我们,可以帮助我们更快更好地开发出适合您的机型的查杀代码;
  3. 加入我们的技术支持QQ群,向我们反馈更多的信息,并获得我们应急响应工程师的技术指导;
  4. 安装360手机安全卫士,开启云查杀功能,抵御云端远控木马带来的关联威胁。

六、 总结

从代码实现上来看用户机器上的com.cooee.mcesys应为迭代版本,框架中的很多接口都已经搭好但未使用.Mcesys.apk实现了远控的所有操作,只需要云端根据不同工厂ID(haocheng),PhoneInfo等条件配置返回信息即可,加上可以自由更新rom包导致可扩展性非常好.服务端可以根据不同的客户机条件下发不同的程序和命令,导致危险行为很隐蔽,被查杀难度加大。通过和用户交流沟通以及从网上收集到的资料来看,我们认为我们分析报告中指出的危险行为只是冰山一角,我们推测该云控木马将大量恶意程序放置在云端,一旦发现用户手机中有涉及到金融操作等敏感行为时,云端可以派发更多恶意程序实现金融盗窃等行为。另外,该远控木马也可以放长线钓大鱼等用户数量累积到一定程度的时候,来个一网打尽。对此,360安全中心再次提醒广大用户一定要到正规卖场尽量购买正规厂商的电子设备。

本文链接:http://blogs.360.cn/post/analysis_of_oldboot_c.html

-- EOF --

Comments