一种基于sysdig系统监控获取溯源信息的方法转让专利

申请号 : CN202010417508.7

文献号 : CN111813774B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴建亮胡鹏叶翔

申请人 : 广州锦行网络科技有限公司

摘要 :

本发明提供了一种基于sysdig系统监控获取溯源信息的方法,属于网络安全领域,本发明中在sysdig监测到accept或connect系统调用时,获取与系统调用相关的溯源信息,如IP地址、端口号和进程等,并将获取的溯源信息存储到map1,当监测到除accept或connect以外的其他如open,execve等系统调用时,先在map2中查询,查询不到时,再去map1中查询,并将从map1查询到的结果存储到map2,供监测到除accept或connect以外的其他调用时查询。本发明利用sysdig系统监控,自建映射表,可以使任何系统调用都可以获取到IP地址等溯源信息。

权利要求 :

1.一种基于sysdig系统监控获取溯源信息的方法,其特征在于,包括如下步骤:S1:从sysdig监控到的accept或connect系统调用获取与系统调用相关的溯源信息;

S2:将步骤S1中获取的所述与系统调用相关的溯源信息存储到map映射表map1;

S3:当sysdig监控到除accept和connect以外的系统调用时,从map映射表map2中获取与系统调用相关的溯源信息;

S4:若步骤S3中获取到了与系统调用相关的溯源信息,跳转到步骤S3;若步骤S3中未获取到与系统调用相关的溯源信息,则从步骤S2中存储的map映射表map1中获取与系统调用相关的溯源信息;

S5:将步骤S4中从map映射表map1中获取的所述与系统调用相关的溯源信息存储到map映射表map2中,并跳转到步骤S3。

2.根据权利要求1所述的方法,其特征在于,步骤S1中获取的与系统调用相关的溯源信息包括:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。

3.根据权利要求1所述的方法,其特征在于,所述映射表map1为以远端IP地址和远端端口号为key的hash表。

4.根据权利要求1所述的方法,其特征在于,所述映射表map1中包括以下信息:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。

5.根据权利要求1所述的方法,其特征在于,所述映射表map2为以进程身份标识PID和父进程身份标识FPID为key的hash表。

6.根据权利要求1所述的方法,其特征在于,所述映射表map2包括以下信息:远端IP地址、远端端口号、本地IP地址和本地端口号。

7.根据权利要求1所述的方法,其特征在于,步骤S3中所述除accept和connect以外的系统调用包括:open、execve、read、create、rename和write。

说明书 :

一种基于sysdig系统监控获取溯源信息的方法

技术领域

[0001] 本发明涉及网络安全领域,尤其涉及一种基于sysdig系统监控获取溯源信息的方法。

背景技术

[0002] Linux是一个多,用户、多任务、支持多线程和多CPU(中央处理器)的免费使用和自由传播的类Unix操作系统。Linux是开源软件,系统性能稳定,其核心防火墙组件性能高效、配置简单、功能强大,被广泛地使用在很多企业网络中。
[0003] sysdig是sysdig cloud出品的主要基于Lua语言开发的一个超强工具,Sysdig是开源的、系统级探测:它可以从运行的Linux实例捕获系统状态和行为,然后进行保存、过滤和分析。Sysdig是一个超级系统工具,可以认为它是strace、tcpdump与lsof的集合,甚至比strace、tcpdump与lsof的集合还要强大。使用Lua语言开发的sysdig,提供命令行接口以及强大的交互界面。
[0004] Sysdig通过在Linux内核的driver模块注册系统调用的钩子hook,这样当有系统调用发生和完成的时候,它会把系统调用信息拷贝到特定的buffer,然后用户模块的组件对这些信息进行解压、解析和过滤等处理,并最终通过Sysdig命令行与用户进行交互。也可以写Chisels做更细致的数据分析。Chisels为Lua脚本编写的硬件语言,其关系图如图1所示。
[0005] Linux系统中,所有的操作都是对文件进行操作,而对文件的操作是利用文件描述符fd来实现的。每一个进程在内核中都对应有一个“打开文件”数组,存放指向文件对象的指针,而fd就是这个数组的下标。对文件进行操作时,系统调用将fd传入内核,内核通过fd找到文件并对文件进行操作。Fd可以是文件、进程、网络、管道等。大部分系统调用与fd相关联,如accept、connect、open和execve等。
[0006] 在现有技术中,sysdig监控只有发生accept和connet系统调用时,才会保存IP地址等溯源信息,获取IP地址等溯源信息的方法如下步骤:
[0007] 1.内核层监控到accept或connect系统调用时,通过参数获取到IP地址和端口号,并发送到应用层进行关联。
[0008] 2.应用层Lua通过系统调用可以获取到与fd关联的IP地址和端口号等溯源信息。
[0009] 如果fd没有在sysdig用户层存储关联,当发生除accept和connect以外的系统调用时,通过上面的步骤2是获取不到IP地址和端口号的。如图2所示,当监控到open系统调用时,从对应的fd3无法获取IP地址。
[0010] 中国专利文献CN106302404B中,提供了一种收集网络溯源信息的系统和方法,方法包括如下步骤:(1)网络溯源拦截步骤,调用拦截函数用于拦截accept、connect、send和recv系统调用,该步骤包括一下子步骤:(11)添加拦截代码子步骤:将拦截函数interceptor_accept、interceptor_connect、interceptor_send和interceptor_recv直接嵌入socket相关系统调用函数sys_accept、sys_connect、sys_send和sys_recv中进行拦截;(12)定义全局变量子步骤:定义一个全局结构体变量为达到模块化要求,全局结构体变量的成员变量为多个函数指针,这些函数指针指向用来收集网络溯源信息的拦截函数interceptor_accept、interceptor_connect、interceptor_send和interceptor_recv;初始情况下,这些函数指针为空,表示不收集溯源信息;若要收集网络溯源信息,则给函数指针赋予相应的值,调用拦截函数来收集溯源信息;当卸载该模块后,这些函数指针恢复为默认的空指针。(2)网络溯源观察步骤,初始化溯源变量,利用拦截函数收集socket溯源信息与该socket相关联的IP地址、端口号信息、用户ID和连接创建时间,该步骤包括以下子步骤:包含以下子步骤:(21)IP地址收集子步骤:对socket进行初始化,并收集产生的溯源信息;当执行sys_accept和sys_connect系统调用函数时,对socket进行初始化,执行observer_initsocket函数,来初始化与socket对应的inode结构体中的溯源变量;之后执行observer_socket函数,收集intercept_accept函数和intercept_connect函数获取的IP地址,端口号、用户ID和连接创建时间信息;(22)依赖数据收集子步骤:调用观察函数,收集依赖数据信息:当执行sys_send系统调用函数时,表示进程向网络对象中写数据,产生依赖数据信息,执行intercept_send函数进行拦截,调用observer_send函数进行收集依赖数据信息;当执行sys_recv系统调用函数时,表示从网络中接收数据,产生依赖数据信息,执行intercept_recv函数进行拦截,调用observer_recv函数进行收集依赖数据信息。(3)网络溯源分析步骤,负责处理溯源信息,去掉重复的信息并且保证不会出现环;(4)网络溯源分布步骤,将网络溯源信息写入溯源文件系统,保存在日志文件中。
[0011] 现有技术至少存在以下不足:
[0012] 1.现有sysdig技术无法针对所有系统调用获取IP地址等溯源信息,从而无法满足对所有攻击进行朔源。
[0013] 2.上述专利申请文献采用拦截accept、send、connect等socket函数的手段,获取IP地址等溯源信息,但是无法获取到除socket以外的其它行为的信息,比如文件,因此无法获取与该行为相关的溯源信息。

发明内容

[0014] 为解决现有技术中存在的无法满足对所有攻击进行朔源的技术问题,本发明提供了一种基于sysdig系统监控获取溯源信息的方法。本发明提供一种基于开源的sysdig进行二次开发的技术方案,通过利用sysdig采集包含各种系统调用(syscall)全面相关的系统行为事件信息,并通过accept和connect获取到溯源信息,如IP地址、端口号和进程,该进程可以是当前进程,也可以是其产生的子进程。对accept或connect系统调用时获取的溯源信息进行存储,供其他系统调用时查询,可以使任何系统调用都可以获取到IP地址等溯源信息,使所有系统调用都能与IP地址进行关联。
[0015] 本发明提供了一种基于sysdig系统监控获取溯源信息的方法,包括如下步骤:
[0016] S1:从sysdig监控到的accept或connect系统调用获取与系统调用相关的溯源信息;
[0017] S2:将步骤S1中获取的所述与系统调用相关的溯源信息存储到map映射表map1;
[0018] S3:当sysdig监控到除accept和connect以外的系统调用时,从map映射表map2中获取与系统调用相关的溯源信息;
[0019] S4:若步骤S3中获取到了与系统调用相关的溯源信息,跳转到步骤S3;若步骤S3中未获取到与系统调用相关的溯源信息,则从步骤S2中存储的map映射表map1中获取与系统调用相关的溯源信息;
[0020] S5:将步骤S4中从map映射表map1中获取的所述与系统调用相关的溯源信息存储到map映射表map2中,并跳转到步骤S3。
[0021] 优选地,步骤S1中获取的与系统调用相关的溯源信息包括:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。
[0022] 优选地,所述映射表map1为以远端IP地址和远端端口号为key的hash表。
[0023] 优选地,所述映射表map1中包括以下信息:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。
[0024] 优选地,所述映射表map2为以进程身份标识PID和父进程身份标识FPID为key的hash表。
[0025] 优选地,所述映射表map2包括以下信息:远端IP地址、远端端口号、本地IP地址和本地端口号。
[0026] 优选地,步骤S3中所述除accept和connect以外的系统调用包括:open、execve、read、create、rename和write。
[0027] 与现有技术相对比,本发明的有益效果如下:
[0028] (1)本发明采用sysdig开源技术,在监控到accept或connect系统调用时,通过自建映射表,存储系统调用相关的溯源信息,供监控到除accept和connect系统调用以外的其他系统调用时查询,解决了现有技术中sysdig对于除accept和connect以外的系统调用无法获取溯源信息的问题,达到了对于所有sysdig系统调用都能获取溯源信息的效果。
[0029] (2)本发明采用sysdig开源技术,相对于采用拦截socket函数只能获取到socket相关的溯源信息而言,对于除socket以外的其他行为,也可以获取到IP地址等溯源信息。

附图说明

[0030] 图1是Chisels与Sysdig的关系图,Sysdig中,Chisels相当于功能插件,由Lua语言编写;
[0031] 图2是现有技术中sysdig获取IP地址等溯源信息示意图,除accept和connect系统调用外,sysdig无法获取IP地址等溯源信息。
[0032] 图3是本发明获取溯源信息流程示意图;
[0033] 图4是map映射表map1存储内容示意图;
[0034] 图5是map映射表map2存储内容示意图;

具体实施方式

[0035] 下面结合附图1-5,对本发明的具体实施方式作详细的说明。
[0036] 本发明提供了一种基于sysdig系统监控获取溯源信息的方法,包括如下步骤:
[0037] S1:从sysdig监控到的accept或connect系统调用获取与系统调用相关的溯源信息;
[0038] S2:将步骤S1中获取的所述与系统调用相关的溯源信息存储到map映射表map1;
[0039] S3:当sysdig监控到除accept和connect以外的系统调用时,从map映射表map2中获取与系统调用相关的溯源信息;
[0040] S4:若步骤S3中获取到了与系统调用相关的溯源信息,跳转到步骤S3;若步骤S3中未获取到与系统调用相关的溯源信息,则从步骤S2中存储的map映射表map1中获取与系统调用相关的溯源信息;
[0041] S5:将步骤S4中从map映射表map1中获取的所述与系统调用相关的溯源信息存储到map映射表map2中,并跳转到步骤S3。
[0042] 作为优选实施方式,步骤S1中获取的与系统调用相关的溯源信息包括:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。
[0043] 作为优选实施方式,所述映射表map1为以远端IP地址和远端端口号为key的hash表。
[0044] 作为优选实施方式,所述映射表map1中包括以下信息:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。
[0045] 作为优选实施方式,所述映射表map2为以进程身份标识PID和父进程身份标识FPID为key的hash表。
[0046] 作为优选实施方式,所述映射表map2包括以下信息:远端IP地址、远端端口号、本地IP地址和本地端口号。
[0047] 作为优选实施方式,步骤S3中所述除accept和connect以外的系统调用包括:open、execve、read、create、rename和write。
[0048] 实施例1
[0049] 本发明提供了一种基于sysdig系统监控获取溯源信息的方法,包括如下步骤:
[0050] S1:从sysdig监控到的accept或connect系统调用获取与系统调用相关的溯源信息,与系统调用相关的溯源信息包括;远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。本发明封装了一个函数g_sysrun_netstat{},用来获取与系统调用相关的溯源信息,其中利用了sysdig的chisel.request_field和evt.field,实现代码如下:
[0051] g_sysrun_netstat={}
[0052] rip=g_field:getfieldinstance("fd.rip")
[0053] lport=g_field:getfieldinstance("fd.lport")
[0054] rport=g_field:getfieldinstance("fd.rport")
[0055] ip=g_field:getfieldinstance("fd.lip")
[0056] local pid=g_field:getfieldinstance("proc.pid")
[0057] local ppid=g_field:getfieldinstance("proc.ppid")
[0058] local key=rip..rport
[0059] g_sysrun_netstat[key].srcip=rip
[0060] g_sysrun_netstat[key].srcport=rport
[0061] g_sysrun_netstat[key].dstip=lip
[0062] g_sysrun_netstat[key].dstport=lport
[0063] g_sysrun_netstat[key].pid=pid
[0064] g_sysrun_netstat[key].dstport=ppid
[0065] S2:将步骤S1中获取的所述与系统调用相关的溯源信息存储到map映射表map1,map1为以IP地址和端口号为key的hash表,参考图4,map1中包括以下信息:远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。
[0066] S3:当sysdig监控到除accept和connect以外的系统调用(包括:open、execve、read、create、rename和write系统调用,还可以有其他除accept和connect以外的系统调用)时,从map映射表map2中获取与系统调用相关的溯源信息,map2为以进程身份标识PID或父进程身份标识FPID为key的hash表,参考图5,map2包括以下信息:远端IP地址、远端端口号、本地IP地址和本地端口号。
[0067] S4:若步骤S3中获取到了与系统调用相关的溯源信息,跳转到步骤S3;若步骤S3中未获取到与系统调用相关的溯源信息,则从步骤S2中存储与系统调用相关的溯源信息的map映射表map1中获取与系统调用相关的溯源信息,包括远端IP地址、远端端口号、本地IP地址、本地端口号、进程身份标识PID和父进程身份标识FPID。其中在map映射表map1中查找IP地址,在上述封装的函数g_sysrun_netstat{}的调用结果中查找,实现代码如下:
[0068]
[0069] S5:将步骤S4中从map映射表map1中获取的与系统调用相关的溯源信息,包括远端IP地址、远端端口号、本地IP地址、本地端口号以进程身份标识PID和父进程身份标识FPID为key存储到map映射表map2中,并跳转到步骤S3。将从map1获取的与系统调用相关的溯源信息向map2写的实现代码如下:
[0070] g_pid_ip_map_table={}
[0071] g_pid_ip_map_table[pid].dstip=dstip
[0072] g_pid_ip_map_table[pid].dstport=dstport
[0073] g_pid_ip_map_table[pid].srcip=srcip
[0074] g_pid_ip_map_table[pid].srcport=srcport
[0075] g_pid_ip_map_table[pid].key=srcip..srcport
[0076] 本发明提供了一种基于开源的sysdig进行二次开发以获取所有系统调用时的溯源信息的技术方案,通过利用sysdig采集包含各种系统调用(syscall)全面相关的系统行为事件信息,并通过accept和connect获取到溯源信息,并对accept和connect系统调用时获取的溯源信息进行存储,供其他系统调用时查询。实现了通过sysdig对系统的监控,使得所有系统调用都能够获得溯源信息。
[0077] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均包含在本发明的保护范围之内。