首页> 中国专利> 一种防御内核漏洞提权的方法、系统、设备和存储介质

一种防御内核漏洞提权的方法、系统、设备和存储介质

摘要

本发明提出了一种防御内核漏洞提权的方法、系统、设备和存储介质,该方法包括:遍历系统中正在运行的非特权进程,并将非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中;如果监控到第一程序执行内核级系统调用,和或如果监控到第二程序访问系统资源,则获取第一对应表中对应进程的身份信息和用户身份信息;根据对应进程的用户身份信息判断对应进程在第一对应表程序是否存在,如果存在,则阻止执行相应操作和终止相应的运行程序。基于该方法,还提出一种防御内核漏洞提权的系统、设备和存储介质。本发明有效防御通过内核提权漏洞实施的提权攻击,运行中的操作系统可以抵御已知、未知的内核漏洞提权攻击。

著录项

  • 公开/公告号CN113868663A

    专利类型发明专利

  • 公开/公告日2021-12-31

    原文格式PDF

  • 申请/专利权人 苏州浪潮智能科技有限公司;

    申请/专利号CN202111000035.1

  • 发明设计人 崔士伟;

    申请日2021-08-30

  • 分类号G06F21/57(20130101);

  • 代理机构37105 济南诚智商标专利事务所有限公司;

  • 代理人李修杰

  • 地址 215100 江苏省苏州市吴中区吴中经济开发区郭巷街道官浦路1号9幢

  • 入库时间 2023-06-19 13:29:16

说明书

技术领域

本发明属于网络安全技术领域,特别涉及一种防御内核漏洞提权的方法、系统、设备和存储介质。

背景技术

Linux区分两类进程:特权进程,即其有效用户标识为0,也就是超级用户root和非特权进程,即其有效用户标识为非零。特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证,通常为有效UID,有效GID和补充组列表进行完全权限检查。一般来说黑客通过一些web服务的漏洞攻击进入系统后只能获取到低权限的shell,因为Nginx、httpd等这些服务为了安全都不会以root用户启动。而黑客为了达到进一步控制系统的目的,通常需要将当前的权限提高为root的权限,提取的方法有很多种,比如利用系统配置的不合理提权、利用suid程序漏洞提权、利用内核漏洞提权等,其中利用内核漏洞提权的方式最常见。Linux内核每年都会暴露出大量的本地提权漏洞,现在的解决方式是在漏洞被爆出后等待Linux内核社区推出修复补丁,然后通过升级内核或者livepatch的方式进行解决。通过打补丁的方式修复内核提权漏洞存在一定的滞后性,并且也无法防御0day内核提权漏洞,从而对正在运行的Linux系统造成安全隐患。

利用内核漏洞提权的一般步骤为:第一,攻击者已获取到低权限的shell。第二,运行漏洞利用程序,将漏洞利用程序的UID篡改为0(root的UID为0,具有特权),UID的篡改方法根据利用的提权漏洞不同而略有不同,比如经典内核漏洞提权方法为通过应用层构造commit_creds(prepare_kernel_cred(0))函数并进入内核空间修改当前程序的UID为0。第三,一般来说攻击者为了持续获取root权限会在漏洞利用程序中执行bash命令从而获取到具有root权限。由于内核提权漏洞层出不穷,并且提权方法也各种各样。在现有技术中还没有阻止提权成功后进一步对系统进行破坏的方法。

发明内容

为了解决上述技术问题,本发明提出了一种防御内核漏洞提权的方法、系统、设备和存储介质,有效防御通过内核提权漏洞实施的提权攻击,运行中的Linux操作系统可以抵御已知、未知的内核漏洞提权攻击。

为实现上述目的,本发明采用以下技术方案:

一种防御内核漏洞提权的方法,包括以下步骤:

遍历系统中正在运行的非特权进程,并将所述非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中;

如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;

和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。

进一步的,所述遍历系统中正在运行的非特权进程,并将所述非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中还包括:

当监控至第一进程时,在所述第一对应表中增加第一进程身份信息和用户身份信息的对应关系记录;所述第一进程为新建的非特权进程;

当监控至第二进程时,在所述第一对应表中删除第二进程身份信息和用户身份信息的对应关系记录;所述第二进程为退出的非特权进程。

进一步的,所述遍历系统中正在运行的非特权进程,并将所述非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中还包括:

当监控到第三进程时,在所述第一对应表中删除第三进程身份信息和用户身份信息的对应关系记录;所述第三进程为通过合法重新设置有效用户识别码转换为特权进程的非特权进程;

当监控到第四进程时,在所述第一对应表中新增第四进程身份信息和用户身份信息的对应关系记录;所述第四进程为通过合法重新设置有效用户识别码转换为非特权进程的特权进程。

进一步的,所述第一程序执行内核级系统调用具体包括:第一程序调用execve函数运行具有根权限的变量。

进一步的,所述如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序具体包括:

拦截第一程序调用execve函数,获取第一进程的身份信息和用户身份信息;如果第一进程的用户身份信息为0,则根据第一进程的身份信息在所述第一对应表中对应的真实用户身份信息;

如果在第一对应表中查找到第一进程,禁止execve函数运行,并终止第一进程。

进一步的,所述在执行监控第二程序访问系统资源之前,还包括配置禁止第二程序访问的系统资源策略。

进一步的,所述如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源具体包括:

拦截文件的访问操作,当拦截到文件的访问操作时,获取第一对应表中第二进程的身份信息和用户身份信息;如果第二进程的用户身份信息为0,则根据第二进程的身份信息在所述第一对应表中对应的真实用户身份信息。

根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止文件的访问操作,并终止第二进程。

本发明还提出了一种防御内核漏洞提权的系统,包括遍历模块和防御模块;

所述遍历模块用于遍历系统中正在运行的非特权进程,并将所述非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中;

所述防御模块用于如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。

本发明还提出了一种设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现所述的方法步骤。

本发明还提出了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的方法步骤。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

本发明提出了一种防御内核漏洞提权的方法、系统、设备和存储介质,该方法包括以下步骤:遍历系统中正在运行的非特权进程,并将非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中;如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。基于一种防御内核漏洞提权的方法,还包括一种防御内核漏洞提权的系统、设备和存储介质。本发明并不阻止内核提权的这个行为,而是阻止提权成功后进一步对系统进行破坏,可以有效防御通过内核提权漏洞实施的提权攻击,运行中的Linux操作系统可以抵御已知、未知的内核漏洞提权攻击。

附图说明

如图1为本发明实施例1一种防御内核漏洞提权的方法流程图;

如图2为本发明实施例2一种防御内核漏洞提权的系统示意图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

实施例1

本发明实施例1提出了一种防御内核漏洞提权的方法,由于内核提权漏洞层出不穷,并且提权方法也各种各样,所以本发明并不阻止内核提权的这个行为,而是阻止提权成功后进一步对系统进行破坏。

如图1为本发明实施例1一种防御内核漏洞提权的方法流程图;

在步骤S101中,遍历系统中正在运行的非特权进程,并将非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中。

遍历系统中所有正在运行的非特权进程,并将非特权进程的PID和UID按照对应关系保存到对应表中,对应表记录了正常情况下一个非特权进程对应的UID。

如下示例:

PID UID

1000--------->500

1001--------->500

1002--------->501

当监控至第一进程时,在第一对应表中增加第一进程身份信息和用户身份信息的对应关系记录;第一进程为新建的非特权进程;即当监控到新建一个非特权进程时,比如普通用户进程调用execve运行一个进程时,在对应表中新增一条PID和UID的对应关系。

当监控至第二进程时,在第一对应表中删除第二进程身份信息和用户身份信息的对应关系记录;第二进程为退出的非特权进程;当监控到一个非特权进程退出时,在对应表中删除相应的项。

当监控到第三进程时,在第一对应表中删除第三进程身份信息和用户身份信息的对应关系记录;第三进程为通过合法重新设置有效用户识别码转换为特权进程的非特权进程;即当监控到非特权进程通过合法seteuid等调用转换为特权进程时,比如Linux系统下suid机制和Capabilities机制都可以做到,因为此时非特权进程已经转换为特权进程,所以从对应表中删除掉该进程。

当监控到第四进程时,在第一对应表中新增第四进程身份信息和用户身份信息的对应关系记录;第四进程为通过合法重新设置有效用户识别码转换为非特权进程的特权进程。即当监控到一个特权进程调用seteuid(seteuid()用来重新设置执行目前进程的有效用户识别码)等转换为非特权进程时,比如root用户执行su命令切换为普通用户,在对应表中新增一条PID和UID的对应关系。

通过上述操作将保存一份系统中正在运行的非特权进程的PID和UID对应关系表,漏洞利用程序可以利用内核提权漏洞修改程序的UID,但并不能修改本发明维护的PID和UID对应表。所以后续我们可以在这个对应表中查找到进程提权之前的UID。

现在举例进行说明步骤S101实现的过程,本发明保护的范围不局限于示例。

现在有一个对外提供服务的进程A,它由非特权用户运行,进程A的UID为500,PID为1000,所以在初始化时在对应表中将存在一项:PID:1000-->UID:500。

假设进程A被黑客攻击并因此运行了一个shell进程B,进程B的UID也将会是500,在对应表中将新增一项:PID:1001-->UID:500,此时黑客拿到的shell进程B是一个非特权的shell并不能访问系统的关键资源。

黑客为了获取root权限运行漏洞利用程序,该程序刚运行时UID也是500,我们监控到之后在对应表中新增一项:PID:1002-->UID:500,漏洞利用程序继续运行并利用某个内核提权漏洞将漏洞利用程序的UID提升为0,此时内核中PID:1002的UID为0,但在我们维护的对应表中仍为PID:1002-->UID:500。

在步骤S102中,如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;

和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。

攻击者为了持续获取root权限一般都会在利用内核漏洞提权时调用execve运行一个具有root权限的bash,即调用execve运行一个具有根权限的变量。针对该情况的攻击方式,提权检测的方法为:

拦截第一程序调用execve函数,获取第一进程的身份信息和用户身份信息;如果第一进程的用户身份信息为0,则根据第一进程的身份信息在所述第一对应表中对应的真实用户身份信息;

如果在第一对应表中查找到第一进程,禁止execve函数运行,并终止第一进程。

在检测到特权进程在访问系统的重要资源时,比如尝试修改/etc/passwd文件时,针对该情况的攻击方式,提权检测的方法为:

拦截文件的访问操作,当拦截到文件的访问操作时,获取第一对应表中第二进程的身份信息和用户身份信息;如果第二进程的用户身份信息为0,则根据第二进程的身份信息在所述第一对应表中对应的真实用户身份信息

根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止文件的访问操作,并终止第二进程。

即:根据系统环境设置需要保护的策略,比如防止提权程序修改/etc/passwd、防止提权程序篡改重要的目录、防止提权程序修改程序的suid位、防止提权程序修改程序的Capabilities属性等。

拦截文件的访问操作,包括文件的读写、删除、重命名、属性修改、Capabilities设置等操作(可以通过系统调用的替换或者LSM HOOK实现),当拦截到文件的访问操作时,获取当前进程的PID/UID,如果当前进程为特权进程即UID等于0,则根据PID在对应表中查找该进程对应的真实UID。

如果在对应表中查找到当前进程,表示当前进程通过内核提权漏洞进行过提权,此时将禁止文件的访问操作,并且终止当前进程。

本发明针对不同的攻击方式,提出了不同的防御方法,可以有效防御通过内核提权漏洞实施的提权攻击,运行中的Linux操作系统可以抵御已知、未知的内核漏洞提权攻击。

实施例2

基于本发明实施例1提出的一种防御内核漏洞提权的方法,本发明实施例2还提出了一种防御内核漏洞提权的系统,该系统包括遍历模块和防御模块;

遍历模块用于遍历系统中正在运行的非特权进程,并将非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中;

防御模块用于如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。

本发明中遍历模块实现的过程为:遍历系统中所有正在运行的非特权进程,并将非特权进程的PID和UID按照对应关系保存到对应表中,对应表记录了正常情况下一个非特权进程对应的UID。

当监控至第一进程时,在第一对应表中增加第一进程身份信息和用户身份信息的对应关系记录;第一进程为新建的非特权进程;即当监控到新建一个非特权进程时,比如普通用户进程调用execve运行一个进程时,在对应表中新增一条PID和UID的对应关系。

当监控至第二进程时,在第一对应表中删除第二进程身份信息和用户身份信息的对应关系记录;第二进程为退出的非特权进程;当监控到一个非特权进程退出时,在对应表中删除相应的项。

当监控到第三进程时,在第一对应表中删除第三进程身份信息和用户身份信息的对应关系记录;第三进程为通过合法重新设置有效用户识别码转换为特权进程的非特权进程;即当监控到非特权进程通过合法seteuid等调用转换为特权进程时,比如Linux系统下suid机制和Capabilities机制都可以做到,因为此时非特权进程已经转换为特权进程,所以从对应表中删除掉该进程。

当监控到第四进程时,在第一对应表中新增第四进程身份信息和用户身份信息的对应关系记录;第四进程为通过合法重新设置有效用户识别码转换为非特权进程的特权进程。即当监控到一个特权进程调用seteuid(seteuid()用来重新设置执行目前进程的有效用户识别码)等转换为非特权进程时,比如root用户执行su命令切换为普通用户,在对应表中新增一条PID和UID的对应关系。

通过上述操作将保存一份系统中正在运行的非特权进程的PID和UID对应关系表,漏洞利用程序可以利用内核提权漏洞修改程序的UID,但并不能修改本发明维护的PID和UID对应表。所以后续我们可以在这个对应表中查找到进程提权之前的UID。

防御模块实现的过程为:攻击者为了持续获取root权限一般都会在利用内核漏洞提权时调用execve运行一个具有root权限的bash,即调用execve运行一个具有根权限的变量。针对该情况的攻击方式,提权检测的方法为:

拦截第一程序调用execve函数,获取第一进程的身份信息和用户身份信息;如果第一进程的用户身份信息为0,则根据第一进程的身份信息在所述第一对应表中对应的真实用户身份信息;

如果在第一对应表中查找到第一进程,禁止execve函数运行,并终止第一进程。

在检测到特权进程在访问系统的重要资源时,比如尝试修改/etc/passwd文件时,针对该情况的攻击方式,提权检测的方法为:

拦截文件的访问操作,当拦截到文件的访问操作时,获取第一对应表中第二进程的身份信息和用户身份信息;如果第二进程的用户身份信息为0,则根据第二进程的身份信息在所述第一对应表中对应的真实用户身份信息

根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止文件的访问操作,并终止第二进程。

即:根据系统环境设置需要保护的策略,比如防止提权程序修改/etc/passwd、防止提权程序篡改重要的目录、防止提权程序修改程序的suid位、防止提权程序修改程序的Capabilities属性等。

拦截文件的访问操作,包括文件的读写、删除、重命名、属性修改、Capabilities设置等操作(可以通过系统调用的替换或者LSM HOOK实现),当拦截到文件的访问操作时,获取当前进程的PID/UID,如果当前进程为特权进程即UID等于0,则根据PID在对应表中查找该进程对应的真实UID。

如果在对应表中查找到当前进程,表示当前进程通过内核提权漏洞进行过提权,此时将禁止文件的访问操作,并且终止当前进程。

本发明针对不同的攻击方式,提出了不同的防御方法,可以有效防御通过内核提权漏洞实施的提权攻击,运行中的Linux操作系统可以抵御已知、未知的内核漏洞提权攻击。

实施例3

本发明还提出了一种设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现方法步骤如下:

如图1为本发明实施例1一种防御内核漏洞提权的方法流程图;

在步骤S101,遍历系统中正在运行的非特权进程,并将非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中。

遍历系统中所有正在运行的非特权进程,并将非特权进程的PID和UID按照对应关系保存到对应表中,对应表记录了正常情况下一个非特权进程对应的UID。

当监控至第一进程时,在第一对应表中增加第一进程身份信息和用户身份信息的对应关系记录;第一进程为新建的非特权进程;即当监控到新建一个非特权进程时,比如普通用户进程调用execve运行一个进程时,在对应表中新增一条PID和UID的对应关系。

当监控至第二进程时,在第一对应表中删除第二进程身份信息和用户身份信息的对应关系记录;第二进程为退出的非特权进程;当监控到一个非特权进程退出时,在对应表中删除相应的项。

当监控到第三进程时,在第一对应表中删除第三进程身份信息和用户身份信息的对应关系记录;第三进程为通过合法重新设置有效用户识别码转换为特权进程的非特权进程;即当监控到非特权进程通过合法seteuid等调用转换为特权进程时,比如Linux系统下suid机制和Capabilities机制都可以做到,因为此时非特权进程已经转换为特权进程,所以从对应表中删除掉该进程。

当监控到第四进程时,在第一对应表中新增第四进程身份信息和用户身份信息的对应关系记录;第四进程为通过合法重新设置有效用户识别码转换为非特权进程的特权进程。即当监控到一个特权进程调用seteuid(seteuid()用来重新设置执行目前进程的有效用户识别码)等转换为非特权进程时,比如root用户执行su命令切换为普通用户,在对应表中新增一条PID和UID的对应关系。

通过上述操作将保存一份系统中正在运行的非特权进程的PID和UID对应关系表,漏洞利用程序可以利用内核提权漏洞修改程序的UID,但并不能修改本发明维护的PID和UID对应表。所以后续我们可以在这个对应表中查找到进程提权之前的UID。

在步骤S102中,如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;

和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。

攻击者为了持续获取root权限一般都会在利用内核漏洞提权时调用execve运行一个具有root权限的bash,即调用execve运行一个具有根权限的变量。针对该情况的攻击方式,提权检测的方法为:

拦截第一程序调用execve函数,获取第一进程的身份信息和用户身份信息;如果第一进程的用户身份信息为0,则根据第一进程的身份信息在所述第一对应表中对应的真实用户身份信息;

如果在第一对应表中查找到第一进程,禁止execve函数运行,并终止第一进程。

在检测到特权进程在访问系统的重要资源时,比如尝试修改/etc/passwd文件时,针对该情况的攻击方式,提权检测的方法为:

拦截文件的访问操作,当拦截到文件的访问操作时,获取第一对应表中第二进程的身份信息和用户身份信息;如果第二进程的用户身份信息为0,则根据第二进程的身份信息在所述第一对应表中对应的真实用户身份信息

根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止文件的访问操作,并终止第二进程。

即:根据系统环境设置需要保护的策略,比如防止提权程序修改/etc/passwd、防止提权程序篡改重要的目录、防止提权程序修改程序的suid位、防止提权程序修改程序的Capabilities属性等。

拦截文件的访问操作,包括文件的读写、删除、重命名、属性修改、Capabilities设置等操作(可以通过系统调用的替换或者LSM HOOK实现),当拦截到文件的访问操作时,获取当前进程的PID/UID,如果当前进程为特权进程即UID等于0,则根据PID在对应表中查找该进程对应的真实UID。

如果在对应表中查找到当前进程,表示当前进程通过内核提权漏洞进行过提权,此时将禁止文件的访问操作,并且终止当前进程。

本发明针对不同的攻击方式,提出了不同的防御方法,可以有效防御通过内核提权漏洞实施的提权攻击,运行中的Linux操作系统可以抵御已知、未知的内核漏洞提权攻击。

需要说明:本发明技术方案还提供了一种电子设备,包括:通信接口,能够与其它设备比如网络设备等进行信息交互;处理器,与通信接口连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的一种防御内核漏洞提权的方法,而所述计算机程序存储在存储器上。当然,实际应用时,电子设备中的各个组件通过总线系统耦合在一起。可理解,总线系统用于实现这些组件之间的连接通信。总线系统除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。本申请实施例中的存储器用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。可以理解,存储器可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,ReadOnly Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,RandomAccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random AccessMemory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random AccessMemory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。上述本申请实施例揭示的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、DSP(Digital Signal Processing,即指能够实现数字信号处理技术的芯片),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器,处理器读取存储器中的程序,结合其硬件完成前述方法的步骤。处理器执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。

实施例4

本发明还提出了一种可读存储介质,可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现方法步骤如下:

如图1为本发明实施例1一种防御内核漏洞提权的方法流程图;

在步骤S101,遍历系统中正在运行的非特权进程,并将非特权进程的进程身份信息和用户身份信息按照对应关系保存到第一对应表中。

遍历系统中所有正在运行的非特权进程,并将非特权进程的PID和UID按照对应关系保存到对应表中,对应表记录了正常情况下一个非特权进程对应的UID。

当监控至第一进程时,在第一对应表中增加第一进程身份信息和用户身份信息的对应关系记录;第一进程为新建的非特权进程;即当监控到新建一个非特权进程时,比如普通用户进程调用execve运行一个进程时,在对应表中新增一条PID和UID的对应关系。

当监控至第二进程时,在第一对应表中删除第二进程身份信息和用户身份信息的对应关系记录;第二进程为退出的非特权进程;当监控到一个非特权进程退出时,在对应表中删除相应的项。

当监控到第三进程时,在第一对应表中删除第三进程身份信息和用户身份信息的对应关系记录;第三进程为通过合法重新设置有效用户识别码转换为特权进程的非特权进程;即当监控到非特权进程通过合法seteuid等调用转换为特权进程时,比如Linux系统下suid机制和Capabilities机制都可以做到,因为此时非特权进程已经转换为特权进程,所以从对应表中删除掉该进程。

当监控到第四进程时,在第一对应表中新增第四进程身份信息和用户身份信息的对应关系记录;第四进程为通过合法重新设置有效用户识别码转换为非特权进程的特权进程。即当监控到一个特权进程调用seteuid(seteuid()用来重新设置执行目前进程的有效用户识别码)等转换为非特权进程时,比如root用户执行su命令切换为普通用户,在对应表中新增一条PID和UID的对应关系。

通过上述操作将保存一份系统中正在运行的非特权进程的PID和UID对应关系表,漏洞利用程序可以利用内核提权漏洞修改程序的UID,但并不能修改本发明维护的PID和UID对应表。所以后续我们可以在这个对应表中查找到进程提权之前的UID。

在步骤S102中,如果监控到第一程序执行内核级系统调用,则获取第一对应表中第一进程的身份信息和用户身份信息;根据第一进程的用户身份信息判断第一进程在第一对应表程序是否存在,如果存在,则阻止执行内核级系统调用并终止第一程序;

和或如果监控到第二程序访问系统资源,获取第一对应表中第二进程的身份信息和用户身份信息;根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止访问系统资源。

攻击者为了持续获取root权限一般都会在利用内核漏洞提权时调用execve运行一个具有root权限的bash,即调用execve运行一个具有根权限的变量。针对该情况的攻击方式,提权检测的方法为:

拦截第一程序调用execve函数,获取第一进程的身份信息和用户身份信息;如果第一进程的用户身份信息为0,则根据第一进程的身份信息在所述第一对应表中对应的真实用户身份信息;

如果在第一对应表中查找到第一进程,禁止execve函数运行,并终止第一进程。

在检测到特权进程在访问系统的重要资源时,比如尝试修改/etc/passwd文件时,针对该情况的攻击方式,提权检测的方法为:

拦截文件的访问操作,当拦截到文件的访问操作时,获取第一对应表中第二进程的身份信息和用户身份信息;如果第二进程的用户身份信息为0,则根据第二进程的身份信息在所述第一对应表中对应的真实用户身份信息

根据第二进程的用户身份信息判断第二进程在第一对应表程序是否存在,如果存在,则阻止文件的访问操作,并终止第二进程。

即:根据系统环境设置需要保护的策略,比如防止提权程序修改/etc/passwd、防止提权程序篡改重要的目录、防止提权程序修改程序的suid位、防止提权程序修改程序的Capabilities属性等。

拦截文件的访问操作,包括文件的读写、删除、重命名、属性修改、Capabilities设置等操作(可以通过系统调用的替换或者LSM HOOK实现),当拦截到文件的访问操作时,获取当前进程的PID/UID,如果当前进程为特权进程即UID等于0,则根据PID在对应表中查找该进程对应的真实UID。

如果在对应表中查找到当前进程,表示当前进程通过内核提权漏洞进行过提权,此时将禁止文件的访问操作,并且终止当前进程。

本发明针对不同的攻击方式,提出了不同的防御方法,可以有效防御通过内核提权漏洞实施的提权攻击,运行中的Linux操作系统可以抵御已知、未知的内核漏洞提权攻击。

本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器,上述计算机程序可由处理器执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、或CD-ROM等存储器。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

本申请实施例提供的一种防御内核漏洞提权的处理设备和存储介质中相关部分的说明可以参见本申请实施例1提供的一种防御内核漏洞提权的方法中对应部分的详细说明,在此不再赘述。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。另外,本申请实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制。对于所属领域的技术人员来说,在上述说明的基础上还可以做出其它不同形式的修改或变形。这里无需也无法对所有的实施方式予以穷举。在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号