本发明专利技术公开了一种基于安全标记随机化的操作系统强制访问控制方法,步骤包括:预先构建核内外安全标记映射表;将安全管理员配置的安全标记作为外部标识,在核内随机化生成对应的内部标识,将内部标识、外部标识的对应关系添加至核内外安全标记映射表,并将内部标识作为安全属性赋予给核内各类对象,基于内部标识建立内核访问控制规则库;在操作系统运行过程中,当主体对象访问客体对象时,获取对象的内部标识并根据内核访问控制规则库判断是否具有访问权限并控制主体对象对客体对象的访问。本发明专利技术能够有效抵御攻击者利用内核提权漏洞修改内核空间进程安全属性的攻击方式,具有安全性高、可靠性好、性能损失低、对用户透明、适用范围广的优点。
【技术实现步骤摘要】
本专利技术涉及Linux操作系统安全领域,具体涉及一种针对Linux内核级提权攻击进行防御的基于安全标记随机化的操作系统强制访问控制方法。
技术介绍
随着Linux操作系统的应用范围越来越广,系统的安全问题也日益受到关注。其中,系统的用户权限管理决定了系统中各类主体对系统资源的访问权限,成为Linux系统安全的重要基础之一。在Linux系统中,用户一般分为系统管理员用户root与普通用户两个级别。普通用户仅拥有与用户应用相关的权限,而系统管理员则可以对系统范围内的所有资源进行访问与管理。由于系统管理员具有“至高无上”的权限,因此一旦恶意攻击者具有了 root权限,就可以访问系统的所有资源。此外在系统管理过程中也必须避免系统管理员的权限滥用问题。操作系统的强制访问控制机制打破了 root用户的特权,在操作系统内部根据不同的访问控制安全策略对系统中各类对象之间的访问控制行为进行控制管理。在这样的系统中,即使进程的属主为root,其所有行为也必须同时满足强制访问控制机制的要求才能够在系统中被允许发生。典型的强制访问控制策略有保护数据机密性及完整性的BLP/BIBA策略、实现最小特权的Capability策略、基于安全域隔离的SELinux策略等等。在Linux操作系统中,为了简化强制访问控制机制的开发,并且支持多种强制访问控制策略的灵活扩展,系统中实现了 LSM强制访问控制框架,实现了强制访问控制的通用框架,并向安全策略开发人员提供Hook函数,支持以模块的形式来开发个性化的访问控制策略。目前,在Linux系统中已经列入内核主线的强制访问控制模块有SELinux、AppArmor、SMACK等等。在具有强制访问控制的Linux操作系统中,即使攻击者将进程的ID修改为root,也并不能在系统中为所欲为,必须通过强制访问控制机制的访问权限决策,违反安全策略的访问行为都会被拒绝。具体实现时,Linux强制访问控制机制为系统中的每一个主、客体对象关联一个安全属性,并且预先规定各类安全属性之间的访问控制规则。当系统中发生主体对客体的访问时,强制访问控制机制将首先获取主、客体的安全属性,然后根据系统已有的访问控制规则配置,判断这次访问是否可以继续进行。通常情况下,Linux强制访问控制机制的主要结构如附图1所示,主要包括位于内核层的对象管理模块、访问许可决策模块、访问规则配置模块,以及位于用户层的核外安全配置管理模块。这些模块的主要作用分别为: 籲对象管理模块,对象管理模块主要负责管理操作系统中的各类主体与客体对象,包括进程、文件、socket等等,为系统中的每一个新生成的对象都维持一个安全属性,以供访问控制决策时使用。籲访问规则配置模块。访问规则配置模块主要保存系统的安全管理员对操作系统中所有安全策略配置,包括系统存在的各类主体、客体的安全属性,以及各不同安全属性的主客体之间发生访问时的许可规则。.访问控制决策模块。访问控制决策模块在系统中发生访问行为时,分别获取当次访问所涉及的主体与客体的安全属性,并且查询访问规则配置模块,查看在当前的规则配置下,这样的访问是否允许发生。如果不被配置规则允许,就拒绝该次访问操作。?核外安全配置管理模块。核外安全配置管理模块主要在用户层提供对安全策略的配置接口,以及对安全策略配置在文件系统中进行保存等等。然而,随着运行在系统更高级别的内核态提权漏洞攻击方法的出现,攻击者不仅可以篡改进程的用户ID,还可以篡改进程的安全属性。下面,以内核提权漏洞CVE-2013-2094为例,介绍进彳丁利用内核提权漏洞进彳丁包括安全属性在内的提权攻击典型攻击流程: 第一步:利用内核存在的边界条件错误漏洞,将内核空间的函数指针修改为指向用户空间的shellcode代码。在存在该漏洞的内核中,在kernel/events/core, c中的perf_swevent_init函数使用不正确的整数数据类型,允许本地用户通过特制的perf_event_open系统调用来提升权限。第二步:在shellcode代码中实现将内核空间存储的进程权限信息篡改为特权进程。在进程的内核栈中,保存进程权限信息的thread_inf0结构总是存放在内核栈的底部。因此攻击者可以根据内核栈中某一变量的地址获取内核栈基址,从而获取进程task_struct在内存中的位置,并进一步获取进程cred在内存中的位置,直接修改对应内存位置存储的数据。步骤包括:(1)获取进程task_strUCt在内存中位置。通过将内核栈中某一变量地址的低13位清零,获取内核栈基址。在内核栈基址位置存储着指向进程task_strUCt的指针,从而获取进程task_strUCt在内存中位置。(2)获取进程cred在内存中位置。根据进程task_struct结构的特点,即进程cred和进程real_cred指针一般指向同一进程cred,并且根据用户、组信息可以准确获得进程cred在内存中位置。(3)修改进程cred中权限信息。进程cred中存有进程的用户、组信息以及Capabilities等与权限相关的信息,根据cred结构就可以直接修改相关数据。将对应的用户ID和组ID修改0,即root用户/组ID,将Capabilities修改为全1。(4)如果系统启动了强制访问控制安全策略,在cred结构中找到指向的保存进程安全属性的task_security_struct安全结构的指针,进而获取task_security_struct结构的内存地址,根据需要将安全上下文修改为目标安全上下文。第三步:利用CVE-2013-2094内核提权漏洞,获取具有root权限shell。通过第二步当前进程已经拥有了所需的系统管理权限,调用execl( “/bin/bash”,”-sh”,NULL)获取与系统进行交互的shell,该shell继承当前进程的权限。通过上述实例可以看出,由于被入侵的进程在内核态运行、具有更高的运行级别,因此可以直接对内核中的关键数据结构进行修改,从而攻击者可以对在内核空间中存储的进程权限进行任意改变,不仅改变进程的用户ID、组ID等信息,并且可以根据需要对进程的强制访问控制安全属性也进行修改,绕过系统中强制访问控制安全机制的检查。而基于强制访问控制的防御方法,由于Linux系统中各类安全策略下的主、客体安全属性定义在系统编译时就已经确定,攻击者可以很容易就确定需要的目标安全属性并将进程属性篡改为目标值,导致访问控制机制的失效。综上所述,强制访问控制机制使用进程的安全属性来代替用户ID来作为进程权限的标识,对传统的修改用户ID的提权攻击具有缓解作用。但是目前已经有攻击方法可以进一步修改进程的安全属性,攻击者可以以此获取想要的系统特权。因此,研究对系统的特权进程安全标记的保护措施,让攻击者无法获取特权进程的安全属性,进而保护系统重要资源的安全具有重要的现实意义。
技术实现思路
本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种能够有效抵御攻击者利用内核提权漏洞修改内核空间进程安全属性的攻击方式,安全性高、可靠性好、性能损失低、对用户透明、适用范围广的基于安全标记随机化的操作系统强制访问控制方法。为了解决上述技术问题,本专利技术采用的技术方本文档来自技高网...
【技术保护点】
一种基于安全标记随机化的操作系统强制访问控制方法,其特征在于步骤包括:1)预先在操作系统的强制访问控制机制中构建用于记录安全标记的内部标识、外部标识之间对应关系的核内外安全标记映射表;2)将保存在核外的安全管理员对操作系统中各类对象配置的安全标记作为外部标识,在操作系统运行时在核内随机化生成该安全标记对应的内部标识,将安全标记的内部标识、外部标识之间的对应关系添加至核内外安全标记映射表,并将内部标识作为安全属性赋予给核内各类对象,基于内部标识建立强制访问控制机制的内核访问控制规则库;3)在操作系统运行过程中,当任一主体对象访问客体对象时,获取主体与客体对象的内部标识,根据内部标识查询内核访问控制规则库判断该主体对象是否具有对该客体对象的访问权限,如果有对该客体对象的访问权限,则允许本次主体对象访问客体对象,否则拒绝本次主体对象访问客体对象。
【技术特征摘要】
【专利技术属性】
技术研发人员:丁滟,魏立峰,左玉丹,吴庆波,戴华东,谭郁松,黄辰林,董攀,
申请(专利权)人:中国人民解放军国防科学技术大学,
类型:发明
国别省市:湖南;43
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。