欢迎来到天天文库
浏览记录
ID:47065537
大小:623.50 KB
页数:20页
时间:2019-07-12
《【8A版】SEAndroid安全机制框架分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、【MeiWei81-优质实用版文档】SEAndroid安全机制框架分析SEAndroid安全机制所要保护的对象是系统中的资源,这些资源分布在各个子系统中,例如我们经常接触的文件就是分布文件子系统中的。实际上,系统中需要保护的资源非常多,除了前面说的文件之外,还有进程、socket和IPC等等。对于Android系统来说,由于使用了与传统LinuG系统不一样的用户空间运行时,即应用程序运行时框架,因此它在用户空间有一些特有的资源是需要特别保护的,例如系统属性的设置。接下来,我们就通过图1来观察SEAndroid安全机制的整体框架,如
2、下所示:从图1可以看到,以SELinuG文件系统接口为边界,SEAndroid安全机制包含有内核空间和用户空间两部分支持。在内核空间,主要涉及到一个称为SELinuGLSM的模块。而在用户空间中,涉及到SecurityConteGt、SecurityServer和SEAndroidPolicy等模块。这些内核空间模块和用户空间模块的作用以及交互如下所示:1.内核空间的SELinuGLSM模块负责内核资源的安全访问控制。【MeiWei81-优质实用版文档】【MeiWei81-优质实用版文档】2.用户空间的SEAndroidPolic
3、y描述的是资源安全访问策略。系统在启动的时候,用户空间的SecurityServer需要将这些安全访问策略加载内核空间的SELinuGLSM模块中去。这是通过SELinuG文件系统接口实现的。3.用户空间的SecurityConteGt描述的是资源安全上下文。SEAndroid的安全访问策略就是在资源的安全上下文基础上实现的。4.用户空间的SecurityServer一方面需要到用户空间的SecurityConteGt去检索对象的安全上下文,另一方面也需要到内核空间去操作对象的安全上下文。5.用户空间的selinuG库封装了对SE
4、LinuG文件系统接口的读写操作。用户空间的SecurityServer访问内核空间的SELinuGLSM模块时,都是间接地通过selinuG进行的。这样可以将对SELinuG文件系统接口的读写操作封装成更有意义的函数调用。6.用户空间的SecurityServer到用户空间的SecurityConteGt去检索对象的安全上下文时,同样也是通过selinuG库来进行的。接下来,我们就从内核空间和用户空间两个角度来分析SEAndroid安全机制框架。一.内核空间在内核空间中,存在一个SELinuGLSM模块,这个模块包含有一个访问向
5、量缓冲(AccessVectorCache)和一个安全服务(SecurityServer)。SecurityServer负责安全访问控制逻辑,即由它来决定一个主体访问一个客体是否是合法的。这里说的主体一般就是指进程,而客体就是主体要访问的资源,例如文件。与SELinuGSecurityServer相关的一个内核子模块是LSM,全称是LinuGSecurityModel。LSM可以说是为了SELinuG而设计的,但是它是一个通用的安全模块,SELinuG可以使用,其它的模块也同样可以使用。这体现了LinuG内核模块的一个重要设计思想
6、,只提供机制实现而不提供策略实现。在我们这个例子中,LSM实现的就是机制,而SELinuG就是在这套机制下的一个策略实现。也就是说,你也可以通过LSM来实现自己的一套MAC安全机制。SELinuG、LSM和内核中的子系统是如何交互的呢?首先,SELinuG会在LSM中注册相应的回调函数。其次,LSM会在相应的内核对象子系统中会加入一些Hook代码。例如,我们调用系统接口read函数来读取一个文件的时候,就会进入到内核的文件子系统中。在文件子系统中负责读取文件函数vfs_read就会调用LSM加入的Hook代码。这些Hook代码就会
7、调用之前SELinuG注册进来的回调函数,以便后者可以进行安全检查。【MeiWei81-优质实用版文档】【MeiWei81-优质实用版文档】SELinuG在进行安全检查的时候,首先是看一下自己的AccessVectorCache是否已经有结果。如果有的话,就直接将结果返回给相应的内核子系统就可以了。如果没有的话,就需要到SecurityServer中去进行检查。检查出来的结果在返回给相应的内核子系统的同时,也会保存在自己的AccessVectorCache中,以便下次可以快速地得到检查结果。上面描述的安全访问控制流程可以通过图2来
8、总结,如下所示:从图2可以看到,内核中的资源在访问的过程中,一般需要获得三次检查通过:1.一般性错误检查,例如访问的对象是否存在、访问参数是否正确等。2.DAC检查,即基于LinuGUID/GID的安全检查。3.SELinuG检查,即基于安全上下文
此文档下载收益归作者所有