根据 [The Hacker News](http://thehackernews.com/2016/09/xiaomi-android-backdoor.html) 的报道,小米手机定制的ROM中存在后门,可以使得小米在用户的手机上静默安装任意APP。这个后门存在于预装的Analytics应用中,其在后台24小时运行,即便用户删除后任然会再次出现。
刚好用的就是小米的手机,本着学习的态度,用了课余时间分析了一下,看看这个后门是咋回事。
二. 具体分析
通过小米手机的“设置”-> “其他应用管理”,在“全部 ”标签栏中可以查看系统中的全部应用,仔细找确实发现了名叫analytics的应用。
同时通过adb连接后,用ps命令也可以看到这个应用正在运行。
1
2
|
root@dior:/ # ps|grep "analytics"
u0_a75 1711 218 516248 39860 ffffffff 400d68b8 S com.miui.analytics
|
由于这个应用是预装的系统应用,然后通过`adb pull`将`/system/app`目录中的AnalyticsCore.apk拿出来,这样就可以反编译apk文件看看这个应用到底做了什么,是不是真的有后门?
由于apk文件也是一个zip结构的文件,我先用7zip打开看了一下,发现没有使用linux so文件,也就是都是java层的代码,没有native的。这样直接用JEB分析吧。
用JEB打开后看到,一些包中的类名和方法都是a,b,c这样的名字,应该经过了混淆处理。
然后看Manifest文件中的声明的权限和服务
其中有完全的网络访问权限,可以直接安装应用,获得手机状态等。还设置了receiver在手机启动和网络状态改变时获得通知。
然后我通过JEB中Strings一栏查找一些可疑的字符串。发现了一个线程,在runnable接口中定义的run函数中有发送手机信息到远程服务器的行为。这个后来被证明也是后门的关键。
从代码中看到获取了imei,mac,package等信息,发送到[http://sdkconfig.ad.xiaomi.com/api/checkupdate/lastusefulversion](http://sdkconfig.ad.xiaomi.com/api/checkupdate/lastusefulversion)。
返回的是一个json格式的信息。其中关键的有url和md5字段。
我们接下去看看代码是怎么处理这个url和md5的。
1
2
3
|
g.a(this.B, v0_5.optString("md5"));
g.b(this.B, v4);
g.c(this.B).execute(this.B.bg);
|
通过`g.a`,`g.b`分别将url和md5的值赋给`this.B`的成员变量,然后启动一个thread处理。
在这个thread中将上面的url去请求一个apk,将它下载到本地。本地保存的地址是自生的cache目录`/data/data/com.miui.analytics/cache/`。
在下载完后,还通过md5对下载的apk进行了校验。
但由于前面的请求是http,我们完全可以拦截改写url和md5的值,将url改写为自己服务器的地址,md5的值只要符合自己服务器中apk的md5即可。
然后通过“g.h(this.B)”安装。最后安装apk的代码就是调用PackageManager进行安装。
可见,代码中虽然通过md5对下载的apk进行了校验,检查了下载apk文件的完整性,但没有检查签名的有效性,如是不是小米的签名。
另外,由于之前的http不安全的传输,使得可以篡改url和md5的值,使得系统根据一个指向我们服务器的url下载恶意的apk,并被安装。
上面的这个过程在系统启动后,网络状态改变,手机唤醒时,都会发生。
只要满足下面的条件,即每每隔24小时触发一次。将上次检查的时间记录在updater.xml文件中。
那么我们改写updater.xml文件中的updateTime值,让时间间隔大于24小时,通过抓包可以很明显的看到此现象。通过中间人攻击可以安装上自己的apk。
1
2
3
4
5
6
|
root@dior:/data/data/com.miui.analytics # cd shared_prefs
root@dior:/data/data/com.miui.analytics/shared_prefs # cat updater.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<long name="updateTime" value="1475032517252" />
</map>
|
三. 总结
通过分析,这个“后门”可以实现静默安装任意apk。按更确切的是一个漏洞,有两个关键的缺陷,一是不安全的传输,使用http传输更新关键数据。二是虽然通过md5检查了完整性,但没有检查签名的有效性,确认是小米的签名。
从功能上看,这个analytics更多的是分析数据,应该是小米用于增强用户体验的,但在更新部分的缺陷给了hacker可乘之机。当然是不是故意留下的,大家各自评说吧。
发表评论