一种基于SELinux强制访问控制的进程权限控制新技术
1相关研究
1.1 Linux访问控制机制
Llnux内核最初的安全机制主要参考了UNIX系统,随着安全需求和相关技术的发展其也在不断更新和改善。标准Linux的安全机制主要是自主访问控制机制(DAC),包括UGO机制(主要是用户/组的权限控制机制)、Linux能力机制和访问控制列表( ACL)机制。
我们可以把Linux的ACL机制看做是对UGO权限分配管理机制的改进和扩展。它使得传统的系统权限配置变得更为灵活,但其权限划分粒度依然较粗,并且不同用户访问同一客体时需花费额外的空间来存储对应的ACL列表。这种机制仍然是账户级别的访问控制,难以做到进程级别的访问控制请求。
1.2进程权限控制相关技术
随着软件开发技术的多样化和软件漏洞分析挖掘技术的提升,各种软件漏洞或系统漏洞被越来越多地挖掘出来,它们和木马病毒一起通过各种方式威胁着系统安全。为了有效控制程序的执行行为,在Linux操作系统层面也展开了研究,主要进展有SELinux、AppArmor、LIDS、Applocker等。
与标准Linux系统相比,SELinux有以下优点:1)安全性高;2)在一定程度上防止进程权限升级;3)可根据最小化特权原则实行强制访问控制策略;4)不存在特权用户root的概念;5)与标准Linux访问控制相互独立,并与现有的Linux安全机制互补。在SELinux系统中,当用户程序和系统服务中存在的安全漏洞被利用时,系统所受到的安全威胁可被有效缓解。
AppArmor是由Immunix开发,现在由Novell团队维护的一个Linux环境下的访问控制系统。系统管理员可以通过将指定程序和对应的安全配置文件关联来限制程序的访问权限。AppArmor与SELinux类似,都是加载到系统内核的安全模块,提供较细的访问控制,如限制程序读、写或指定运行哪些文件以及是否可以监听或外联指定网络端口等。A ppArmor作为标准Linux的自主访问控制机制的补充提供了一种新型的强制访问控制机制。AppArmor模块虽然能很好地限制经过配置的程序,但它基于路径来识别程序文件,一旦程序文件被替换或篡改,就可能执行一些绑有特定恶意软件的程序,系统入侵者就可以轻松旁路掉该安全模块,进而达到系统破坏或入侵的目的。
Linux下的入侵检测和防护系统(LIDS)也是基于LSM实现的安全模块。管理员可以设置进程对受保护数据的操作权限,也可通过LIDS对系统中的数据设置访问类型,控制访问主体对这些数据的操作权限等。虽然LIDS作为一种强制访问控制策略能有效保护系统的安全,但它也存在一些不足:LIDS主要实现了进程的强制保护和指定进程驱动级隐藏,但对于存在安全漏洞的程序或服务的限制能力有限,无法限制恶意软件利用问题程序实现系统提权行为。
以上3种进程权限控制技术各有优点及其特定的应用场景。本文在重点分析SELinux安全机制的基础上自主实现了针对系统服务和进程的细粒度权限控制技术,该技术能有效缓解因恶意程序利用系统服务或程序提权所带来的安全威胁。
1.3 SELinux体系结构和工作原理
SELinux是标准Linux内核的安全增强版,它不但改进了对进程的安全初始化、针对进程主体权限的访问控制,还进一步改进了对网络端口监听、网络服务外联、客体文件访问等操作的访问控制。标准的Linux内核只提供了早期的UNIX自主访问控制,以及部分地支持了POSIX.le标准草案中的能力机制,这对于面临严峻安全威胁的Linux服务器系统来说是远远不够的。随着Linux 2.6内核的更新,系统默认支持了一个通用的安全访问控制框架( Linux Security Module,LSM).SELinux安全模块通过LSM加载到系统内核,进而通过钩子函数来控制程序的执行。
基于LSM的SELinux安全模块主要实现了类型增强( Type Enforcement,TE)模型,基于角色的存取访问控制( Role-based Access Control,RBAC)模型以及可选的多级安全( Multi Layers Security,MLS)模型。所有SELinux访问控制都依赖存放在安全策略文件中的安全规则,编程人员设计和维护源代码级的策略文件(遵循策略配置语言),并利用工具将这些安全策略动态编译并下发到系统内核,形成最终策略库,供SELinux决策使用。
LSM主要是为Linux内核中的SELinux安全模块提供一套访问控制机制,是SELinux安全模块的基础。它的实现原理是在必要的访问控制点插入精心构造的钩子函数,当系统数据流经过这些钩子函数时,内核会将控制权交给已经在LSM中注册的安全控制函数,安全控制函数首先过滤出主体和客体信息,然后通过已经下发到内核的安全策略做出决策,并将决策结果反馈给内核,内核做出最终的决策,即是否放行当前经过的数据流。LSM如图1所示。
为了适应安全模型的变化,LSM作为一个通用的访问控制框架,专门设计了一种基于内核对象的数据结构,从而为安全模块的开发提供了统一的标准接口,以保证自身安全框架的通用适配性。
1.4 SELinux访问控制模型
访问控制模型是对系统访问控制功能的抽象和概括,是具体访问控制机制的设计框架。同时,访问控制模型也是设计实现安全策略的参考依据。SELinux访问控制模型默认包含TE模型(主模型)、RBAC模型(辅助模型)和MLS模型(可配置模型)。
TE模型是SELinux模块实现的主要访问控制模型。该模型既保证了机密性,又保证了完整性,并且可以适应特定的环境。TE模型根据安全等价性将主体和客体分成不同的组,每个组称为一种类型。所谓安全等价,就是对于客体而言,如果可以由同一组主体按照相同的方式进行访问,则这些客体对于TE策略来说是安全等价的,属于同一类型:对于主体而言,如果一个主体和其他主体具有相同的权限,则它们是安全等价的。
RBAC模型是一种有别于传统访问控制机制(DAC、MAC等)的新型访问控制模型。RBAC模型的基本思想是:添加角色作为用户和访问许可权限的隔离层,它直接通过操作许可和业务数据交互,安全管理员根据实际工作需要添加或删除角色。当角色被分配给指定的用户,用户与角色便被绑定起来(非一对一关系),而角色本身是直接与访问许可权限相联系的。用户与角色之间是多对多的关系,角色与访问许可权限之间也是多对多的关系。也就是说安全管理员通过给角色划分权限以及给用户指派角色来控制用户的最终权限,达到用户与访问权限的分离,从而把用户可能对系统造成的危害降到最低。
MLS模型允许用户以不同的安全级别访问目标客体。具体访问时,主体和客体都被分配指定的安全等级,根据安全等级决定主体是否有相应权限对客体进行访问。例如,安全管理员根据文件重要性对文件分配了不同的安全等级,用户自身权限也根据不同的安全需求进行了一定的划分,当且仅当用户的安全等级大于或等于文件的安全级别时,用户才被允许对文件进行指定的操作。
2进程权限控制系统设计与实现
2.1设计思想提出与分析
随着Llnux服务器系统的普及,系统服务安全问题也越来越突出,系统服务漏洞或组件类漏洞的频繁爆发对服务器安全构成重大威胁,部分高危漏洞如果被恶意利用,将轻松绕过现有服务器系统的安全防护体系。对于此类程序访问控制缺陷,特别是利用Oday漏洞的恶意程序,由于特征库或知识库具备—定的滞后性,传统的防火墙、入侵检测系统、杀毒软件都是无能为力的。要解决Linux服务器系统程序的安全问题,—方面要对程序的来源进行可信认证,设计更为科学的应用分发管理机制,做好从BIOS启动、系统加载到应用软件运行整个信任链的设计维护,另—方面要加强Linux对运行程序(进程)的细粒度控制,对进程权限进行控制的同时对它们所产生的子程序也进行控制(即解决权限继承的问题),这样才能有效解决程序和服务的安全问题。
相比传统强制访问控制技术(TE、MLS模型等)和新型访问控制模型RBAC,本文设计实现的基于SE Linux强制访问控制的进程权限控制系统(PBACS)不但能实现传统强制访问控制的安全机制不可旁路功能,还能在TE模型的基础上进一步细化对进程和服务的访问控制粒度,可对Linux系统网络服务的端口监听、端口外联、文件读写、用户目录访问等操作进行灵活控制,全面防护系统的完整性和安全性。具体防护过程如图2所示。
如图2所示,系统内运行着3个常用进程,分别是进程1、进程2和进程3。若进程2具备读写系统任意文件、开启任意端口和外联任意端口等特权(也即具备针对系统进行危险操作的权限),当进程2存在的安全漏洞被利用时,则入侵者可将进程2作为跳板.通过端口反弹(如借助Webshell等)进一步控制系统。入侵者拿到系统控制权或者进程2的特权后,就可以非法读取或篡改系统中的重要文件或系统配置数据,在非授权情况下对系统监听端口进行变更等。
当系统启用PBACS时,PBACS会根据预设安全策略来限制进程2的每一条系统访问操作,不符合安全策略的访问行为将被实时阻断,从而将进程2的最小特权限定在一个指定的安全域内,杜绝了类似于系统提权等高危安全事件的发生。
2.2系统框架设计
本文系统的设计目标是实现进程级别的访问控制,对Linux服务器系统中的服务和进程进行细粒度的强制访问控制。核心模块(进程权限控制子系统)以SELinux安全模块形式加载到系统内核,保护进程读写文件、目录,监听及外联端口等常用操作不被渗透,进而实现对漏洞利用后期各类危害的有效防御二系统框架如图3所示。
如图3所示,整个系统分为用户配置管理子系统和进程权限控制子系统两大部分。
1)用户配置管理子系统
用户配置管理子系统主要为用户提供一个可视化的操作接口,方便管理员实时配置系统安全策略。
(1)进程基本信息获取接口。实时获取当前登录系统所有进程信息列表,并实时跟踪已被保护的进程及服务(Linux系统环境下系统服务是以进程形式运行的)。
(2)用户安全策略配置接口。用户可根据当前登录系统的进程信息列表下发和维护系统保护策略。
2)进程权限控制子系统
进程权限控制子系统是整个PBACS的核心,它主要包括策略生成模块、进程行为监测模块、日志记录辅助模块、配置文件辅助模块和策略加载/卸载/更新5大功能模块,模块之间相辅相成,共同完成针对系统进程及服务的访问控制。每个模块主要功能如下:
(1)策略生成模块。判断输入约束条件或配置文件中记录的数据是否合法;分析系统配置状况;根据系统配置状况生成相应的策略源文件。
(2)进程行为监测模块。监测受保护进程的各种行为,对违反策略的行为直接予以阻断,并通过日志记录辅助模块将其记录在日志文件中。
(3)日志记录辅助模块。对违反策略的行为记录其信息,如触发策略的操作行为或事件、事件发生时间及类型等。
(4)配置文件辅助模块。记录对进程的限制条件及进程的相关状态信息以及策略相关信息,配置文件格式主要采用嵌套结构。
(5)策略加载/卸载/更新模块。主要包括策略加载、策略卸载和策略更新3个子模块。策略加载模块完成策略文件的编译、生成,并加载到内核;策略卸载模块完成从内核中卸载策略加载模块已下发到内核的自定义安全策略;策略更新模块完成策略更新、细粒度的添加以及删除进程的相应权限。
2.3核心模块实现
用户配置管理子系统主要实现系统典型服务信息获取和为用户提供安全策略配置接口,可直接调用系统API实现,故本节主要关注内核级进程权限控制子系统的实现。
2.3.1策略文件的配置
SELinux安全策略一般存于目录/etc/selinux/下,这些二进制策略文件是使SELinux生效的核心,不可变更或删除。
SELinux安全策略是动态可配置的。其中,targeted策略在标准Linux系统中默认启用。该策略模式为了不影响用户的日常使用,在使用的安全性和易用性上做了一定的折中。除了Linux系统的几个关键网络服务做了基本的安全设置以外,剩下的所有主体和客体都运行在unconfined_t域上,该域上的主客体交互没有任何额外限制。另外一个系统预设策略是strict策略,一般的Linux操作系统并没有启用该策略。strict策略规定系统中的主体和客体都必须默认指定一个域(或类型),所有域或类型的转移和交互都通过安全策略被显示地定义。因此,相比targeted策略,strlct策略对系统服务权限的控制要更为严格。
/etc/selinux/目录下的config文件主要用来控制SELinux的开启或关闭。如果SELinux被打开,SELinux提供的安全功能将处于激活状态。目前SELinux的运行模式主要有宽容/强制模式( permissive/enforcing)。当关闭SELinux时,系统将彻底失去SELinux的防护并回到标准Linux的运行状态。当SELinux处于宽容模式时,若系统中发生违背SELinux安全策略的事件,系统将实时记录违规操作并会有警告讯息,但不会实时阻断违背安全策略的行为。当SELinux处于强制模式时,可实时阻断违背安全策略的行为,同时将相关操作信息记录到日志系统中。
2.3.2策略生成模块的创建
策略生成模块包含应用程序的策略、私有和共享的资源、标识信息以及允许其他模块对这个模块进行访问的接口。这里以应用层的AnproApp模块为例说明如何创建一个策略生成模块。AnproApp模块有AnproApp.te、AnproApp.fc和AnproApp.if这3个文件,AnproApp.e含有所有的私有安全策略,AnproApp.fc含有文件标识描述,AnproApp.if含有模块的接口。系统安全策略生成流程如图4所示。
2.3.3策略的编译与加载
目录/etc/selinux/src用来存放策略源代码,用环境变量$SELINUX_POLICY_SRC表示。策略源代码含有Makefile文件,该文件主要阐述了如何使用工具checkpolicy和m4来编译系统安全策略。通过执行相应make命令开始二进制策略编译,主要make命令用法如下。
1) policy:编译策略配置语言;2)install:编译并安装策略配置;3)load:编译、安装、装载策略配置;4)relabel:重标识文件系统;5)reload:编译、安装、强制装载/再装载策略配置;6)clean:删除临时文件。
策略源文件(二进制策略)被存放在/etc/selinux/policy/目录下用m4宏预处理后的总体策略文件主要是policy.conf,最终的二进制文件以policy.[ver]的形式存储。新编译的二进制策略被安装为/etc/selinux/policy/targeted/p olicy.<version>,形式如policy.10,重启机器,新的策略就能起作用了。
2.3.4关键数据结构实现
为了实现对系统服务的细粒度访问控制,通过设计char*类型的capabilities参数来控制特定进程对文件读写、端口监听、端口外联等的操作,通过设计char*类型的process参数指定受保护的目标进程,通过设计DefaultDirsdefaultdirs参数来指定受保护的进程所允许访问的目录,通过设计char*类型的in_tcp_ports参数来指定当前进程正在监听的端口等。具体数据结构如下所示:
2.3.5策略生成模块实现
整个进程权限控制子系统的核心安全策略均是由策略生成模块负责实现。无论是策略生成模块还是进程行为监测模块,都依赖于系统下发的安全策略。只有正确解析处理系统管理员下发的安全策略,才能一致性地完成系统预期防护功能。策略生成模块核心算法如下:
3系统测试与结果分析
利用前面设计的进程权限控制工具对PBACS进行功能、性能及兼容性和安全渗透测试,并根据测试结果和同类访问控制工具或系统模块进行比较,进一步验证PBACS的有效性和先进性。
3.1功能测试
3.1.1测试内容
1) Linux系统文件的读/写能力
实例:服务sewrite读取路径/home/isng/test2/te下的文件,被PBACS拦截。
预期结果:sewrite无法读取文件,终端不显示任何信息。
控制失效:进程能顺利访问文件,在终端上显示“readfile xxx”。
2)目标进程监听指定端口的能力
实例:启动服务se3d监听不属于自己被授权范围的8001端口,被PBACS拦截。
预期结果:se3d监听8001端口被拒绝,相关日志被记录。
控制失效:se3d开启8001端口监听功能。
3)目标进程外联指定端口的能力
实例:启动服务se3d外联不属于自己被授权范围的8887端口,被PBACS阻断。
预期结果:se3d外联8887端口被拒绝,相关日志被记录。
控制失效:se3d成功与8887建立连接。
3.1.2测试数据与结果分析
这里通过执行非法端口外联操作来测试PBACS针对系统服务的端口外联(端口反弹)行为控制的有效性。以受保护服务se3d访问8887端口为例进行相关测试,测试结果如图5~图7所示。
由图5可知,服务se3d外联指定端口8887被系统拒绝,符合系统安全策略的设定。
由图6可知,通过日志记录辅助模块捕获的信息表明:PID为7589的进程尝试外联端口8887被拒绝。
由图7可知,远程服务器8887端口一直处于被监听状态,并未接收到来自PID为7589的进程的外联连接请求。
以上测试结果表明,PBACS实现了其基本功能,能够很好地对系统主客体进行读、写等访问控制,并能对系统服务或进程的端口监听、端口外联、用户目录访问等操作进行控制,有效提升目标服务器系统的安全性。
3.2性能及兼容性测试
3.2.1系统性能测试
PBACS主要包括用户配置管理子系统和进程权限控制子系统,也就是既包含了用户态模块,也包含了内核模块。为了检测PBACS系统的运行性能及其对系统效率的影响,本文在CentOS 6.5(64位)的x86 PC机上对Linux的常用命令(如pwd、Is、insmod、ps等)进行了运行PBACS前后时间耗费上的对比,实验结果见表1。从表1可知,PBACS的运行对于系统的执行效率影响较小,系统命令的执行时间延迟影响一般不超过7%。
3.2.2系统兼容性
PBACS的进程权限控制子系统的主要功能是通过内核SELinux安全模块来实现的,由于内核模块一般对系统内核版本有一定的要求,故针对PBACS的兼容性测试十分必要。测试方法主要是在不同版本(内核不同)的Linux系统上,重复测试系统的功能模块。由于服务器系统对性能有较高要求,故选择x64系统作为主要测试平台。
测试结果表明,PBACS可以很好支持Linux主流服务器系统的不同版本,具体结果如表2所示(Y表示支持):
3.3安全性分析
本实验对Linux系统平台的几种主流访问控制技术分别从核心模块加载形式、工作原理、实现难度和防护效果4个维度来分析它们各自的优缺点。分析结果如表3所示。
从表3可以看出,仅PBACS和AppArmor完全支持进程级别的细粒度访问控制,且技术实现都不算复杂,也都遵循LSM框架。但AppArmor安全机制存在一定的隐患,通过修改文件名可使原先的安全配置文件不再起作用。相比于AppArmor目前仅被Ubuntu这个主打桌面用户的发行厂商支持,SELinux获得了Redhat、CentOS等主流服务器发行厂商的默认支持,可更方便地部署实施,同时兼容性相对传统内核级HOOK技术更为稳定。
4结束语
本文提出了基于SELinux强制访问控制的进程权限控制系统( PBACS),可对系统内的文件、进程及服务等进行细粒度的访问权限控制,实现r对Llnux系统网络服务的端口监听、端口外联、文件读写、用户目录访问等操作的灵活控制,在一定程度上提升了Linux系统的安全性。本文仍有进一步的工作要做:针对系统关键服务的强制保护,如禁止核心进程被非法终止和指定进程的内核级隐藏等;安全威胁(非法事件)的实时报警等。为了加强对未知恶意应用特定行为(如Oday漏洞利用等)的查杀,在现有Linux安全机制的基础上还要加深对沙箱技术的研究。
5摘要:针对云主机常用的Linux服务器系统屡屡出现因为常用服务或进程的自身漏洞被利用而导致系统控制权轻易丢失的问题,文章提出了一种基于SELinux强制访问控制的进程权限控制系统( PBACS),可对系统内的文件、进程及服务等进行细粒度的访问权限控制,能有效缓解由于常见系统服务漏洞导致的安全威胁,具有较高的安全性和先进性。文章对PBACS进行了全面的功能测试和性能测试,测试结果表明PBACS完全达到了设计要求,可以在系统进程层面提供更细的访问控制颗粒度。该方案能够广泛应用到云主机环境下Linux服务器系统的安全加固场景中。
上一篇:关于重组人鼠嵌合抗CD20单克隆抗体免疫原性检测方法的研究
下一篇:返回列表