一种文件防护方法和装置的制造方法

文档序号:9888014阅读:328来源:国知局
一种文件防护方法和装置的制造方法
【技术领域】
[0001]本发明涉及系统安全技术领域,尤其涉及一种文件防护方法和装置。
【背景技术】
[0002]在桌面安全软件和网站防篡改领域,文件防篡改技术扮演着十分重要的角色。利用文件防篡改技术,可控制进程启动、文件修改授权和文件访问监控等功能。现有的文件防篡改技术有:应用层轮询、应用层挂钩(hook)和系统服务hook等。其中系统服务hook是Linux平台上最有效和稳定的实现方式之一,其防护机制是劫持与文件操作相关的系统调用,在自定义的系统调用实现函数中进行合法性检查。
[0003]第一种常规方法流程如下:
[0004]a)通过SIDT指令获取中断向量表首地址;
[0005]b)通过中断向量(0x80)获取系统调用入口函数地址;
[0006]c)从入口函数地址开始搜索系统调用表特征码,从而确定系统调用表的首地址;
[0007]d)去除系统调用表的写保护;
[0008]e)根据系统调用号从系统调用表中替换相关系统调用指针。
[0009]第二种常规方法流程如下:
[0010]a)通过RDMSRL指令获取MSR_LSTAR寄存器的内容,其值为系统调用入口函数地址;
[0011]b)从入口函数地址搜索系统调用表特征码,从而确定系统调用表的首地址;
[0012]c)去除系统调用表写保护;
[0013]d)根据系统调用号从系统调用表中替换相关系统调用指针。
[0014]由于Linux平台中的系统调用从应用层陷入RingO层的内核,而Xen半虚拟化环境下的系统调用是从应用层到Ringl层的内核。因此,上述这两种常规方法在Xen半虚拟化环境系统下不再奏效。

【发明内容】

[0015]本发明实施例提供一种文件防护方法和装置,通过对Xen半虚拟化环境系统中系统调用表的修改,实现对内核级文件的防护。
[0016]本发明实施例采用以下技术方案:
[0017]第一方面,提供了一种文件防护方法,应用于Xen半虚拟化环境系统中,所述方法包括:
[0018]驱动程序初始化时,定位系统调用表;
[0019]将所述系统调用表映射到所述Xen半虚拟化环境系统中可写的内存分页;
[0020]修改所述系统调用表中的函数指针,修改后的函数指针指向预先设置的规则检查函数;
[0021]通过所述规则检查函数,判断内核级文件操作是否符合预设防护规则,如果是,则阻止所述内核级文件操作,如果否,则完成所述内核级文件操作。
[0022]其中,定位系统调用表,具体包括:
[0023]从所述Xen半虚拟化环境系统Ring3层以Root权限加载所述驱动程序;
[0024]所述驱动程序通过超级调用获取所述Xen半虚拟化环境系统中位于Ringl层的客户机内核中的系统调用函数入口 ;
[0025]从所述系统调用函数入口查找特征码,确定系统调用表的首地址。
[0026]其中,将所述系统调用表映射到所述Xen半虚拟化环境系统中可写的内存分页,具体包括:
[0027]将所述系统调用表的首地址转换为物理地址;并
[0028]将所述物理地址所在页框映射到所述Xen半虚拟化环境系统Ringl层内核地址。
[0029]其中,修改所述系统调用表中的函数指针之后,所述方法还包括:
[0030]将所述系统调用表到所述Xen半虚拟化环境系统中可写的内存分页的映射删除。
[0031]其中,通过所述规则检查函数,判断内核级文件操作是否符合预设防护规则,如果是,则阻止所述内核级文件操作,如果否,则完成所述内核级文件操作,具体包括:
[0032]通过所述规则检查函数,判断所述内核级文件操作是否有禁止进程对所述内核级文件进行更改,和/或禁止用户对所述内核级文件进行更改的操作,如果是,则阻止所述内核级文件操作,如果否,则完成所述内核级文件操作。
[0033]第二方面,提供了一种文件防护装置,应用于Xen半虚拟化环境系统中,所述装置包括:
[0034]定位单元,用于驱动程序初始化时,定位系统调用表;
[0035]映射单元,用于将所述定位单元定位的系统调用表映射到所述Xen半虚拟化环境系统中可写的内存分页;
[0036]修改单元,用于修改所述系统调用表中的函数指针,修改后的函数指针指向预先设置的规则检查函数;
[0037]判断单元,用于通过所述规则检查函数,判断内核级文件操作是否符合预设防护规则,如果是,则阻止所述内核级文件操作,如果否,则完成所述内核级文件操作。
[0038]其中,所述定位单元,具体用于:
[0039]从所述Xen半虚拟化环境系统Ring3层以Root权限加载所述驱动程序;
[0040]所述驱动程序通过超级调用获取所述Xen半虚拟化环境系统中位于Ringl层的客户机内核中的系统调用函数入口 ;
[0041]从所述系统调用函数入口查找特征码,确定系统调用表的首地址。
[0042]其中,所述映射单元,具体用于:
[0043]将所述系统调用表的首地址转换为物理地址;并将所述物理地址所在页框映射到所述Xen半虚拟化环境系统Ringl层内核地址。
[0044]其中,所述装置还包括:
[0045]删除单元,用于将所述系统调用表到所述Xen半虚拟化环境系统中可写的内存分页的映射删除。
[0046]其中,所述判断单元,具体用于:
[0047]通过所述规则检查函数,判断所述内核级文件操作是否有禁止进程对所述内核级文件进行更改,和/或禁止用户对所述内核级文件进行更改的操作,如果是,则阻止所述内核级文件操作,如果否,则完成所述内核级文件操作。
[0048]本发明实施例的有益效果如下:
[0049]驱动程序初始化时,定位系统调用表,将系统调用表映射到Xen半虚拟化环境系统中可写的内存分页,以便去除系统调用表的写保护,然后修改系统调用表中的函数指针,使修改后的函数指针指向预先设置的规则检查函数,并通过该规则检查函数,判断内核级文件操作是否符合预设防护规则,如果是,则阻止内核级文件操作,如果否,则完成内核级文件操作。该方法通过对Xen半虚拟化环境系统中系统调用表的修改,实现对内核级文件的防护。
【附图说明】
[0050]图1为物理环境和Xen半虚拟化环境中系统调用流程对比图;
[0051 ]图2为本发明实施例提供的一种文件防护方法的实现流程图;
[0052]图3为本发明实施例提供的一种文件防护装置的结构示意图。
【具体实施方式】
[0053]首先需要说明的是,Intel的处理器是通过Ring级别来进行访问控制的,级别共分4层:RingO层、Ringl层、Ring2层、Ring3层。RingO层拥有最高的权限,Ring3层拥有最低的权限。按照Intel原有的构想,应用程序工作在Ring3层,只能访问Ring3层的数据;操作系统工作在RingO层,可以访问所有层的数据;而其他驱动程序位于Ringl、Ring2层,每一层只能访问本层以及权限更低层的数据。但现在的操作系统(OS),包括Windows和Linux只是使用2层一一RingO层和Ring3层,分别来存放操作系统数据和应用程序数据,驱动程序(包括设备驱动和非设备驱动)都运行在RingO级,且内核(Kernel)所处位置也在RingO层。而在Xen半虚拟化环境系统中,Hypervisor所处位置是RingO层,客户机的内核所处位置则在Ringl层。
[0054]本发明实施例中,为了实现对Xen半虚拟化环境系统中的内核级文件的防护,对物理环境和Xen半虚拟化环境中系统调用流程进行了对比。
[0055]如图1所示,为物理环境和Xen半虚拟化环境中系统调用流程对比图。图1左侧流程为物理环境下的系统调用流程,从应用层陷入RingO层的内核,图1右侧流程为Xen半虚拟化环境下的系统调用流程,是从应用层到Ri ng I层的内核,其中,超级调用是Hy per V i sor对外提供的接口。
[0056]参考图1,在半虚拟化环境下,从应用层加载驱动程序(HookDriver)只能加载到Ringl层,S卩半虚拟化客户机内核所处位置。而处于Ringl层的HookDriver通过调用SIDT指令或RDMSRL指令获取的值均指向RingO层的内存位置。因此,当通过修改HookDriver来修改这些内存时,会引发异常,导致Ringl层的内核崩溃。
[0057]基于上述分析,本发明实施例提出了一种文件防护方案。该技术方案中,驱动程序初始化时,定位系统调用表,将系统调用表映射到Xen半虚拟化环境系统中可写的内存分页,以便去除系统调用表的写保护,然后修改系统调用表中的函数指针,使修改后的函数指针指向预先设置的规则检查函数,并通过该规则检查函数,判断内核级文件操作是否符合预设防护规则,如果是,则阻止内核级文件操作,如果否,则完成内核级文件操作。该方法通过对Xen半虚拟化环境系统中系统调用表的修改,实现对内核级文件的防护。
[0058]以下结合说明书附图对本发明的实施例进行说明,应当理解,此处所描述的实施例仅用于说明和解释本发明,并不用于限制本发明。并且在不冲突的情况下,本发明中的实施例及实施例的特征可以互相结合。
[0059]本发明实施例中提供了一种文件防护方法,如图2所示,为该方法的实现流程图,该方法具体包括下述步骤:
[0060]步骤21,驱动程序初始化时,定位系统调用表。
[0061 ] 具体的,可以从Xen半虚拟化环境系统Ring3层以Root权限加载驱动程序,该驱动程序获取Xen半虚拟化环境系统Ringl层内核中的系统调用函数入口,再从系统调用函数入口查找特征码,确定系统调用表的首地址。
[0062]步骤22,将系统调用表映射到Xen半虚拟化环境系统中可写的内存分页,以便去除系统调用表的写保护。
[0063]本发明实施例中,可以先将系统调用表的首地址转换为物理地址,再将该物理地址所在页框映射到Xen半虚拟化环境系统Ringl层内核地址,从而实现去除系统调用表的写保护。
[0064]步骤23,修改系统调用表中的函数指针,修改后的函数指针指向预先设置的规则检查函数。
[0065]可选的,在执行完步骤23之后,本发明实施例还可以包括下述步骤:
[0066]将系统调用表到Xen半虚拟化环境系统中可写的内存分页的映射删除。
[0067]步骤24,通过规则检查函数,判断内核级文件操作是否符合预设防护规则,如果是,则阻止内核级文件操作,如果否,则完成内核级文件操作。
[0068]具体的,步骤24可以按照如下方式实现:
[0069]通过规则检查函数,判断内核级文件操作是否有禁止进程对内核级文件进行更改,和/或禁止用户对内核级文
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1