内核安全检测方法、装置、设备及存储介质与流程

专利2022-06-29  47


本发明涉及内核安全领域,特别是涉及一种内核安全检测方法、装置、设备及存储介质。



背景技术:

近年来,linux系统应用范围不断扩大,现已广泛应用于服务器、桌面以及嵌入式设备等领域,随着linux系统在全世界范围内的普及与使用,系统的安全问题也日益受到关注。

目前攻击者主要是通过内核漏洞获取高于自身的权限,然后利用此权限对系统执行进一步的危害以达到其目的。现有的内核保护方案主要是将内核cred结构体分为只读和可写两部分分别保护,但内核进程结构体中保存着cred结构体的指针(而不是结构体本身),虽然对cred关键数据形成了只读保护,但若进程结构体中cred的指针被修改,则可绕过该方案。

因此,需要一种更为有效的内核安全检测方案。



技术实现要素:

本发明的一个目的在于提供一种更为有效的内核安全检测方法、装置、设备及存储介质,以增强内核安全。

根据本发明的第一个方面,提供了一种内核安全检测方法,包括:响应于系统调用,对与进程权限相关的至少部分数据进行检测;以及根据检测结果,判断进程的权限是否被恶意修改。

可选地,至少部分数据包括以下至少一项:进程可访问的地址空间;组id;用户id;有效用户id;能力;安全上下文。

可选地,响应于系统调用对与进程权限相关的至少部分数据进行检测的步骤包括:在由用户态模式进入内核态模式,且在内核处理函数调用前,对与进程权限相关的至少部分数据进行检测;并且/或者在内核处理函数内部插入权限检查模块,以对与进程权限相关的至少部分数据进行检测;并且/或者在内核处理函数调用后,对与进程权限相关的至少部分数据进行检测。

可选地,对与进程权限相关的至少部分数据进行检测的步骤包括:将与进程权限相关的至少部分数据与预先生成的检测集中的相应部分进行比较,以确定至少部分数据是否被恶意修改。

可选地,检测集是基于安全方式对与进程权限相关的至少部分数据进行修改后得到的白名单,或者检测集是对基于安全方式对与进程权限相关的至少部分数据进行修改后得到的数据,分别进行哈希计算得到的哈希表。

可选地,安全方式为调用标准接口函数。

可选地,该方法还包括:在判定进程的权限被恶意修改的情况下,结束进程或者使系统崩溃。

根据本发明的第二个方面,还提供了一种内核安全检测装置,包括:检测模块,用于响应于系统调用,对与进程权限相关的至少部分数据进行检测;和判断模块,用于根据检测结果,判断进程的权限是否被恶意修改。

可选地,至少部分数据包括以下至少一项:进程可访问的地址空间;组id;用户id;有效用户id;能力;安全上下文。

可选地,检测模块在由用户态模式进入内核态模式,且在内核处理函数调用前,对与进程权限相关的至少部分数据进行检测;并且/或者检测模块在内核处理函数内部插入权限检查模块,以对与进程权限相关的至少部分数据进行检测;并且/或者检测模块在内核处理函数调用后,对与进程权限相关的至少部分数据进行检测。

可选地,检测模块将与进程权限相关的至少部分数据与预先生成的检测集中的相应部分进行比较,以确定至少部分数据是否被恶意修改。

可选地,检测集是基于安全方式对与进程权限相关的至少部分数据进行修改后得到的白名单,或者检测集是对基于安全方式对与进程权限相关的至少部分数据进行修改后得到的数据,分别进行哈希计算得到的哈希表。

可选地,安全方式为调用标准接口函数。

可选地,该装置还包括提权处理模块,用于在检测到存在被恶意修改的字段的情况下,结束进程或者使系统崩溃。

根据本发明的第三个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行如本发明第一个方面述及的方法。

根据本发明的第四个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行如本发明第一个方面述及的方法。

本发明会在攻击者对系统执行进一步操作时检测其权限是否合法,使得攻击者即使获取到高于自身的权限也很难对内核形成根本的危害,从而可以一定程度上提升内核漏洞攻击的难度,降低内核漏洞攻击的成功率。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1示出了内存地址空间的一种示意图。

图2是示出了根据本发明一实施例的内核安全检查方法的示意性流程图。

图3是示出了根据本发明一实施例的内核安全检测装置的结构的示意性方框图。

图4示出了根据本发明一实施例可用于实现上述内核安全检测方法的数据处理的计算设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

【术语解释】

内核提权:利用内核漏洞为进程获取高于系统指定权限的攻击方法。

内核结构体:每个进程在内核均有一个task_struct结构体的实例对应,在内核看来,此结构体即代表此进程。

cred结构体:每个进程的内核结构体中都有两个cred结构体指针,cred结构体内记录了当前进程作为主/客体的身份与权限,包括uid、gid、euid、capability、安全上下文等。

uid为userid,即用户id,用来标识每个用户的唯一标示符。

gid为groupid,即组id,用来标识用户组的唯一标识符。

euid为有效用户id,表示进程对于文件和资源的访问权限。

capability:能力,从2.1版开始,linux内核有了能力(capability)的概念,它打破了unix/linux操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作。

addr_limit:进程可访问的地址空间。

在操作系统(如linux操作系统)中,代码执行模式通常至少包括两种:用户态模式和内核态模式,内核态模式拥有高于用户态模式的权限。在操作系统中,内存的虚拟地址空间通常也被分为用户态地址空间和内核态地址空间两部分。通常用户态地址空间在低地址空间,内核态地址空间在高地址空间,硬件单元mmu及页表保证用户态模式只能访问用户态地址空间,内核态模式可以访问用户态及内核态地址空间。以4g内存,3:1模式为例,内存地址空间可以表示为图1所示。

系统调用是内核提供给用户态进程的访问接口,内核态的代码、数据存在于内核态地址空间,由于用户态不能访问内核态地址空间,用户态进程与系统的所有交互,如命令执行、文件访问最终又均需通过内核态处理,所以操作系统提供系统调用作为用户态与内核态的接口,用户态可以通过一条指令(如arm的swi指令)将当前状态转换为内核态,但此时硬件会保证,之后的指令流程一定是从指定的内核态代码入口开始执行的,内核态代码入口根据用户态传入的不同系统调用号调用相应的内核代码,并最终将结果返回给用户态,此过程即称为系统调用。

【方案概述】

攻击者通过内核漏洞获取高于自身的权限后会利用此权限对系统执行进一步的危害以达到其目的,通常攻击者获取高于自身的权限并不是对系统造成危害的根源,凭借此权限的额外操作才是造成系统危害的根源所在。而用户态与系统的所有交互,如命令执行、文件访问等均需通过系统调用来实现,攻击者在获取高权限后若不调用系统调用,则无法对系统造成实质性的危害。

基于此原理,本发明提出,可以在系统调用过程中,对进程权限相关的至少部分数据结构(如可以包括并不限于:addr_limit、uid/gid/euid,capability,安全上下文等)进行检查,确保攻击者即使获取了高于自身的权限,也很难实现对进程关键数据结构的修改。

本发明提出的内核安全检测方案,不能阻止攻击者通过内核漏洞来获取高于自身的权限,但会在攻击者对系统执行进一步操作时检测其权限是否合法,使得攻击者即使获取到高于自身的权限也很难对内核形成根本的危害,从而可以在一定程度上提升了内核漏洞攻击的难度,降低内核漏洞攻击的成功率。

【内核安检检测方法】

图2是示出了根据本发明一实施例的内核安全检查方法的示意性流程图。其中,图2所示的方法可以用于检测linux操作系统(或者类似linux操作系统的其他操作系统)环境下运行的进程的权限是否被恶意修改,即内核提权。

参见图2,在步骤s210,响应于系统调用,对与进程权限相关的至少部分数据进行检测。

以linux内核为例,内核提权方式如下:攻击者通过内核漏洞修改进程的关键字段addr_limit,从而获取内核态基于页表的虚拟地址任意读写权限;攻击者通过内核漏洞修改进程的关键字段uid/euid/gid,从而改变自身的身份为高权限用户(如root);攻击者通过内核漏洞修改进程的关键字段capability,从而改变自身的cap权限;攻击者通过内核漏洞修改进程的关键字段安全上下文,从而绕过selinux的强制访问控制。

因此,与进程权限相关的至少部分数据可以包括但不限于进程可访问的地址空间(addr_limit)、组id(gid)、用户id(uid)、有效用户id(euid)、能力(capability)、安全上下文等进程关键字段。

作为示例,可以在由用户态进入内核态,且在内核处理函数调用前,对与进程权限相关的至少部分数据进行检测;并且/或者也可以在内核处理函数内部插入权限检查模块,以对与进程权限相关的至少部分数据进行检测法;并且/或者还可以在内核处理函数调用后,对与进程权限相关的至少部分数据进行检测。并且,在不同阶段所检测的与进程权限相关的至少部分数据可以相同,也可以不同。

在对与进程权限相关的至少部分数据进行检测时,可以将数据与预先生成的检测集中的相应部分进行比较,以确定与进程权限相关的至少部分数据的权限是否合法。

例如,检测集可以是之前基于安全方式对与进程权限相关的至少部分数据进行修改后得到的白名单。另外,检测集也可以是对之前基于安全方式对与进程权限相关的至少部分数据进行修改后得到的数据,分别进行哈希计算得到的哈希表。其中,安全方式为调用标准接口函数。

在步骤s220,根据检测结果,判断进程的权限是否被恶意修改,也即提权。

可以在检测到存在权限不合法的字段情况下,判定进程的权限被恶意修改,即内核提权。并且,在判定进程的权限被恶意修改的情况下,可以结束进程或者使系统崩溃,来主动阻止攻击者对系统的进一步的破坏。

应用例

以linux系统为例,系统调用的基本流程可描述如下。

1.用户态执行swi指令进入内核态模式,并从执行特定地址开始执行(这里可以称之为系统调用入口函数syscall_entry,在arm中实际上是vector_swi)。

2.syscall_entry中通过用户态传入的系统调用号(syscallnumber),系统调用表决定要调用的内核函数地址,并调用相应的内核处理函数。

3.内核处理函数执行完毕返回syscall_entry。

4.syscall_entry将结果写入寄存器,并最终通过一条跳转执行(如arm的bx)返回到用户态的下一条指令,同时切换当前为用户态模式。

根据系统调用的执行流程,本发明可以在步骤2(系统调用入口),或步骤3(内核函数调用中)或步骤4(系统调用返回前)插入代码,对与进程权限相关的关键数据结构进行检查,插入后的流程可描述如下。

1.用户态执行swi指令进入内核态模式,并从执行特定地址开始执行(这里称之为syscall_entry,在arm中实际上是vector_swi)。

2.具体函数调用前的权限检查。

3.syscall_entry中通过用户态传入的系统调用号(syscallnumber),系统调用表决定要调用的内核函数地址,并调用相应的内核处理函数。

4.对关键内核处理函数内部插入权限检查模块,执行完毕返回syscall_entry。

5.具体函数调用后的权限检查。

6.syscall_entry将结果写入寄存器,并最终通过一条跳转执行(如arm的bx)返回到用户态的下一条指令,同时切换当前为用户态模式。

步骤2、4、5中检查的内容可以包括但不限于addr_limit是否正确、进程的uid/gid/euid是否正确、进程的capability是否正确、进程的安全上下文是否正确。其中,对于addr_limit,返回用户态时应有一个固定的值(在部分系统中为0xbf000000),若在syscall检测中发现非此固定值,则可认为存在攻击。uid/gid/euid、capability、安全上下文等均是与进程相关的,可利用hash表,或白名单等手段在内核生成一个检测集,在系统调用入口、返回时根据进程结构体地址找到对应的检测集,并检测与预期是否相符。

综上,本发明可以在系统调用入口对与进程权限相关的关键数据结构进行检查,也可以在系统调用返回时对与进程权限相关的关键数据结构进行检查,或者在关键的内核函数中(对于addr_limit来说如sys_read/sys_write等)对与进程权限相关的关键数据结构进行检查。若检测到当前进程的以上关键字段,若与预期值不符,则代表攻击者权限过高,从而结束进程或使系统崩溃来主动阻止攻击者对系统的进一步的破坏。其中,检查内容可以包括但不限于addr_limit、uid/gid/euid,capability、安全上下文等等。

【内核安全检测装置】

图3是示出了根据本发明一实施例的内核安全检测装置的结构的示意性方框图。其中,内核安全检测装置的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图3所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

内核安全检测装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。

参见图3,内核安全检测装置300包括检测模块310和判断模块320。检测模块310用于响应于系统调用,对与进程权限相关的至少部分数据进行检测,判断模块320用于根据检测结果,判断进程的权限是否被恶意修改。其中,与进程权限相关的至少部分数据可以包括以下至少一项:进程可访问的地址空间;组id;用户id;有效用户id;能力;安全上下文。

在本发明中,检测模块310可以在由用户态模式进入内核态模式,且在内核处理函数调用前,对与进程权限相关的至少部分数据进行检测;并且/或者检测模块310也可以在内核处理函数内部插入权限检查模块,以对与进程权限相关的至少部分数据进行检测;并且/或者检测模块310也可以在内核处理函数调用后,对与进程权限相关的至少部分数据进行检测。

作为示例,检测模块310可以将与进程权限相关的至少部分数据与预先生成的检测集中的相应部分进行比较,以确定至少部分数据是否被恶意修改。其中,检测集可以是基于安全方式对与进程权限相关的至少部分数据进行修改后得到的白名单,或者检测集也可以是对基于安全方式对与进程权限相关的至少部分数据进行修改后得到的数据,分别进行哈希计算得到的哈希表。其中,安全方式为调用标准接口函数。

作为示例,内核安全检测装置300还可以包括提权处理模块(图中未示出),用于在检测到存在被恶意修改的字段的情况下,结束进程或者使系统崩溃,以主动阻止攻击者对系统的进一步的破坏。

【计算设备】

图4示出了根据本发明一实施例可用于实现上述内核安全检测方法的数据处理的计算设备的结构示意图。

参见图4,计算设备400包括存储器410和处理器420。

处理器420可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器420可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。在一些实施例中,处理器420可以使用定制的电路实现,例如特定用途集成电路(asic,applicationspecificintegratedcircuit)或者现场可编程逻辑门阵列(fpga,fieldprogrammablegatearrays)。

存储器410可以包括各种类型的存储单元,例如系统内存、只读存储器(rom),和永久存储装置。其中,rom可以存储处理器420或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器410可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(dram,sram,sdram,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器410可以包括可读和/或写的可移除的存储设备,例如激光唱片(cd)、只读数字多功能光盘(例如dvd-rom,双层dvd-rom)、只读蓝光光盘、超密度光盘、闪存卡(例如sd卡、minsd卡、micro-sd卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。

存储器410上存储有可执行代码,当可执行代码被处理器420处理时,可以使处理器420执行上文述及的内核安全检测方法。

上文中已经参考附图详细描述了根据本发明的内核安全检测方法、装置及设备。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。


技术特征:

1.一种内核安全检测方法,其特征在于,包括:

响应于系统调用,对与进程权限相关的至少部分数据进行检测;以及

根据检测结果,判断进程的权限是否被恶意修改。

2.根据权利要求1所述的内核安全检测方法,其特征在于,所述至少部分数据包括以下至少一项:

进程可访问的地址空间;

组id;

用户id;

有效用户id;

能力;

安全上下文。

3.根据权利要求1所述的内核安全检测方法,其特征在于,所述响应于系统调用对与进程权限相关的至少部分数据进行检测的步骤包括:

在由用户态模式进入内核态模式,且在内核处理函数调用前,对与进程权限相关的至少部分数据进行检测;并且/或者

在内核处理函数内部插入权限检查模块,以对与进程权限相关的至少部分数据进行检测;并且/或者

在内核处理函数调用后,对与进程权限相关的至少部分数据进行检测。

4.根据权利要求1所述的内核安全检测方法,其特征在于,所述对与进程权限相关的至少部分数据进行检测的步骤包括:

将与进程权限相关的至少部分数据与预先生成的检测集中的相应部分进行比较,以确定所述至少部分数据是否被恶意修改。

5.根据权利要求4所述的内核安全检测方法,其特征在于,

所述检测集是基于安全方式对与进程权限相关的至少部分数据进行修改后得到的白名单,或者

所述检测集是对基于安全方式对与进程权限相关的至少部分数据进行修改后得到的数据,分别进行哈希计算得到的哈希表。

6.根据权利要求5所述的内核安全检测方法,其特征在于,

所述安全方式为调用标准接口函数。

7.根据权利要求1所述的内核安全检测方法,其特征在于,还包括:

在判定进程的权限被恶意修改的情况下,结束进程或者使系统崩溃。

8.一种内核安全检测装置,其特征在于,包括:

检测模块,用于响应于系统调用,对与进程权限相关的至少部分数据进行检测;和

判断模块,用于根据检测结果,判断进程的权限是否被恶意修改。

9.一种计算设备,包括:

处理器;以及

存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1-7中任何一项所述的方法。

10.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至7中任一项所述的方法。

技术总结
本发明提出了一种内核安全检测方法、装置、设备及存储介质。响应于系统调用,对与进程权限相关的至少部分数据进行检测;以及根据检测结果,判断进程的权限是否被恶意修改。通过在攻击者对系统执行进一步操作时检测其权限是否合法,使得攻击者即使获取到高于自身的权限也很难对内核形成根本的危害,从而可以一定程度上提升内核漏洞攻击的难度,降低内核漏洞攻击的成功率。

技术研发人员:李丹;许来光;裘绍翔
受保护的技术使用者:阿里巴巴集团控股有限公司
技术研发日:2018.12.03
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-22156.html

最新回复(0)