Linux强制访问控制机制模块代码分析报告(一)

  总体描述

  概述

  强制访问控制机制是访问控制机制的一种,主要用于根据主体和客体的安全属性来限制主体对客体的访问,从而对系统的安全进行防护,该机制是强加给主体的,当主体对客体进行访问时,系统强制要求其必须满足强制访问控制策略,其原理如图1-1所示。对于强制访问控制机制,有多种模型可以用来描述其功能,其中最具代表性的就是Bell-LaPadula模型(简称BLP模型)及Biba模型,本文主要针对BLP模型进行介绍,并在其基础之上对SELinux实现的多级安全策略(MLS,Multi-level Security)从源码上进行分析。

  

  涉及到的源码范围说明

  本文以SELinux为例来分析MLS的实现,因此其涉及到的源码文件包括:

  security/selinux/ss/context.h:定义了SELinux使用的安全上下文及安全上下文相关操作。

  security/selinux/ss/mls_types.h:定义了MLS使用的安全级别及安全级别之间的关系。

  security/selinux/ss/mls.c:声明了MLS相关操作。

  security/selinux/ss/mls.c:实现了MLS相关操作。

  技术方案及原理

  BLP模型

  BLP模型是一个请求驱动的状态机模型,它在某一状态接受请求,然后对其处理并输出决策结果,最后进入下一状态[1],主要用于解决机密性相关问题。在该模型中,其先为系统中的主体和客体分配相应的安全级别,当主体对客体进行访问时,根据事先分配给它们的安全级别及相应的特性来判断是否允许主体访问相应的客体。安全级别由敏感级别和类别集合两部分组成,其中敏感级别是有序的,类别集合是无序的。根据敏感级别和类别集合,在BLP模型中,安全级别之间的关系分为三种:支配关系,相等关系和不相交关系。假设有两个安全级别A,B:

  1.支配关系:当安全级别A的敏感级别大于B的敏感级别,且A的类别集合包含B的类别集合时,称安全级别A支配安全级别B。

  2.相等关系:当安全级别A的敏感级别等于B的敏感级别,且A的类别集合等于B的类别集合时,称安全级别A和安全级别B相等。

  3.不相交关系:当安全级别A和安全级别B的类别集合不相交时,称安全级别A和安全级别B不相交。

  在BLP模型中定义了三个特性:简单安全特性、星号特性和自主安全特性。假设用l(s)表示主体的安全级别,l(o)表示客体的安全级别,>表示安全级别之间的支配关系,=表示安全级别之间的相等关系,则:

  1.简单安全特性:当且仅当l(s)>=l(o)时,主体能够读取客体的内容。

  2.星号特性:当且仅当l(o)>=l(s)时,主体可以写客体。

  3.自主安全特性:当且进行相应的访问权限在访问控制矩阵中时,主体才允许访问客体。

  BLP模型的安全策略包括强制访问控制策略和自主访问控制策略两部分。对于上述三个特性,其中简单安全特性和星号特性组成了强制访问控制策略,即多级安全策略MLS,其通过安全级别来强制约束主体对客体的访问,并且信息只能由低安全级别流向高安全级别;自主安全特性组成了自主访问控制策略,其通过访问控制矩阵来限制主体对客体的访问。对于一个实现BLP模型的系统,某个时刻系统所处的状态是安全的当且仅当该状态可以到达的所有的状态都满足简单安全特性、星号特性和自主安全特性。

声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
推荐阅读