当前位置: 首页 > 工具软件 > SE Android > 使用案例 >

SeAndroid修改

韩耘豪
2023-12-01

----------【例子1】:通过修改shell的权限,使其无法设置属性:

先来看shell的te,如下所示:

[external/sepolicy/shell.te]

Domain for shell processes spawned by ADB

type shell, domain;

type shell_exec, file_type;

#shell属于unconfined_domain,unconfined即是不受限制的意思

unconfined_domain(shell)

Run app_process.

XXX Split into its own domain?

app_domain(shell)

unconfied_domain是一个宏,它将shell和如下两个attribute相关联:

[external/sepolicy/te_macros]

#####################################

unconfined_domain(domain)

Allow the specified domain to do anything.

define(unconfined_domain',

typeattribute $1 mlstrustedsubject; #这个和MLS有关

typeattribute $1 unconfineddomain;

')

unconfineddomain权限很多,它的allow语句定义在unconfined.te中:

[external/sepolicy/unconfined.te]

allow unconfineddomain property_type:property_service set;

从上面可以看出,shell所关联的unconfineddomain有权限设置属性。所以,我们把它改成:

allow {unconfineddomain -shell} property_type:property_service set;

通过一个“-”号,将shell的权限排除。

然后:

我们mmm external/sepolicy,得到sepolicy文件。
将其push到/data/security/current/sepolicy目录下
接着调用setprop selinux.reload_policy 1,使得init重新加载sepolicy,由于/data目录下有了sepolicy,所以它将使用这个新的。
图示为整个测试的例子:

重新加载sepolicy之前,笔者可通过"setprop wlan.driver.status test_ok"设置该属性的值为test_ok。
当通过 setprop selinux.reload_policy 1 的命令后,init重新加载了sepolicy。
笔者setprop wlan.driver.status 都不能修改该属性的值。
图示为dmesg输出,可以看出,当selinux使用了data目录下这个新的sepolicy后,shell的setprop权限就被否了!

提示:前面曾提到过audit,日志一类的事情。日志由kernel输出,可借助诸如audit2allow等host上的工具查看哪些地方有违反权限的地方。

===============

SeAndroid 架构
https://blog.csdn.net/qq_19923217/article/details/81240027
PMS / Installd / Init

修改selinux
https://www.cnblogs.com/blogs-of-lxl/p/7515023.html

https://www.jianshu.com/p/48c286da64a3

 类似资料: