CN114676424B - 一种容器逃逸检测与阻断方法、装置、设备及存储介质 - Google Patents
一种容器逃逸检测与阻断方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114676424B CN114676424B CN202210576478.3A CN202210576478A CN114676424B CN 114676424 B CN114676424 B CN 114676424B CN 202210576478 A CN202210576478 A CN 202210576478A CN 114676424 B CN114676424 B CN 114676424B
- Authority
- CN
- China
- Prior art keywords
- container
- key information
- host
- value
- namespace
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/568—Computer malware detection or handling, e.g. anti-virus arrangements eliminating virus, restoring damaged files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Virology (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本申请公开了一种容器逃逸检测与阻断方法、装置、设备及存储介质,涉及安全环境检测技术领域,包括以下步骤:在系统中载入动态可加载内核模块,并令动态可加载内核模块挂钩fork函数和execve函数;获取宿主机进程的关键信息并将其存入全局表;当fork函数或execve函数被容器进程调用时,获取容器进程的关键信息并存入全局表;在全局表中查找宿主机进程的关键信息并与容器进程的关键信息进行比对以确定容器进程是否发生逃逸,若是则阻断该容器进程。本方法通过对进程的执行流程进行监管,可以在逃逸进程执行恶意动作之前,就杀死该进程,实现事中阻断,最大化保护操作系统。
Description
技术领域
本申请涉及安全环境检测技术领域,尤其涉及一种容器逃逸检测与阻断方法、装置、设备及存储介质。
背景技术
容器技术是一种虚拟化技术,它支持在操作系统级别轻松共享CPU、内存、存储空间和网络资源,并提供一种逻辑打包机制,而以这种机制打包的应用可以脱离其实际运行环境,这使得容器技术的应用越来越广泛,它所面临的安全问题也显得尤为重要,容器逃逸就是其安全问题的典型代表。
现有的容器逃逸检测方法主要有两种:一种是需要人工干预且无法做入侵检测的主动检测方法;另一种是需要挂钩多个内核调用并预先生成调用列表的被动检测方法。这两种方法各有优点,但无论哪一种方法都无法在逃逸进程执行恶意动作之前杀死该进程。
发明内容
本申请提供的一种容器逃逸检测与阻断方法,旨在解决现有技术无法及时杀死执行恶意动作的逃逸进程的问题。
为实现上述目的,本申请采用以下技术方案:
本申请的一种容器逃逸检测与阻断方法,包括以下步骤:
在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;
获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;
当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;
在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,若是则阻断所述容器进程。
作为优选,所述方法还包括当所述容器进程的进程标识符与所述全局表中的某一进程标识符相同时,用所述容器进程的关键信息覆盖所述全局表中该进程标识符对应的原有数据。
作为优选,所述在所述全局表中查找所述宿主机进程的关键信息之前还包括当所述execve函数每次被容器进程调用时,根据所述容器进程关键信息中的父进程的进程标识符在所述全局表中获取其父进程的关键信息。
作为优选,所述在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,包括:
查找所述全局表中所述宿主机进程的关键信息,并将所述容器进程的关键信息与其父进程的关键信息和所述宿主机进程的关键信息分别进行比对,当所述容器进程命名空间的字符串值与其父进程命名空间的字符串值不相等且其命名空间的字符串值等于所述宿主机进程命名空间的字符串值时,判定所述容器进程发生逃逸。
作为优选,所述在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,还包括:
查找所述全局表中所述宿主机进程的关键信息,并将所述容器进程的关键信息与其父进程的关键信息和所述宿主机进程的关键信息分别进行比对,当所述容器进程fs_struct结构体中的值与其父进程fs_struct结构体中的值不相等且其fs_struct结构体中的值等于所述宿主机进程fs_struct结构体中的值时,判定所述容器进程发生逃逸。
作为优选,所述若是则阻断所述容器进程包括:若所述容器进程发生逃逸,则调用exit函数杀死所述容器进程。
作为优选,所述在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩fork函数和execve函数,包括:
生成insmod命令,根据所述insmod命令将动态可加载内核模块插入到系统中,并通过kprobe技术令所述动态可加载内核模块挂钩所述fork函数和execve函数。
一种容器逃逸检测与阻断装置,包括:
挂载模块,用于在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;
第一存表模块,用于获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;
第二存表模块,用于当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;
判断模块,用于在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,若是则阻断所述容器进程。
一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如上述中任一项所述的一种容器逃逸检测与阻断方法。
一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述中任一项所述的一种容器逃逸检测与阻断方法。
本发明具有如下有益效果:
(1)利用kprobe技术只挂钩fork函数和execve函数,性能消耗小;
(2)通过调用fork函数可以对一些恶意程序的绕过手段进行监控,防止其绕过检测;
(3)通过对进程的执行流程进行监管,可以在逃逸进程执行恶意动作之前,就杀死该进程,实现事中阻断,最大化保护操作系统。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例1实现一种容器逃逸检测与阻断方法第一流程图;
图2是本申请实施例2实现一种容器逃逸检测与阻断装置示意图;
图3是本申请实施例3实现一种容器逃逸检测与阻断方法的一种电子设备示意图。
具体实施方式
下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的权利要求书和说明书的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式,此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他单元。
实施例1
如图1所示,一种容器逃逸检测与阻断方法,包括以下步骤:
S110、在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;
S120、获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;
S130、当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;
S140、在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,若是则阻断所述容器进程。
根据实施例1可知,容器本质上是一种特殊的进程,通过在创建容器进程的时候,为该容器进程指定一组需要启用的Namespace参数,进而让该容器进程只能看到当前Namespace所限定的资源、文件、设备、状态或者配置即所有进程只能看到与自身同namespace的资源,而无法看到宿主机上的进程或其他Namespace内的进程,其中,Namespace中文翻译为命名空间,是Linux 内核用来隔离内核资源的方式,通过该方式使得处于不同Namespace中的进程拥有独立的全局系统资源,改变一个Namespace中的系统资源只会影响当前Namespace里的进程,对其他Namespace中的进程没有影响。如果一个容器进程可以访问外面的资源,甚至获得了宿主机的某些权限,则意味着发生了容器逃逸。
容器逃逸是指这样的一种过程和结果:首先,攻击者通过劫持容器化业务逻辑,或直接控制(CaaS等合法获得容器控制权的场景)的方式,已经获得了容器内某种权限下的命令执行能力;其次,该攻击者利用这种命令执行能力,借助一些手段进一步获得该容器所在直接宿主机(经常见到“物理机运行虚拟机,虚拟机再运行容器”的场景,该场景下的直接宿主机指容器外层的虚拟机)上某种权限下的命令执行能力。
一般来说,攻击者可以利用Linux内核漏洞或容器漏洞来进行容器逃逸,而本实施例提供的容器逃逸检测方法主要就是针对利用内核漏洞进行逃逸的容器进程。
利用内核漏洞进行容器逃逸的一般流程如下:
1.使用内核漏洞进入内核上下文;
2.获取当前进程的task struct(或fs_struct);
3.回溯task list 获取pid=1的task struct(或fs_struct),复制其相关数据;
4.切换当前进程的namespace(或fs_struct)为1号进程的相关数据;
5.完成逃逸、变身(execve)为bash,进行危险操作。
其中,1号进程是一个一定存在于宿主机的进程。
因此,进程发生逃逸可以理解为是某个容器进程从容器的namespace逃逸到了宿主机的namespace上;又因宿主机进程与容器进程的根目录挂载点是不同的,亦可以理解为某个容器进程的根目录挂载点从容器应有的逃逸到了宿主机的根目录挂载点上。
本实施例提供的容器逃逸检测方法就是通过将容器进程的关键信息与宿主机进程的关键信息进行比对以确定是否存在容器逃逸。
具体地,生成insmod命令,根据所述insmod命令将动态可加载内核模块插入到系统中,并通过kprobe技术令所述动态可加载内核模块挂钩所述fork函数和execve函数。
动态可加载内核模块(LKM )是为了扩展操作系统基本内核功能的object代码文件,通常使用LKM为新的硬件或文件系统添加支持,或添加系统调用,当LKM所提供的功能不需要时,也可以卸载LKM以达到释放内存和资源,即LKM是热插拔的。
同时,在Linux系统中,为使kernel更精简,进而提高效率,以及保有较大的弹性,有许多功能是通过模块的方式在需要时才载入内核(kernel)的。insmod命令在Linux系统中就是用于载入模块的。
此外,LKM通过kprobe(kprobe是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术)或者类似技术,挂钩(hook)fork和execve这两个系统调用函数,系统消耗较小,其中,挂钩(hook)是指可以在某个函数(或符号)被调用的前后,插入任意特殊代码,进行数据获取或流程劫持的各种技术。
fork、execve则是跟进程创建息息相关的系统调用函数,当某进程创建子进程时,即需要调用fork函数;当某进程需要变身为一个二进制程序并真正执行流程时,即需要调用execve函数。
具体地,获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值。
首先,获取一号进程即宿主机进程的进程标识符pid,该进程父进程的进程标识符ppid,该进程命名空间的字符串值mnt_ns以及该进程fs_struct结构体的值fs_struct_pointer等关键信息,并将其存入全局表中,其中全局表是指任意内核进程都可以获取的符号表。
当hook点被执行时,LKM陷入当前容器进程的上下文中,此时获取该容器进程的关键信息,并存入全局表中:
1、对容器进程调用fork函数而言,当该系统调用返回时,进入hook点,此时获取数据pid、ppid、mnt_ns和fs_struct_pointer,需要说明的是关键信息在该处代表的具体含义与其他地方略有不同,具体如下:
pid代表本次系统调用fork的执行结果;
ppid代表执行本次系统调用fork的容器进程的进程id;
mnt_ns代表执行本次系统调用fork的容器进程的mnt namespace的字符串值;
fs_struct_pointer代表执行本次系统调用fork的容器进程的fs_struct结构体中的值。
2、对容器进程调用execve函数而言,当该系统调用被初始执行时,进入hook点,此时获取数据pid、ppid、mnt_ns和fs_struct_pointer,其中:
pid代表执行本次系统调用execve的容器进程的进程id;
ppid代表执行本次系统调用execve的容器进程父进程的进程id;
mnt_ns代表执行本次系统调用execve的容器进程的mnt namespace的字符串值;
fs_struct_pointer代表执行本次系统调用execve的容器进程的fs_struct结构体中的值。
在通常情况下,大部分杀毒软件或者终端防护中心(edr)只会hook掉execve事件,原因是在正常情况下,执行一个新进程的流程一般就是先执行一次fork函数再执行一次execve函数,因此只要挂钩execve函数就可以在表中得到所有进程的父子进程关系。
但是部分恶意程序,为了绕过杀毒软件的检测,会执行多次fork函数(循环创建多个子进程),然后再执行逃逸,最后再执行一次execve函数(执行新进程的真实逻辑)。这种情况会导致恶意进程的父进程数据不在表中,造成无法检测的情况发生,因此本实施例创新地hook了fork这个系统调用函数以监控恶意程序的绕过操作。
具体地,当所述容器进程的进程标识符与所述全局表中的某一进程标识符相同时,用所述容器进程的关键信息覆盖所述全局表中该进程标识符对应的原有数据。
针对fork、execve事件,以pid为主键,将获取到的容器进程的pid、ppid、mnt_ns以及fs_struct_pointer等数据进行存表,显而易见,当fork函数和execve函数被不断调用,表中的数据量会不断增大,并且,在Linux内核中pid有最大值限制,随着进程的不断创建与消亡,会出现pid值不够用的问题,因此会有pid复用的情况发生,所以针对接收到的pid已经在表中的情况,直接用最新的数据去覆盖原有的数据即可。
具体地,当所述execve函数每次被容器进程调用时,根据所述容器进程关键信息中的父进程的进程标识符在所述全局表中获取其父进程的关键信息。
其中,只有execve事件发生时,才需要进行查找操作并判断是否存在容器逃逸,以节约性能。
具体的查表操作为:
在此处,记一号进程为P0,当前容器进程为P,当前容器进程的父进程为PP。
通过P.ppid获取到PP的pid,即P.ppid恒等于PP.pid,这句话是指在当前容器进程的上下文中获取到其父进程的id即ppid,根据该ppid确定其父进程的pid,再根据其父进程的pid在全局表中找到其父进程的关键信息。
具体地,查找所述全局表中所述宿主机进程的关键信息,并将所述容器进程的关键信息与其父进程的关键信息和所述宿主机进程的关键信息分别进行比对,当所述容器进程命名空间的字符串值与其父进程命名空间的字符串值不相等且其命名空间的字符串值等于所述宿主机进程命名空间的字符串值时,判定所述容器进程发生逃逸。
亦或是查找所述全局表中所述宿主机进程的关键信息,并将所述容器进程的关键信息与其父进程的关键信息和所述宿主机进程的关键信息分别进行比对,当所述容器进程fs_struct结构体中的值与其父进程fs_struct结构体中的值不相等且其fs_struct结构体中的值等于所述宿主机进程fs_struct结构体中的值时,判定所述容器进程发生逃逸。
若该容器进程的mnt_ns或fs_struct_pointer与其父进程的不同,再在全局表中查找一号进程的关键信息,然后进行比对。
当P.mnt_ns不等于PP_mnt_ns且P.mnt_ns等于P0.mnt_ns时,或者P.fs_struct_pointer不等于PP.fs_struct_pointer且P.fs_struct_pointer等于P0.fs_struct_pointer时,说明存在容器逃逸行为,具体的逃逸进程为P,反之,则不存在逃逸行为。
其检测原理为:
1.当一个进程运行后,其namespace和fs_struct的值不会轻易发生改变,且容器中的进程一般没有权限改变其自身的namespace和fs_struct_pointer;
2.父进程与子进程的namespace和fs_struct的值,一般是相同的,不会轻易发生改变,且容器中的进程一般没有权限改变其子进程的namespace和fs_struct_pointer;
3.通过记录父子进程被创建时的namespace和fs_struct_pointer并进行比较,如果子进程被创建时的namespace和fs_struct_pointer与父进程不同,则说明父进程一定是在创建后的执行过程中,通过某种内核漏洞改变了自身的namespace和fs_struct_pointer,进而实现容器逃逸。
假设最终得到的全局表如表1所示:
表1 全局表
pid | ppid | mnt_ns | fs_struct_pointer |
1 | 0 | 4026531840 | 2053035808 |
2 | 1 | 4026531840 | 2053035808 |
3 | 2 | XXXX | YYYY |
4 | 3 | 4026531840 | 2053035808 |
其中,1号进程和2号进程为宿主机进程,且1号进程是2号进程的父进程,2号进程是3号进程的父进程,因3号进程与2号进程不同,是容器进程,故3号进程的mnt_ns和fs_struct_pointer与其父进程2号进程不一样,3号进程是4号进程的父进程,且4号进程也为容器进程,因此根据该全局表及其检测原理可以判断,4号进程发生了容器逃逸。
具体地,若所述容器进程发生逃逸,则调用exit函数杀死所述容器进程。
如果检出逃逸,则调用exit函数将当前容器进程杀死;如果未检出逃逸,则无动作,该容器进程正常启动。
因为内核是一种特殊的cpu状态,此处通过kprobe进行hook,其实就是进入了该容器进程的上下文、劫持了该容器进程的执行流程,此时调用exit,就是结果该容器进程自身,实现了对该逃逸进程的阻断,可以最大化保护操作系统。
一个进程的生命周期大致可以这样描述:
1.父进程执行fork函数,创建出子进程;
2.子进程执行execve函数,变身成为真正要执行功能的二进制程序(此时只是变身,还没有真正执行功能);
3.子进程执行功能;
4.子进程退出。
因为execve被我们通过kprobe给hook掉了,修改了执行流程,所以真正的功能还没运作起来,我们就可以强制修改流程退出子进程。
最后,如果不需要该LKM,可以随时调用rmmod卸载该模块,实现热插拔。
实施例2
如图2所示,一种容器逃逸检测与阻断装置,包括:
挂载模块10,用于在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;
第一存表模块20,用于获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;
第二存表模块30,用于当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;
判断模块40,用于在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,若是则阻断所述容器进程。
上述装置的一种实施方式可为:挂载模块10在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;第一存表模块20获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;第二存表模块30当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;判断模块40在所述全局表中查找所述宿主机进程的关键信息并与所述容器进程的关键信息进行比对以确定所述容器进程是否发生逃逸,若是则阻断所述容器进程。
实施例3
如图3所示,一种电子设备,包括存储器301和处理器302,所述存储器301用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器302执行以实现上述的一种容器逃逸检测与阻断方法。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述的一种容器逃逸检测与阻断方法。示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器301中,并由处理器302执行,并由输入接口305和输出接口306完成数据的I/O接口传输,以完成本发明,一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在计算机设备中的执行过程。计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算机设备可包括,但不仅限于,存储器301、处理器302,本领域技术人员可以理解,本实施例仅仅是计算机设备的示例,并不构成对计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如计算机设备还可以包括输入器307、网络接入设备、总线等。处理器302可以是中央处理单元(Central ProcessingUnit,CPU),还可以是其他通用处理器302、数字信号处理器302(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器302可以是微处理器302或者该处理器302也可以是任何常规的处理器302等。
存储器301可以是计算机设备的内部存储单元,例如计算机设备的硬盘或内存。存储器301也可以是计算机设备的外部存储设备,例如计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等,进一步地,存储器301还可以既包括计算机设备的内部存储单元也包括外部存储设备,存储器301用于存储计算机程序以及计算机设备所需的其他程序和数据,存储器301还可以用于暂时地存储在输出器308,而前述的存储介质包括U盘、移动硬盘、只读存储器ROM303、随机存储器RAM304、碟盘或光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何在本发明揭露的技术范围内的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种容器逃逸检测与阻断方法,其特征在于,包括以下步骤:
在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;
获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;
当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;
在所述全局表中查找所述宿主机进程的关键信息和所述容器进程父进程的关键信息,并将其分别与所述容器进程的关键信息进行比对;
当所述容器进程命名空间的字符串值与其父进程命名空间的字符串值不相等且其命名空间的字符串值等于所述宿主机进程命名空间的字符串值时,则判定所述容器进程发生逃逸,并阻断所述容器进程;
或当所述容器进程fs_struct结构体中的值与其父进程fs_struct结构体中的值不相等且其fs_struct结构体中的值等于所述宿主机进程fs_struct结构体中的值时,则判定所述容器进程发生逃逸,并阻断所述容器进程。
2.根据权利要求1所述的一种容器逃逸检测与阻断方法,其特征在于,所述方法还包括当所述容器进程的进程标识符与所述全局表中的某一进程标识符相同时,用所述容器进程的关键信息覆盖所述全局表中该进程标识符对应的原有数据。
3.根据权利要求1所述的一种容器逃逸检测与阻断方法,其特征在于,所述在所述全局表中查找所述宿主机进程的关键信息和所述容器进程父进程的关键信息包括当所述execve函数每次被容器进程调用时,根据所述容器进程关键信息中的父进程的进程标识符在所述全局表中获取其父进程的关键信息。
4.根据权利要求1所述的一种容器逃逸检测与阻断方法,其特征在于,所述阻断所述容器进程,包括:调用exit函数杀死所述容器进程。
5.根据权利要求1所述的一种容器逃逸检测与阻断方法,其特征在于,所述在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩fork函数和execve函数,包括:
生成insmod命令,根据所述insmod命令将动态可加载内核模块插入到系统中,并通过kprobe技术令所述动态可加载内核模块挂钩所述fork函数和execve函数。
6.一种容器逃逸检测与阻断装置,其特征在于,包括:
挂载模块,用于在系统中载入动态可加载内核模块,并令所述动态可加载内核模块挂钩用于创建子进程的fork函数和用于将进程转变成二进制程序的execve函数;
第一存表模块,用于获取宿主机进程的关键信息并将其存入全局表,所述关键信息包含其进程标识符、其父进程的进程标识符、其命名空间的字符串值以及其fs_struct结构体中的值;
第二存表模块,用于当所述fork函数或所述execve函数被容器进程调用时,获取所述容器进程的关键信息并存入所述全局表;
判断模块,用于在所述全局表中查找所述宿主机进程的关键信息和所述容器进程父进程的关键信息,并将其分别与所述容器进程的关键信息进行比对;
当所述容器进程命名空间的字符串值与其父进程命名空间的字符串值不相等且其命名空间的字符串值等于所述宿主机进程命名空间的字符串值时,则判定所述容器进程发生逃逸,并阻断所述容器进程;
或当所述容器进程fs_struct结构体中的值与其父进程fs_struct结构体中的值不相等且其fs_struct结构体中的值等于所述宿主机进程fs_struct结构体中的值时,则判定所述容器进程发生逃逸,并阻断所述容器进程。
7.一种电子设备,其特征在于,包括存储器和处理器,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如权利要求1~5中任一项所述的一种容器逃逸检测与阻断方法。
8.一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序使计算机执行时实现如权利要求1~5中任一项所述的一种容器逃逸检测与阻断方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210576478.3A CN114676424B (zh) | 2022-05-25 | 2022-05-25 | 一种容器逃逸检测与阻断方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210576478.3A CN114676424B (zh) | 2022-05-25 | 2022-05-25 | 一种容器逃逸检测与阻断方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114676424A CN114676424A (zh) | 2022-06-28 |
CN114676424B true CN114676424B (zh) | 2022-09-06 |
Family
ID=82080217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210576478.3A Active CN114676424B (zh) | 2022-05-25 | 2022-05-25 | 一种容器逃逸检测与阻断方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114676424B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115373798A (zh) * | 2022-07-25 | 2022-11-22 | 国网新疆电力有限公司乌鲁木齐供电公司 | 一种智能物联终端容器逃逸攻击检测和防御方法 |
CN117827362A (zh) * | 2022-09-29 | 2024-04-05 | 华为终端有限公司 | 一种容器逃逸的检测方法、电子设备及系统 |
CN117056030B (zh) * | 2023-10-10 | 2024-02-09 | 苏州元脑智能科技有限公司 | 容器逃逸的确定方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032129A (zh) * | 2021-04-22 | 2021-06-25 | 北京小佑科技有限公司 | 一种容器阻断用户指定进程生成方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104573506A (zh) * | 2015-01-06 | 2015-04-29 | 中国科学院信息工程研究所 | 基于虚拟机对进程行为实时监控的方法及装置 |
CN107025135B (zh) * | 2017-03-03 | 2020-02-21 | 网易(杭州)网络有限公司 | Docker容器内应用进程管理方法、装置和介质 |
US10678935B2 (en) * | 2017-04-11 | 2020-06-09 | Nicira, Inc. | Identifying container file events for providing container security |
CN107239698A (zh) * | 2017-05-27 | 2017-10-10 | 北京洋浦伟业科技发展有限公司 | 一种基于信号处理机制的反调试方法和装置 |
US11176247B2 (en) * | 2020-04-02 | 2021-11-16 | Aqua Security Software, Ltd. | System and method for container assessment using sandboxing |
CN111881453A (zh) * | 2020-07-20 | 2020-11-03 | 北京百度网讯科技有限公司 | 一种容器逃逸检测方法、装置以及电子设备 |
CN113886835A (zh) * | 2021-10-14 | 2022-01-04 | 苏州浪潮智能科技有限公司 | 容器逃逸的防护方法、装置、计算机设备和存储介质 |
-
2022
- 2022-05-25 CN CN202210576478.3A patent/CN114676424B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032129A (zh) * | 2021-04-22 | 2021-06-25 | 北京小佑科技有限公司 | 一种容器阻断用户指定进程生成方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114676424A (zh) | 2022-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114676424B (zh) | 一种容器逃逸检测与阻断方法、装置、设备及存储介质 | |
US10284591B2 (en) | Detecting and preventing execution of software exploits | |
US11036534B2 (en) | Techniques for serverless runtime application self-protection | |
RU2531861C1 (ru) | Система и способ оценки вредоносности кода, исполняемого в адресном пространстве доверенного процесса | |
US8943592B1 (en) | Methods of detection of software exploitation | |
US10440036B2 (en) | Method and system for modeling all operations and executions of an attack and malicious process entry | |
CN107992751B (zh) | 一种基于分支行为模型的实时威胁检测方法 | |
RU2723665C1 (ru) | Динамический индикатор репутации для оптимизации операций по обеспечению компьютерной безопасности | |
US11042633B2 (en) | Methods for protecting software hooks, and related computer security systems and apparatus | |
US9910983B2 (en) | Malware detection | |
CN108334404B (zh) | 应用程序的运行方法和装置 | |
CN114297630A (zh) | 恶意数据的检测方法、装置、存储介质及处理器 | |
CN112395593B (zh) | 指令执行序列的监测方法及装置、存储介质、计算机设备 | |
CN112395603B (zh) | 基于指令执行序列特征的漏洞攻击识别方法、装置及计算机设备 | |
US20230376591A1 (en) | Method and apparatus for processing security events in container virtualization environment | |
EP3535681B1 (en) | System and method for detecting and for alerting of exploits in computerized systems | |
CN112307469A (zh) | 入侵内核的防御方法及装置、计算设备、计算机存储介质 | |
EP3819799B1 (en) | Method of threat detection | |
CN106709331B (zh) | 一种消息钩子防注入方法、装置以及客户端 | |
CN111444509A (zh) | 基于虚拟机实现的cpu漏洞检测方法及系统 | |
CN113518055B (zh) | 数据安全防护的处理方法及装置、存储介质、终端 | |
CN112395595B (zh) | 指令执行序列的监测方法及装置、存储介质、计算机设备 | |
CN114647843A (zh) | 父进程识别方法、装置、电子设备、存储介质及程序 | |
US20180114022A1 (en) | Protected loading of a module |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 1st Floor, Building 3, No. 2616, Yuhangtang Road, Cangqian Street, Yuhang District, Hangzhou City, Zhejiang Province, 311100 Applicant after: HANGZHOU MOAN TECHNOLOGY CO.,LTD. Address before: 311100 10th floor, Block E, building 1, 1378 Wenyi West Road, Cangqian street, Yuhang District, Hangzhou City, Zhejiang Province Applicant before: HANGZHOU MOAN TECHNOLOGY CO.,LTD. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |