一种基于Linux安全模块的文件审计、防护方法
技术领域
本发明涉及Linux下的文件审计及防护技术领域,具体涉及一种基于Linux安全模块的文件审计、防护方法。
背景技术
Linux下的文件审计和防护功能,目前实现的方法主要有iNotify和InlineHook等,但这些方法都存在一些问题:iNotify是一个检测文件***变化的工具,用这个工具可以实现文件审计的功能,但文件防护(如文件防删、防修改、文件隐藏等)功能无法做到,而且它能监控的文件个数有个上限,超出这个阈值的文件不会被监控。
InlineHook是一种钩取(hook)***函数的技术,通过替换目标函数头部指令实现在函数执行之前跳转到其他的指令区域,执行完毕跳转回到原来的函数,跳转到的指令区域通常是我们自己编写的函数,来完成根据安全策略实现文件审计和防护的功能,由于这种技术需要做指令修改和跳转等操作,所以在稳定性和***版本兼容等方面存在不足。
发明内容
为了克服上述现有技术中的不足,本发明提供一种基于Linux安全模块的文件审计、防护方法,以解决上述技术问题。
本发明的技术方案是:
一种基于Linux安全模块的文件审计、防护方法,包括如下步骤:
安全模块定义文件操作相关的钩子函数;
将钩子函数注册到LSM框架中;
编译成内核ko模块,以Linux内核ko模块的形式来实现安全访问控制。
进一步的,步骤安全模块定义文件操作相关的钩子函数,包括:
定义全局表并在其中指定要实现的钩子函数列表;
在指定的钩子函数中,进行文件操作审计;
设置钩子函数的返回值来实现文件防护。
进一步的,步骤定义全局表并在其中指定要实现的钩子函数列表中,定义security_operations结构的全局表,指定的钩子函数包括:
文件复制/创建判断函数、文件删除判断函数、目录复制/创建判断函数、目录删除判断函数、文件操作判断函数、文件复制判断函数、文件打开函数、文件修改判断函数。
进一步的,步骤定义全局表并在其中指定要实现的钩子函数列表中,定义security_operations结构的全局表;
设定,文件复制/创建判断函数为inode_create函数;
文件删除判断函数为inode_unlink函数;
目录复制/创建判断函数为inode_mkdir函数;
目录删除判断函数为inode_rmdir函数;
文件操作判断函数为inode_rename函数;
文件复制判断函数-inode_setattr函数;
文件打开函数为file_open函数;
文件修改判断函数为file_permission函数。
进一步的,步骤在指定的钩子函数中,进行文件操作审计,包括:
通过函数参数获取***作文件的完整名称;
通过钩子函数类型识别文件操作类型。
进一步的,文件操作类型识别过程包括:
inode_create钩子函数中判断文件复制操作和文件创建操作;其中,当进程名为指定的第一名称或第二名称且由相同的进程先调用了file_open函数时,是文件复制操作;否则是文件创建操作;
inode_mkdir 钩子函数中判断目录复制操作和目录创建操作;其中,当进程名为指定的第一名称或第二名称且由相同的进程先调用了file_open函数时,是目录复制操作;否则是目录创建操作。
进一步的,文件操作类型识别过程还包括:
inode_unlink 钩子函数中判断文件删除操作;
inode_rmdir 钩子函数中判断目录删除操作;
inode_setattr 钩子函数中判断文件复制操作;其中,当进程名为指定的第二名称,且由相同的进程先调用了file_open时,是文件复制操作;
file_permission 钩子函数中判断文件修改操作,其中,第一参数中MAY_READ位被置第一设定值时,是文件修改操作。
进一步的,文件操作类型识别过程还包括:
inode_rename 钩子函数中判断文件操作,包括:
文件创建操作:rename的源文件是office目录下的模版文件时,是文件创建操作;
文件重命名操作:源文件和目标文件在同一个目录中,是文件重命名操作;
文件复制操作:源文件和目标文件不在同一目录下,从监控目录拷贝到非监控目录时,是文件复制操作;
文件移动操作:源文件和目标文件不在同一目录下, 从监控目录拷贝到监控目录时,是文件移动操作。
文件删除操作:目的目录是回收站目录时,是文件删除操作;
文件修改操作:源文件fullname和目的文件fullname相同时,是文件修改操作,所述源文件是相同进程open的文件,不是rename的源文件。
进一步的,步骤设置钩子函数的返回值来实现文件防护,具体操作如下:
文件隐藏:file_permission函数中第一参数的MAY_READ位被置第一设定值时, 返回第一设定值,即可隐藏文件;
文件防止修改:inode_setattr返回第二设定值,或者file_permission中第一参数的MAY_READ位被置第一设定值时,返回第二设定值,即可防止文件被修改;
文件防止删除:inode_unlink和inode_rmdir返回第二设定值,即可防止文件被删除;inode_rename的目标目录是回收站时,返回第二设定值即可防止文件被删除。
进一步的,步骤将钩子函数注册到LSM框架中,包括:
调用register_security函数注册security_operations全局表到LSM框架。
进一步的,第一设定值为1,第二设定值为-1。
进一步的,第一名称为pool,第二名称为cp,第一参数为mask。
Linux安全模块(LSM)是Linux内核的一个轻量级通用访问控制框架,基于此框架可以以Linux可加载模块(内核ko模块)的形式来实现安全访问控制的功能,LSM在Linux源代码的很多关键代码路径中***了对钩子函数的调用,我们只需要实现LSM定义的文件操作相关的钩子函数,并注册到LSM框架中,在做相应的文件操作时,我们的文件访问控制的业务逻辑会被执行,从而实现审计和防护的目的。
从以上技术方案可以看出,本发明具有以下优点:本方案是基于Linux内核提供的安全模块来实现,稳定性和***兼容性比较好。LSM提供的钩子函数比较全面,而且函数中能拿到的关于文件和操作的信息比较多,所以在钩子函数(或组合几个钩子函数)中可以准确的审计文件操作行为。本方案对监控的文件数量没有限制,而且功能全面。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
图1为一种基于Linux安全模块的文件审计、防护方法流程示意图;
图2为一种基于Linux安全模块的文件审计、防护方法流程示意图。
具体实施方式
下面结合附图并通过具体实施例对本发明进行详细阐述,以下实施例是对本发明的解释,而本发明并不局限于以下实施方式。
实施例一
如图1-2所示,一种基于Linux安全模块的文件审计、防护方法,包括如下步骤:
S1:安全模块定义文件操作相关的钩子函数;
S2:将钩子函数注册到LSM框架中;
S3:编译成内核ko模块,以Linux内核ko模块的形式来实现安全访问控制。
步骤S1,包括:
S11:定义全局表并在其中指定要实现的钩子函数列表;
S12:在指定的钩子函数中,进行文件操作审计;
S13:设置钩子函数的返回值来实现文件防护。
步骤S11中,定义security_operations结构的全局表,指定的钩子函数包括:
文件复制/创建判断函数、文件删除判断函数、目录复制/创建判断函数、目录删除判断函数、文件操作判断函数、文件复制判断函数、文件打开函数、文件修改判断函数。
更进一步的,步骤S11中,定义security_operations结构的全局表;
设定,文件复制/创建判断函数为inode_create函数;
文件删除判断函数为inode_unlink函数;
目录复制/创建判断函数为inode_mkdir函数;
目录删除判断函数为inode_rmdir函数;
文件操作判断函数为inode_rename函数;
文件复制判断函数-inode_setattr函数;
文件打开函数为file_open函数;
文件修改判断函数为file_permission函数。
步骤S12,包括:
S121:通过函数参数获取***作文件的完整名称;
S122:通过钩子函数类型识别文件操作的类型。
步骤S122中,文件操作类型识别过程包括:
inode_create钩子函数中判断文件复制操作和文件创建操作;其中,当进程名为指定的第一名称或第二名称且由相同的进程先调用了file_open函数时,是文件复制操作;否则是文件创建操作;
inode_mkdir 钩子函数中判断目录复制操作和目录创建操作;其中,当进程名为指定的第一名称或第二名称且由相同的进程先调用了file_open函数时,是目录复制操作;否则是目录创建操作;
inode_unlink 钩子函数中判断文件删除操作;
inode_rmdir 钩子函数中判断目录删除操作;
inode_setattr 钩子函数中判断文件复制操作;其中,当进程名为指定的第二名称,且由相同的进程先调用了file_open时,是文件复制操作;
file_permission 钩子函数中判断文件修改操作,其中,第一参数中MAY_READ位被置第一设定值时,是文件修改操作。
inode_rename 钩子函数中判断文件操作,包括:
文件创建操作:rename的源文件是office目录下的模版文件时,是文件创建操作;
文件重命名操作:源文件和目标文件在同一个目录中,是文件重命名操作;
文件复制操作:源文件和目标文件不在同一目录下,从监控目录拷贝到非监控目录时,是文件复制操作;
文件移动操作:源文件和目标文件不在同一目录下, 从监控目录拷贝到监控目录时,是文件移动操作。
文件删除操作:目的目录是回收站目录时,是文件删除操作;
文件修改操作:源文件fullname和目的文件fullname相同时,是文件修改操作,所述源文件是相同进程open的文件,不是rename的源文件。
步骤S13,具体操作如下:
文件隐藏:file_permission函数中第一参数的MAY_READ位被置第一设定值时, 返回第一设定值,即可隐藏文件;
文件防止修改:inode_setattr返回第二设定值,或者file_permission中第一参数的MAY_READ位被置第一设定值时,返回第二设定值,即可防止文件被修改;
文件防止删除:inode_unlink和inode_rmdir返回第二设定值,即可防止文件被删除;inode_rename的目标目录是回收站时,返回第二设定值即可防止文件被删除。
调用register_security函数注册security_operations全局表到LSM框架。
实施例二
一种基于Linux安全模块的文件审计、防护方法,包括如下步骤:
(1)定义security_operations结构的全局表,在其中指定我们要实现的钩子函数列表,包括:inode_create函数、inode_unlink函数、inode_mkdir函数、inode_rmdir函数、inode_rename函数、inode_setattr函数、file_open函数、file_permission函数
在上面指定的钩子函数中,进行文件操作审计:通过函数参数获取***作文件的完整名称,通过钩子函数类型识别文件操作类型,有些文件操作比较特殊,会涉及多个钩子函数,需要组合多个钩子函数来识别。
A:文件操作类型识别过程如下:
inode_create钩子函数中判断以下两种文件操作:
a:文件复制操作
当进程名是pool或cp,且由相同的进程先调用了file_open时,是文件复制操作,由open的文件复制到create的文件。
b:文件创建操作
其他情况是文件创建操作。
inode_unlink 钩子函数中判断以下一种文件操作:
c:文件删除操作
inode_mkdir 钩子函数中判断以下两种文件操作:
d:目录复制操作
当进程名是pool或cp,且由相同的进程先调用了file_open时,是目录复制操作,由open的目录复制到mkdir的目录。
e:目录创建操作
其他情况是目录创建操作。
inode_rmdir 钩子函数中判断以下一种文件操作:
f:目录删除操作
inode_setattr 钩子函数中判断以下一种文件操作:
g:文件复制操作
当进程名是cp,且由相同的进程先调用了file_open时,是文件复制操作,由open的文件复制到setattr的文件。
file_permission 钩子函数中判断以下一种文件操作:
h:文件修改操作
参数mask中MAY_WRITE位被置1时,是文件修改操作。
inode_rename 钩子函数中判断以下六种文件操作:
i:文件创建操作
rename的源文件是office目录下的模版文件时,是文件创建操作。
j:文件重命名操作
源文件和目标文件在同一个目录中,是文件重命名操作。
k:文件复制操作
源文件和目标文件不在同一目录下,从监控目录拷贝到非监控目录时,是文件复制操作。
m:文件移动操作
源文件和目标文件不在同一目录下,从监控目录拷贝到监控目录时,是文件移动操作。
n:文件删除操作
目的目录是回收站目录时,是文件删除操作。
p:文件修改操作
源文件fullname和目的文件fullname相同时,是文件修改操作(源文件是相同进程open的文件,不是rename的源文件)。
B:设置钩子函数的返回值来实现文件防护的功能,具体操作如下:
q:文件隐藏
file_permission中参数mask的MAY_READ位被置1时, 返回 1 可以隐藏文件
r:文件防止修改
inode_setattr返回-1,或者file_permission中参数mask的MAY_WRITE位被置1时返回-1,可以防止文件被修改。
s:文件防止删除
inode_unlink和inode_rmdir返回-1可以防止文件被删除;inode_rename的目标目录是回收站时,返回-1可以防止文件被删除。
(2)调用register_security函数注册security_operations全局表到LSM框架。
(3)把以上程序编译成内核ko模块,insmod到内核。
基于Linux内核提供的安全模块LSM来实现,稳定性和***兼容性比较好。LSM提供的钩子函数比较全面,而且函数中能拿到的关于文件和操作的信息比较多,所以在钩子函数(或组合几个钩子函数)中可以准确的审计文件操作行为。本发明对监控的文件数量没有限制,而且功能全面。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。