APP下载

一种基于SELinux扩展的OVERLAYFS文件安全访问加固机制研究

2022-08-24陈大文

无线互联科技 2022年12期
关键词:安全策略算力镜像

陈大文

(江苏金盾检测技术股份有限公司,江苏 南京 210000)

1 背景概述

联合文件系统(UnionFS)[1]是Linux操作系统中的一种新型文件系统,在架构上是一种层次化的、轻量级的文件系统。联合文件系统通过对不同镜像的文件系统层层挂载与叠加,最终将不同镜像的文件目录挂载至同一个虚拟文件系统,向用户展示一个统一的文件系统视图。联合文件系统是现代容器技术的基础,DOCKER容器的架构如图1所示。

图1 Docker文件系统模型

1.1 DOCKER的文件系统

(1)系统最底层的是Bootfs。在这个文件系统中包含Linux系统的引导加载程序以及Linux的内核。Docker镜像中作为一般使用的是宿主机的Bootfs。

(2)基于Bootfs的是Base Image层,该层是Docker镜像的根文件系统,又称基础镜像,基于不同LINUX系统的Docker镜像使用的根文件系统是不一样的。

(3)在Base Image层之上是Docker File中通过命令自下向上层层叠加的各种镜像层,包括可执行文件、数据等。位于层次上方的镜像层同名目录会与下方镜像层的同名目录合并,而上方镜像的同名文件会隐藏覆盖下方的同名文件。

(4)最上层是容器层,与其他镜像层不同的是容器层可以改写,其他镜像层的文件如果在执行过程中需要改写数据或文件,则采用copy-on-write (写时拷贝)机制,将目标文件拷贝到容器层改写。因联合文件系统的特性,改写后新生成的文件将覆盖底层不可改写镜像中的文件。

当容器启动时,依赖联合文件系统实现各镜像层的数据、文件统一映射与整合,最终形成位顶层的容器层。由上述的架构可见,联合文件系统是容器技术[2]的核心基础。通过联合文件系统的层叠式架构实现高度离散灵活的容器构建途径以及不同镜像层文件的共享。联合文件系统作为一种新型的虚拟文件系统,目前的主流有AUFS,OVERLAYFS[3]等,其中OVERLA-YFS已发展到二代,相对于AUFS速度更快,实现也较为更简单。

1.2 算力网络

容器的高度灵活性、轻便性给新型计算模型的发展带来各种新的可能。算力网络[4-5]就是其中一种,在未来大规模高速网络的支持下,算力网络将实现端、边、中心三位一体的算力调度,尽可能将算力按需分配,这其中容器的可调度性、迁移性对算力网络计算模式的支撑是必不可少的。但是依托容器迁移实现算力调度的模式仍然存在严重问题,限制着算力网络计算模式发展。容器在算力网络调度迁移过程中,用户失去了对容器中数据以及相关程序文件执行的控制权。显然,在用户对数据与软件的控制得不到保护之前,算力网络的大规模发展必然会受到阻碍。

由此,本文提出一种新型的OVERLAYFS文件加固机制,该机制主要包括两方面内容,一是引入信任构建机制,通过该机制实现对平台、容器各镜像层文件拥有方的信任关系。二是扩展Linux系统中现有的SELinux[6-7]安全机制,通过在SELinux机制中加入新型安全执行机制来与现有的宿主机系统对接,构建信任关系以及执行安全策略。基于加固机制构建的容器镜像层对算力平台的信任关系,并通过受信的算力平台执行安全策略以保护镜像层数据和文件的权限,解决了算力网络计算执行模式带来的安全问题。

2 基于SELinux的扩展实现信任关系的构建

2.1 SELinux及其扩展

安全增强型(Security-Enhanced Linux,SELinux)在LINUX2.6以及以上版本中,作为一种功能全面的 LSM(Linux Security Module)安全模块,集成在Linux内核。SELinux基于LSM框架[8],实现Linux 安全模块对访问内核对象的行为实施访问控制。SELinux的组成架构主要由3部分组成。

(1)安全服务器:安全服务器是SELinux 的核心,主要功能是对确定内核文件的安全标记和访问策略。其中最重要的是配置的安全策略。

(2)SELinux的文件系统:向安全服务器提供接口,支持安全服务器的安全策略文件读入,SELinux中安全策略文件是二进制,由安全服务器提供数据结构存储安全策略。

(3)访问向量缓存:这是SELinux与LSM框架钩子之间的一个缓存机构,主要用以提升SELinux的执行效率,在访问控制实施前查询相关的策略与执行方法,有则直接从缓存中取出,没有则查询安全服务器。

由于集成进入Linux内核的主线,各宿主机Linux系统对SELinux具有广泛的支持性。而且SELinux执行灵活且严格MAC安全访问控制机制,对容器的信任关系模型构建有良好的支持,本文选用SELinux作为本文安全加固机制的系统集成点,集成到现有主流的Linux系统。

SELinux对系统内主体和客体对象的访问控制是通过双方的安全属性即安全上下文实现。针对进程或文件数据,SELinux中定义的安全上下文本质上可分成两类,包括进程安全上下文和文件安全上下文,一个进程安全上下文可以对应多个文件安全上下文。在SELinux安全服务器中只有进程安全上下文与文件安全上下文对应,才可执行安全策略相应的动作。

在SELinux中,安全上下文的定义包括4个字段,分别是用户(User)、角色(Role)、类型(Type)和级别(Level)。根据上述SELinux的架构与安全上下文的定义,本文机制对SELinux的扩展主要包括如下4个方面。

(1)用户:对于进程安全上下文扩展新的用户,以platform_trusted_u为标识,表示受信任平台上创建的进程;对文件安全上下文扩展新的用户,同样以platform_trusted_u为标识表示受信任平台可使用的文件数据。

(2)角色:对进程安全上下文扩展新的角色,以platform_trusted_r为标识,表示受信任平台上创建的进程;对于文件安全上下文扩展新的角色,以platform_object _r为标识表示受信任平台可使用的文件数据。

(3)类型:本文机制新增了一个platform trusted类型,该类型代表本文OVERLAYFS安全加固政策,其中包括多项可扩展的规则,与第4个部分的LSM框架的安全回调钩子对接,以便在OVERLAYFS文件系统构建与挂载镜像层文件时触发执行。

(4)安全规则执行的LSM回调模块:该模块主要用于执行定义platform trusted类型的安全规则,包括文件访问许可规则、网络端口许可规则等。

2.2 算力平台受信关系模型及其构建机制

由于算力网络的算力调度执行模式,容器的执行可能在不同平台进行,加上5G的C-RAN等软件定义网络的形式,容器运行的环境处于一种动态变化的状态,因此造成上文所述的安全性问题。在这种模式下必须构建完备的信任关系,才可能实现容器整体的安全构建以及不同平台的迁移执行。由容器的OVERLAYFS文件系统及其运行模式可知,容器运行至少需要构建以下各方的信任关系。

(1)各镜像层文件所有者之间的信任关系:由于OVERLAYFS文件系统可由多个镜像层通过层叠而成的,而各镜像层具有不同的来源,镜像层中包括各类型的可执行文件、数据文件等。因此,必须建立各镜像层所有者之间的关系,整个容器才可能由OVERLAYFS文件系统建构完成。

(2)各镜像层文件所有者与算力平台之间的信任关系:由于容器是在多个平台之间进行自调度和执行,最终的安全策略由平台在容器执行过程中实施,因此容器本身必须对其所在的执行平台之间形成信任关系,以保证容器的安全执行。

因此,为了确保容器以及容器中各镜像层的文件数据执行安全,必须构建一个多方参与的信任关系模型,本文的安全加固机制基于该模型形成容器执行过程中多方的信任关系。本文所提出的信任关系模型的基本组成部分是信任元。其中信任元是五元组结构:

其中:

(1)user即用户,其定义为platform_trusted_u的进程安全上下文与文件安全上下文,除了platform_trusted_u,还有unconfined_u角色,这个角色来自SELinux,表示不管制的进程以及来自镜像层用户自定义地表明自己身份的角色。

(2)role即角色,其定义为platform_trusted_r,除此之外,还有unconfined_r表示不管制的进程,object_r表示文件安全上下文。

(3)type定义为固定的上文所述的platform_trusted类型,用以触发本文OVERLAYFS安全加固政策。

(4)action定义为对role的操作动作包括各文件类型的访问操作以及网络操作。

(5)transitive是本文新增用于构建信任关系网络的标识符,表示该信任元是否接收信任关系传递。如不接收,则必须由信任元指定的user才能对role执行type中相应的动作。

在本文信任关系模型中,transitive相对于原生的SELinux框架进行扩展。由于算力平台担任信任关系建立的核心,OVERLAYFS中各镜像层的用户难以在容器构建与运行前双方建立点对点的信任关系。因此,在算力网络的计算模式下只能依托算力平台作为中间的信任代理构建间接的信任关系。为此,本文的信任元中引入tranistive标识符来控制信任关系的传递。

基于上述的信任关系模型及信任元,本文提出的基于信任关系模型的构建算法如下所述。

step1:分别从当前进程的安全上下文中获得进程拥有的信任元,从该信任元中获得用户信息即user,同时从当前进程访问的对象获得信任元,提取出信任元中指定的Role参数以及action参数。

step2:若对象信任元中指定的user为unconfined_u则进行step5,否则进入step3。

step3:若当前进程信任元的user参数为platform_trusted,则进入step5,原因是容器在构建之前要建立与算力平台的双方对等信任关系,即意味着镜像层中文件对平台开放。因此,若当前进程来自platform_trusted用户,即可执行相应操作;如果user参数不为platform_trusted,则进入step4。

step4:查看对象信任元中 transitive操作是否许可,若是则执行step5,因为许可表明该对象允许信任传递,而平台与每个镜像用户在容器构建之前已经建立有信任关系。因此,平台作为信任中介实现双方的信任传递。若否,则执行step6。

step5:查看对象信任元中的action操作与当前进程的操作是否一致,如果一致,则返回SELinux的执行许可;若否,则执行step6。

step6:拒绝当前进程对访问对象的操作,并返回。

上述算法部署在SELinux的安全服务器及容器的执行过程中,算法中所述的进程与文件的信任元则会缓存在SELinux的访问向量缓存中,以提高SELinux的执行效率。同时本文所述的platform_trusted类型及其相关的执行规则需要先行注册到平台的LSM框架中以备调用。

3 基于加固机制实现的OVERLAYFS系统文件系统构建流程

为了支持上述算力平台信任关系模型,还需要定义镜像层的结构以及建立镜像层用户与平台之间对等的信任关系。镜像层是由镜像用户生成的文件包,文件包由两个文件组成,第1部分是镜像层文件的安全策略说明,该安全策略说明文件主要包括3部分:

(1)镜像层与信任相关的属性说明,包括镜像层的标识符、镜像层的来源、指定的信任平台以及镜像层的MD5数据摘要等。

(2)镜像层文件的信任元集合,对镜像层中不需要安全访问控制的文件,信任元可以采用默认方式,即不设置,则容器在构建过程中对这些文件的安全上下文设置为用户unconfined_u,角色为object_r。对需要设置安全访问控制的文件由上述的信任元五元素逐一说明。

(3)最后是对安全策略说明文件的用户签名以保证安全策略文件的完整性。

第2个部分是镜像层文件系统压缩包,该压缩包使用用户生成的密钥进行压缩与加密。本文所述的加固OVERLAYFS系统文件构建与现有OVERLAYFS系统流程一致,区别在挂载容器任一镜像层时,需分成以下步骤进行。

(1)首先读取镜像层文件的安全策略说明文件,根据安全策略说明文件中说明的镜像层用户信息,校验说明文件的完整。

(2)校验无误后完成,平台开始与镜像层用户建立信任关系,由平台层发送申请包括镜像层标识、平台身份认证信息,用户返回认证确认结果,建立平台与用户的信任关系。用户在建立信任关系后,将返回镜像层文件的解密密钥。

(3)平台层在接收到解密密钥后,解密镜像层加密压缩的文件包,同时依据安全策略文件中说明的文件信任元,赋予解密后的各文件。

(4)平台层调用OVERLAYFS文件系统,将解密后的镜像层文件层叠挂载到系统。

由上述加固OVERLAYFS文件系统构建过程可知,在OVERLAYFS文件系统完成构建前,平台已经与各镜像层用户建立基础的信任关系。一旦加固OVERLAYFS系统文件构建完成则系统中文件,包括由可执行文件创建的进程都会被SELinux机构赋予不同的信任元,从而依据本文信任关系模型完成对加固OVERLAYFS文件系统中各类文件的安全访问控制。

4 结语

由于未来算力网络中容器会在边缘、端点以及中心不同的位置迁移执行,因此容器的执行平台与环境会出现不确定状态,从而带来容器中文件安全访问控制的新问题。本文针对该问题,提出一种针对OVERLAYFS文件系统的安全访问控制加固机制。该机制中最核心的是信任关系模型的构建,依据信任元的定义,信任关系模型的构建和信任关系的传递性质实现。通过信任关系建立不同平台,不同镜像层用户之间的整合的信任网络,从而基于信任构建起统一的联合文件系统。完成在容器动态迁移以及镜像层文件共享等复杂情况下的联合文件系统安全访问控制。此外,此机制加固了主流联合文件系统:OVERLAYFS文件系统,同时利用目前Linux主线中常用的安全模块,SELinux访问控制模块以及LSM框架,具有较高的适用性与前瞻性。

猜你喜欢

安全策略算力镜像
基于网络5.0的重叠网形态算力网络
基于认知负荷理论的叉车安全策略分析
卫星通信在算力网络中的应用研究
基于SiteAI算力终端的交通态势感知系统
镜像
基于飞行疲劳角度探究民航飞行员飞行安全策略
镜像
浅析涉密信息系统安全策略
镜像
如何加强农村食盐消费安全策略