一、 简述
由于出厂的Android手机大多会被预装很多没什么用的应用,同时也是为了折腾好玩,越来越多的用户选择ROOT自己的设备以此来获得更好的体验。在市面上,能提供ROOT服务的软件有很多,其中比较常见的ROOT工具就有360 ROOT和King ROOT。下面主要从两个方面来浅谈下360 ROOT软件在ROOT方面存在的一些安全问题。
二、 提权文件
使用360 ROOT越狱手机的时候,其首先会收集必要的系统信息,然后会发送到云端来获取相匹配的ROOT方案文件,通过解析方案文件,可以获取到提权的so动态库下载地址,在下载完后动态加载,然后通过RootMan这个类中的private native int jmain(int arg1)函数来开始提权操作。
在整个提权的过程中,安全校验很少。通过伪造关键的系统信息,很容易就可以获取到大部分提权用到的动态库文件,再加上动态库运行过程中对其调用者的校验不严格,这就导致了这些获取到的提权文件很容易就复用到其他恶意软件的攻击模块中。
三、 后台程序
在设备ROOT成功后,在软件的设置界面里提供了可以卸载ROOT权限的选项,但是在卸载完ROOT权限后软件并不会把一些后台程序也从系统清理掉。
在文件/system/etc/install-recovery.sh中保存着开机启动项,如下图所示,关键就是这个360s文件。其作为后台服务程序,随着手机开机而启动,在自身启动后还会创建两个名为360sguard的守护进程,而自身的进程名又改为emdaemon。
emdaemon这个后台进程的主要作用就是充当一个本地Socket通信服务端,这样的话,自家公司的其他APP可以通过连接这个服务端,发送一些指令来获取ROOT权限。经过分析发现,360自家的一些APP,比如手机卫士,在AndroidManifest.xml文件中可以找到如下的远程服务:
<service android:exported="false" android:name="com.qihoo.permmgr.PermService" android:process=":permmgr"/>
这个就是用来提权的,那既然自家的可以连接这个服务端,那其他恶意APP当然也可以去连接了。通过进一步的实验发现,在360s中如果使得其调用getuid和geteuid的返回值不为2000的话,那么在adb shell中运行360s可以直接得到一个ROOT 权限Shell。这给恶意软件通过电脑端运用adb系列命令入侵手机提供了一种高效的方法。
四、 简单清除
既然后台程序不会被360 ROOT软件自己清理而自己又会开机重启,自身又暴露了很多可以被恶意软件利用的攻击面,为了手机的安全就得自己来卸载了。恢复出厂设置是不行的,可以通过刷机或者用下面的方式来解决。
由于存在双守护进程,那么如果一个一个KILL的话很难都结束掉,那就用KILL -19 PID来让那三个进程都暂停执行,然后再用KILL -9 PID来结束这几个进程,最后删除install-recovery.sh以及360s再开机重启下就可以了,可能还会有些衍生物需要进一步清理掉。
五、 总结
凡药三分毒,用户在ROOT手机后能给自己带来便利的同时所遇到的安全风险也在不断增加,还是尽量别去ROOT自己的设备。软件开发商也需要加强自身软件的安全性,多注重安全方面的校验,从而尽可能减少自身提供的一些服务被恶意软件所利用。