“长老木马”三代揪出背后“大毒枭”

作者:360Android分析团队

 

 image1

一、冰山一角

近期很多网友的Android手机上“莫名其妙”地出现了“手电筒”、“日历”等应用,并且在没有root的前提下无法卸载。即使获得了root权限卸载了,没过多久又会再次出现。根据360互联网安全中心统计,相关的受感染用户已经超过百万。

image2

二、始作俑者

经过大量的用户配合反馈以及360互联网安全中心细致分析排查后,我们发现始作俑者为“长老木马(FakeDebuggerd)”家族的最新变种,该木马替换系统原生的/system/bin/debuggerd,开机启动,长期驻留后台,窃取用户信息,恶意推广软件。我们将其命名为FakeDebuggerd.C。

(一)FakeDebuggerd.C行为流程图

image3

(二)FakeDebuggerd.C具体行为分析

1.初始化

启动后,在/sdcard和/data目录分别建立目录:/sdcard/sysv/和/data/.3q/,用来保存和服务器的通信数据和运行信息

image4

2.替换系统文件

首先,FakeDebuggerd.C首次启动会创建空文件/system/bin/.cw来判断/system是否需要重新挂载。

image5

其次,将/system/bin/debuggerd重命名成/system/bin/debuggerd_deamon

image6

然后,找到自己对应的镜像文件,将自己的镜像文件复制到/system/bin/,重命名为debuggerd。等待原始的debuggerd进程被结束掉,系统会自动重启debuggerd进程,此时重启的是FakeDebuggerd.C

image7

3.联网上传窃取隐私

读取/data/.3q/rc文件。该文件用来保存下载ELF相关的信息,文件md5,下载地址等。获取网络信息(网络类型、网络名称),调用iphonesubinfo(service call iphonesubinfo 1)服务,获取sim卡的信息(手机制式、DeviceId、IMEI);获取手机固件信息(mac地址、cpu信息、手机系统版本)

获取sim信息:

image8

获取mac地址:

image9

其他信息(比如:nettype—网络类型、netextra—网络名称、andrsdk-系统api):

image10

4.静默下载安装

(1)联网获取指令配置表

解密前

image11

解密后

image12

(2)静默下载的ELF文件,下载目录:/data/.3q/ld/,默认文件名:aplo_【MD5】

(3)判断系统是否已安装内嵌的apk

image13

(4)从下载的ELF文件中释放以*PSD.apk命名的APK文件到/system/app/目录完成安装

image14

(5)修改/system/app/*PSD.apk的权限为420。

image15

5.清理痕迹

(1)删除/data/.3q/ld/目录下的文件

(2)隐藏自身进程。FakeDebuggerd.C由系统启动后调用fork()派生一个子进程,子进程尝试执行debuggerd_deamon文件(系统原始的debuggerd文件)。成功启动以后,子进程正常退出;若启动失败,子进程变成“僵尸进程”。这时系统进程列表中会看到两个debuggerd,然后FakeDebuggerd.C将/proc/pid/cmdline中对应的进程名替换掉(由debuggerd改为kworker/0I:2H:1J),再次查看进程列表,之前的两个debuggerd就变为一个debuggerd,一个kworker/0I:2H:1J

更改前:

image16

更改后:

image17

(3)回写文件修改时间,以避免发现文件变化。

image18

三、浮出水面

分析到这里我们不禁有疑问,FakeDebuggerd.C是从哪里来的?不可能平白无故的出现吧?从感染的机型范围分析并不是随着ROM带下去的木马,那么一定是通过APK释放的。我们通过一系列的用户反馈进一步测试等待复现,“元凶”终于浮出了水面——“省电專家”。

image19

(一)“省电專家”分析

1.该软件使用了DexGuard工具,类名和字符串进行了高度混淆加密,来对抗静态分析

image20

2.运行时释放seed.jar文件,这个被释放文件的实际内容以byte数组的形式被分散存储在“省电專家”的数个Java类中,以下是其中一个数组的部分片段:

image21

用于拼接组合相关代码:

image22

释放jar文件

image23

3.反射方式加载运行seed.jar的com.core.seed.SeedThread的run方法

image24

(二)seed.jar分析

1.seed.jar运行流程图

image25

2.com.core.seed.SeedThread的run方法会触发seed.jar释放并解密seed.jarres下的资源文件。其中goldbean、yy1为jar包,greenbean、s2、s4和logo.jpg为ELF文件,seedapp为一段与版本相关的文本信息,logo.jpg即为FakeDebuggerd.C。

image26

3.利用漏洞提权并运行logo.jpg

goldbean、greenbean、yy1、s2、s4为多个提权漏洞文件,包含了FramaRoot、TowelRoot等多个已知的android提权漏洞。

利用jar包提权过程(goldbean或yy1文件)

通过执行Shell命令“export ANDROID_DATA=1;export CLASSPATH=/PATH/;app_process 1 com.tj.goldbean.App 1 ‘res/logo.jpg –setup id tag’”完成整个过程,其中PATH为Seedjar包的路径,id为命令编号,tag为seed.jar的调用者通过SeedThread.setTag传进来。

image27

若该命令成功执行,会调用 com.tj.goldbean.App的main方法。

image28

         TowelRoot()方法通过加载Jar包(goldbean/yy1)自带so文件执行提权操作,提权成功后通过运行Shell命令‘res/logo.jpg –setup id tag’直接启动debuggerd文件。

利用ELF提权过程(greenbean、s2或s4文件)

image29

提权并执行运行logo.jpg文件shell命令例如:

直接通过Shell命令启动ELF文件进行提权,“res/logo.jpg –setup id2 tag”作为参数传递给对应的ELF文件并在ELF文件中根据提权结果选择是否执行Debuggerd。命令形式之一如下:

cat res/logo.jpg –setup id2 tag > $FilesDir/tmp

res/$ELF $FilesDir/tmp

(其中$ELF为elf文件路径。)

提权完成后,启动FakeDebuggerd.C运行。

(三)“日历”和“手电筒”分析

1.对“手电筒”的分析发现其会后台联网静默下载安装推广的软件

image30

2.对“日历”的分析发现其包含了一个广告插件“TJ”该广告插件会通过通知栏推送广告,并且会创建多个快捷方式进行软件推广

image31

另外,我们还发现“TJ”会从指定服务器下载加密过seed.jar文件,解密后同样调用com.core.seed.SeedThread的run方法进行加载运行。

image32

四、追根溯源

从上面的分析我们可以看出加载运行恶意文件seed.jar手机就会被感染FakeDebuggerd.C, seed.jar通过伪装成常用软件从Java代码释放和 “TJ”广告联网下载进行传播,我们发现这两类的样本总数量达到了1000多,这也就是FakeDebuggerd.C的感染量如此高的原因。

伪装的常用软件列举:

image33

嵌入“TJ”广告的软件列举:

image34

同时,我们又追踪了早期版本的seed.jar文件,经过对比分析发现其主要功能并没有发生变化,其“进化”主要为了对抗分析,因而发生了较大的形变。

(一)从“线型”到“网状”

将原seed.jar及其衍生物mlgb.jar合二为一,实现了一套自己的通信机制使执行流程复杂化,增加分析难度。老版本的seed.jar通过释放mlgb.jar,然后由mlgb.jar执行释放资源文件提权的操作,整个流程几乎是直线型,思路清晰可见;然而新版中实现了一套复杂的通信机制,演变成了一个通信网络,这一点通过对比新旧版本的包结构便能有所体会。

image35

(二)从“裸奔”到“面目全非”

新版相对于旧版的另一个变化在于严重混淆和加密敏感字符串,其为每个关键类实现了一个加密算法,这些算法形同但却依赖具体类的实现,使得分析人员无法统一进行解密,很大层度上增加了静态分析的难度。

image36

五、株连蔓引

有趣的是我们在分析FakeDebuggerd.C的整个传播感染过程中又牵出了另一个恶意木马家族Trojan.Dropper.Android.Fakeinfo.A,该家族以恶意样本为介质依次进行推广传播。我们以推广“省电專家”为例,来说明整个运行关系图,涉及的软件有:

l  被篡改的“悦会”(Trojan.Dropper.Android.Fakeinfo.A)

l  com.android.provider.confirm

l  System

l  AndroidRoot

l  系统

(一)Trojan.Dropper.Android.Fakeinfo.A传播关系图

image37

(二)Trojan.Dropper.Android.Fakeinfo.A恶意行为分析

概述:释放加密的漏洞利用文件和恶意APK包,利用漏洞获取Root权限之后将恶意APK包com.android.provider.confirm和System至/system/app目录下,自动重启手机完成安装。

漏洞利用文件和恶意APK包通过双层加密,首先通过标准DES算法解密assets目录下info.mp4文件,密钥为a1f6R:Tu9q8。

image38

其次,解密出的zip包也是加密的,密钥为:6f95R:T29q1

image39

其中root_000实际上就是System的APK包,AndroidRTService.apk上是com.android.provider.confirm的APK包,其他root_001~008为已知的提权漏的文件用来获取Root权限。

(三)“com.android.provider.confirm”行为分析

概述:木马会后台上传手机中软件列表,同时获取云控指令,执行下载、静默安装、静默卸载、弹通知栏及启动指定应用行为。

1.云控指令解析。我们发现有3种类型的云控指令,分别是“[Down]”、“[Uninstall] ”和“[Notification]”,分别代表下载、卸载和推送通知。服务器返回的每条指令以“[-]“分割,拆分成每条指令的各个部分。

(1)[Down]:包含了要下载的软件id,md5,软件包名或组件服务名称,下载地址等信息;

(2)[Uninstall]:包含了要卸载软件包名信息;

(3)[Notification]:包含了通知栏id,软件包名或组件服务名称,通知栏内容等信息

我们在分析测试时,得到了“[Down]“指令返回的两种不同指令形式

(4)[Down]T71656[-]as[-]true[-]4197529[-][MD5][-]1[-][PACKAGENAME][-]http://[REMOVED].com/[REMOVED].apk[-]false[-]false[-]false[-]true[-]http://[REMOVED]/status.jsp

(5)[Down]T71659[-]as[-]true[-]169202[-][MD5][-]1[-][SERVICENAME][-]http://[REMOVED].com/appapk/[REMOVED].apk[-]false[-]false[-]false[-]true[-]http://[REMOVED]/status.jsp

2.根据指令内容执行pm install –r进行静默安装

image40

3.根据指令内容执行pm uninstall进行卸载

image41

4.根据指令通过命令行方式模拟指定软件运行。通过am startservice方式启动云控指令中的组件服务名称

image42

5.推送通知栏

image43

我们在实际动态调试时,发现下载安装的软件是通过服务器返回内容来控制变化的,实际看到的有:“游戏大厅”、“内涵笑话”、“台球大师”、“AndroidRoot”(多个不同包名的AndroidRoot),这些软件下载后被静默安装到data/app目录下。

而所下载的“AndroidRoot”的主要行为与被篡改的“悦会”行为基本相同,也是利用已知漏洞提权后释放本地APK文件到system/bin目录下,然后重启手机完成安装。区别只是在于只释放一个APK文件,所释放的APK有“省电專家”、“小孩监护宝”等等。

(四)“System”恶意行为分析

概述:后台下载、静默安装、卸载指定应用;修改手机的APN设置

接收多种系统广播以启动核心的服务。从控制服务器获取要安装的应用列表,后台自动下载,静默安装,当安装完成且运行之后,在指定的时间内卸载这个应用。

接收服务器返回的指令更新数据库内容,从数据库中获取需要安装的应用的信息,下载并安装这些应用。

image44

下载应用

image45

安装应用,并修在在数据库中相应的值。

image46

读取数据库中的数据,卸载指定的应用。

image47

当接收到system.intent.action.OPEN_WAP或system.intent.action.OPEN_NET广播时,根据IMSI号码来选择对应运营商的APN配置

image48

“System”和“com.android.provider.confirm”的主要恶意行为相仿,都是通过服务器控制下载并安装指定应用,并可接收指令卸载,主要区别在“com.android.provider.confirm”会启动被安装应用的service,而“System”会启动被安装应用的activity。

(五)“系统”恶意行为分析

概述:运行后会解密释放并加载恶意子包,子包会私发短信订阅付费业务、拦截指定关键字的短信,造成用户经济损失。

主包会创建一个服务,该服务主要功能是负责解密主包assets目录下的gamelib.so,解密后的文件为一个jar包,通过DexClassLoader加载该子包。子包包名为:cn.andriod.system.SlotSocket

image49

加载之后运行子包的启动方法

image50

子包运行后,会联网获取服务器指令,指令包含拦截的指定关键字和发送的手机号码。

image51

拦截关键字包括:

image52

六、解决方案

目前只能通过360电脑版手机急救箱和长老木马专杀工具,手机用户一旦发现手机中莫名多出“手电筒”、“日历”及其他应用,同时手机话费出现异常,一定要尽快使用360手机急救箱和长老木马专杀工具清除“长老木马”三代。

手机急救箱下载地址: http://www.360.cn/jijiuxiang/

长老木马专杀工具下载地址:http://msoftdl.360.cn/mobilesafe/shouji360/360safesis/FakedbgKiller.apk

七、总结

从这次我们发现的恶意木马家族FakeDebuggerd.C可以看出,与之前发现的FakeDebuggerd.A[1]和FakeDebuggerd.B[2]相比具有推广渠道多样化、更难以发现,清除难度增大,对抗手段增多,利用专业的手段对抗分析和安全检测。

360互联网安全中心建议:

(一)对于App开发者:在嵌入广告时应仔细甄别,以免嵌入恶意广告插件,给自己的软件及用户带来不必要的损失;

(二)对于广告商:要加强推广软件的审查力度,不给恶意软件传播留下可趁之机。

(三)对于广大普通用户:请通过正规渠道下载安装App应用,同时,安装专业的安全软件,开启安全监控。注意自己的话费和流量使用情况,若发现异常情况,及时向运营商和360互联网安全中心反馈。

相关阅读链接:

FakeDebuggerd.A:http://blogs.360.cn/360mobile/2014/03/06/fakedebuggerd-android-rootkit/

FakeDebuggerd.B:http://blogs.360.cn/360mobile/2014/06/18/analysis_of_fakedebuggerd_b/