Android SELinux 的认知以及 init 的相关知识,Linux 环境利用这2个模块进行白名单测试 -- 架构分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jspping/article/details/51724908

SELinux --

Android 5.0+ google 加入了新的安全模块即SELinux,SELinux是一种Android上面的安全机制,针对Linux的安全加强系统

我们可以通过配置SELinux的相关policy,来定制自己的手机的一些权限,比如,我们可以完全让root用户没有任何的权限和user一样

在android里面,有两个类型,一种是文件,一种是进程,在android上面,adb shell之后进入手机,ps -Z可以查看当前进程所拥有的selinux的权限

配置selinux,需要linux内核首先是支持selinux的,另外需要android的selinux的配置文件,在extern/sepolicy目录

SELinux的配置规则 -- a. App进程 -> mac_permissions.xml

b. App数据文件 -> seapp_contexts
    c. 系统文件 -> file_contexts
    d. 系统属性 -> property_contexts

te文件,一般的语法 --
rule_name source_type target_type:class perm_set
为source_type设置一个rule_name的规则,规则是对target_type的class 进行 perm_set的操作

init --

init 下有两个比较核心的文件分别是

system/core/rootdir/init.rc -- 配置了需要启动的Linux系统进程一些简单任务,是init.c启动/init需要执行的脚本和一般初始化操作

system/core/init/init.c -- Linux 启动系统文件第一个应用就是/init 然后对init.rc/init.xx.rc 执行任务解析


今天笔者会利用这两个模块进行一个进程联网白名单测试验证,我需要在SELinux下配置我的启动自定义的系统进程服务,在external/sepolicy下配置自己的.te 文件,然后给与我的 system/bin/xxx 这个自定义进程root 和 +x ,最后我写一个app移植到os里,或者install -r 对 system/bin/xxx 这个进程进行间接通信,让它去做我要屏蔽的某个进程,即根据pid/package-name 进行白名单验证。

external/sepolicy 下配置 .te 文件,自定义命名为 tianetd


external/sepolicy 下配置 .te 文件,自定义命名为 untrusted_app.te,用来做白名单校验


vi 之后将他们 mv 到external/sepolicy 目录下,随后开始进行测试,因为 test app 先前已经完成了,直接移植到os ,在out下将apk文件重新替换,之后 snod rom 烧录,然后在 test app 上进行测试,在测试过程中出现了一个 bug ,导致我的 test app pid 直接被系统 killer 掉了,通过

MTKLOGGER 进程获取到如下日志


The Linux kernrl does not support iptables ,Linux 内核不支持iptables这个操作原因是我是在 LV19 的设备上测试的,于是笔者换了 5.1 的设备开始新的一轮测试,但是我还是觉得少了点什么东西没有配置,想了一下忘记配置 init.rc 初始化任务了,于是笔者在init.rc 下加入自己的服务需要的初始化配置


最后在out目录下对tianetd进行了赋权,root/+x 


权限


snod rom ,install image file 测试,测试完美通过!顺带说一下,SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问,需要在external/sepolicy下配置权限需要的 .te 文件

谢谢观博,有不对的地方欢迎随时指正!再次感谢!

阅读更多

没有更多推荐了,返回首页