本发明涉及系统安全技术领域,特别是一种内核级的文件防护方法及系统。
背景技术:文件防护是系统安全、入侵检测、网页防篡改等产品中常用的技术,其功能是保护特定的目录或文件,使其不被非法篡改。从机制上来说,文件防护大致分为两大类:一种是实时阻断类,即在篡改发生前即阻止;另一种是事后恢复类,即在篡改发生后及时发现并进行恢复。而内核级的文件防护机制作为一种实时阻断的文件防护机制被很多Linux用户所使用。目前,Linux下常用的一种内核级的文件防护机制是劫持与文件操作相关的系统调用(如open、write、rename、unlink等),在自定义的系统调用实现函数中进行合法性检查。其工作原理是:Linux系统调用表的每个表项都存储着某个系统调用的实现函数的地址。Linux在执行系统调用中断例程时,会以系统调用号为索引查找系统调用表,确定系统调用实现函数的地址。通过修改系统调用表的全部或部分表项,可以使其指向自定义的处理函数,从而实现对系统调用的劫持。但是,这种内核级的文件防护机制中存在的问题为:与文件操作相关的系统调用多达几十个,且随着Linux内核版本的更新而不断增加,全部劫持与文件操作相关的系统调用对原来的系统影响很大,而只劫持部分系统调用又会导致防护上的漏洞,并且对系统调用全部劫持的话,将会影响整个操作系统中所有文件的操作。
技术实现要素:本发明提供一种内核级的文件防护方法及系统,以解决现有技术中全部劫持对文件操作相关的系统调用时,会造成整个操作系统的稳定性差并且对整个操作系统影响大的问题。具体技术方案如下:一种内核级的文件防护方法,所述方法包括:接收内核级的文件防护请求;获取所述内核级的文件的文件操作表和索引节点操作表;分别修改所述文件操作表和索引节点操作表中的参数,得到指向结果,依据所述指向结果得到规则检查函数;通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。优选地,所述通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则的过程包括:通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改的操作,如果是,则阻止所述内核文件操作,如果否,则完成所述内核级的文件操作。优选地,所述通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则的过程包括:通过所述规则检查函数判断所述内核级的文件操作是否有禁止用户对所述内核级的文件进行更改的操作,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。优选地,所述通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则的过程包括:通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改和禁止用户对所述内核级的文件进行更改的操作,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。优选地,在获取所述内核级的文件的文件操作表和索引节点操作表之后,在修改所述文件操作表和索引节点操作表中的参数之前,还包括:将所述文件操作表和索引节点操作表进行备份。一种内核级的文件防护系统,所述系统包括:接收模块、获取模块、修改模块和判断模块;其中,所述接收模块用于,接收内核级的文件防护请求;所述获取模块用于,获取所述内核级的文件的文件操作表和索引节点操作表;所述修改模块用于,分别修改所述内核级的文件操作表和索引节点操作表中的参数,得到指向结果,依据所述指向结果得到规则检查函数;所述判断模块用于,通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。优选地,所述判断模块用于,通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改的操作,如果是,则阻止所述内核文件操作,如果否,则完成所述内核级的文件操作。优选地,所述判断模块用于,通过所述规则检查函数判断所述内核级的文件操作是否有禁止用户对所述内核级的文件进行更改的操作,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。优选地,所述判断模块用于,通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改和禁止用户对所述内核级的文件进行更改的操作,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。优选地,还包括:备份模块;所述备份模块用于,将所述文件操作表和索引节点操作表进行备份。从以上技术方案可以看出,本发明提供了一种内核级的文件防护方法及系统,所述方法应用于所述系统中,通过获取所述内核级的文件的文件操作表和索引节点操作表后,将所述文件操作表和所述索引节点操作表中的参数进行修改,得到指向结果,依据所述指向结果得到规则检查函数,通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作,所述方法不需要劫持与文件操作相关的所有系统调用,而只是修改了所述内核文件对应的文件操作表和索引节点操作表,就可以实现对所述内核级的文件操作层的劫持,这样不会给整个操作系统带来很大的影响,并且稳定性好。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对发明或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明公开的虚拟文件系统分层结构示意图;图2为本发明公开的实现一个文件操作的基本步骤示意图;图3为本发明实施例一公开的一种内核级的文件防护方法流程示意图;图4为本发明实施例二公开的一种内核级的文件防护方法流程示意图;图5为本发明实施例三公开的一种内核级的文件防护方法流程示意图;图6为本发明公开的一个具体实例;图7为本发明实施例四公开的一种内核级的文件防护系统结构示意图;图8为本发明实施例五公开的一种内核级的文件防护系统结构示意图。具体实施方式文件防护是系统安全、入侵检测、网页篡改等产品常用的技术,其功能是保护特定的目录或文件,使其不被非法篡改。从机制上来说,文件防护大致分为两大类:一种是实时阻断类,即在篡改发生前即阻止;另一种是事后恢复类,即在篡改发生后及时发现并进行恢复。而内核级的文件防护机制作为一种实时阻断的文件防护机制被很多Linux用户所使用。目前,Linux下常用的一种内核级的文件防护机制是劫持与文件操作相关的系统调用(如open、write、rename、unlink等),在自定义的系统调用实现函数中进行合法性检查。其工作原理是:Linux系统调用表的每个表项都存储着某个系统调用的实现函数的地址。Linux在执行系统调用中断例程时,会以系统调用号为索引查找系统调用表,确定系统调用实现函数的地址。通过修改系统调用表的全部或部分表项,可以使其指向自定义的处理函数,从而实现对系统调用的劫持。Linux之所以能支持ext3、reiserfs、nfs等众多的各种文件系统,是因为Linux提供了一种统一的框架,即所谓的虚拟文件系统转换(VirtualFilesystemSwitch),简称虚拟文件系统(VirtualFileSystem,VFS)。所述虚拟文件系统分层结构参见图1所示,虚拟文件系统是内核中实现的一个软件层,它既为用户空间程序提供文件系统接口的调用,也是保证系统内核各种逻辑文件系统实现能够共存的抽象层。虚拟文件系统中有四个重要的概念:超级块、目录项、索引节点和文件。其中,索引节点对象:对于一个磁盘分区,Linux为每个文件分配一个称为索引节点(inode)的编号,可以将索引节点简单理解成一个指针,它永远指向本文件在该磁盘分区上的具体存储位置。系统通过索引节点(而不是文件名)定位一个文件。在内核中,索引节点对象用inode结构体表示。Linux在使用一个索引节点时,将存储于磁盘上的索引节点信息调入内存,并填充到inode结构体中。与索引节点对象相关的操作集合称为索引节点操作表,由inode_operations结构体具体描述。该结构体中的每个成员都是函数指针,并指向某种具体操作的实现函数,如create成员指向新建索引节点的实现函数,setattr成员指向修改索引节点属性的实现函数,等等。文件对象:文件对象表示进程已经打开的文件,该对象不是物理意义上的文件,它在内核中表示为file结构体,该结构体由open等系统调用创建,由close等系统调用销毁。多个进程可以同时打开和操作同一个文件,所以物理上的同一个文件可能存在多个对应的文件对象。与文件对象相关的操作集合称为文件操作表,由file_operations结构体具体描述。该结构体的每个成员都是函数指针,并指向某个具体操作的实现函数,如write成员指向文件写入操作的实现函数,等等。以写入文件的操作为例,实现一个文件操作的基本步骤如下图2所示:首先,用户程序调用write系统调用,使Linux陷入内核。在内核中,Linux通过系统调用表查找到write系统调用的实现函数(即sys_write),并执行该函数。在sys_write中,会调用VFS层针对文件写入操作的接口函数vfs_write()。在vfs_write()中,将根据文件所属磁盘分区的文件系统类型(如ext3、reiserfs、nfs等),查找到该文件系统对应的file_operations结构体,并调用该结构体中write成员指向的函数,实现实际的写入操作。下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。本发明实施例一公开了一种内核级的文件防护方法,参见图3所示,所述方法包括:步骤S101:接收内核级的文件防护请求;步骤S102:获取所述内核级的文件的文件操作表和索引节点操作表;其中,在内核中每个所述内核级的文件都有其对应的文件操作表和索引节点操作表;步骤S103:修改所述内核级的文件操作表和索引节点操作表中的参数,得到指向结果,依据所述指向结果得到规则检查函数;需要说明的是,通过修改所述内核文件操作表和索引节点操作表中的参数,可以使它们指向规则检查函数,从而实现了对所述内核级的文件操作层的劫持,而且可以劫持的为同一文件系统下同一类型的文件;通过对Linux源代码的分析,可以确认:对于同种逻辑文件系统(逻辑文件系统指一种具体的文件系统格式,如ext3、reiserfs、nfs等)下、且类型相同(这里的类型指文件、目录、符号链接等大的类型区分)的文件,都对应同一个file_operations结构体和同一个inode_operations结构体,这样就可以实现对同一文件系统下同一类型文件的劫持。而且,实际上,这两个结构体是由该逻辑文件系统定义和初始化的静态全局变量;因此,在对所述内核文件操作表和索引节点操作表中的参数修改完成后,对所述文件系统下的所有文件的操作请求,都会转由规则检查函数在完成索引节点操作函数和文件操作函数;步骤S104:通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,步骤S105,如果否,步骤S106;步骤S105:阻止所述内核级的文件操作;步骤S106:完成所述内核级的文件操作。本实施例公开了一种内核级的文件防护方法,所述方法通过获取所述内核级的文件的文件操作表和索引节点操作表后,将所述文件操作表和所述索引节点操作表中的参数进行修改,得到指向结果,依据所述指向结果得到规则检查函数,通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作,所述方法不需要劫持与文件操作相关的所有系统调用,而只是修改了所述内核文件对应的文件操作表和索引节点操作表,就可以实现对所述内核级的文件操作层的劫持,这样不会给整个操作系统带来很大的影响,并且稳定性好。本发明实施例二公开了一种内核级的文件防护方法,参见图4所示,所述方法包括:步骤S201:接收内核级的文件防护请求;步骤S202:获取所述内核级的文件的文件操作表和索引节点操作表;步骤S203:修改所述内核级的文件操作表和索引节点操作表中的参数,得到指向结果,依据所述指向结果得到规则检查函数;具体实施例方式与实施例一公开的步骤S103的实现方式一样。步骤S204:通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改的操作,如果是,步骤S205,如果否,步骤S206;步骤S205:阻止所述内核级的文件操作;步骤S206:完成所述内核级的文件操作。需要说明的是,还可以判断所述内核级的文件操作是否有禁止用户对所述内核级的文件进行更改的操作,此外,还可以是同时判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改的操作和禁止用户对所述内核级的文件进行更改的操作,显然,这些条件可以是根据用户的需求来设定,同时,还可以设置的防护规则有:禁止对某些目录下的文件进行更改,禁止文件路径对文件的修改以及禁止写入内容对文件的修改等,也可以是上述几个防护规则的结合。本实施例公开了一种内核级的文件防护方法,所述方法中,对如何通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则进行了阐述,即所述防护规则可以包括:禁止对某些关键目录下的文件进行更改,禁止用户对文件进行修改,禁止进程对文件进行更改等,可以是其中一项作为防护规则,也可以是所有项的结合,这样可以提高判断的精度。本发明实施例三公开了一种内核级的文件防护方法,参见图5所示,所述方法包括:步骤S301:接收内核级的文件防护请求;步骤S302:获取所述内核级的文件的文件操作表和索引节点操作表;步骤S303:将所述内核级的文件的文件操作表和索引节点操作表进行备份;步骤S304:修改所述内核级的文件的文件操作表和索引节点操作表中的参数,得到指向结果,依据所述指向结果得到规则检查函数;步骤S305:通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,步骤S306,如果否,步骤S307;步骤S306:阻止所述内核级的文件操作;步骤S307:完成所述内核级的文件操作。本实施例公开了一种内核级的文件防护方法,所述方法在实施例一的基础上,还包括了对所述内核级的文件的文件操作表和所述索引节点操作表进行备份的过程,将所述内核级的文件的文件操作表和所述索引节点操作表事先进行备份是为了方便了用户还原系统时使用。本发明公开的内核级的文件防护方法原理,可以参见图6所示,图中以ext3文件系统为例。本发明实施例四公开了一种内核级的文件防护系统,参见图7所示,所述系统包括:接收模块101、获取模块102、修改模块103和判断模块104;其中,所述接收模块101用于,接收内核级的文件防护请求;所述获取模块102用于,获取所述内核级的文件的文件操作表和索引节点操作表;其中,在内核中每个所述内核级的文件都有其对应的文件操作表和索引节点操作表;所述修改模块103用于,修改所述内核级的文件操作表和索引节点操作表中的参数,得到指向结果,依据所述指向结果得到规则检查函数;需要说明的是,通过修改所述内核文件操作表和索引节点操作表中的参数,可以使它们指向规则检查函数,从而实现了对所述内核级的文件操作层的劫持,而且可以劫持的为同一文件系统下同一类型的文件;通过对Linux源代码的分析,可以确认:对于同种逻辑文件系统(逻辑文件系统指一种具体的文件系统格式,如ext3、reiserfs、nfs等)下、且类型相同(这里的类型指文件、目录、符号链接等大的类型区分)的文件,都对应同一个file_operations结构体和同一个inode_operations结构体,这样就可以实现对同一文件系统下同一类型文件的劫持。而且,实际上,这两个结构体是由该逻辑文件系统定义和初始化的静态全局变量;因此,在对所述内核文件操作表和索引节点操作表中的参数修改完成后,对所述文件系统下的所有文件的操作请求,都会转由规则检查函数在完成索引节点操作函数和文件操作函数;所述判断模块104用于,通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。其中,所述判断模块104具体用于,通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改的操作,如果是,则阻止所述内核文件操作,如果否,则完成所述内核级的文件操作。所述判断模块104具体用于,通过所述规则检查函数判断所述内核级的文件操作是否有禁止用户对所述内核级的文件进行更改的操作,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。所述判断模块104具体用于,通过所述规则检查函数判断所述内核级的文件操作是否有禁止进程对所述内核级的文件进行更改和禁止用户对所述内核级的文件进行更改的操作,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作。本实施例公开了一种内核级的文件方法系统,所述系统通过获取所述内核级的文件的文件操作表和索引节点操作表后,将所述文件操作表和所述索引节点操作表中的参数进行修改,得到指向结果,依据所述执行结果得到规则检查函数,通过所述规则检查函数判断所述内核级的文件操作是否符合预设防护规则,如果是,则阻止所述内核级的文件操作,如果否,则完成所述内核级的文件操作,所述方法不需要劫持与文件操作相关的所有系统调用,而只是修改了所述内核文件对应的文件操作表和索引节点操作表,就可以实现对所述内核级的文件操作层的劫持,这样不会给整个操作系统带来很大的影响,并且稳定性好。本发明实施例五公开了一种内核级的文件防护系统,参见图8所示,所述系统在实施例四的基础上,还包括:备份模块105;所述备份模块105用于,将所述内核级的文件的文件操作表和索引节点操作表进行备份。本实施例公开了一种内核级的文件防护系统,在实施例四的基础上,所述系统还包括:备份模块,所述备份模块用于,将所述内核级的文件的文件操作表和所述索引节点操作表进行备份,方便了用户还原系统时使用。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽范围。