一种收集网络溯源信息的方法及系统与流程

文档序号:12376746阅读:803来源:国知局
一种收集网络溯源信息的方法及系统与流程

本发明属于计算机系统安全领域,更具体地,涉及一种收集网络溯源信息的方法及系统。



背景技术:

目前,利用计算机网络实施犯罪的事件已绝不少见。面对现在这样一个越来越开放的网络环境,数据安全也受到很大威胁。信息系统的安全一般采用标识与鉴别、访问控制、加密技术等安全机制来加以保护,内部网络和外部网络之间使用防火墙技术类似保护,但通过这些方法并不能完全杜绝入侵时间的发生。因此,入侵检测技术就成了系统保护的第二层屏障。

现有技术通过利用PASS系统收集溯源来进行入侵检测,但在PASS系统中,只描述了文件、管道和进程这几种对象,对于数据在网络上的传输并没有相应的机制去记录。并且,PASS只收集存放在PASS卷上的对象的溯源信息。因此从PASS卷上拷贝走任何文件并不会产生相应的溯源信息。鉴于很多攻击都是通过网络进行的,因此对这部分信息的收集十分重要。但是传统的入侵检测大部分是通过分析系统/网络日志和检测磁盘状态,但日志仅仅记录部分或者应用程序制定的信息,比如HTTP连接,用户登录信息等,并不足以让管理员分析系统攻击后到底发生了什么。磁盘检测仅能够提供文件的最终状态,文件是如何被修改的也不得而知。借助检查入侵工具Backtracker可以找到入侵检测原因,但只能分析本地受攻击文件,Mount ghost通过可移动设备对数据泄露进行监控,但对通过网络等途径造成的数据泄露并没有提出具体解决方案。



技术实现要素:

本发明所要解决的技术问题是针对现有技术的不足,提供一种收集网络溯源信息的方法及系统,其目的在于拦截socket连接的accept(接受)、connect(连接)、send(接收)和recv(发送)系统调用;通过这些系统调用初始化与socket对应的inode结构体中的溯源变量,收集socket连接相关联的IP地址、端口号、用户ID和创建时间信息;处理溯源信息,去掉重复的信息并且保证不会出现环;将获得的溯源信息写入溯源文件系统,保存在日志文件中。由此解决现有方法中存在的无法监控通过网络途径造成的数据泄露的问题,并使用户能够发现入侵的网络来源,以及入侵的具体操作。

为实现上述目的,按照本发明的一个方面,提供了一种收集网络溯源信息的系统,包括以下部分:

网络溯源拦截层,用于调用拦截函数拦截accept、connect、send和recv系统调用;

网络溯源观察层,用于初始化溯源变量,利用拦截函数收集socket溯源信息与该socket相关联的IP地址、端口号信息、用户ID和连接创建时间;

网络溯源分析层,用于负责处理溯源信息,去掉重复的信息并且保证不会出现环;

网络溯源分布层,用于将网络溯源信息写入溯源文件系统,保存在日志文件中。

进一步地,所述网络溯源拦截层包含以下子模块:

添加拦截函数子模块,用于将拦截函数interceptor_accept、interceptor_connect、interceptor_send和interceptor_recv直接嵌入socket相关系统调用函数sys_accept、sys_connect、sys_send和sys_recv中进行拦截;

定义全局变量子模块,用于定义一个全局结构体变量为达到模块化要求,全局结构体变量的成员变量为多个函数指针,这些函数指针指向用来收集网络溯源信息的拦截函数interceptor_accept、interceptor_connect、interceptor_send和interceptor_recv;初始情况下,这些函数指针为空,表示不收集溯源信息;若要收集网络溯源信息,则给函数指针赋予相应的值,调用拦截函数来收集溯源信息;当卸载该模块后,这些函数指针恢复为默认的空指针。

进一步地,所述网络溯源观察层包含以下子模块:

IP地址收集子模块,用于对socket进行初始化,并收集产生的溯源信息:当执行sys_accept和sys_connect系统调用函数时,对socket进行初始化,执行observer_initsocket函数,来初始化与socket对应的inode结构体中的溯源变量;之后执行observer_socket函数,收集intercept_accept函数和intercept_connect函数获取的IP地址,端口号、用户ID和连接创建时间信息;

依赖数据收集子模块,用于调用观察函数,收集依赖数据信息:当执行sys_send系统调用函数时,表示进程向网络对象中写数据,产生依赖数据信息,执行intercept_send函数进行拦截,调用observer__send函数进行收集依赖数据信息;当执行sys_recv系统调用函数时,表示从网络中接收数据,产生依赖数据信息,执行intercept_recv函数进行拦截,调用observer_recv函数进行收集依赖数据信息。

进一步地,所述socket对应一个文件描述符,通过socket从网络中读取和发送数据产生类似于读写一个文件的依赖关系。

按照本发明的另一方面,提供了一种收集网络溯源信息的方法,包括以下步骤:

(1)网络溯源拦截步骤,调用拦截函数用于拦截accept、connect、send和recv系统调用;

(2)网络溯源观察步骤,初始化溯源变量,利用拦截函数收集socket溯源信息与该socket相关联的IP地址、端口号信息、用户ID和连接创建时间;

(3)网络溯源分析步骤,负责处理溯源信息,去掉重复的信息并且保证不会出现环;

(4)网络溯源分布步骤,将网络溯源信息写入溯源文件系统,保存在日志文件中。

进一步地,所述网络溯源拦截步骤具体包含以下子步骤:

(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;初始情况下,这些函数指针为空,表示不收集溯源信息;若要收集网络溯源信息,则给函数指针赋予相应的值,调用拦截函数来收集溯源信息;当卸载该模块后,这些函数指针恢复为默认的空指针。

进一步地,所述网络溯源观察步骤具体包含以下子步骤:

(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函数进行收集依赖数据信息。

进一步地,所述socket对应一个文件描述符,通过socket从网络中读取和发送数据产生类似于读写一个文件的依赖关系。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

(1)能够找到入侵来源:由于拦截了accept(接受)和connect(连接)系统调用,建立了网络连接,我们可以从溯源信息中直接查询到入侵来源的IP地址、端口号等信息。

(2)可以跟踪从存储系统中拷贝走的文件:由于通过socket从网络中读取和发送数据类似于读写一个文件,所以通过socket从网络中读取和发送数据产生的依赖关系和读写文件是类似的,因此我们可以通过socket连接,跟踪通过网络途径造成的数据泄露。

附图说明

图1、本发明一种收集网络溯源信息系统示意图;

图2、本发明中拦截系统调用示意图;

图3、本发明中拦截系统调用流程图;

图4、本发明中收集网络溯源架构示意图;

图5、本发明中获取socket连接的溯源信息示意图;

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图1所示,是本发明一种收集网络溯源信息的系统,该系统包括以下部分:

网络溯源拦截层,调用拦截函数用于拦截accept、connect、send和recv系统调用;

网络溯源观察层,初始化溯源变量,利用拦截函数收集socket溯源信息与该socket相关联的IP地址、端口号信息、用户ID和连接创建时间;

网络溯源分析层,用于负责处理溯源信息,去掉重复的信息并且保证不会出现环;

网络溯源分布层,用于将网络溯源信息写入溯源文件系统,保存在日志文件中。

如图2所示,网络溯源拦截层将截获代码直接嵌入系统调用的函数中去,从而拦截socket相关系统调用:connect、accept、send和recv。

如图3所示,为了达到模块化的要求,网络溯源拦截层定义一个全局结构体变量observer_ops,其成员变量为多个函数指针,这些函数指针指向用来收集网络溯源的函数。初始情况下,这些函数指针为空,表示不收集溯源信息。当加载溯源信息收集模块时,这些函数指针被赋予相应的值,以用来收集溯源。当卸载该模块后,这些函数指针恢复为默认的空指针。

如图4所示,intercept_accept函数和intercept_connect函数用于拦截accept和connect系统调用。这两个系统调用都需要对socket进行初始化,并产生必要的溯源信息。网络溯观察层首先执行observer_initsocket函数,来初始化与socket对应的inode结构体中关于网络连接对象的一些变量,例如向Lasagna文件系统申请pnode号等,这是通过调用在Lasagna文件系统中加入的init_socket函数实现的。之后网络溯观察层执行observer_socket函数,该函数收集与该socket连接相关联的IP地址,端口号等信息,并将进程和该socket连接关联起来;intercept_send函数用于拦截send系统调用,当向网络中发送数据时执行。intercept_send函数调用网络溯观察层的observer_send函数收集溯源信息,用来表示进程向网络对象中写数据。intercept_recv函数用于拦截recv系统调用,当从网络中接收数据时执行。intercept_recv函数调用网络溯观察层的observer_send函数收集溯源信息,用来表示进程从网络对象接收数据。

如图5所示,在Linux系统中,一个socket也会对应一个文件描述符,所以通过socket从网络中读取和发送数据类似于读写一个文件。这样产生的依赖关系和读写文件是类似的。假定B为网络连接对象,P为进程,Socket中的系统调用send产生“B->P”这样的依赖关系,recv产生“P->B”这样的依赖关系。

以客户端从服务器端读取数据为例,当客户端和服务器端建立连接后,要从服务器端读取文件时,服务器端进程先读取本地文件,然后通过send函数发送给客户端,这样可以把send过程当作是本地的write过程,即有send过程发生时,把该进程之前读取的文件、该send进程以及send发送的socket连接形成依赖关系。当把对象间的各种依赖关系都表示在一张溯源图中时,就能指示出哪个文件被访问过,访问人是谁,以及文件被拷贝到哪里了。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1