您的位置:首页 > 移动开发 > Android开发

SeAndroid上指纹系统的权限说明

2015-06-04 14:27 531 查看
SeAndroid上指纹系统的权限说明

1.什么是SeAndroid

SEAndroid 美国国家安全局在2012年1月发布SEAndroid开源项目和代码,使Android系统支持强制访问控制(Mandatory Access Control)以增加系统安全性。

Android从4.4开始支持SeAndroid,并默认关闭。

Android5.0及以上默认开启SeAndroid,adb shell下使用命令

#getenforce

查看当前的Se状态,使用命令

#setenforce 0

使当前系统Se处于permissive状态,该状态下,违反SeAndroid规则的越权资源访问将不予拒绝执行,系统仅发出日志输出。

使用命令

setenforce 1

使系统处于enforcing状态下,该状态下,违反SeAndroid规则的越权资源访问均被拒绝。

以上的设置命令时暂时关闭,系统重启后将被恢复。

系统启动参数中加入[selinux=enforcing | selinux=permissive | selinux=disable]可以永久的设置系统SeAndroid状态,或者将命令seenforce n 写入系统启动脚本中。

2.SeAndroid的策略

SeAndroid除了传统的DAC(自主访问控制),另外加了一层权限检查MAC(强制访问控制),任何进程想在SeAndroid中干任何事情,都必须先在【安全策略配置文件】中赋予权限。范式美柚出现在安全策略配置文件中的权限,进程就没有该权限,操作时均被操作系统拒绝。

3.指纹系统的DAC控制

应用程序app以用户权限运行,则需要赋予其设备访问权限。具体操作方法:

修改Android源码下

./system/core/rootdir/ueventd.rc

添加

/dev/madev0 0666 root root

权限位0666可以根据需要调整

4.指纹系统的MAC控制一

Demo演示程序运行时(使用adb install 安装 或放入系统image中),进程运行在untrusted_app域中,如需获得权限。操作如下:

4.1.修改Android源码下

./external/sepolicy/untrusted_app.te

在type untrusted_app,domain;(untrusted_app定义语句)之后

添加语句

allow untrusted_app device:chr_file {open read write ioctl};

“{}”中为所赋权限,该权限可以根据需要配置。chr_file所拥有的权限可以参照源码下

./out/target/product/tiny4412/obj/ETC/sepolicy_intermediates/policy.conf

或者

./external/sepolicy/access_vectors

中关于class chr_file的权限说明(class chr_file继承了file,定义为common file)。

4.2修改Android源码下

./external/sepolicy/domain.te

使用“#”注释掉行

neverallow {domain -unconfieddomain} -ueventd -recovery} device:chr_file {open read write};

否则nerverallow将进行权限检查,检察到冲突无法编译通过。

5.指纹系统的MAC控制二

对于集成入系统的应用程序来说,进程可能运行在plat-form_app域中。如无权限(测试中),操作如下:

5.1.修改Android源码下:

.external/sepolicy/platform_app.te

在type platform_app, domain;(platfomr_app定义语句)之后添加:

allow platform_app device:chr_file {open read write ioctl};

platform_app域无neverallow chr_file权限校验。

6.说明

6.1权限赋予方法同样适用于其他系统或应用

6.2 为应用赋予DAC权限

直接修改ueventd.rc文件即可。也可以解压后修改ramdisk.img中的uevent.rc后重新打包。

6.3 为应用赋予MAC权限时的一般步骤:

确定目标应用执行进程所处的域(domain),使用[ ps -Z ]命令查看,形式诸如:

u:r:untrusted_app:s0 u0_a13 4574 1648 ma.fprint

该进程所处的域即为untruste_app*。

为该域赋予设备文件的读写权(对于其他类型的应用,赋予相应的操作权,例如process 的signal),在域定义后使用

allow source_type target_type:class perm_set

语法赋权。

编译产生权限冲突,注释产生冲突的权限检查语句

neverallow source_type target_type:class perm_set

不建议将访问硬件设备的应用进程放在untrusted_app,这样会导致其他第三方进程也将获得权限。

feedback:guq@microarray.com.cn


版本补充:

由于直接修改域赋予device的权限,会导致该域拥有所有device权限,可以使用一下办法创建一个文件域

1.2 修改Android源码下

./external/sepolicy/device.te

在device type定义之后增加【type xxx_device,dev_type】

1.3 修改Android源码下

./external/sepolicy/file_contexts

在system files定义前加 【/dev/[node_name] u:object_r:xxx_device:s0】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息