如何排查并解决SEAndroid 的审计不通过

来源:互联网 发布:koala for mac 编辑:程序博客网 时间:2024/05/16 15:35
Android 5.0 之后,SEAndroid所有的部分均为Enforcing模式;如果当某个操作不被SEAndroid允许时,例如对文件进行write,该如何排查出信息,同时,在sepolicy中,添加上相应的allow语句,将权限开放出去;

1:SEAndroid不允许时,log记录在哪里?
SEAndroid的审计不通过时,log记录在dmesg 中,dmesg是kernel的log,如果想要获取该log,可以使用如下命令:
adb shell su -c dmesg    ----- 获取kernel log

2: 查看SEAndroid 不允许的log
SEAndroid 审计不通过的log,带有"avc:" 所以,用如下命令即可搜集到审计不同的log:

adb shell su -c demsg | grep 'avc:'  ---- 得到审计不通过的log信息

如果有审计不通过的,会得出如下类似的信息:
<5> type=1400 audit: avc:  denied  { read write } for  pid=177comm="rmt_storage" name="mem" dev="tmpfs" ino=6004 scontext=u:r:rmt:s0tcontext=u:object_r:kmem_device:s0 tclass=chr_file
不被允许的操作是:read 和write
访问者是:u:r:rmt:s0
被访问者是:u:object_r:kmem_device:s0
操作对象是:chr_file

相当于在sepolicy 策略语言中,缺乏这样的语句allow rmt kmem_device:chr_file {read write}

TIP:
pid=177 表示访问者所在的进程,comm中给的是一个提示,表示当这个denial发生时,什么正在运行;

3:如何消除这样的不通过
很简单,可以直接在sepolicy中加上这样的策略语句;
例如上处avc不通过,可以在/external/sepolicy/ 目录下,新建一个test.te
在test.te 中写入,allow rmt kmem_device:chr_file {read write},
重新编译策略语言,刷机即可;

但是当avc很多时,人工去看容易出错且慢,我们可以使用工具来完成这项工作;

selinux/policycoreutils/audit2allow环境搭建:
测试电脑的配置是:unbutu 12.04
step 1:在 ubuntu中安装policycoreutils
sudo apt-get install policycoreutils

step 2 : 使用audit2allow 工具完成策略语言的添加:
adb shell su -c dmesg | audit2allow

例如上诉avc语句就会输出:
#============= rmt ==============allow rmt kmem_device:chr_file { read write };

TIP:
1: 要知道,audit2allow是policycoreutils中的工具之一
2:如果在ubuntu 14.04 或者更新的版本中,可以直接将策略语句插入到编译好的sepolicy中
命令如下:
adb shell su -c dmesg | audit2allow -p out/target/product/<device>/root/sepolicy

0 0
原创粉丝点击