基于静态数据引用链的Linux文件系统完整性验证方法与流程

文档序号:16070335发布日期:2018-11-24 13:08阅读:192来源:国知局
本发明属于计算机
技术领域
:,尤其是系统与软件安全领域。本发明提出了一种基于静态数据引用链的linux文件系统完整性验证方法,用于检查文件系统动态数据及其组织方式的完整性,提高linux文件系统的安全性。
背景技术
:传统linux内核采用宏内核架构方式,不同内核模块间共享内核地址空间,由于用户态程序无法访问内核地址空间,内核某一模块的不安全性由内核其他模块或者该模块本身造成。为了解决来自内核其他模块的不安全性渗透,产生了很多内核隔离技术。硬件隔离技术。palladium利用硬件段保护机制实现内核态或者用户态进程的隔离,该方法实现比较复杂。fpd利用硬件页保护机制实现用户态进程的隔离,提供策略来判断用户态发来的请求是否合法,该方法并未实现内核态进程的隔离。nooks为驱动程序单独维护一份页表来限制内核对驱动程序的访问权限,该方法可扩展性差,不利于经常更新的驱动程序。mondrix混合软、硬件隔离技术,提供32位细粒度的权限控制以及保护域间切换的权限控制,该方法存在效率问题与兼容性问题。robertoguanciale提出一种相对成熟的内存隔离机制,为armv7-a处理器系列提供了一个mmu虚拟化api,在直接寻址中,页表保存在xen客户机内存中,允许由不受信任的客户机操作系统进行读取并直接操作(当mmu未被主机主动使用时),该方法比x86架构上的其他软件虚拟化方法(例如影子页表)具有更好的性能,且由于不需要维护影子页表等数据结构这种方法具有较小的内存开销,但是该方法目前只支持armv7-a系列处理器。虚拟化隔离技术。这种方法是将对主机内核模块可能受到的攻击转嫁到虚拟机特定模块中,防止主机因内核被攻击造成不可恢复的灾难。例如通过xen、l4ka或ikernel虚拟机将驱动模块隔离出来;virtualghost创建操作系统无法读取或写入的虚拟内存,在内核与硬件之间插入一个薄的硬件抽象层,给内核提供一组api来操作硬件,并为安全应用程序(如虚拟内存管理、加密和签名服务)提供可信赖的服务;inktag也是一种基于虚拟化的体系架构,即使在恶意操作系统中也能为进程的正确执行提供强大的安全保障,inktag强制不可信操作系统参与自己的验证来进行简化虚拟机管理程序。sigularity等类型安全语言来实现的操作系统。这种类型安全语言实现的操作系统能够提供强大的内存隔离保证。但是这种方法明显的不足就是必须要重写现有的操作系统以及服务程序,即使重写了操作系统以及服务程序也会面临其他应用程序不兼容的问题。除此之外,有些操作系统为了提高内核模块安全性将内核特定模块从内核地址空间独立出去,放在了用户态地址空间,例如微内核以及多用户态架构实现的内核。虽然这种方式能够很好的保障内核态进程的安全性,不会造成系统崩溃,但是正如上文提到过这种架构方式效率偏低,用户态以及内核态之间需要频繁的进行消息传递。综上所述,目前大量提高内核模块安全性的方法采用了隔离技术,但是这些要么编程实现方法过于复杂,要么并没有真正的系统安全性,仅是将系统崩溃的风险转嫁给了虚拟机,或者就是效率低下,实现的操作系统用户体验不好。技术实现要素:在现有工作的基础上,本发明的目的在于:从文件系统模块本身出发,提出了一种基于静态数据引用链的linux文件系统完整性验证方法,解决了文件系统动态数据监控难、文件系统状态变更不易检测的问题,从而有效提高文件系统模块的安全性和可靠性。本发明的技术方案为:基于静态数据引用链的linux文件系统完整性验证方法,其特征是linux文件系统静态数据引用链思想,高速缓存查找算法,linux文件系统动态数据对象及其组织关系验证;以此来验证文件系统在给定初始状态的情况下,经过一系列文件操作后,文件系统动态数据对象及其组织关系(文件系统新状态)具有完整性。本发明具体包括以下模块:1)文件系统验证请求汇总与分发模块。基于静态数据引用链的linux文件系统完整性验证方法需要对文件系统不同的文件操作(具体表现为文件系统系统调用)均进行完整性验证,而不同的文件操作具有不同的参数,本模块负责将文件系统不同的文件操作进行抽象化,所有文件操作的完整性验证均由该模块接收,并分发给不同的操作处理函数。2)高速缓存系统算法模块。本模块负责在linux文件系统高速缓存中通过特定的算法找到待验证的文件所在的高速缓存哈希桶,不同的文件系统高速缓存其算法也会不同。linux文件系统建立于高速缓存系统之上,常见的高速缓存系统有目录项高速缓存、索引节点高速缓存、挂载高速缓存、挂载点高速缓存等,为了做到文件系统完整性验证,模块2)基于目录项高速缓存与索引节点高速缓存。目录项高速缓存的算法基于待验证文件的文件名与该文件父目录目录项的地址计算出所在目录项高速缓存的哈希桶,索引节点高速缓存的算法基于文件所在文件系统的超级块对象的地址以及索引节点号计算出所在索引节点高速缓存的哈希桶。3)查找与验证模块。本模块遍历模块2)找到的待验证文件所在哈希桶后面链接的双向链表,找到待验证文件节点,并从待验证文件节点开始,递归检查节点中引用的其它对象的完整性,直至检查到叶子节点。进一步,各个模块具体步骤如下:模块1)中,主功能函数接收所有文件系统系统调用的验证请求,并负责分发到具体的处理函数完成请求。模块功能函数接收两个参数,第一个参数是针对不同文件系统系统调用进行完整性验证的函数地址,函数地址指向不同文件系统系统调用完整性验证的专有处理函数,针对不同的处理需求,不同的处理函数实现不同;另一个参数是针对不同的专有处理函数不同需求定义了泛型指针,泛型指针在本模块中进行重新组装,传给专有处理函数进行调用。模块2)中,实现linux文件系统高速缓存的查找算法。本模块基于目录项高速缓存和索引节点高速缓存来实现linux文件系统的完整性验证,目录项缓存查找需要待查找的目录项名字以及父目录项地址,索引节点高速缓存查找需要待查找索引节点号以及文件系统超级块地址。目录项高速缓存的查找算法:首先根据待查找目录项名字计算出一个hash值,然后将父目录项地址转化为unsignedlong类型的值,最后该unsignedlong类型的值、hash值、目录项高速缓存哈希桶个数一起计算出待查找目录项所在的哈希桶。索引节点高速缓存的查找算法:首先将所处文件系统的超级块地址转化为unsignedlong类型的值,然后该unsignedlong类型的值、待查找索引节点inode号、索引节点高速缓存哈希桶个数一起计算出待查找索引节点所在的哈希桶。模块3)中,基于模块2)查找算法找到的哈希桶,本模块遍历哈希桶后链接的双向链表结构,找到待验证文件的目录项或者索引节点。linux操作系统的文件需要很多数据对象的支撑,从找到的待验证文件的目录项或者索引节点开始,依次验证其引用的其他数据对象以及这些数据对象的组织关系,检查文件系统新状态是否完整。通过以上技术方案,本发明具有以下优点:1.可扩展性强:本发明对linux文件系统所有系统调用的完整性验证提供了统一的接口,对不同的系统调用完整性验证只需要实现自己的处理函数,然后将验证请求发送给统一的接口即可。2.验证对象全面:本发明基于静态数据引用链思想,linux文件系统系统调用后动态生成的所有数据对象,肯定可以找到一条从静态数据对象到它的引用链。从静态数据对象目录项高速缓存、索引节点高速缓存依次检查所有的引用关系,验证所有找到的动态数据对象以及它们的组织关系。3.程序性能损耗低:本发明在准确验证的基础上,致力于保证尽可能低的时间复杂度与圈复杂度,将程序的执行损耗降到最低。附图说明图1为本发明实施例的linux文件系统高速缓存系统的示例图。图2为本发明实施例的基于静态数据引用链的linux文件系统完整性验证的架构图。图3为本发明实施例的基于静态数据引用链的linux文件系统完整性验证的流程图。具体实施方式本发明方法首先在linux文件系统模块中新增一个完整性验证子模块,改写linux文件系统的系统调用,在系统调用返回前将控制流劫持到完整性验证子模块中,完整性验证子模块对本次系统调用创建的动态数据对象以及它们的组织关系进行验证。完整性验证子模块包含验证请求汇总与分发功能模块、高速缓存算法功能模块、查找与验证功能模块。在验证请求汇总与分发功能模块中,主要函数实现为do_generic_check函数,负责接收来自文件系统系统调用的完整性验证请求,并将请求参数函数指针与泛型指针整合后发往不同的处理函数进行处理。在高速缓存算法功能模块中,主要函数实现为d_hash_and_lookup与ilookup,这两个函数分别实现了待验证节点所在目录项高速缓存哈希桶算法与待验证节点所在索引节点高速缓存系统算法。在查找与验证功能模块中,主要函数实现为generic_check_d_hash与generic_check_i_hash,这两个函数分别实现了从目录项高速缓存首地址开始进行完整性验证与从索引节点高速缓存首地址开始进行完整性验证两条不同的路径。下面结合本发明的相关说明图与具体实施例:基于静态数据引用链的linux文件系统完整性验证方法的实现做进一步说明。第一步:系统调用完成后劫持控制流发送完整性校验请求。主要实现有接受完整性验证请求函数。将文件系统不同的操作类型抽象化,提取出不同操作类型所具有的共同特征。功能函数有:功能函数do_generic_check接收来自系统调用的完整性验证请求,具有三个参数,一个是函数指针,一个待验证文件名字,一个泛型指针,函数指针用于将不同类型的文件操作分发到不同的函数进行处理,泛型指针用于将文件操作所需的参数传入不同类型文件操作的处理函数。第二步:文件系统高速缓存查找待验证文件节点。主要实现基于目录项高速缓存系统和索引节点高速缓存系统的查找算法。功能函数有:函数d_hash_and_lookup首先根据文件系统静态数据对象dentry_hashtable找到目录项高速缓存,然后根据待验证文件节点的名字计算哈希值,最后计算出的哈希值与父目录项地址一起计算出所在目录项高速缓存的哈希桶。函数ilookup计算方式相似。第三步:基于引用链的思想,将找到的待验证文件节点递归验证完整性。文件系统完整性验证是对文件系统系统调用后动态数据对象以及这些对象的组织关系进行验证。主要功能函数有:由于文件系统系统调用参数的不同,少数系统调用容易获得文件名,采用目录项高速缓存作为起点方便,而大部分系统调用使用的文件描述符,这时候从索引节点高速缓存开始反而更方便。结合图3,具体执行流程如下:1)遍历第二步找到的高速缓存系统哈希桶后的双向链表,验证待验证文件的目录项dentry或索引节点inode是否在高速缓存系统中。如果不在高速缓存系统中,则文件系统不完整,日志报警;否则,继续2)。2)验证目录项dentry或索引节点inode指针字段完整性。验证目录项dentry的孩子节点d_subdir、兄弟节点d_child、超级块d_sb、父目录项d_parent、索引节点d_inode等字段,索引节点inode的访问控制链表i_acl及i_default_acl、操作函数表i_op、超级块i_sb、页高速缓存i_mapping及i_data等字段。3)递归验证指针字段引用其他对象的完整性。例如目录项dentry的孩子节点d_subdir为list_head结构,需要验证该list_head结构所在的动态数据对象的完整性;索引节点inode的访问控制链表字段i_acl为文件的细粒度的权限访问控制链表的地址,文件的每一项细粒度访问权限都有一个posix_acl_entry结构表示,需要对每一项均进行验证。4)验证所有动态数据对象组织关系完整性。验证所有的动态数据对象之间的链接关系,例如目录项dentry是否和其他目录项组成树形结构、索引节点inode是否链接在超级块的s_inodes字段。综上,本发明从静态数据对象目录项高速缓存首地址以及索引节点高速缓存首地址开始的文件系统动态数据对象的完整性校验,可以非常全面且准确的检查文件系统在运行过程中状态的变化,有效的提高文件系统的安全性。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1