PoisonCake In the ROM

概述

近期,AVL移动安全团队发现一款ROM下的恶意代码模块,该恶意代码模块为ELF格式可执行文件。AVL移动安全团队对其进行分析后发现,该恶意代码行为与“长老木马三代”较为相似,由于该恶意代码可以完全独立运行,并且实现上和之前的“长老木马三代”有比较大的差异,并且恶意代码作者将其运行释放模块称为“Cake”,所以我们将其命名为“PoisonCake”。

PoisonCake可以单独运行,并解密释放相关主体模块,后台监控自身进程和执行以下恶意行为:

  • 1. 注入Phone进程,拦截短信和发送短信
  • 2. 实现短信和WAP扣费
  • 3. 窃取手机信息,并上传至远程服务器
  • 4. 联网下载文件
  • 5. 能够进行自我更新

在分析过程中,我们还发现该恶意代码中存在明显的恶意代码作者身份标识tjj,ruanxiaozhen,并且其最后编译时间为2014年8月26日10点20分。

下面将对PoisonCake进行详细的分析。

一、PoisonCake运行机制

PoisonCake运行时,会将自身移植/data/.3q隐藏目录,并后台监控自身进程运行,防止自身进程被终止;其在执行过程中会创建多个目录和文件,主要有: /data/.3q/dm /data/usr(目录) /data/usr/dalvik-cache(目录) /data/usr/plugins(目录) /data/.l1 /data/.l6 /data/.l9 /mnt/sdcard/sysv/lv /mnt/sdcard/sysv/lg1

其主体模块分为reactore.dex.jar核心框架和8个插件模块提供各类行为实现,插件模块提供了扣费、联网上传下载、获取手机信息等功能,并且能够注入系统Phone进程,进行短信的监听和发送,以及对联网的控制。

其整体运行框架如下所示:1

二、dm模块

dm模块是PoisonCake的运行核心,其完成恶意代码的初始化,恶意模块reactor.dex.jar的释放和运行,并后台监控自身进程是否存在,并且其将关键的字符串信息进行加密。

1、初始化

dm接受“–setup”参数完成初始化行为:

  • 1)解密关键的字符串信息为字符串数组
  • 2)判断/data/.dmtjjexit是否存在,若存在,则进程退出
  • 3)设置进程环境变量,并将进程名称改为jworker/0I:2H:1J
  • 4)将自身拷贝到/data/.3q/dm,并创建/data/usr目录,并删除自身
  • 5)fork自身并退出,子进程执行/data/.3q/dm,由其完成余下工作

2、后台监控

dm采用了文件锁和线程的方式,能持续监控自身进程保持后台运行。如下所示,dm运行时后台有两个进程。

2

3

创建子线程,不断循环创建自身子进程的行为,并且利用文件锁,保证建立的子进程在父进程存在的时候组塞:

4
5

如果kill掉父进程或者子进程任意一个时,其会再创建一个新的进程。

3、reactor.dex.jar解密释放和运行

最后dm进程会从自身文件中解密释放reactor.dex.jar至/data/usr:6

dm随后将释放的reactore.dex.jar加载运行,其利用libdvm.so中的JNI_CreateJavaVM运行jar,其参数列表为 –Djava.class.path=/data/usr/reactore.dex.jar -Djava.compiler=NONE -verbose:jni 然后注册native函数getGirls,最后执行com/tj/Main的main方法。

4、getGirls方法

dm还同时为reactore.dex.jar提供native方法实现,其接受两个参数,作用为解密指定jar文件到指定路径。

三、reactore.dex.jar模块

reactore.dex.jar是由一个负责初始化环境、循环遍历执行事件和命令的框架模块和数个插件模块组成,其将功能模块实现分成四个主要类别:

  • 1)基础设施Infrastructor
  • 2)业务仓库Repository
  • 3)服务Service:负责后台执行相关功能
  • 4)组件Component

其整体执行逻辑流程如下图:
7

四、插件模块

reactore.dex.jar内置默认了8个插件模块,每个插件分别执行不同的行为:12

下面对重点的插件模块分别进行分析。

1、bean模块

bean模块主要完成对phone进程的注入,监听本地10023端口,获取手机号码、imsi、imei、apn、联网等信息,并实现短信发送与拦截和联网方式的控制。 其首先释放可执行模块whitebean和带注入的libblackbean.so、redbean.dex.jar,然后依次执行以下命令完成注入:

  • a. whitebean –check libblackbean.so 检测运行环境,这里主要检查android::AndroidRuntime::mJavaVM和android::AndroidRuntime::getRuntime的获取。
  • b. whitebean com.android.phone libblackbean.so readbean.dex.jar cache Release /data/usr/server.log 其将libblackbean.so和readbean.dex.jar注入到phone进程中,并执行com.android.phone.os.Program类。 完成后删除自身。

在注入完成后,会监听10023端口接受请求,此时由于具备Phone进程权限,所以可以进行短信拦截发送,APN网络管理及获取手机号码、数据连接等相关信息。89

2、honeybee模块

honeybee模块主要会记录运行日志信息,并以AES加密形式存放至/data/usr/honey文件,并且上传至远程服务器http://slasty.hada1billi.info/honeycomb/ums/postEvent。10

honey文件的解密结果如下所示:11

3、sun模块

sun模块主要提供网络连接功能,并与远程服务器建立Heartbeat连接,其连接url为http://ubaj.tndmnsha.com/throne。

五、总结

PoisonCake是一个非常完善的后门程序,其实现具备良好的架构特点和易于可扩展性,其在运行过程中会迅速删除自身释放的模块,所有在手机上存放的文件均为加密形态。其执行较为隐蔽,并且难以被发现和查杀。

用户可以执行”ps dm”命令查看是否存在恶意代码进程,或者检查是否存在/data/.3q/dm、/data/usr目录来判断是否感染PoisonCake木马。

六、工具下载

工具下载地址:https://update.avlyun.com/AvlPro/PoisonCakeKiller.apk

【via@安天实AVL Team