掌桥专利:专业的专利平台
掌桥专利
首页

进程的提权检测方法和装置、存储介质及电子设备

文献发布时间:2024-04-18 20:02:40


进程的提权检测方法和装置、存储介质及电子设备

技术领域

本申请涉及计算机技术领域,具体而言,涉及一种进程的提权检测方法和装置、存储介质及电子设备。

背景技术

随着云计算和容器技术的发展,越来越多的企业将自身业务和提供的服务迁移到云上和容器中,通常企业对外提供业务的工作负载包括虚拟机、物理服务器、运行在主机上的容器和通过容器编排调度系统(kubernetes,简称“K8s”)容器编排工具所启动的容器等。但是随着技术的发展,工作负载在权限方面面临的威胁越来越多样化。

现有技术中对工作负载中的进程进行提权行为的检测都是向主机内核注入配置,对内核有一定的侵入性,由此带来了主机系统不稳定的风险。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本申请实施例提供了一种进程的提权检测方法和装置、存储介质及电子设备,以至少解决现有技术采用向主机内核注入配置以检测工作负载中的进程是否发生提权行为,由此带来了主机系统不稳定的风险的技术问题。

根据本申请实施例的一个方面,提供了一种进程的提权检测方法,包括:通过当前主机内配置的旁路连接,从所述当前主机的内核态中获取当前启动的目标进程的进程启动事件,其中,所述旁路连接为所述内核态与所述当前主机的用户态之间创建的通信连接;基于所述进程启动事件所指示的所述目标进程的进程标识,从所述当前主机的主机信息中查找出所述目标进程的第一进程信息;在基于所述第一进程信息检测出所述目标进程发生提权行为的情况下,将所述目标进程确定为提权进程,其中,所述提权进程用于指示用户权限被修改的进程。

可选地,在本申请实施例中,在基于所述第一进程信息检测出所述目标进程发生提权行为的情况下,将所述目标进程确定为提权进程包括:基于所述第一进程信息获取所述目标进程所属父进程的第二进程信息;在所述第二进程信息指示所述父进程是所述提权进程的情况下,确定所述目标进程发生提权行为,并将所述目标进程确定为所述提权进程;在所述第二进程信息指示所述父进程不是提权进程的情况下,对所述第一进程信息和所述第二进程信息进行比对;在比对的结果指示所述目标进程发生提权行为的情况下,将所述目标进程确定为所述提权进程。

可选地,在本申请实施例中,对所述第一进程信息和所述第二进程信息进行比对包括:在所述第一进程信息指示所述目标进程的用户标识与所述目标进程的进程访问文件的用户标识匹配的情况下,对所述第一进程信息所指示的所述目标进程的第一挂载点信息和所述第二进程信息所指示的所述父进程的第二挂载点信息进行比对,其中,所述进程访问文件用于记录所述目标进程的访问权限;在所述第一挂载点信息和所述第二挂载点信息一致的情况下,对所述第一进程信息所指示的所述目标进程的第一命名空间和所述第二进程信息所指示的所述父进程的第二命名空间进行比对;在所述第一命名空间与所述第二命名空间一致的情况下,确定所述比对的结果指示所述目标进程未发生提权行为。

可选地,在本申请实施例中,对所述第一进程信息和所述第二进程信息进行比对包括:在所述目标进程的用户标识与所述目标进程的进程访问文件的用户标识不匹配的情况下,确定所述比对的结果指示所述目标进程发生提权行为;或者在所述第一挂载点信息和所述第二挂载点信息不一致的情况下,确定所述比对的结果指示所述目标进程发生提权行为;或者在所述第一命名空间与所述第二命名空间不一致的情况下,确定所述比对的结果指示所述目标进程发生提权行为。

可选地,在本申请实施例中,通过当前主机内配置的旁路连接,从所述当前主机的内核态中获取当前启动的目标进程的进程启动事件包括:通过在所述内核态和所述用户态之间创建的Netlink,抓取所述进程启动事件,其中,所述Netlink以旁路模式传递事件消息。

可选地,在本申请实施例中,基于所述进程启动事件所指示的所述目标进程的进程标识,从所述当前主机的主机信息中查找出所述目标进程的第一进程信息包括:在所述当前主机的主机信息中获取所述当前主机中所运行的各个容器的容器标识;通过所述容器标识确定出所述当前主机中运行的所有工作负载的负载信息,其中,所述负载信息中包括所述当前主机内运行的各个进程的进程信息;基于所述进程启动事件所指示的所述目标进程的进程标识,从所述负载信息中查找出所述目标进程的第一进程信息。

可选地,在本申请实施例中,在所述将所述目标进程确定为提权进程之后,还包括以下之一:停止所述目标进程的提权操作;停止所述目标进程所在容器的各项操作;记录所述目标进程的进程事件;上报所述目标进程的第一进程信息。

根据本申请实施例的另一方面,还提供了一种进程的提权检测装置,包括:获取单元,用于通过当前主机内配置的旁路连接,从所述当前主机的内核态中获取当前启动的目标进程的进程启动事件,其中,所述旁路连接为所述内核态与所述当前主机的用户态之间创建的通信连接;查找单元,用于基于所述进程启动事件所指示的所述目标进程的进程标识,从所述当前主机的主机信息中查找出所述目标进程的第一进程信息;确定单元,用于在基于所述第一进程信息检测出所述目标进程发生提权行为的情况下,将所述目标进程确定为提权进程,其中,所述提权进程用于指示用户权限被修改的进程。

可选地,在本申请实施例中,所述确定单元包括:第一获取模块,用于基于所述第一进程信息获取所述目标进程所属父进程的第二进程信息;第一确定模块,用于在所述第二进程信息指示所述父进程是所述提权进程的情况下,确定所述目标进程发生提权行为,并将所述目标进程确定为所述提权进程;比对模块,用于在所述第二进程信息指示所述父进程不是提权进程的情况下,对所述第一进程信息和所述第二进程信息进行比对;第二确定模块,用于在比对的结果指示所述目标进程发生提权行为的情况下,将所述目标进程确定为所述提权进程。

可选地,在本申请实施例中,所述比对模块包括:第一比对子模块,用于在所述第一进程信息指示所述目标进程的用户标识与所述目标进程的进程访问文件的用户标识匹配的情况下,对所述第一进程信息所指示的所述目标进程的第一挂载点信息和所述第二进程信息所指示的所述父进程的第二挂载点信息进行比对,其中,所述进程访问文件用于记录所述目标进程的访问权限;第二比对子模块,用于在所述第一挂载点信息和所述第二挂载点信息一致的情况下,对所述第一进程信息所指示的所述目标进程的第一命名空间和所述第二进程信息所指示的所述父进程的第二命名空间进行比对;第一确定子模块,用于在所述第一命名空间与所述第二命名空间一致的情况下,确定所述比对的结果指示所述目标进程未发生提权行为。

可选地,在本申请实施例中,所述比对模块包括:第二确定子模块,用于在所述目标进程的用户标识与所述目标进程的进程访问文件的用户标识不匹配的情况下,确定所述比对的结果指示所述目标进程发生提权行为;或者第三确定子模块,用于在所述第一挂载点信息和所述第二挂载点信息不一致的情况下,确定所述比对的结果指示所述目标进程发生提权行为;或者第四确定子模块,用于在所述第一命名空间与所述第二命名空间不一致的情况下,确定所述比对的结果指示所述目标进程发生提权行为。

可选地,在本申请实施例中,所述获取单元包括:创建模块,用于通过在所述内核态和所述用户态之间创建的Netlink,抓取所述进程启动事件,其中,所述Netlink以旁路模式传递事件消息。

可选地,在本申请实施例中,所述查找单元包括:第二获取模块,用于在所述当前主机的主机信息中获取所述当前主机中所运行的各个容器的容器标识;第三确定模块,用于通过所述容器标识确定出所述当前主机中运行的所有工作负载的负载信息,其中,所述负载信息中包括所述当前主机内运行的各个进程的进程信息;查找模块,基于所述进程启动事件所指示的所述目标进程的进程标识,用于从所述负载信息中查找出所述目标进程的第一进程信息。

可选地,在本申请实施例中,所述装置还包括以下之一:第一停止单元,用于停止所述目标进程的提权操作;第二停止单元,用于停止所述目标进程所在容器的各项操作;记录单元,用于记录所述目标进程的进程事件;上报单元,用于上报所述目标进程的第一进程信息。

根据本申请实施例的又一方面,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行前述任意实施例提供的进程的提权检测方法。

根据本申请实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行前述任意实施例提供的进程的提权检测方法。

在本申请实施例中,通过当前主机内配置的旁路连接,从当前主机的内核态中获取当前启动的目标进程的进程启动事件,基于进程启动事件所指示的目标进程的进程标识,从当前主机的主机信息中查找出目标进程的第一进程信息,在基于第一进程信息检测出目标进程发生提权行为的情况下,将目标进程确定为提权进程。也就说通过在主机内配置旁路连接,接收进程启动事件,由于无需向主机内核注入配置,对主机没有侵入性,因此不会给主机内核带来不稳定的风险,从而解决了现有技术中在进行提权行为检测时,向主机内核注入配置,进而带来了主机系统不稳定的风险的技术问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的一种进程的提权检测方法示意图;

图2是根据本申请实施例的另一种进程的提权检测方法示意图;

图3是根据本申请实施例的又一种进程的提权检测方法示意图;

图4是根据本申请实施例的又一种进程的提权检测方法示意图;

图5是根据本申请实施例的又一种进程的提权检测方法示意图;

图6是根据本申请实施例的又一种进程的提权检测方法示意图;

图7是根据本申请实施例的一种进程的提权检测装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本公开的实施方式或实施例并非穷举,仅为部分实施方式或实施例的示意,不作为对本公开保护范围的具体限制。在不矛盾的情况下,某一实施方式或实施例中的每个步骤均可以作为独立实施例来实施,且各步骤之间可以任意组合,例如,在某一实施方式或实施例中去除部分步骤后的方案也可以作为独立实施例来实施,且在某一实施方式或实施例中各步骤的顺序可以任意交换,另外,某一实施方式或实施例中的可选方式或可选例可以任意组合;此外,各实施方式或实施例之间可以任意组合,例如,不同实施方式或实施例的部分或全部步骤可以任意组合,某一实施方式或实施例可以与其他实施方式或实施例的可选方式或可选例任意组合。

在一个实施例中,提供了一种进程的提权检测方法,如图1所述,上述进程的提权检测方法包括:

S102,通过当前主机内配置的旁路连接,从当前主机的内核态中获取当前启动的目标进程的进程启动事件,其中,旁路连接为内核态与当前主机的用户态之间创建的通信连接;

S104,基于进程启动事件所指示的目标进程的进程标识,从当前主机的主机信息中查找出目标进程的第一进程信息;

S106,在基于第一进程信息检测出目标进程发生提权行为的情况下,将目标进程确定为提权进程,其中,提权进程用于指示用户权限被修改的进程。

可选地,在本申请实施例中,该进程的提权检测方法可以但不限于应用于混合云环境中(即主机和容器共存),针对该环境的工作负载进行提权和逃逸行为的检测。主机的内核态相比用户态具有更高的权限,可以直接访问硬件设备和操作系统的核心功能,而用户态只能通过系统调用间接访问硬件设备和操作系统的核心功能,所以主机的内核态更容易受到恶意攻击,因而就需要进行提权行为监测和容器逃逸监测。

旁路连接例如可以为Netlink。Netlink可以以旁路模式传递事件消息。

进程启动事件表示一个新的进程被创建并开始运行,通常发生在操作系统启动时,或者在用户启动一个新的程序时。进程启动事件通常会触发一系列的操作,如分配内存、加载程序代码、初始化程序状态等。

第一进程信息包括以下至少之一:目标进程的进程id(pid)、进程名称、进程状态、进程优先级、进程所属用户、目标进程使用的CPU和内存资源、目标进程的父进程id(ppid)、目标进程的启动时间、进程命令行参数、进程所在终端、进程状态改变时间等。

在一些示例中,可以在主机的用户态配置一个旁路连接,以用于从主机的内核态获取进程启动事件。用户态上的安全代理进程(agent)可以基于获取到的进程启动事件的进程标识,查询进程的进程信息,并对查询到的进程信息进行提权行为检测,根据检测结果判断进程是否为提权进程。

进一步举例说明,如图2所示在主机的用户态上建立安全代理进程(agent),安全代理进程共包括5个模块,分别为事件抓取模块、enrich(进程信息丰富)模块、资产模块、检测模块和处理模块。首先事件抓取模块通过Netlink消息接收内核态上的所有进程事件,之后事件抓取模块将接收到的进程事件发送给enrich模块,enrich模块通过当前进程标识(pid)从资产模块查询当前进程(即,当前启动的目标进程)所对应的进程信息,进程信息可包括以下至少之一:父进程(ppid)、当前进程所属的容器(containerID)、创建当前进程的用户标识(uid)、当前进程启动文件和资源时所对应的用户标识(euid)、挂载点信息(mnt)和当前进程所属的命名空间(namespace)等,然后,提权检测模块基于enrich模块查询到的上述信息对当前进程进行提权行为检测,最后,处理模块基于检测结果对当前进程进行处理操作。

在一些示例中,目标进程是否发生提权行为可用于指示目标进程的权限是否发生变化。这里,目标进程的权限可以是用户权限(即,用户拥有的进程的权限),例如进程的所属用户对主机上的文件和/或资源的访问权限,访问权限可包括针对文件和/或资源的读、写或者执行的权限。

在一些示例中,上述步骤S106中,可以基于第一进程信息获取目标进程所属父进程的第二进程信息,基于第二进程信息检测目标进程是否为发生提权行为的提权进程。例如,在第二进程信息指示目标进程所属父进程是提权进程的情况下,确定目标进程发生提权行为,并将目标进程确定为提权进程。又例如,在第一进程信息与第二进程信息的比对结果指示目标进程发生提权行为的情况下,将目标进程确定为提权进程。

在一些示例中,在基于第一进程信息检测出目标进程未发生提权行为的情况下,确定目标进程不是提权进程。

通过本申请实施例,通过当前主机内配置的旁路连接,从当前主机的内核态中获取当前启动的目标进程的进程启动事件,其中,旁路连接为内核态与当前主机的用户态之间创建的通信连接。基于进程启动事件所指示的目标进程的进程标识,从当前主机的主机信息中查找出目标进程的第一进程信息。在基于第一进程信息检测出目标进程发生提权行为的情况下,将目标进程确定为提权进程,其中,提权进程用于指示用户权限被修改的进程。也就是说通过在主机内配置旁路连接,接收进程启动事件,由于无需向主机内核注入配置,对主机没有侵入性,因此不会给主机内核带来不稳定的风险,从而实现了在保证主机系统稳定性的同时,可以对主机和容器一起进行提权行为检测和容器逃逸检测。

作为一种可选的方案,如图3所示,在基于第一进程信息检测出目标进程发生提权行为的情况下,将目标进程确定为提权进程包括:

S302,基于第一进程信息获取目标进程所属父进程的第二进程信息;

S304-1,在第二进程信息指示父进程是提权进程的情况下,确定目标进程发生提权行为,并将目标进程确定为提权进程;

S304-2,在第二进程信息指示父进程不是提权进程的情况下,对第一进程信息和第二进程信息进行比对;

S306,在比对的结果指示目标进程发生提权行为的情况下,将目标进程确定为提权进程。

上述步骤S304-1中,当第二进程信息中的uid和euid不匹配的情况下确定父进程是提权进程,或者当父进程的mnt信息和父进程的父进程的mnt信息不同,则确定父进程是提权进程,或者当父进程的namespace和父进程的父进程的namespace信息不同,则确定父进程是提权进程。

上述步骤S304-2中,可以对第一进程信息中的用户标识、挂载点信息和命名空间中的至少一个,分别与第二进程信息的用户标识、挂载点信息和命名空间的至少一个进行比对,并根据比对结果确定目标进程是否发生提权行为。

例如,当第一进程信息中指示目标进程的uid和euid不同的情况下,此时比对的结果指示目标进程发生了提权行为。或者当目标进程的第一进程信息中指示的mnt信息和目标进程所属父进程的第二进程信息中指示的mnt信息不同情况下,此时比对的结果指示目标进程发生了提权行为。或者当目标进程的第一进程信息中指示的namespace信息和目标进程所属父进程的第二进程信息中指示的namespace信息不同情况下,此时比对的结果指示目标进程发生了提权行为。

可选地,在本申请实施例中,基于当前进程的进程信息获取当前进程的父进程的进程信息,若当前进程的父进程的进程信息指示父进程是提权进程,那么当前进程直接就确定为提权进程,若当前进程的父进程的进程信息指示父进程并非是提权进程,那么将当前进程的进程信息和当前进程的父进程的进程信息进行比对,根据比对结果确定当前进程是否为提权进程。

进一步举例说明,目标进程是第i个进程,目标进程的父进程是第i-1个进程,根据第i个进程的进程信息中的ppid获取第i-1个进程的进程信息,在第i-1个进程的进程信息指示第i-1个进程是提权进程的情况下,确定第i个进程发生提权行为,并确定第i个进程为提权进程。在第i-1个进程的进程信息指示第i-1个进程并非提权进程的情况下,对第i个进程的进程信息和第i-1个进程的进程信息进行比对,若比对结果指示第i个进程发生了提权行为,那么将第i个进程确定为提权进程,其中,i为大于等于1且小于等于N的自然数,N为通过Netlink抓取主机内核态上的所有进程事件的数量。

通过本申请实施例,基于第一进程信息获取目标进程所属父进程的第二进程信息,在第二进程信息指示父进程是提权进程的情况下,确定目标进程发生提权行为,并将目标进程确定为提权进程。在第二进程信息指示父进程并非提权进程的情况下,对第一进程信息和第二进程信息进行比对,在比对的结果指示目标进程发生提权行为的情况下,将目标进程确定为提权进程。也就是说通过对目标进程的多种情况判断,进而实现了提高判断目标进程是否为提权进程的准确性效果。

作为一种可选的方案,如图4所示,对第一进程信息和第二进程信息进行比对包括:

S402,在第一进程信息指示目标进程的用户标识与目标进程的进程访问文件的用户标识匹配的情况下,对第一进程信息所指示的目标进程的第一挂载点信息和第二进程信息所指示的父进程的第二挂载点信息进行比对,其中,进程访问文件用于记录目标进程的访问权限;

S404,在第一挂载点信息和第二挂载点信息一致的情况下,对第一进程信息所指示的目标进程的第一命名空间和第二进程信息所指示的父进程的第二命名空间进行比对;

S406,在第一命名空间与第二命名空间一致的情况下,确定比对的结果指示目标进程未发生提权行为。

可选地,在本申请实施例中,目标进程的访问权限可以为目标进程访问文件和/或资源的权限,也就是用户的权限。提权行为可以但不限于用来表示工作负载中的进程在运行过程中,从第一访问权限(例如,普通低权限)提升到第二访问权限(例如,根权限)。通过从普通低权限提升到高权限(特别是提升到根权限(root权限)),从而获取到不属于自己的用户的权限,进而对系统进行进一步越权操作的过程。如果工作负载是容器形式部署,就会发生容器逃逸,威胁到容器所在的主机上的其它进程,如果工作负载是主机部署,那么主机上运行的其它进程势必受到影响,进一步造成损失。

进一步举例说明,目标进程为第i个进程,目标进程的父进程为第i-1个进程。创建第i个进程的用户标识为uid,具有使用第i个进程访问文件和资源的访问权限的用户标识为euid,在uid和euid匹配的情况下,将第i个进程的挂载点信息(mnt信息)和第i-1个进程的mnt信息进行比对。在第i个进程的mnt信息和第i-1个进程的mnt信息一致的情况下,将第i个进程的命名空间(namespace)和第i-1个进程的namespace进行比对。在将第i个进程的namespace和第i-1个进程的namespace一致的情况下,确定第i个进程没有发生提权行为,其中,i为大于等于1且小于等于N的自然数,N为通过Netlink抓取主机内核态上的所有进程事件的数量。

通过本申请实施例,在第一进程信息指示目标进程的用户标识与目标进程的进程访问文件的用户标识匹配的情况下,对第一进程信息所指示的目标进程的第一挂载点信息和第二进程信息所指示的父进程的第二挂载点信息进行比对,其中,进程访问文件用于记录目标进程的访问权限。在第一挂载点信息和第二挂载点信息二者一致的情况下,对第一进程信息所指示的目标进程的第一命名空间和第二进程信息所指示的父进程的第二命名空间进行比对。在第一命名空间与第二命名空间二者一致的情况下,确定比对的结果指示目标进程并未发生提权行为。也就是说通过对目标进程的多种情况判断,进而实现了提高判断目标进程是否为提权进程的准确性效果。

作为一种可选的方案,对第一进程信息和第二进程信息进行比对包括:

1)在目标进程的用户标识与目标进程的进程访问文件的用户标识不匹配的情况下,确定比对的结果指示目标进程发生提权行为;

2)在第一挂载点信息和第二挂载点信息不一致的情况下,确定比对的结果指示目标进程发生提权行为;

3)在第一命名空间与第二命名空间不一致的情况下,确定比对的结果指示所述目标进程发生提权行为。

进一步举例说明,目标进程为第i个进程,目标进程的父进程为第i-1个进程。创建第i个进程的用户标识为uid,具有使用第i个进程访问文件和资源的访问权限的用户标识为euid,在uid和euid不一致时,确定第i个进程发生了提权行为。或者在第i个进程的挂载点信息(mnt信息)与第i-1个进程的挂载点信息不一致时,确定第i个进程发生提权行为。或者在第i个进程的namespace和第i-1个进程的namespace不一致时,确定第i个进程发生提权行为,其中,i为大于等于1且小于等于N的自然数,N为通过Netlink抓取主机内核态上的所有进程事件的数量。

通过本申请实施例,在目标进程的用户标识与目标进程的进程访问文件的用户标识不匹配的情况下,确定比对的结果指示目标进程发生提权行为。或者在第一挂载点信息和第二挂载点信息不一致的情况下,确定比对的结果指示目标进程发生提权行为。或者在第一命名空间与第二命名空间不一致的情况下,确定比对的结果指示所述目标进程发生提权行为。也就是说通过对目标进程的多种情况判断,进而实现了提高判断目标进程是否为提权进程的准确性效果。

作为一种可选的方案,通过当前主机内配置的旁路连接,从当前主机的内核态中获取当前启动的目标进程的进程启动事件包括:

通过在内核态和用户态之间创建的Netlink,抓取进程启动事件,其中,Netlink以旁路模式传递事件消息。

可选地,在本申请实施例中,Netlink是linux提供的用于内核态和用户态进程之间的通信方式。

在一些示例中,在主机用户态以旁路模式的方式,通过过滤出系统调用的信息来抓取进程的启动和停止事件,从而实现获取主机内核态上的所有进程启动事件,其中,容器产生的进程部署在用户态上,容器进程所产生的事件都运行在内核态上。

进一步举例说明,如图5所示,主机用户态上的agent安全进程通过Netlink提供的子接口类型Netlink_connector来获取主机内核态上的所有进程启动事件,既包括主机在内核态上运行的进程启动事件,又包括主机容器和容器编排调度系统容器(kubernetes容器)在内核态上运行的进程启动事件。其中,主机容器和kubernetes容器部署在用户态上,其产生的进程部署在用户态上,进程所产生的事件都运行在内核态上。

agent安全代理进程在用户态上建立与上述Netlink_connector通信的Socket,并与该Socket绑定,之后通过事件循环的方式不断获取内核态提供的事件,通过过滤出Proc_event_exec、Proc_event_fork、Proc_event_exit等系统调用的信息来抓取进程的启动和停止事件,实现以旁路模式监听Netlink的消息。

其中,上述Netlink_connector指用于建立和管理Netlink通信连接的工具或库。Socket是计算机网络中用于通信的一种机制,它允许不同的程序在不同的计算机之间进行数据交换。Proc_event_exec是一个Linux内核中的函数,用于处理进程事件并执行相应的操作,它可以用于监视和响应进程创建、销毁和其他事件,以实现特定的功能或策略。Proc_event_fork是Linux内核中的一个事件处理机制,用于处理进程的创建子进程(fork)事件。Proc_event_exit是Linux内核中的一个事件,指示一个进程即将退出。

通过本申请实施例,通过在内核态和用户态之间创建的Netlink,抓取进程启动事件,其中,Netlink以旁路模式传递事件消息。从而可以避免向主机内核注入配置以检测工作负载中的进程是否发生提权行为,进而保证了主机系统的稳定性。

作为一种可选的方案,基于进程启动事件所指示的目标进程的进程标识,从当前主机的主机信息中查找出目标进程的第一进程信息包括:

S1,在当前主机的主机信息中获取当前主机中所运行的各个容器的容器标识;

S2,通过容器标识确定出当前主机中运行的所有工作负载的负载信息,其中,负载信息中包括当前主机内运行的各个进程的进程信息;

S3,基于进程启动事件所指示的目标进程的进程标识,从负载信息中查找出目标进程的第一进程信息。

可选地,在本申请实施例中,资产模块主要用于负责维护当前主机上的主机信息和运行的容器信息。第一进程信息包括进程所属的工作负载,具体是哪个容器,以及该工作负载的挂载点是什么,进程(pid)所属的命名空间(namespace)是什么,当前该进程的用户标识(uid)和进程启动文件的用户标识(euid)的信息。

在一些示例中,主机上的进程信息可以通过一个虚拟文件系统来维护,通过容器标识从虚拟文件系统中确定出主机和容器的负载信息,负载信息中包括主机和容器内运行的各个进程的进程信息。根据进程启动事件所指示的目标进程的进程标识,从主机和容器的负载信息中查找出目标进程的第一进程信息。

进一步举例说明,在资产模块中通过唯一标识容器id来标识当前主机上的所有工作负载,同时通过特定的虚拟文件系统维护主机上的进程信息,供enrich模块和检测模块查询。其中,工作负载包括主机、主机容器和kubernetes容器,主机可以包括物理服务器和虚拟机。

例如,特定的虚拟文件系为“/proc”,“/proc”是一个特殊的虚拟文件系统,它包含了有关系统内核和进程的信息。通过容器id可以确定出资产模块中维护的工作负载的负载信息,工作负载信息中包括主机的负载信息、主机容器的负载信息和kubernetes容器的负载信息,主机的负载信息包括名字(name)、挂载点信息(mountInfo)和主机的首个进程(即pid=1的进程,或称为“1号进程”)的进程信息(pidns)。主机容器的负载信息包括名字(name)、挂载点信息(mountInfo)和主机容器在主机上对应的进程标识(pidns)。kubernetes容器的负载信息包括名字(name)、命名空间(namespace)、应用类型(applicationType)、应用名字(applicationName)、kubernetes容器在主机上对应的进程标识(pidns)和挂载点信息(mountInfo)。负载信息包括进程的进程信息,进程信息中包括多个进程。每一个进程标识(pid)下都包括父进程标识(ppid)、可执行文件路径(execPath)、创建进程的用户标识(uid)、进程启动文件和资源的用户标识(euid)和进程所属的容器标识(containerID)。

通过本申请实施例,在当前主机的主机信息中获取当前主机中所运行的各个容器的容器标识,通过容器标识确定出当前主机中运行的所有工作负载的负载信息,其中,负载信息中包括当前主机内运行的各个进程的进程信息。从负载信息中查找出第一进程信息。也就是说可以同时对主机、主机容器和kubernetes容器的进程进行提权行为检测,进而实现了对混合云环境中的所有进程进行同时提权行为的检测。

作为一种可选的方案,在将目标进程确定为提权进程之后,还包括以下之一:

1)停止所述目标进程的提权操作;

2)停止所述目标进程所在容器的各项操作;

3)记录所述目标进程的进程事件;

4)上报所述目标进程的第一进程信息。

示例性地,提权操作包括但不限于:用户提权和/或资源提权。例如,用户提权可表示将一个普通用户的权限提升为管理员或超级用户的权限。资源提权可表示用户通过某种方式获取了对某些资源的更高级别的权限。

目标进程所在容器的操作包括以下至少之一:创建新的进程、读取和写入文件、分配和释放内存、使用容器内的资源(如CPU、内存、磁盘等)、与其它进程进行通信(如进程间的消息传递、共享内存等)、在容器内部运行应用程序或其它类型的任务、执行系统调用等。

进一步举例说明,当检测出第i个进程发生了提权行为,可以停止第i个进程的提权操作,或者停止第i个进程所在的容器,然后将第i个进程事件记录,上报到控制器上,进行进一步的处理,其中,i为大于等于1且小于等于N的自然数,N为通过Netlink抓取主机内核态上的所有进程事件的数量。

通过本申请实施例,停止目标进程的提权操作,或者停止目标进程所在容器的各项操作,或者记录目标进程的进程事件,或者上报目标进程的进程信息。从而实现对发生提权的目标进程采取一定的处理措施。

可选地,作为一种可选的实施方式,由以下步骤对上述方法进行整体性的举例解释说明:

如图6所示,该方法可以包括以下步骤:

S602,提权检测功能开启时,资产模块同步工作负载。

这里,提权检测功能可通过开关组件控制开启或关闭。

S604,以旁路模式抓取主机内核态上的所有进程事件,然后将抓取到的进程事件输入Enrich模块。

S606,Enrich模块在接收到进程事件之后,对进程事件进行enrich。

示例性地,以第i个进程为例,i为大于等于1且小于等于N的自然数,N为通过Netlink抓取主机内核态上的所有进程事件的数量。根据第i个进程的pid从资产模块查找到第i个进程所对应的父进程(ppid)为第i-1个进程,还查找第i个进程所属的容器(containerID)、创建第i个进程的用户标识(uid)、第i个进程启动文件和资源时所对应的用户标识(euid)、第i个进程的挂载点信息(mnt)和第i个进程所属的命名空间(namespace)等,Enrich模块将查找到的第i个进程的上述信息发送给提权检测模块。

S608-1,提权检测模块在接收到第i个进程上述信息后,会先判断一下第i个进程的父进程即第i-1个进程是否属于提权进程,如果是,则认为第i个进程发生了提权行为,那么将第i个进程输入提权处理模块进行提权处理。

S608-2,如果第i-1个进程不属于提权进程,则判断第i个进程的uid和euid是否不同,如果不同,则认为第i个进程发生了提权行为,那么将第i个进程输入提权处理模块进行提权处理。

S608-3,如果第i个进程的uid和euid相同,则判断第i个进程的mnt信息和第i-1个进程的mnt信息是否不同,如果不同,则认为发生了容器逃逸,属于提权,那么将第i个进程输入提权处理模块进行提权处理。

S608-4,如果第i个进程的mnt信息和第i-1个进程的mnt信息相同,则判断第i个进程的namespace和第i-1个进程的namespace是否不同,如果不同,则认为发生了容器逃逸,属于提权,那么将第i个进程输入提权处理模块进行提权处理,如果相同,则认为第i个进程没有发生提权。

S610,提权检测模块将发生提权的进程事件发送给提权处理模块,提权处理模块在接收到提权进程事件之后,按照预先配置的动作执行相应的提权处理,比如停止当次提权行为,和/或停止进程所在的容器等动作,然后将事件记录,上报到控制器上,进行进一步处理。

在一些实施例中,考虑到混合云环境中,主机和容器共存,需要针对该环境的工作负载进行提权和逃逸检测。用户工作负载业务场景相对固定,主要包括业务以及运维场景。可以部署一个管理节点,并在各个需要管控的主机上部署一个安全代理进程(即,agent安全进程),管理节点负责同步资产、提权检测功能的使能、以及配置针对性的提权检测规则(即,对哪些工作负载进行提权检测,以及检测出来的提权行为做什么样的处理);安全代理进程通过netlink接收主机上包括容器内的进程启动事件,基于进程启动事件执行进程的提权检测,提权检测结果可以通过事件日志页面显示给目标用户(例如管理员)以提示是否有提权行为发生。

综上所述,本发明技术方案至少具有以下有益效果:

1.通过获取主机上的进程启动事件,针对事件的pid进行enrich得到工作负载属性,可以对主机和容器两种工作负载同时进行提权检测。

2.通过Netlink的NETLINK_CONNECTOR模块以旁路模式接收进程事件,对主机没有侵入性,不会给内核带来不稳定的风险。

3.利用进程启动事件作为检测触发点,能够对所有的进程提权和容器逃逸的场景覆盖,降低检测漏报率。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

根据本申请实施例的另一个方面,还提供了一种用于实施上述进程的提权检测方法的进程的提权检测装置。如图7所示,该装置包括:

获取单元702,用于通过当前主机内配置的旁路连接,从上述当前主机的内核态中获取当前启动的目标进程的进程启动事件,其中,上述旁路连接为上述内核态与上述当前主机的用户态之间创建的通信连接;

查找单元704,用于基于上述进程启动事件所指示的上述目标进程的进程标识,从上述当前主机的主机信息中查找出上述目标进程的第一进程信息;

确定单元706,用于在基于上述第一进程信息检测出上述目标进程发生提权行为的情况下,将上述目标进程确定为提权进程,其中,上述提权进程用于指示用户权限被修改的进程。

可选地,在本申请实施例中,该进程的提权检测方法可以但不限于应用于混合云环境中(即主机和容器共存),针对该环境的工作负载进行提权和逃逸行为的检测。主机的内核态相比用户态具有更高的权限,可以直接访问硬件设备和操作系统的核心功能,而用户态只能通过系统调用间接访问上述资源,所以主机的内核态更容易受到恶意攻击,因而就需要进行提权行为监测和容器逃逸监测。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

通过本申请实施例,通过当前主机内配置的旁路连接,从当前主机的内核态中获取当前启动的目标进程的进程启动事件,其中,旁路连接为内核态与当前主机的用户态之间创建的通信连接。基于进程启动事件所指示的目标进程的进程标识,从当前主机的主机信息中查找出目标进程的第一进程信息。在基于第一进程信息检测出目标进程发生提权行为的情况下,将目标进程确定为提权进程,其中,提权进程用于指示用户权限被修改的进程。也就是说通过在主机内配置旁路连接,无需向主机内核注入配置,从而实现了在保证主机系统稳定性的同时可以对主机和容器一起进行提权行为检测和容器逃逸检测。

作为一种可选的方案,上述确定单元706包括:

第一获取模块,用于基于上述第一进程信息获取上述目标进程所属父进程的第二进程信息;

第一确定模块,用于在上述第二进程信息指示上述父进程是上述提权进程的情况下,确定上述目标进程发生提权行为,并将上述目标进程确定为上述提权进程;

比对模块,用于在上述第二进程信息指示上述父进程不是提权进程的情况下,对上述第一进程信息和上述第二进程信息进行比对;

第二确定模块,用于在比对的结果指示上述目标进程发生提权行为的情况下,将上述目标进程确定为上述提权进程。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

作为一种可选的方案,上述比对模块包括:第一比对子模块,用于在上述第一进程信息指示上述目标进程的用户标识与上述目标进程的进程访问文件的用户标识匹配的情况下,对上述第一进程信息所指示的上述目标进程的第一挂载点信息和上述第二进程信息所指示的上述父进程的第二挂载点信息进行比对,其中,上述进程访问文件用于记录上述目标进程的访问权限;

第二比对子模块,用于在上述第一挂载点信息和上述第二挂载点信息一致的情况下,对上述第一进程信息所指示的上述目标进程的第一命名空间和上述第二进程信息所指示的上述父进程的第二命名空间进行比对;

第一确定子模块,用于在上述第一命名空间与上述第二命名空间一致的情况下,确定上述比对的结果指示上述目标进程未发生提权行为。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

作为一种可选的方案,上述比对模块包括:

第二确定子模块,用于在上述目标进程的用户标识与上述目标进程的进程访问文件的用户标识不匹配的情况下,确定上述比对的结果指示上述目标进程发生提权行为;

或者第三确定子模块,用于在上述第一挂载点信息和上述第二挂载点信息不一致的情况下,确定上述比对的结果指示上述目标进程发生提权行为;

或者第四确定子模块,用于在上述第一命名空间与上述第二命名空间不一致的情况下,确定上述比对的结果指示上述目标进程发生提权行为。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

作为一种可选的方案,上述获取单元702包括:

创建模块,用于通过在上述内核态和上述用户态之间创建的Netlink,抓取上述进程启动事件,其中,上述Netlink以旁路模式传递事件消息。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

作为一种可选的方案,上述查找单元704包括:

第二获取模块,用于在上述当前主机的主机信息中获取上述当前主机中所运行的各个容器的容器标识;

第三确定模块,用于通过上述容器标识确定出上述当前主机中运行的所有工作负载的负载信息,其中,上述负载信息中包括上述当前主机内运行的各个进程的进程信息;

查找模块,用于基于进程启动事件所指示的所述目标进程的进程标识,从上述负载信息中查找出上述目标进程的第一进程信息。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

作为一种可选的方案,上述装置还包括以下之一:

第一停止单元,用于停止上述目标进程的提权操作;

第二停止单元,用于停止上述目标进程所在容器的各项操作;

记录单元,用于记录上述目标进程的进程事件;

上报单元,用于上报上述目标进程的第一进程信息。

本方案中的实施例,可以但不限于参照上述方法实施例,本申请实施例中对此不作任何限定。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上上述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

相关技术
  • 恶意进程检测方法、装置、电子设备及存储介质
  • 恶意进程检测方法、装置、电子设备及存储介质
  • 一种液位检测装置和包含其的设备以及液位检测方法、电子设备及计算机可读存储介质
  • 手势关键点检测方法、装置、电子设备及存储介质
  • 加密恶意流量检测方法、装置、电子设备及存储介质
  • 进程非法提权的识别方法、装置、设备及存储介质
  • 非法提权检测方法、装置、电子设备及存储介质
技术分类

06120116586729