CN116107846B - 一种基于EBPF的Linux***事件监控方法及装置 - Google Patents
一种基于EBPF的Linux***事件监控方法及装置 Download PDFInfo
- Publication number
- CN116107846B CN116107846B CN202310388346.2A CN202310388346A CN116107846B CN 116107846 B CN116107846 B CN 116107846B CN 202310388346 A CN202310388346 A CN 202310388346A CN 116107846 B CN116107846 B CN 116107846B
- Authority
- CN
- China
- Prior art keywords
- file
- file item
- operated
- item
- monitoring
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/32—Monitoring with visual or acoustical indication of the functioning of the machine
- G06F11/324—Display of status information
- G06F11/327—Alarm or error message display
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供了一种基于EBPF的Linux***事件监控方法及装置,通过建立监控文件项列表及监控事件队列;加载Kprobe BPF至目标***调用节点;若目标***调用节点被调用,则通过Kprobe BPF获取***作文件项的唯一标识;基于Linux***文件的结构、***作文件项的唯一标识及被监控文件项的唯一标识判断***作文件项是否被监控;若***作文件项被监控,则通过Kprobe BPF采集***作文件项的路径信息及***调用信息;将***作文件项的路径信息及***调用信息存入事件队列,并发出文件事件报警,本申请可在不***内核模块情况下,实现高效文件监控、并且可以获取到篡改文件的具体进程。
Description
技术领域
本申请各实施例属信息安全技术领域,尤其涉及一种基于EBPF的Linux***事件监控方法及装置。
背景技术
应用程序经常需要对某个文件或目录进行监控,以便判断是否发生了特定事件,比如文件删除、新增、修改等。典型例子就是文件管理应用。
因Linux ***下“一切皆文件”的特性,要处理好 Linux 下的信息安全就必然需要处理好对 Linux 文件事件的高效监控。Linux 虽然提供了Inotify、Fanotify等监控方法,但均存在效率低下、监控目标数量有限、难以实现递归监控、无法获取进程信息等问题;而使用内核模块需要***权限、编译和使用环境复杂,制约了信息安全工具和技术的发展。
发明内容
本实施例提供了一种基于EBPF的Linux***事件监控方法及装置,能够解决现有的文件监控存在的效率低下、监控目标数量有限、难以实现递归监控、无法获取进程信息等问题。
第一方面,本实施例提供了一种基于EBPF的Linux***事件监控方法,包括:
建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控;若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警。
在一些实施例中,所述建立监控文件项列表及监控事件队列,包括:获取所述被监控文件项的唯一标识,其中,所述唯一标识包括设备号及iNode号;基于所述被监控文件项的唯一标识获取所述被监控文件项的信息元组,并将所述元组加载至所述监控文件项列表中;建立监控事件队列。
在一些实施例中,所述建立监控文件项列表及监控事件队列,具体为:通过BPFHash-table map建立监控文件项列表,其中,所述监控文件项列表是哈希表;通过BPFPerf-event array建立监控事件队列。
在一些实施例中,所述目标***调用节点包括下述中的至少一种:创建文件、文件夹、硬链接或软连接的函数,修改文件内容的函数,删除文件、文件夹、硬链接的函数,修改文件属性的函数,内存文件映射函数。
在一些实施例中,所述若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识,具体为:若所述目标***调用节点被调用,则触发加载在所述目标***调用节点处的Kprobe BPF,并通过所述Kprobe BPF获取***作文件项的唯一标识。
在一些实施例中,所述基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控,包括:获取所述操作目录项的唯一标识及被监控目录项的唯一标识;基于Linux***文件的层级结构及Linux***文件的唯一标识查询所述***作文件项的路径是否包含于所述被监控文件项的路径内;若所述***作文件项的路径包含于所述被监控文件项的路径内,和/或所述***作文件项的唯一标识位于所述监控文件项列表内,则所述***作文件项被监控。
在一些实施例中,所述将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,包括:建立目录拼接缓冲区;在所述目录拼接缓冲区以自叶向根的方式拼接所述***作文件项的路径信息;将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息拼接成文件事件,存入所述事件队列,并发出文件事件报警。
在一些实施例中,所述基于EBPF的Linux***事件监控方法,还包括:通过Linux***的守护进程轮询所述事件队列;获取并解析所述事件队列内的文件事件,并通知Linux***的安全模块。
第二方面,本实施例提供了一种基于EBPF的Linux***事件监控装置,包括:
监控建立模块,用于建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;
程序加载模块,用于加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;
标识获取模块,用于若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;
监控判断模块,用于基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控;
信息获取模块,用于若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;以及
事件报警模块,用于将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警。
第三方面,本实施例提供了一种电子设备,包括处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如第一方面中任一实施例所述方法的步骤。
本申请提供了一种基于EBPF的Linux***事件监控方法及装置,通过建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控;若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,能够解决现有文件监控存在的效率低下、监控目标数量有限、难以实现递归监控、无法获取进程信息等问题,可在不***内核模块、非Root 进程下,实现和被监控文件夹数量无关的高效文件监控、并且可以获取到篡改文件的具体进程。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。后文将参照附图以示例性而非限制性的方式详细描述本申请的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分,本领域技术人员应该理解的是,这些附图未必是按比例绘制的,在附图中:
图1为本说明书一实施例提供的基于EBPF的Linux***事件监控方法的流程图;
图2为本说明书另一实施例提供的基于EBPF的Linux***事件监控方法的示意图;
图3为本说明书一实施例提供的基于EBPF的Linux***事件监控方法的时序图;
图4为本说明书一实施例提供的基于EBPF的Linux***事件监控装置的示意图;
图5为本说明书一实施例提供的一种电子设备示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
在Linux***的使用过程中,某些应用程序需要对文件或文件夹进行监控,以侦测其是否发生了特定事件。自内核2.6.13起,Linux开始提供Inotify机制,以允许应用程序监控文件事件。
目前,基于Inotify的文件监控方法存在效率低下、监控目标数量有限、难以实现递归监控、无法获取进程信息等问题,例如,在待监控路径有 N 个文件夹,最大嵌套深度为M 的情况下,基于Inotify的文件监控需要手动创建 N 个监控项,在需要进行文件监控的典型场景,如网站资源目录、文件上传目录等,M 通常远小于 N,其运行复杂、开销较大,并且其无法获取到进行文件操作的进程信息;而Fanotify的适用内核版本较窄,auditing 套件对***环境和配置要求较高。
针对上述问题,第一方面,如图1所示,本实施例提供了一种基于EBPF的Linux***事件监控方法,包括:
S101:建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;
需要说明的是,EBPF(extended Berkeley Packet Filter) 是一种可以在 Linux内核中运行的用户编写的程序,而不需要修改内核代码或加载内核模块的技术。简单说,EBPF让 Linux 内核变得可编程化了。
EBPF程序是一个事件驱动模型。Linux 内核提供了各种 hook point,比如systemcalls, function entry/exit, kernel tracepoints, network events 等,EBPF程序通过实现想要关注的hook point 的 callback,并把这些 callback 注册到相应的 hookpoint 来完成“内核编程”。
在一些实施例中,所述建立监控文件项列表及监控事件队列,包括:获取所述被监控文件项的唯一标识,其中,所述唯一标识包括设备号及iNode号;基于所述被监控文件项的唯一标识获取所述被监控文件项的信息元组,并将所述元组加载至所述监控文件项列表中;建立监控事件队列。
在一些实施例中,所述建立监控文件项列表及监控事件队列,具体为:通过BPFHash-table map建立监控文件项列表,其中,所述监控文件项列表是哈希表;通过BPFPerf-event array建立监控事件队列。
需要说明的是,通过建立监控文件项列表可以同时监控多个文件和/或文件夹,使监控文件项列表为哈希表可以监控更多的文件,并且监控文件的信息不宜被他人获取,通常用户可在Linux***的守护进程设置监控路径信息后,守护进程可分析该路径信息所属的设备号以及inode号,并获取所述设备号以及所述inode号所在的元组,并将该元组设置至监控文件项列表中,使得操作更为便捷,所述元组通常由文件/文件夹的设备号及 inode号组成,或是特定文件***上其他能唯一标识文件的信息组合。
需要说明的是,所述事件队列是用来存放后续整合成的文件事件,可根据需要设置所述事件队列的大小。
需要说明的是,基于所述EBPF(extended Berkeley Packet Filter)架构的架构特点,仅需通过EBPF(extended Berkeley Packet Filter)架构内的BPF Hash-table map建立监控文件项列表、通过BPF Perf-event array建立监控事件队列。
S102:加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;
需要说明的是,所述目标***调用节点通常是进行***调用时的关键节点,即对文件或文件夹进行篡改时通常会使用的***调用节点。
在一些实施例中,所述目标***调用节点包括下述中的至少一种:创建文件、文件夹、硬链接或软连接的函数,修改文件内容的函数,删除文件、文件夹、硬链接的函数,修改文件属性的函数,内存文件映射函数。
需要说明的是,所述创建文件、文件夹、硬链接或软连接的函数包括security_inode_create、security_inode_mkdir、security_inode_mknod、security_inode_link、vfs_link, security_inode_symlink、vfs_symlink;所述修改文件内容的函数包括vfs_write、vfs_writev、 __kernel_write;所述删除文件文件夹、硬链接的函数包括security_path_unlink、vfs_unlink、security_inode_rmdir、vfs_rmdir;所述修改文件属性的函数包括security_inode_setattr;所述内存文件映射函数包括ksys_mmap_pgoff。
S103:若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;
需要说明的是,可在多个所述目标***调用节点设置所述Kprobe BPF,以增加监控的全面性。
需要说明的是,若所述目标***调用节点未被调用,说明没有对文件或文件夹进行篡改,故无需进行监控,若所述目标***调用节点被调用,则需先判断通过此***调用进行操作的文件或文件夹是否在所述监控文件项列表中,故需通过所述Kprobe BPF获取***作文件项的唯一标识。
在一些实施例中,所述若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识,具体为:若所述目标***调用节点被调用,则触发加载在所述目标***调用节点处的Kprobe BPF,并通过所述Kprobe BPF获取***作文件项的唯一标识。
需要说明的是,利用kprobe技术,用户可以自定义自己的回调函数,可以在几乎所有的函数中动态***探测点,当内核执行流程执行到指定的探测函数时,会调用该回调函数,用户即可收集所需的信息,同时内核最后还会回到原本的正常执行流程,通过所述Kprobe BPF可以知道内核函数是否被调用、被调用上下文、入参以及返回值等信息。
S104:基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控;
在一些实施例中,所述基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控,包括:获取所述操作目录项的唯一标识及被监控目录项的唯一标识;基于Linux***文件的层级结构及Linux***文件的唯一标识查询所述***作文件项的路径是否包含于所述被监控文件项的路径内;若所述***作文件项的路径包含于所述被监控文件项的路径内,和/或所述***作文件项的唯一标识位于所述监控文件项列表内,则所述***作文件项被监控。
需要说明的是,在判断所述***作文件项是否被监控时,可分为两种情况,1、所述***作文件项的唯一标识位于所述监控文件项列表内,即所述***作文件项的唯一标识与所述监控文件项列表内的被监控文件项的唯一标识相同;2、所述***作文件项的唯一标识与所述监控文件项列表内的被监控文件项的唯一标识不相同,但所述***作文件项的唯一标识属于所述被监控文件项的唯一标识的子目录,即在Linux***文件的结构中,所述被监控文件项是所述***作文件项的父目录。
需要说明的是,在判断所述***作文件项是否被监控时,可基于所述***作文件项的唯一标识在Linux***中的位置,逐级向上查找所述操作文件项的父目录的唯一标识,并将所述父目录的唯一标识与所述监控文件项列表内的被监控文件项的唯一标识进行比对,若相同,则所述操作文件项被监控,如此,可快速的确定所述操作文件项是否被监控。其中,所述唯一标识通常由文件/文件夹的设备号及 inode 号组成,或是特定文件***上其他能唯一标识文件的信息组合。
需要说明的是,在判断所述***作文件项是否被监控时,是基于Linux***的“一切皆文件”的特性进行的判断,Linux的文件***是采用级层式的树状目录结构。在该结构中,最上层是根目录 “/” ,然后在该目录下再创建其他的目录,通常将下层的目录称为叶目录。通常处于上一层级的目录相对于处于下一层级的目录称为父目录,下一层级的目录称为子目录。
S105:若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;
需要说明的是,在判断出所述***作文件项被监控后,可通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息,其中,所述***调用信息包括***调用号、调用时间及进程控制符中的至少一项。
S106:将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警。
在一些实施例中,所述将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,包括:建立目录拼接缓冲区;在所述目录拼接缓冲区以自叶向根的方式拼接所述***作文件项的路径信息;将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息拼接成文件事件,存入所述事件队列,并发出文件事件报警。
需要说明的是,可将获取的所述***作文件项的路径信息及与所述***作文件项对应的***调用信息直接以相对应的方式存入所述事件队列,也可设置一目录拼接缓冲区,在所述目录拼接缓冲区以自叶向根的方式拼接所述***作文件的路径信息,其中,所述自叶向根的方式即为从叶目录项向上拼接至根目录项如此便可获得完整的***作文件项的完整目录信息,在获得完整的目录信息之后,可将所述目录信息与所述***作文件项对应的***调用信息拼接成文件事件,再存入所述事件队列,以此实现对获取的信息进行分类处理。
在一些实施例中,所述基于EBPF的Linux***事件监控方法,还包括:通过Linux***的守护进程轮询所述事件队列;获取并解析所述事件队列内的文件事件,并通知Linux***的安全模块。
需要说明的是,为了使用户能够及时获取文件被篡改的情况,可实时或间隔的通过Linux***的守护进程轮询所述事件队列,也可在所述事件队列内存入新的文件事件时触发所述守护进程轮询所述事件队列。
需要说明的是,除轮询所述事件队列外,还可设置基于所述文件事件存入所述事件队列的时间,获取所述文件事件,即每次只获取上次进行获取操作的时间后的存入的文件事件;还可设置存入触发操作,即当所述事件队列存入一个文件事件时,即触发守护进程获取该文件事件。
需要说明的是,所述解析所述事件队列内的文件事件,通常是将所述文件事件的信息分解开来,如解析成路径信息及***调用信息,其中,所述***调用信息包括***调用号、调用时间及进程控制符等。
需要说明的是,在通知所述Linux***的安全模块后,可进行相应的警示或提醒操作,如红色字幕、警报铃声,或中止与所述***作文件相对应的***调用,以提高安全性能。
示例性地,如图2所示,某服务器使用本发明监控存储了 Linux 重要配置文件的/etc 目录,以提升信息安全能力。当该服务器遭到反弹shell入侵(反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。),入侵者尝试采用篡改 /etc/passwd 文件的方法提升权限,通过反弹 shell启动 vim进程写入恶意内容至 /etc/passwd。
在vim 进程写入恶意内容过程中使用的 vfs_write ***调用部署了KProbe BPF程序。该KProbe BPF程序解析***调用的目录项参数,按文件***的结构以自叶向根递归的方式检查 /etc/passwd 、 /etc/ 和 / 对应的目录项是否在监控范围,若发现 /etc 项包含于监控文件项列表,则触发安全告警,自叶向根拼接文件路径,以此获取被篡改的文件的具体路径信息为 /etc/passwd;通过 BPF ***接口获取了被篡改时间、进程等信息,上报至守护进程。
守护进程收到安全告警后,立即采集被篡改后的 /etc/passwd 信息、恶意进程vim信息及其调用链上的反弹 shell信息,保留入侵证据,并上传至主机安全平台,以便为封堵漏洞、消除危害提供重要依据。
示例性地,某站点的图片上传服务器需要监控存有数十万计的小文件,按文件哈希前两字节分两级文件夹的图片上传目录,以防遭遇webshell入侵,但基于传统Inotify文件监控该目录需要给每个文件单独设置监控,资源占用极大,使用本实施例提供的方法监控该目录时,只需要在文件操作时在内核态 BPF里比对两级文件夹即可,大大减少了***资源占用,加快了***处理速度。
示例性地,如图3所示,本实施例的基于EBPF的Linux***事件监控方法,可分为两个阶段,即加载阶段和运行阶段。
加载阶段:
1)、通过BPF Hash-table map创建监控文件项列表;
2)、初始化监控的文件项的inode和devicenumber(设备号),其中,所述初始化即为设置需被监控的文件;
3)、通过BPF Perf-event array创建事件队列;
4)、加载KProbe BPF程序至目标***调用节点;
运行阶段:
1)、获取监控的文件项信息,并判断所述文件是否在所述监控文件项列表内;
2)、若所述文件在所述监控文件项列表内,则获取文件事件,并将所述文件事件发送至所述事件队列;
3)、通过守护进程拉取所述事件队列内的文件事件;
4)、人工或自动的更新监控的文件项。
本实施例提供了一种基于EBPF的Linux***事件监控方法,通过建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;若所述目标***调用节点被调用,则通过所述KprobeBPF获取***作文件项的唯一标识;基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控;若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,能够解决现有文件监控存在的效率低下、监控目标数量有限、难以实现递归监控、无法获取进程信息等问题,可在不***内核模块、非Root 进程下,实现和被监控文件夹数量无关的高效文件监控、并且可以获取到篡改文件的具体进程。
第二方面,如图4所示,本实施例提供了一种基于EBPF的Linux***事件监控装置,包括:
监控建立模块410,用于建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;
程序加载模块420,用于加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;
标识获取模块430,用于若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;
监控判断模块440,用于基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控;
信息获取模块450,用于若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;以及
事件报警模块460,用于将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警。
在一些实施例中,所述建立监控文件项列表及监控事件队列,包括:获取所述被监控文件项的唯一标识,其中,所述唯一标识包括设备号及iNode号;基于所述被监控文件项的唯一标识获取所述被监控文件项的信息元组,并将所述元组加载至所述监控文件项列表中;建立监控事件队列。
在一些实施例中,所述建立监控文件项列表及监控事件队列,具体为:通过BPFHash-table map建立监控文件项列表,其中,所述监控文件项列表是哈希表;通过BPFPerf-event array建立监控事件队列。
在一些实施例中,所述目标***调用节点包括下述中的至少一种:创建文件、文件夹、硬链接或软连接的函数,修改文件内容的函数,删除文件、文件夹、硬链接的函数,修改文件属性的函数,内存文件映射函数。
在一些实施例中,所述若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识,具体为:若所述目标***调用节点被调用,则触发加载在所述目标***调用节点处的Kprobe BPF,并通过所述Kprobe BPF获取***作文件项的唯一标识。
在一些实施例中,所述基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控,包括:获取所述操作目录项的唯一标识及被监控目录项的唯一标识;基于Linux***文件的层级结构及Linux***文件的唯一标识查询所述***作文件项的路径是否包含于所述被监控文件项的路径内;若所述***作文件项的路径包含于所述被监控文件项的路径内,和/或所述***作文件项的唯一标识位于所述监控文件项列表内,则所述***作文件项被监控。
在一些实施例中,所述将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,包括:建立目录拼接缓冲区;在所述目录拼接缓冲区以自叶向根的方式拼接所述***作文件项的路径信息;将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息拼接成文件事件,存入所述事件队列,并发出文件事件报警。
在一些实施例中,所述基于EBPF的Linux***事件监控方法,还包括:通过Linux***的守护进程轮询所述事件队列;获取并解析所述事件队列内的文件事件,并通知Linux***的安全模块。
在一些实施例中,所述基于EBPF的Linux***事件监控装置,还用于,通过Linux***的守护进程轮询所述事件队列;获取并解析所述事件队列内的文件事件,并通知Linux***的安全模块。
第三方面,如图5所示,本实施例提供了一种电子设备500,包括处理器520和存储器510;
所述处理器520通过调用所述存储器510存储的程序或指令,用于执行如第一方面中任一实施例所述方法的步骤。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (8)
1.一种基于EBPF的Linux***事件监控方法,其特征在于,包括:
建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;
加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;
若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;
基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控,其包括:基于所述***作文件项的唯一标识在Linux***中的位置,逐级向上查找所述***作文件项的父目录的唯一标识,并将所述父目录的唯一标识与所述监控文件项列表内的被监控文件项的唯一标识进行比对,若相同,则所述***作文件项被监控;
若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;
将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,其包括:
建立目录拼接缓冲区;
在所述目录拼接缓冲区以自叶向根的方式拼接所述***作文件项的路径信息;其中,所述自叶向根的方式即为从叶目录项向上拼接至根目录项如此便可获得完整的***作文件项的完整目录信息;
将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息拼接成文件事件,存入所述事件队列,并发出文件事件报警;
所述建立监控文件项列表及监控事件队列,包括:
获取所述被监控文件项的唯一标识,其中,所述唯一标识包括设备号及iNode号;
基于所述被监控文件项的唯一标识获取所述被监控文件项的信息元组,并将所述信息元组加载至所述监控文件项列表中;
建立监控事件队列。
2.根据权利要求1所述的基于EBPF的Linux***事件监控方法,其特征在于,所述建立监控文件项列表及监控事件队列,具体为:
通过BPF Hash-table map建立监控文件项列表,其中,所述监控文件项列表是哈希表;
通过BPF Perf-event array建立监控事件队列。
3.根据权利要求1所述的基于EBPF的Linux***事件监控方法,其特征在于,所述目标***调用节点包括下述中的至少一种:
创建文件、文件夹、硬链接或软连接的函数,修改文件内容的函数,删除文件、文件夹、硬链接的函数,修改文件属性的函数,内存文件映射函数。
4. 根据权利要求1所述的基于EBPF的Linux***事件监控方法,其特征在于,所述若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识,具体为:
若所述目标***调用节点被调用,则触发加载在所述目标***调用节点处的KprobeBPF,并通过所述Kprobe BPF获取***作文件项的唯一标识。
5.根据权利要求1所述的基于EBPF的Linux***事件监控方法,其特征在于,所述基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控,包括:
获取所述操作目录项的唯一标识及被监控目录项的唯一标识;
基于Linux***文件的层级结构及Linux***文件的唯一标识查询所述***作文件项的路径是否包含于所述被监控文件项的路径内;
若所述***作文件项的路径包含于所述被监控文件项的路径内,和/或所述***作文件项的唯一标识位于所述监控文件项列表内,则所述***作文件项被监控。
6.根据权利要求1-5中任一项所述的基于EBPF的Linux***事件监控方法,其特征在于,还包括:
通过Linux***的守护进程轮询所述事件队列;
获取并解析所述事件队列内的文件事件,并通知Linux***的安全模块。
7.一种基于EBPF的Linux***事件监控装置,其特征在于,包括:
监控建立模块,用于建立监控文件项列表及监控事件队列,其中,所述监控文件项列表内包含需被监控文件项的唯一标识,所述文件项包括文件和/或文件夹;
程序加载模块,用于加载Kprobe BPF至目标***调用节点,所述目标***调用节点是篡改文件项时需调用的节点;
标识获取模块,用于若所述目标***调用节点被调用,则通过所述Kprobe BPF获取***作文件项的唯一标识;
监控判断模块,用于基于Linux***文件的结构、所述***作文件项的唯一标识及被监控文件项的唯一标识判断所述***作文件项是否被监控,其包括:基于所述***作文件项的唯一标识在Linux***中的位置,逐级向上查找所述***作文件项的父目录的唯一标识,并将所述父目录的唯一标识与所述监控文件项列表内的被监控文件项的唯一标识进行比对,若相同,则所述***作文件项被监控;
信息获取模块,用于若所述***作文件项被监控,则通过所述Kprobe BPF采集所述***作文件项的路径信息及与所述***作文件项对应的***调用信息;以及
事件报警模块,用于将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息存入所述事件队列,并发出文件事件报警,其包括:
建立目录拼接缓冲区;
在所述目录拼接缓冲区以自叶向根的方式拼接所述***作文件项的路径信息;其中,所述自叶向根的方式即为从叶目录项向上拼接至根目录项如此便可获得完整的***作文件项的完整目录信息;
将所述***作文件项的路径信息及与所述***作文件项对应的***调用信息拼接成文件事件,存入所述事件队列,并发出文件事件报警;
所述建立监控文件项列表及监控事件队列,包括:
获取所述被监控文件项的唯一标识,其中,所述唯一标识包括设备号及iNode号;
基于所述被监控文件项的唯一标识获取所述被监控文件项的信息元组,并将所述信息元组加载至所述监控文件项列表中;
建立监控事件队列。
8.一种电子设备,其特征在于,包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310388346.2A CN116107846B (zh) | 2023-04-12 | 2023-04-12 | 一种基于EBPF的Linux***事件监控方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310388346.2A CN116107846B (zh) | 2023-04-12 | 2023-04-12 | 一种基于EBPF的Linux***事件监控方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116107846A CN116107846A (zh) | 2023-05-12 |
CN116107846B true CN116107846B (zh) | 2023-07-25 |
Family
ID=86264094
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310388346.2A Active CN116107846B (zh) | 2023-04-12 | 2023-04-12 | 一种基于EBPF的Linux***事件监控方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107846B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302850B (zh) * | 2023-05-20 | 2023-09-12 | 北京长亭科技有限公司 | 一种Linux套接字连接事件监控方法及装置 |
CN117290857B (zh) * | 2023-11-27 | 2024-03-26 | 中孚安全技术有限公司 | 基于eBPF实现云原生安全的***、方法、设备及介质 |
CN117312099B (zh) * | 2023-11-28 | 2024-04-05 | 麒麟软件有限公司 | 文件***事件监控方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105812421A (zh) * | 2014-12-30 | 2016-07-27 | Tcl集团股份有限公司 | 一种基于Android平台的远程控制方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105074671B (zh) * | 2013-03-27 | 2018-04-20 | 英特尔公司 | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** |
CN115113970A (zh) * | 2021-03-17 | 2022-09-27 | 腾讯云计算(北京)有限责任公司 | 一种基于容器引擎的数据处理方法以及相关设备 |
CN115470066A (zh) * | 2021-06-10 | 2022-12-13 | 华为技术有限公司 | 一种日志数据的处理方法以及装置 |
CN115499144A (zh) * | 2021-06-18 | 2022-12-20 | 中兴通讯股份有限公司 | 入侵检测方法、装置和***、电子设备、计算机可读介质 |
CN114185749A (zh) * | 2021-12-15 | 2022-03-15 | 南京欧珀软件科技有限公司 | 监控方法与装置、电子设备 |
CN115617610A (zh) * | 2022-10-26 | 2023-01-17 | 杭州谐云科技有限公司 | 一种基于Kubernetes的旁路无侵入式应用运行中的全行为监测方法及*** |
CN115758420B (zh) * | 2022-11-29 | 2023-06-09 | 北京天融信网络安全技术有限公司 | 文件访问控制方法、装置、设备及介质 |
-
2023
- 2023-04-12 CN CN202310388346.2A patent/CN116107846B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105812421A (zh) * | 2014-12-30 | 2016-07-27 | Tcl集团股份有限公司 | 一种基于Android平台的远程控制方法及装置 |
Non-Patent Citations (4)
Title |
---|
BPFroid: Robust Real Time Android Malware Detection Framework;Yaniv Agman 等;《Arxiv》;第1-21页 * |
Kernel-level tracing for detecting stegomalware and covert channels in Linux environments;Luca Caviglione 等;《Computer Networks》;第191卷;第1-12页 * |
基于eBPF的应用程序性能监控研究;赵晨雨 等;《IT经理世界》(第10期);第123页 * |
基于eBPF的虚拟化网络与云原生网络应用;施苏峰;《网络安全与数据治理》(第2期);第9-18页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116107846A (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116107846B (zh) | 一种基于EBPF的Linux***事件监控方法及装置 | |
US9940373B2 (en) | Method and system for implementing an operating system hook in a log analytics system | |
US7191364B2 (en) | Automatic root cause analysis and diagnostics engine | |
US11604763B2 (en) | Graphical user interface for parsing events using a designated field delimiter | |
US11226975B2 (en) | Method and system for implementing machine learning classifications | |
CN112422484B (zh) | 确定用于处理安全事件的剧本的方法、装置及存储介质 | |
US20050060721A1 (en) | User-centric policy creation and enforcement to manage visually notified state changes of disparate applications | |
CN110213207B (zh) | 一种基于日志分析的网络安全防御方法及设备 | |
CN102254111A (zh) | 恶意网站检测方法及装置 | |
CN110287696B (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN106844793A (zh) | 实例服务的管理方法、装置及*** | |
CN114968754A (zh) | 一种应用程序接口api测试方法以及装置 | |
CN113760652B (zh) | 基于应用的全链路监控的方法、***、设备和存储介质 | |
JP2006268118A (ja) | アプリケーション環境チェック装置及び方法とそのプログラム | |
CN114465741B (zh) | 一种异常检测方法、装置、计算机设备及存储介质 | |
CN112799925A (zh) | 数据采集方法、装置、电子设备和可读存储介质 | |
US20180316702A1 (en) | Detecting and mitigating leaked cloud authorization keys | |
CN112882797A (zh) | 一种基于机器学习的容器安全检测方法 | |
KR20230103275A (ko) | 사이버 보안 위협 정보 처리 장치, 사이버 보안 위협 정보 처리 방법 및 사이버 보안 위협 정보 처리하는 프로그램을 저장하는 저장매체 | |
CN115712646A (zh) | 一种告警策略生成方法、装置和存储介质 | |
CN112148545A (zh) | 嵌入式***的安全基线检测方法以及安全基线检测*** | |
CN113268401B (zh) | 日志信息的输出方法、装置及计算机可读存储介质 | |
CN110727565A (zh) | 一种网络设备平台信息收集方法及*** | |
CN117056030B (zh) | 容器逃逸的确定方法及装置 | |
WO2022214200A1 (en) | Method and network element for pre-upgrade use case validation |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |