LBE 安全大师注入Android 4.4分析
基本信息
应用名:LBE安全大师 5.1
包MD5:5a1d8b24218ee39b399277df2f3fa840
关键字:Root、android注入、SELinux
分析原由
android 4.4中将SELinux的配置由 4.3中默认值permissive(违规后只记录阻止)改为enforcing(违规后直接阻止)。这也就是说SELinux在4.4中默认为开启状态,SELinux开启后对权限和域的管理更为严格,使得root权限没有太大意义(对于安全软件来说),具体来说如:
1、无法使用ptrace进行注入进程。
2、无法访问system用户权限的目录或文件(例:无法访问/data、/data/app目录)。
其中无法注入进程使得安全软件的广告拦截、应用耗电、预装软件卸载、应用权限管理等等都无效。
11月中旬lbe发布某版本说支持android 4.4,也就说LBE的主动防御可以启动并且拦广告。
分析细节
猜测
在某非官方4.4rom的已root手机上安装了个最新版本的lbe,然后运行发现确实可以拦截广告。根据以往的经验要拦截广告一般是注入到相应进程之后然后hook 相关函数后实现拦截,于是cat /proc/id/maps看了下,发现lbe相关模块注入到目标进程中。这证实还是注入后实现拦截的。不过很好奇的是4.4不是有SELinux吗? LBE怎么还可以成功注入进程呢?关闭SELinux或者lbe找到了系统的漏洞可以绕过lbe?
有以上猜测后先证实下是不是关闭SELinux:后台输入getenfore命令,返回的结果确认了我第一个猜测是对的。
随着第二个问题是LBE是怎么关闭selinux的呢?且看下面分析。
分析
经过对lbe文件的一番摸索最终发现关键文件:package/assets/hips.jar,从名字看是主防相关的,然后在该包内找到关闭selinux代码对应的文件bootstrap,该文件为ELF文件,使用IDA载入从start函数看很快找到关闭selinux代码入口:
fnDisbleSELinux主要做以下几件事:
事务清单
Get_SElinux_path //获取selinux目录
Write_selinux //修改selinux配置文件,关闭selinux
Oom_adj //修改LBE服务优先级,防止注入操作未完成时被android系统终止服务。
Lbesec.loader //启动lbesec.loader,进行注入相关操作。
Get_SElinux_path:
该函数通过以下几种方式获取selinux目录:
1、statfs直接判断”/sys/fs/selinux”是否为SELINUX_MAGIC,确认是否为selinux目录。
2、在/proc/filesystems文件中找”selinuxfs”串,找到后在“/proc/mounts”文件中找”selinuxfs”串,然后定位到对应的实际目录,“/proc/mounts”文件中保存selinux信息如下:
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
Write_selinux:
简单的写配置文件,相当于echo 0>/sys/fs/selinux/enforce。
结果确认
从代码上确认了是修改配置文件,然后通过以下两种方法也都证实LBE是修改配置文件进行关闭selinux:
1、在lbe生效的机器上查看enforce文件确认文件已被修改。
2、输入getenforce查看selinux状态为Permissive。
root@mako:/ # getenforce
getenforce
Permissive
总结
关闭SELinux,安全软件可想象的空间会大很多,不过对应的风险还是比较高的。对这种关闭selinux的方法持保留意见。
注:本帖由看雪论坛志愿者PEstone 重新将DOC整理排版,若和原文有出入,以原作者附件为准
附件为 LBE为什么在安卓4.4 selinux环境能成功注入的原因分析。
不太会分析arm,错误之处请指正。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课