Android 应用(1)——安全策略sepolicy

17 篇文章 8 订阅

SEAndroid app分类

参考链接:
http://www.voidcn.com/article/p-stzeacwv-xe.html

SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):

1)untrusted_app 第三方app,没有Android平台签名,没有system权限
2)platform_app 有android平台签名,没有system权限
3)system_app 有android平台签名和system权限

从上面划分,权限等级,理论上:untrusted_app < platform_app < system_app

查看当前运行的应用信息:

rk3399_all:/ # ps -Z
u:r:untrusted_app:s0:c512,c768   u0_a64    3208  357   1775224  120616  SyS_epoll_  76b9259b80  S  com.forlinx.changelogo

domain:untrusted_app
user:u0_a64

APP的domain和type

查看seapp_contexts文件,APP的domain和type由user和seinfo两个参数决定

system/sepolicy/seapp_contexts
isSystemServer=true domain=system_server
user=system seinfo=platform domain=system_app type=system_app_data_file
user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file
user=nfc seinfo=platform domain=nfc type=nfc_data_file
user=radio seinfo=platform domain=radio type=radio_data_file
user=shared_relro domain=shared_relro
user=shell seinfo=platform domain=shell type=shell_data_file
user=_isolated domain=isolated_app levelFrom=user
user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user
user=_app isAutoPlayApp=true domain=autoplay_app type=autoplay_data_file levelFrom=all
user=_app isPrivApp=true domain=priv_app type=app_data_file levelFrom=user
user=_app domain=untrusted_app type=app_data_file levelFrom=user

user

参考链接:
https://blog.csdn.net/huilin9960/article/details/81530568

user可以理解为UID。android的UID和linux的UID根本是两回事,Linux的UID是用于针对多用户操作系统中用于区分用户的,而Android中的UID是用于系统进行权限管理的。
参考链接中的文章对于uid的产生讲的很清楚。

seinfo

不同签名会创建对应的selinux上下文。

Android.mk

LOCAL_CERTIFICATE := platform
有platform签名,所以seinfo是platform。

LOCAL_CERTIFICATE作用

参考文档
https://blog.csdn.net/hnlgzb/article/details/107823874

可以查看Android源码build/target/product/security/ 目录下提供的默认签名文件,不同平台可能会有差异:
T507提供了media、networkstack、platform、shared、testkey、verity六种不同权限的签名文件。
在这里插入图片描述
OK3399提供了media、platform、shared、testkey、verity五种不同权限的签名文件。
在这里插入图片描述

sepolicy配置文件

参考链接:
https://blog.csdn.net/ch853199769/article/details/82498725
device/rockchip/common/sepolicy/*.te
device/rockchip/common/sepolicy/*_contexts
system/sepolicy/*.te
system/sepolicy/*_contexts

标签、规则和域

规则采用以下形式:allow domains types:classes permissions;,其中:
Domain - 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型。
Type - 一个对象(例如,文件、套接字)或一组对象的标签。
Class - 要访问的对象(例如,文件、套接字)的类型。
Permission - 要执行的操作(例如,读取、写入)。

device/rockchip/common/sepolicy/platform_app.te
# Additional rules for platform_app
allow platform_app surfaceflinger_tmpfs:file { read write };
# Write to /cache.
allow platform_app vfat:dir create_dir_perms;
allow platform_app vfat:file create_file_perms;
allow platform_app init:unix_stream_socket { connectto };
allow platform_app surfaceflinger:fifo_file rw_file_perms;
#allow platform_app property_socket:sock_file { write };
allow platform_app unlabeled:filesystem { getattr };
allow platform_app unlabeled:dir rw_dir_perms;
allow platform_app unlabeled:file rw_file_perms;
allow platform_app devicemanager_service:service_manager { find };
allow platform_app gpu_device:dir { search };
#allow platform_app property_socket:sock_file { write }
allow platform_app vfat:dir create_dir_perms;
allow platform_app vfat:file create_file_perms;
allow platform_app property_socket:sock_file write;
allow platform_app system_app_data_file:file write;
set_prop(platform_app,system_prop)
set_prop(platform_app,media_prop)
set_prop(platform_app,drm_prop)
get_prop(platform_app,ctsgts_prop)

Type Class

参考链接:
https://www.jianshu.com/p/a3572eee341c
system/sepolicy/seapp_contexts
system/sepolicy/genfs_contexts
system/sepolicy/file_contexts

avc问题(scontext tcontext)

参考链接:
https://blog.csdn.net/rikeyone/article/details/84337115
$ dmesg > /storage/0000-006F/dmesg.txt
$ cat dmesg.txt | grep avc | audit2allow
sudo apt install policycoreutils
$ cat dmesg.txt | grep avc | audit2allow
#============= fsck ==============
allow fsck zram_device:blk_file getattr;

#============= init ==============
allow init boot_block_device:lnk_file relabelto;
allow init cifsmanager_exec:dir { create setattr };
allow init recovery_block_device:lnk_file relabelto;

#============= mediaserver ==============
allow mediaserver system_server:dir search;
allow mediaserver system_server:file { open read };

#============= shell ==============
allow shell pppoe_prop:file { getattr open };
allow shell secureboot_prop:file { getattr open };

#============= system_server ==============
allow system_server media_rw_data_file:dir { getattr open read };

#============= vold ==============
allow vold ctl_bootanim_prop:property_service set;

安全策略权限的问题可能会逐步暴露出来,所以,后面可以把avc信息直接截取保存下来,使用audit2allow工具进行分析

[  103.856532] type=1400 audit(1546305219.793:10): avc: denied { write } for pid=1544 comm="ternalstoragerw" name="/" dev="sda1" ino=1 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:vfat:s0 tclass=dir permissive=1
[  103.856775] type=1400 audit(1546305219.793:11): avc: denied { add_name } for pid=1544 comm="ternalstoragerw" name="eeeeee" scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:vfat:s0 tclass=dir permissive=1
[  103.856857] type=1400 audit(1546305219.793:12): avc: denied { create } for pid=1544 comm="ternalstoragerw" name="eeeeee" scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:vfat:s0:c512,c768 tclass=dir permissive=1

T507

u:r:priv_app:s0:c512,c768      u0_a2         5927  2322 1042108 105452 SyS_epoll_wait      0 S com.example.cam


#============= hal_camera_default ==============
allow hal_camera_default default_prop:file read;
allow hal_camera_default system_prop:file read;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android的Widget是指可以被放置在桌面或者其他应用中的小部件,比如常见的时钟、天气、日历等等。在Android中,Widget的布局可以使用XML文件来进行定义,与普通的布局定义类似,可以使用各种属性来设置Widget的样式和行为。 在Widget的XML布局文件中,可以使用View类中定义的许多属性来控制Widget的样式和行为,比如: 1. android:id:设置Widget的ID,可以在代码中通过findViewById()方法来获取对应的View对象。 2. android:layout_width、android:layout_height:设置Widget的宽度和高度,可以使用具体数值或者match_parent、wrap_content等特殊值。 3. android:layout_gravity:设置Widget在父布局中的对齐方式,比如center、left、right等等。 4. android:padding、android:paddingLeft、android:paddingRight等:设置Widget的内边距,用于控制Widget内部内容的显示位置。 5. android:background:设置Widget的背景颜色或者背景图片。 6. android:clickable、android:longClickable:设置Widget是否可以被点击或者长按。 7. android:focusable、android:focusableInTouchMode:设置Widget是否可以获取焦点,用于控制Widget是否可以响应键盘事件等。 8. android:visibility:设置Widget是否可见,可以使用值为visible、invisible、gone。 除了以上列出的属性之外,还有许多其他的属性可以用于控制Widget的样式和行为,具体可以查看Android官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值