配套系列教学视频链接:
说明
系统:Android10.0
设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)
前言
本章节介绍SEAndroid(Security Enhanced for Android Selinux整体框架, 了解整体,再去看细节就容易很多.
一, 框图介绍:
SEAndroid框架是由用户空间和内核空间组成, 用户空间安全保护机制中主要包含安全上下文(Security Context)、安全策略(Security Policy)和安全服务(Security Server)等模块,内核空间由LSM,AVC组成,LSM (linux security module)负责内核资源的安全访问控, 由它来决定一个主体访问一个客体是否是合法的,这个主体一般是指进程,而客体主要指资源, 而selinux是属于LSM中实现的一种。
用户空间 | 安全上下文(security Contex),包含各种xx_context上下文文件 |
安全服务(Security Server),由PMS,installd,init,zygote几个重要进程组成。 | |
安全策略 (Security policy),主要是各种te文件 | |
内核空间 | Linux安全模块(SELinux LSM)(通常包括访问向量缓冲(Access Vector Cache),模块会利用HOOK拦截接口, 对用户空间调用接口进行安全校验 |
二, Selinux用户空间和内核空间交互
从应用空间通过系统调用进入到内核空间, 初步会进行DAC检查, 检查通过后, 在selinux使能的情况下, 会调用LSM子系统的hook接口,进行安全检查, 因为selinux具体实现了LSM子系统重点 hook接口, 所以最终会通过selinux进行权限检查,通过后才会找到相应inode进行问文件操作。
这种图体现的是LSM子系统调用selinux的接口层次图, SELinux 会在 LSM 中注册相应的回调函数。其次,LSM 会在相应的内核对象子系统中会加入一些 Hook 代码(内核LSM驱动代码:security/selinux.c),例如我们调用系统接口open函数来读取一个文件的时候,就会进入到内核的文件子系统中。在文件子系统中负责读取文件函数 vfs_open就会调用 LSM 加入的 Hook 代码。这些 Hook 代码就会调用之前 SELinux 注册进来的回调函数(security/selinux/hooks.c),以便后者可以进行安全检查,同时内核也提供selinuxfs供用户空间进行交互(security/selinux/selinuxfs.c)。