CN117473501A - 基于eBPF的隐藏进程检测方法、装置、设备及介质 - Google Patents
基于eBPF的隐藏进程检测方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN117473501A CN117473501A CN202311475825.4A CN202311475825A CN117473501A CN 117473501 A CN117473501 A CN 117473501A CN 202311475825 A CN202311475825 A CN 202311475825A CN 117473501 A CN117473501 A CN 117473501A
- Authority
- CN
- China
- Prior art keywords
- ebpf
- file
- function
- tracking
- termination
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 626
- 230000008569 process Effects 0.000 title claims abstract description 590
- 238000001514 detection method Methods 0.000 title claims abstract description 37
- 230000006870 function Effects 0.000 claims description 163
- 230000003068 static effect Effects 0.000 claims description 14
- 238000005516 engineering process Methods 0.000 abstract description 8
- 230000004044 response Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供一种基于eBPF的隐藏进程检测方法、装置、设备及介质,所述方法包括:响应于创建函数被调用,通过在内核态中执行挂载于创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;响应于终止函数被调用,通过在内核态中执行挂载于终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新进程文件;在用户态中获取用于记录进程信息的虚拟文件系统,并针对进程文件记录的每个运行进程,从虚拟文件系统中查找运行进程的进程信息;确定未查找到进程信息的目标进程为隐藏进程。通过eBPF技术跟踪进程创建与终止,维护进程文件记录所有运行进程,以及对比虚拟文件系统与进程文件的进程异同,从而排查出隐藏进程。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种基于eBPF的隐藏进程检测方法、装置、设备及介质。
背景技术
随着手机、个人电脑等网络终端的普及,如何保障信息安全也成为当前首要解决的安全问题。其中,一些病毒或黑客的恶意进程由于不想被发现,会在系统中隐藏运行。而恶意进程隐藏在本质意义上就是将恶意进程的信息抹去,但恶意进程仍然驻留在内存中,在后台默默运行。但用户却无法看到被隐藏的恶意进程,导致无法及时地阻止其攻击行为。因此,如何检测系统中的隐藏进程成为保护计算机系统安全的重要内容。
发明内容
本申请实施例的目的在于提供一种基于eBPF的隐藏进程检测方法、装置、设备及介质,用以实现检测系统中隐藏进程的技术效果。
本申请实施例第一方面提供了一种基于eBPF的隐藏进程检测方法,所述方法包括:
响应于创建函数被调用,通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;
响应于终止函数被调用,通过在内核态中执行挂载于所述终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新所述进程文件;
在用户态中获取用于记录进程信息的虚拟文件系统,并针对所述进程文件记录的每个运行进程,从所述虚拟文件系统中查找所述运行进程的进程信息;
确定未查找到进程信息的目标进程为隐藏进程。
在上述实现过程中,利用eBPF技术跟踪进程的创建与终止,通过维护进程文件来记录系统中所有正在运行的运行进程。以及通过获取只能显示未被隐藏进程的虚拟文件系统,并对比虚拟文件系统与进程文件中所显示的进程异同,从而排查出隐藏进程,实现了检测系统中隐藏进程的技术效果。
进一步地,所述创建函数设置有静态挂载点,所述挂载于创建函数的eBPF跟踪程序为tracepoint类型的eBPF跟踪程序,所述tracepoint类型的eBPF跟踪程序挂载于所述静态挂载点中。
在上述实现过程中,利用创建函数中预设的静态挂载点来挂载tracepoint类型的eBPF跟踪程序,由于静态挂载点具有稳定的接口,且不会随着内核版本变化而变化,因此可以提高内核跟踪程序的可移植性。
进一步地,所述挂载于终止函数的eBPF跟踪程序为kretprobe类型的eBPF跟踪程序;所述跟踪获取终止进程的进程数据,并更新所述进程文件,包括:
获取所述终止函数的执行结果;
在所述执行结果指示执行成功的情况下,从所述进程文件中删除所述终止进程的进程数据。
在上述实现过程中,通过在终止函数中挂载kretprobe类型的eBPF跟踪程序,可以获取终止函数的执行结果。在执行结果指示执行成功,确定进程终止成功后,再从进程文件中删除终止进程的进程数据,避免了在进程终止失败的情况下,误删进程文件中的进程数据,导致遗漏检测。
进一步地,所述终止函数包括主动终止函数、与强制终止函数。
在上述实现过程中,通过在这两种终止函数中挂载eBPF跟踪程序,可以监控到所有的进程终止事件,确保所有已终止的进程都会在进程文件中被删除,从而可以避免后续的隐藏进程检测中发生误判。
进一步地,所述创建函数用于创建进程或线程;所述通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中,包括:
通过执行所述eBPF跟踪程序,跟踪获取创建的描述符结构体;
从所述描述符结构体中,获取进程标识与线程标识;
在所述进程标识与所述线程标识相同的情况下,确定本次调用所述创建函数用于进行进程的创建;
从所述描述符结构体中获取所述创建进程的进程数据,并记录在进程文件中。
在上述实现过程中,通过描述符结构体中的进程标识与线程标识可以区分出创建对象是进程还是线程,从而避免了因将创建的线程错误地记录在进程文件后,导致错误地将线程认定为隐藏进程,由此提高了隐藏进程的检测准确率。
进一步地,所述确定未查找到进程信息的目标进程为隐藏进程,包括:
在经过预设时间后,判断所述进程文件是否存在所述目标进程的进程数据;
若存在,确定所述目标进程为隐藏进程。
在上述实现过程中,通过对目标进程利用经过预设时间后的进程文件进行二次核验,避免了因进程文件的更新时延导致将终止进程误判为隐藏进程,从而提高隐藏进程的检测准确率。
进一步地,所述方法还包括:
输出关于所述隐藏进程的告警信息。
在上述实现过程中,通过输出隐藏进程的告警信息,可以及时通知用户对隐藏进程执行相应措施,从而及时阻止攻击行为,提高系统防护性能。
本申请实施例第二方面提供了一种基于eBPF的隐藏进程检测装置,所述装置包括:
第一跟踪模块,用于响应于创建函数被调用,通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;
第二跟踪模块,用于响应于终止函数被调用,通过在内核态中执行挂载于所述终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新所述进程文件;
查找模块,用于在用户态中获取用于记录进程信息的虚拟文件系统,并针对所述进程文件记录的每个运行进程,从所述虚拟文件系统中查找所述运行进程的进程信息;
确定模块,用于确定未查找到进程信息的目标进程为隐藏进程。
本申请实施例第三方面提供了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器调用所述可执行指令时实现第一方面所述方法的操作。
本申请实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令被处理器执行时实现第一方面任一所述方法的步骤。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种基于eBPF的隐藏进程检测方法的流程示意图;
图2为本申请实施例提供的另一种基于eBPF的隐藏进程检测方法的流程示意图;
图3为本申请实施例提供的另一种基于eBPF的隐藏进程检测方法的流程示意图;
图4为本申请实施例提供的另一种基于eBPF的隐藏进程检测方法的流程示意图;
图5为本申请实施例提供的一种基于eBPF的隐藏进程检测装置的结构框图;
图6为本申请实施例提供的一种电子设备的硬件结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
目前,为了隐藏恶意进程,黑客往往通过劫持诸如getdents函数等系统调用函数,修改系统调用函数的源码,或修改libc库中的readdir函数的源码,来过滤特定的目录、文件等。
而在使用诸如ps、top等进程查看工具时,进程查看工具由于调用了上述已被修改的系统调用函数,导致用户无法通过进程查看工具查看已被隐藏的特定进程,从而无法及时地阻止其攻击行为。
为此,本申请提供了一种基于eBPF的隐藏进程检测方法,用于检测被隐藏的进程(以下简称隐藏进程)。其中,所述eBPF(extended Berkeley Packet Filter,扩展的伯克利包过滤器)技术,是一种可以在Linux系统内核中运行用户编写的程序,而不需要修改内核代码或加载内核模块的技术。简单地说,eBPF技术让系统内核变得可编程化。
具体地,上述隐藏进程检测方法,可以包括如图1所示的步骤110-步骤140。
步骤110:响应于创建函数被调用,通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;
其中,创建函数为内核调用函数。在本实施例中,创建函数预先挂载了eBPF跟踪程序,使得当调用创建函数时,其挂载的eBPF跟踪程序在内核态中自动执行。通过执行创建函数所挂载的eBPF跟踪程序,可以跟踪获取创建进程的进程数据。所述创建进程是指通过调用创建函数所创建的进程。在得到进程数据后,可以将其记录在进程文件中。
如此,每当调用创建函数来进行进程的创建时,对应的创建进程的进程数据都会被记录在进程文件中。因此进程文件可用于记录所有新建的进程的进程数据,又或者说,进程文件可用于记录所有正在运行的进程(以下简称运行进程)的进程数据。
示例性地,所述进程文件可以包括但不限于eBPF Map类型的进程表。eBPF Map是驻留在内核中的以键值方式存储数据的数据结构。当然,进程文件并不仅限于表格的形式。任何可以记录进程数据的形式都可以用作进程文件。
示例性地,进程数据可以包括但不限于创建进程的进程号、进程名称、命令行参数中的一种或多种组合。若使用上述进程表存储进程数据,那么可以将进程表的键(key)设置为进程号,进程表的值(value)设置为进程名称与命令行参数。
步骤120:响应于终止函数被调用,通过在内核态中执行挂载于所述终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新所述进程文件;
其中,终止函数为内核调用函数。在本实施例中,终止函数预先挂载了eBPF跟踪程序,使得当调用终止函数时,其挂载的eBPF跟踪程序在内核态中自动执行。通过执行终止函数所挂载的eBPF跟踪程序,可以跟踪获取终止进程的进程数据。所述终止进程是指通过调用终止函数被终止的进程。随后,可以根据终止进程的进程数据,来更新进程文件。例如,可以将进程文件记录的终止进程的进程数据删除。
如此,每当调用终止函数来进行进程的终止时,可以利用对应的终止进程的进程数据来更新进程文件,使得进程文件及时更新记录的运行进程。
示例性地,创建函数所挂载的eBPF跟踪程序与终止函数所挂载的eBPF跟踪程序可以是相同的程序,也可以是不同的程序。
步骤130:在用户态中获取用于记录进程信息的虚拟文件系统,并针对所述进程文件记录的每个运行进程,从所述虚拟文件系统中查找所述运行进程的进程信息;
步骤140:确定未查找到进程信息的目标进程为隐藏进程。
虚拟文件系统用于记录进程信息。示例性地,虚拟文件系统可以是Linux系统下的/proc文件目录,也即proc文件系统。虚拟文件系统包含了内核信息、硬件信息、与进程信息等。用户可以通过这些信息查看有关系统硬件以及当前正在运行的进程的信息。
以/proc文件目录为例,诸如ps、top等进程查看工具可以通过调用openat系统函数来获取/proc文件目录中的文件句柄,然后调用getdents系统函数递归获取/proc文件目录下的所有文件信息(包括子目录)。随后通过调用open函数打开/proc/进程pid/stat、/proc/进程pid/status、与/proc/进程pid/cmdline文件,从而获取进程信息。
然而,如上文所述,黑客可以通过劫持getdents系统函数来过滤特定的目录与文件,最终实现对特定进程的隐藏。因此当用户通过进程查看工具查看虚拟文件系统记录的进程信息时,得到的实际上是特定进程已被隐藏后,剩余进程的进程信息。换句话说,用户无法在看虚拟文件系统中查找到已被隐藏的进程。但在eBPF的进程文件中,其记录了所有运行进程的进程数据。黑客无法修改进程文件中的进程数据。因此隐藏进程也会在进程文件中被记录。
如此,在步骤130中,在用户态中可以获取虚拟文件系统与进程文件。示例性地,可以通过进程查看工具获取虚拟文件系统,以及可以通过eBPF的接口调用进程文件。获取的虚拟文件系统中显示有除隐藏进程外,其余运行进程的进程信息,而获取的进程文件则显示有包括隐藏进程的所有运行进程的进程数据。那么,针对进程文件所记录的每个运行进程,逐一从虚拟文件系统中查找该运行进程的进程信息。若进程文件中的某一运行进程,在虚拟文件系统中查到对应的进程信息,说明该运行进程未被隐藏。若进程文件中的某一运行进程,在虚拟文件系统中未查到到对应的进程信息,说明该运行进程以被黑客通过系统函数劫持的方式进行隐藏。由此可以确定,在所有的运行进程中,在虚拟文件系统中未查找到进程信息所对应的目标进程为隐藏进程。
可选地,上述步骤130可以周期性执行,使得可以周期性地检测是否系统中是否存在隐藏进程,以及时处理。
可见在本实施例中,利用eBPF技术跟踪进程的创建与终止,通过维护进程文件来记录系统中所有正在运行的运行进程。以及通过获取只能显示未被隐藏进程的虚拟文件系统,并对比虚拟文件系统与进程文件中所显示的进程异同,从而排查出隐藏进程,实现了检测系统中隐藏进程的技术效果。
此外,基于eBPF技术进行隐藏进程的检测,无需修改系统的内核源码,方便部署。就算在无法修改内核源码的场景下也适用,相比于相关技术中需要修改内核函数才能实现隐藏进程检测的方案来说,基于eBPF技术的隐藏进程检测方法能适用于更多的场景,具有更高的适用性。
关于创建函数中挂载有eBPF跟踪程序,在一些实施例中,创建函数可以设置有静态挂载点。挂载于创建函数的eBPF跟踪程序可以是tracepoint类型的eBPF跟踪程序。如此,所述tracepoint类型的eBPF跟踪程序可以挂载于创建函数的静态挂载点中。
所述静态挂载点,是指在内核开发人员编写内核函数时在代码中设置的挂载点。示例性地,该静态挂载点的函数名称为sched_process_fork,也即创建函数中预设有sched_process_fork()函数。而在本实施例中,在sched_process_fork()函数中挂载tracepoint类型的eBPF跟踪程序,且在完成进程的创建后再调用sched_process_fork()函数,使得可以通过其中挂载的tracepoint类型的eBPF跟踪程序获取到创建进程的进程数据。
在本实施例中,利用创建函数中预设的静态挂载点来挂载tracepoint类型的eBPF跟踪程序,由于静态挂载点具有稳定的接口,且不会随着内核版本变化而变化,因此可以提高内核跟踪程序的可移植性。
关于创建函数中挂载有eBPF跟踪程序,在一些实施例中,创建函数可以挂载有kretprobe类型的eBPF跟踪程序。其中,kretprobe是Linux内核提供的函数探针,可以动态地对指定的内核函数进行探测。kretprobe往往用于函数执行返回。通过kretprobe可以在需要观测的内核函数执行返回时,触发eBPF程序。
如此,若创建函数挂载的是kretprobe类型的eBPF跟踪程序,那么步骤110中跟踪获取创建进程的进程数据,具体可以包括:获取创建函数的执行结果;在执行结果指示执行成功的情况下,获取创建进程的进程数据。
在调用创建函数来进行进程的创建时,进程可以能会创建成功,也可能会创建失败。在使用kretprobe类型的eBPF跟踪程序时,需要获取创建函数的执行结果。若执行结果指示执行成功,说明进程创建成功,此时可以获取创建进程的进程数据并记录在进程文件中。若执行结果指示执行失败,说明进程创建失败。此时系统中没有产生新的进程,因此无需获取进程数据。
可见,与tracepoint类型的eBPF跟踪程序相比,通过kretprobe类型的eBPF跟踪程序来跟踪创建函数时,需要首先获取创建函数的执行结果,再根据执行结果确定是否获取进程数据。而通过tracepoint类型的eBPF跟踪程序来跟踪创建函数时,则是在完成进程的创建后自动执行tracepoint类型的eBPF跟踪程序,无需读取创建函数的执行结果。
此外,关于终止函数中挂载有eBPF跟踪程序,在一些实施例中,终止函数可以挂载有kretprobe类型的eBPF跟踪程序。如此,上述步骤120中跟踪获取终止进程的进程数据的过程,具体可以包括如图2所示的步骤121-步骤122。
步骤121:获取所述终止函数的执行结果;
步骤122:在所述执行结果指示执行成功的情况下,从所述进程文件中删除所述终止进程的进程数据。
在调用终止函数来进行进程的终止时,进程可能会终止成功,也可能会终止失败。若进程终止失败,则代表该进程还在运行中。因此,在执行kretprobe类型的eBPF跟踪程序时,首先会获取终止函数的执行结果。若执行结果指示执行成功,说明进程终止成功。此时可以获取终止进程的进程数据来更新进程文件,例如将进程文件中终止进程对应的进程数据删除。若执行结果指示执行失败,说明进程终止失败,此时该进程还在运行中,则无需更新进程文件。
可见,在本实施例中,通过在终止函数中挂载kretprobe类型的eBPF跟踪程序,可以获取终止函数的执行结果。在执行结果指示执行成功,确定进程终止成功后,再从进程文件中删除终止进程的进程数据,避免了在进程终止失败的情况下,误删进程文件中的进程数据,导致遗漏检测。
在上述实施例的基础上,所述终止函数可以包括主动终止函数、与强制终止函数。
示例性地,主动终止函数是指进程主动结束运行时,所调用的内核态的系统函数。例如,主动终止函数可以是sys_exit()系统函数。
示例性地,强制终止函数是指系统强制终止进程结束运行时,所调用的内核态的系统函数。例如,强制终止函数可以是sys_kill()系统函数。
主动终止函数与强制终止函数都可以让运行进程终止。因此通过在这两种终止函数中挂载eBPF跟踪程序,可以监控到所有的进程终止事件,确保所有已终止的进程都会在进程文件中被删除,从而可以避免后续的隐藏进程检测中发生误判。
关于创建函数,在一些实施例中,创建函数可以用于创建进程或线程。示例性地,在Linux内核中,创建函数可以是do_fork()系统函数。由于创建函数既可以用于进程的创建,又可以用于线程的创建,那么当创建函数被调用时,该次调用的结果可能是新的进程被创建,也可能是新的线程被创建。
然而,线程并不存在相关目录和文件的,在虚拟系统文件中不会产生相应的记录。若将线程错误地认作为进程,并将线程的线程数据作为进程数据记录在进程文件中,则会导致后续将进程文件与虚拟系统文件进行对比时,错误地将线程认定为隐藏进程,继而导致隐藏进程误报的情况。
为此,在本实施例中,为了确定创建函数被调用时,创建对象为进程还是线程,上述步骤110具体可以包括如图3所示的步骤111-步骤114。
步骤111:通过执行所述eBPF跟踪程序,跟踪获取创建的描述符结构体;
执行挂载在创建函数中的eBPF跟踪程序,可以获取描述符结构体。其中,该描述符结构体是创建对象的描述符结构体。也即,若创建函数被调用时,创建对象为进程,那么步骤111中获取的描述符结构体为所创建的进程的描述符结构体。若创建函数被调用时,创建对象为线程,那么步骤111中获取的描述符结构体为所创建的线程的描述符结构体。
示例性地,所述描述符结构体可以是task_struct结构体。在Linux内核中,进程与线程均使用task_struct结构体进行描述。
步骤112:从所述描述符结构体中,获取进程标识与线程标识;
描述符结构体中记录有进程标识与线程标识。所述进程标识用于唯一标识进程,例如可以是进程的唯一标识字符串,如进程ID(Identification,身份)。所述线程标识用于唯一标识线程,例如可以是线程的唯一标识字符串,如线程ID。例如,在task_struct结构体中,可以通过pid字段来描述线程标识,通过tgid字段来描述进程标识。
步骤113:在所述进程标识与所述线程标识相同的情况下,确定本次调用所述创建函数用于进行进程的创建;
进程包括一个或多个线程,可以通过进程标识与线程标识来区分线程或进程。具体地,若进程标识与线程标识相同,则可以确定本次调用创建函数用于进行进程的创建。也即步骤111中获取的描述符结构体为进程的描述符结构体。此时,进程标识记录的是创建进程的进程号。
若进程标识与线程标识不相同,则可以确定本次调用创建函数用于进行线程的创建。也即步骤111中获取的描述符结构体为线程的描述符结构体。此时,线程标识记录的是所创建的线程的线程号,而进程标识记录的是该线程所属进程的进程号。
可知,在确定本次调用创建函数用于进行进程的创建的情况下,继续执行步骤114。若确定本次调用创建函数用于进行线程的创建,则退出方法的执行。
步骤114:从所述描述符结构体中获取所述创建进程的进程数据,并记录在进程文件中。
描述符结构体中记录有进程数据。示例性地,若进程数据包括进程号、进程名称、与命令行参数,那么可以从描述符结构体中获取这些进程数据。以task_struct结构体为例,task_struct结构体除了记录有pid字段与tgid以外,还记录有进程的名字、以及用于描述进程的地址空间的mm_struct结构体。其中,进程的命令行参数存储在mm_struct结构体中。因此,当进程数据包括进程号、进程名称、与命令行参数时,可以在描述符结构体中获取所需的进程数据,并将其记录在进程文件中。
可见,在本实施例中,通过描述符结构体中的进程标识与线程标识可以区分出创建对象是进程还是线程,从而避免了因将创建的线程错误地记录在进程文件后,导致错误地将线程认定为隐藏进程,由此提高了隐藏进程的检测准确率。
此外,在一些场景中,当发生进程终止时,可能由于各种原因导致进程文件没来得及更新,即进程文件存在更新时延。此时,若在进程文件更新之前,就被用于检测当前系统是否存在隐藏进程,就会导致已终止的进程在进程表中还存在进程数据,但在虚拟文件系统中已经删除了该进程的进程信息,从而导致错误地将该已终止的进程判定为隐藏进程,继而发生误报。
为此,在本实施例中,为了提高隐藏进程的检测准确率,提出了上述隐藏进程检测方法还可以包括如图4所示的步骤410-步骤420。
步骤410:在经过预设时间后,判断所述进程文件是否存在所述目标进程的进程数据;
步骤420:若存在,确定所述目标进程为隐藏进程。
其中,所示预设时间可以根据进程文件的更新时延确定,只需在经过预设时间后,进程文件已更新即可。如此,当在步骤130中通过对比虚拟文件系统与进程文件的差异,确定出未查找到进程信息的目标进程后,可以将该目标进程进行标记。被标记的目标进程是可能的隐藏进程。随后,在经过预设时间后,在确保进程文件已更新后,判断被标记的进程文件是否存在目标进程的进程数据。若不存在,说明该目标进程在步骤130所使用的进程文件中由于更新时延还没来得及删除数据,可以确定该目标进程为终止进程,而非隐藏进程。若存在,则可以确定该目标进程为隐藏进程。
可见,在本实施例中,通过对目标进程利用经过预设时间后的进程文件进行二次核验,避免了因进程文件的更新时延导致将终止进程误判为隐藏进程,从而提高隐藏进程的检测准确率。
此外,在一些实施例中,上述隐藏进程的检测方法,还可以包括步骤:
输出关于所述隐藏进程的告警信息。
在确定出系统存在隐藏进程后,可以进一步地输出关于该隐藏进程的告警信息。该告警信息可以用于指示系统存在隐藏进程,以提示用户及时执行相应措施。
可选地,告警信息中还可以携带隐藏进程的进程数据,例如包括但不限于进程号、进程名称、命令行参数等等,使得用户可以通过进程数据快速定位至隐藏进程。
本实施例通过输出隐藏进程的告警信息,可以及时通知用户对隐藏进程执行相应措施,从而及时阻止攻击行为,提高系统防护性能。
此外,本申请还提供了一种基于eBPF的隐藏进程检测方法,实现过程如下:
首先,在do_fork()系统函数中的sched_process_fork()系统函数中下发tracepoint类型的eBPF跟踪程序。其中,do_fork()函数用于创建进程或线程。
在sys_exit()系统函数和sys_kill()系统函数中下发kretprobe类型的eBPF跟踪程序。其中,sys_exit()系统函数在进程主动结束运行时被调用。sys_kill()系统函数在进程被强制终止时被调用。
创建一个如表1所示的eBPF Map类型的进程表,用于记录创建进程的进程数据。其中,进程数据包括进程号、进程名称与命令行参数。进程表的key用于记录进程号,value用于记录进程名称与命令行参数。
表1
进程号 | 进程名称 | 命令行参数 |
1 | bash | -i |
... | .... | ... |
随后,响应于do_fork()系统函数被调用,在内核态中执行挂载在sched_process_fork()系统函数的tracepoint类型的eBPF跟踪程序,以获取创建对象的task_struct结构体。并在task_struct结构体中获取pid字段与tgid字段。
判断pid字段与tgid字段是否相同。若相同,说明创建对象为创建进程,则进一步从task_struct结构体中获取创建进程的进程号与进程名称,以及从task_struct结构体内含的mm_struct结构体中获取命令行参数。随后将进程号、进程名称与命令行参数作为进程数据存储在进程表中。若不相同,说明创建对象为线程,则退出方法执行。
响应于sys_exit()系统函数或sys_kill()系统函数被调用,在内核态中执行挂载的kretprobe类型的eBPF跟踪程序。此时,首先判断sys_exit()系统函数或sys_kill()系统函数的执行结果。若执行结果指示执行成功,则获取终止进程的进程数据,并在进程表中删除该终止进程的进程数据。若执行结果指示执行失败,则退出方法执行。
而在用户态中,可以周期性地通过eBPF的接口获取进程表,以及通过进程查看工具获取/proc文件目录。针对进程表中的每个运行进程,在/proc文件目录中分别查找每个运行进程对应的相关目录与文件。对于在/proc文件目录中未查找进程信息的目标进程,可以先将其标记为可能的隐藏进程。
随后,对于每个被标记的目标进程,在经过预设时间后,可以重新在进程表中逐一判断是否存在目标进程的进程数据。若不存在,则确定被标记的目标进程为终止进程。若存在,则可以确定被标记的目标进程为隐藏进程。此时可以从进程表中获取隐藏进程的进程数据,并携带于告警信息中进行输出,以提示用户系统存在隐藏进程。
可知,本申请提供的隐藏进程检测方法,由于是基于eBPF技术实现的,因此在不需要修改内核源码的情况下就能实现隐藏进程的检测,方便部署,且适用于各个场景。同时通过区分线程与进程,以及通过二次核验来避免隐藏进程误判的情况,提高了检测准确率。
基于上述任意实施例,本申请还提供了一种基于eBPF的隐藏进程检测装置。如图5所示,该检测装置500包括:
第一跟踪模块510,用于响应于创建函数被调用,通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;
第二跟踪模块520,用于响应于终止函数被调用,通过在内核态中执行挂载于所述终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新所述进程文件;
查找模块530,用于在用户态中获取用于记录进程信息的虚拟文件系统,并针对所述进程文件记录的每个运行进程,从所述虚拟文件系统中查找所述运行进程的进程信息;
确定模块540,用于确定未查找到进程信息的目标进程为隐藏进程。
在一些实施例中,所述创建函数设置有静态挂载点,所述挂载于创建函数的eBPF跟踪程序为tracepoint类型的eBPF跟踪程序,所述tracepoint类型的eBPF跟踪程序挂载于所述静态挂载点中。
在一些实施例中,所述挂载于终止函数的eBPF跟踪程序为kretprobe类型的eBPF跟踪程序;第二跟踪模块520具体用于:
获取所述终止函数的执行结果;
在所述执行结果指示执行成功的情况下,从所述进程文件中删除所述终止进程的进程数据。
在一些实施例中,所述终止函数包括主动终止函数、与强制终止函数。
在一些实施例中,所述创建函数用于创建进程或线程;第一跟踪模块510具体用于:
通过执行所述eBPF跟踪程序,跟踪获取创建的描述符结构体;
从所述描述符结构体中,获取进程标识与线程标识;
在所述进程标识与所述线程标识相同的情况下,确定本次调用所述创建函数用于进行进程的创建;
从所述描述符结构体中获取所述创建进程的进程数据,并记录在进程文件中。
在一些实施例中,确定模块540具体用于:
在经过预设时间后,判断所述进程文件是否存在所述目标进程的进程数据;
若存在,确定所述目标进程为隐藏进程。
在一些实施例中,该检测装置500还包括:
输出模块,用于输出关于所述隐藏进程的告警信息。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
基于上述任意实施例所述的一种基于eBPF的隐藏进程检测方法,本申请还提供了如图6所示的一种电子设备的结构示意图。如图6,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述任意实施例所述的一种基于eBPF的隐藏进程检测方法。
本申请还提供了一种计算机存储介质,存储介质存储有计算机程序,计算机程序被处理器执行时可用于执行上述任意实施例所述的一种基于eBPF的隐藏进程检测方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种基于eBPF的隐藏进程检测方法,其特征在于,所述方法包括:
响应于创建函数被调用,通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;
响应于终止函数被调用,通过在内核态中执行挂载于所述终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新所述进程文件;
在用户态中获取用于记录进程信息的虚拟文件系统,并针对所述进程文件记录的每个运行进程,从所述虚拟文件系统中查找所述运行进程的进程信息;
确定未查找到进程信息的目标进程为隐藏进程。
2.根据权利要求1所述的方法,其特征在于,所述创建函数设置有静态挂载点,所述挂载于创建函数的eBPF跟踪程序为tracepoint类型的eBPF跟踪程序,所述tracepoint类型的eBPF跟踪程序挂载于所述静态挂载点中。
3.根据权利要求1所述的方法,其特征在于,所述挂载于终止函数的eBPF跟踪程序为kretprobe类型的eBPF跟踪程序;所述跟踪获取终止进程的进程数据,并更新所述进程文件,包括:
获取所述终止函数的执行结果;
在所述执行结果指示执行成功的情况下,从所述进程文件中删除所述终止进程的进程数据。
4.根据权利要求3所述的方法,其特征在于,所述终止函数包括主动终止函数、与强制终止函数。
5.根据权利要求1所述的方法,其特征在于,所述创建函数用于创建进程或线程;所述通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中,包括:
通过执行所述eBPF跟踪程序,跟踪获取创建的描述符结构体;
从所述描述符结构体中,获取进程标识与线程标识;
在所述进程标识与所述线程标识相同的情况下,确定本次调用所述创建函数用于进行进程的创建;
从所述描述符结构体中获取所述创建进程的进程数据,并记录在进程文件中。
6.根据权利要求1所述的方法,其特征在于,所述确定未查找到进程信息的目标进程为隐藏进程,包括:
在经过预设时间后,判断所述进程文件是否存在所述目标进程的进程数据;
若存在,确定所述目标进程为隐藏进程。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
输出关于所述隐藏进程的告警信息。
8.一种基于eBPF的隐藏进程检测装置,其特征在于,所述装置包括:
第一跟踪模块,用于响应于创建函数被调用,通过在内核态中执行挂载于所述创建函数的eBPF跟踪程序,跟踪获取创建进程的进程数据,并记录在进程文件中;
第二跟踪模块,用于响应于终止函数被调用,通过在内核态中执行挂载于所述终止函数的eBPF跟踪程序,跟踪获取终止进程的进程数据,并更新所述进程文件;
查找模块,用于在用户态中获取用于记录进程信息的虚拟文件系统,并针对所述进程文件记录的每个运行进程,从所述虚拟文件系统中查找所述运行进程的进程信息;
确定模块,用于确定未查找到进程信息的目标进程为隐藏进程。
9.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器调用所述可执行指令时实现权利要求1-7任一所述方法的操作。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机指令,所述计算机指令被处理器执行时实现权利要求1-7任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311475825.4A CN117473501A (zh) | 2023-11-07 | 2023-11-07 | 基于eBPF的隐藏进程检测方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311475825.4A CN117473501A (zh) | 2023-11-07 | 2023-11-07 | 基于eBPF的隐藏进程检测方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117473501A true CN117473501A (zh) | 2024-01-30 |
Family
ID=89639331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311475825.4A Pending CN117473501A (zh) | 2023-11-07 | 2023-11-07 | 基于eBPF的隐藏进程检测方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117473501A (zh) |
-
2023
- 2023-11-07 CN CN202311475825.4A patent/CN117473501A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10235520B2 (en) | System and method for analyzing patch file | |
US20060010337A1 (en) | Management system and management method | |
US8930915B2 (en) | System and method for mitigating repeated crashes of an application resulting from supplemental code | |
US20140053267A1 (en) | Method for identifying malicious executables | |
JP2005339565A (ja) | 自動開始拡張ポイントを介したスパイウェアおよび不要ソフトウェアの管理 | |
CN112818307B (zh) | 用户操作处理方法、系统、设备及计算机可读存储介质 | |
CN109426591B (zh) | 守护windows单一程序的多个进程的方法及设备 | |
JP2010049627A (ja) | コンピュータウィルス検出システム | |
US8799716B2 (en) | Heap dump occurrence detection | |
US7620983B1 (en) | Behavior profiling | |
CN111931192B (zh) | rootkit检测方法、装置及电子设备 | |
CN112003824B (zh) | 攻击检测方法、装置及计算机可读存储介质 | |
CN117473501A (zh) | 基于eBPF的隐藏进程检测方法、装置、设备及介质 | |
CN110874474A (zh) | 勒索者病毒防御方法、装置、电子设备及存储介质 | |
CN106446687B (zh) | 恶意样本的检测方法及装置 | |
CN112948020B (zh) | 一种配置文件的处理方法和装置 | |
US20190018963A1 (en) | Root Virus Removal Method and Apparatus, and Electronic Device | |
CN113590264A (zh) | 一种容器环境下的文件防篡改方法及装置 | |
WO2022228664A1 (en) | Management server and method for file storage management | |
CN114640529B (zh) | 攻击防护方法、装置、设备、存储介质和计算机程序产品 | |
US20240152615A1 (en) | Device for extracting trace of act, method for extracting trace of act, and program for extracting trace of act | |
US20220229660A1 (en) | Iterative method and device for detecting an approximate zone occupied by the computer code of an operating system core in a memory | |
CN113836542B (zh) | 可信白名单匹配方法、系统和装置 | |
CN112906000B (zh) | 一种程序访问方法、装置、设备及可读存储介质 | |
KR102309695B1 (ko) | 호스트 침입 탐지를 위한 파일 기반 제어방법 및 장치 |
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 |