操作系统安全标签(Security Labels)
-
基本概念
操作系统安全标签是附着于操作系统内受保护客体(如文件、进程、套接字、设备)和主体(如用户、进程)之上的一种元数据。它通常以“键-值”对的形式存在,用于定义该对象的安全属性或分类。安全标签的核心作用是为强制访问控制(MAC)系统提供决策依据。与自主访问控制(DAC,如文件权限rwx)不同,安全标签所控制的访问不由对象所有者决定,而是由系统安全策略集中、强制性地强制执行。 -
标签的组成与结构
一个安全标签通常包含两部分信息:敏感度级别和类别集合。- 敏感度级别:是一个分层的等级,例如“公开”、“内部”、“秘密”、“绝密”。它定义了信息保密的程度,级别高的可以读取级别低的数据(向下读),反之则被禁止(向上读)。
- 类别集合:是一个非分层的、横向的划分,用于表示信息的所属领域或项目,例如“财务部”、“研发A项目”、“欧洲业务”。要访问带有某类别的对象,主体必须被赋予相应的类别权限。
例如,一个文件的标签可能是[秘密, {研发A, 财务部}],这意味着只有同时具有“秘密”或更高敏感度级别,并且同时拥有“研发A”和“财务部”两个类别权限的主体才能访问它。
-
工作原理与流程
当系统中一个主体(如进程)尝试访问一个客体(如文件)时,强制访问控制机制(如SELinux、AppArmor的某些策略)会被触发:
a. 标签查询:系统安全子系统(如Linux的LSM框架)会读取发起请求的进程的安全标签和欲访问对象的安全标签。
b. 策略裁决:系统根据预先定义的安全策略(通常是一套复杂的规则库),比对主体标签和客体标签。策略规则会明确规定何种标签组合允许何种操作(如读、写、执行)。
c. 强制执行:根据策略裁决结果,内核级的安全模块直接允许或拒绝此次访问,该决定无法被普通用户或进程绕过。 -
主要实现模型
安全标签是实现经典强制访问控制模型的技术载体,最主要的有两种:- 贝尔-拉帕杜拉模型:专注于保密性。其核心规则是“不上读/不下写”:主体不能读取高于其安全级别的客体(防止泄密),也不能向低于其安全级别的客体写入数据(防止高密信息流向低密区域)。
- 比巴模型:专注于完整性。其核心规则是“不下读/不上写”:主体不能读取低于其完整性级别的客体(防止被低完整性数据污染),也不能向高于其完整性级别的客体写入数据(防止低完整性代码破坏高完整性系统组件)。
-
在主流操作系统中的应用实例
- SELinux:在Linux中,SELinux是强制访问控制的典型实现。它为所有进程和文件对象都打上安全标签(称为“上下文”),其标签格式通常为
用户:角色:类型:敏感度级别。访问控制决策主要基于“类型”和“敏感度级别”进行。 - Windows 强制完整性控制:Windows Vista及之后版本引入了强制完整性控制,为进程和对象(如文件、注册表键)分配完整性级别标签,如“低”、“中”、“高”、“系统”。它主要实施类似比巴模型的完整性保护,例如,一个“低”完整性的进程无法向“高”完整性的文件写入数据。
- 多级安全系统:在一些对保密性要求极高的专用系统中,安全标签会严格实施贝尔-拉帕杜拉模型,确保信息在不同密级间严格隔离。
- SELinux:在Linux中,SELinux是强制访问控制的典型实现。它为所有进程和文件对象都打上安全标签(称为“上下文”),其标签格式通常为
-
优势与挑战
- 优势:提供了细粒度、基于信息流的安全控制;能够有效防止特权滥用和权限提升攻击;为系统提供了深度防御层。
- 挑战:策略配置复杂,管理成本高;错误的策略配置可能导致系统功能故障或出现安全盲点;需要与应用程序良好配合才能发挥最大效力。