一种基于hook和过滤驱动的双重文件防泄密方法及系统的制作方法

文档序号:6521035阅读:614来源:国知局
一种基于hook和过滤驱动的双重文件防泄密方法及系统的制作方法
【专利摘要】本发明涉及一种基于HOOK和过滤驱动的双重文件防泄密方法,应用层控制模块将过滤策略分别发送到HOOK模块和文件过滤驱动模块,所述HOOK模块和文件过滤驱动模块根据过滤策略分别作如下防泄密处理:在所述HOOK模块中,将HOOK.DLL加载到系统运行进程中,在应用层使用HOOK拦截对剪贴板的所有系统调用函数,并监控应用层的数据复制;在文件过滤驱动模块中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,并根据过滤策略进行处理。在本发明的方法中,所采用的方法在应用层和驱动层双重保护文件信息,相互弥补单方可能产生的泄密漏洞,安全稳定可靠,且不需要额外的硬件和软件支持,成本很低,不管是个人还是企事业单位都适合普遍采用。
【专利说明】—种基于HOOK和过滤驱动的双重文件防泄密方法及系统
【技术领域】
[0001]本发明涉及一种计算机文件加密防泄密的方法及透明防护系统,具体的涉及ー种基于HOOK和过滤驱动的双重文件防泄密方法及系统。
【背景技术】
[0002]在信息安全领域,文档防护一直是研究的重点,特别是文档透明加密技术,它意旨在不改变用户操作习惯的前提下自动完成对文档的加解密。实现稳定、高效、安全的文档防护系统是ー个困难的问题,但它在网络安全、信息保护领域有着广泛应用。该项技术难点不仅仅是透明防护,更重要的是防止文档泄密。目前国内外针对文档透明防护的方法主要有两种,ー种是基于API拦截的HOOK技术,另ー种是基于IRP拦截的驱动技术。HOOK技术由于在应用层实现,导致效率低下,并且以文件重入的方式容易使明文文件复制带出;驱动技术也可分为清缓存和双缓冲技术,清缓存技术在效率上低于双缓冲技木,目前双缓冲技术只存在于理论研究当中,稳定性和实用性难以保证,例如基于分层文件系统(Layer FSD)的双缓冲技术存在文件清理和缓存同步难的问题,相比之下清缓存技术更加稳定可靠,国内很多商业应用也是采用该方案,本发明也采用清缓存方案。但是仅仅对文件的透明防护是不够的,这样会使得透明防护失去意义且会影响系统效率,安全、稳定的防泄密系统应该综合考虑在驱动层和应用层可能产生的泄密情况并堵住泄密出口,将文件安全性放在首位,尽可能的防止重要数据泄漏,无论是对企业还是个人而言,机密信息泄漏造成的后果都是非常严重的。
[0003]国内外目前的研究成果主要针对Windows文件系统实现,即使是一些号称采用双缓冲技术实现的价格也比较昂贵,只能算是理论研究系统,稳定性和实用性难以保证。基于Linux环境实现透明加密的方案,该方案需要较多的修改Linux文件系统内核源代码并重新编译,而且不适合主流操作系统。大多采用Windows文件过滤驱动方式实现的方案都降低了文档保护力度,更侧重于透明防护并且未能更准确实际的考虑泄密问题,比如透明防护时修改进程名、明文文件不加密、后缀另存为或是数据复制的情况。一些方案或多或少堵住了其中一些途径,但很难做到全面并且万无一失。目前为止还没有ー种高效经济、安全稳定、适于目前主流操作系统的文档透明防泄密研究方案。

【发明内容】

[0004]本发明所要解决的技术问题是提供一种基于HOOK和过滤驱动的双重文件防泄密方法及系统,该方法及系统能安全有效地保护文件信息。
[0005]本发明解决上述技术问题的技术方案如下:一种基于HOOK和过滤驱动的双重文件防泄密方法,包括以下步骤,
[0006]SlOO:应用层控制模块向服务端发送机主身份认证请求;
[0007]S200:管理端根据应用层控制模块的机主身份认证请求来配置和存储服务端中的加密策略;[0008]S300:服务端将加密策略派发给应用层控制模块;
[0009]S400:应用层控制模块将过滤策略分别发送到HOOK模块和文件过滤驱动模块,所述HOOK模块和文件过滤驱动模块根据过滤策略分别作如下防泄密处理:
[0010]在所述HOOK模块中,将HOOK.DLL加载到系统运行进程中,在应用层使用HOOK拦截对剪贴板的所有系统调用函数,并监控应用层的数据复制;
[0011 ] 在文件过滤驱动模块中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤策略进行处理。
[0012]在上述技术方案的基础上,本发明还可以做如下改进。
[0013]进ー步,在应用层使用HOOK拦截对剪贴板的所有系统调用函数,HOOK截获剪贴板系统调用的方法,包含如下子步骤,
[0014]SlOl:在应用层控制程序中以全局钩子的方式加载HOOK.DLL到系统所有进程中,并在HOOK.DLL中将剪贴板的系统调用地址替换成自定义的函数地址,如果发生剪贴板数据复制,则进入步骤S102,如果发生剪贴板数据粘贴,则进入步骤S103 ;
[0015]S102:发生剪贴板数据复制时,判断复制进程是否在机密进程白名单中,如果是,则以原子操作的方式将DLL共享数据段中机密进程复制数据布尔值设为true,如果不是,则以原子操作的方式将DLL共享数据段中机密进程复制数据布尔值设为false ;
[0016]S103:发生剪贴板数据粘贴时,判断粘贴进程是否在机密进程白名单中,如果粘贴是在机密进程白名单中,并且DLL共享中机密进程复制字段为false,则将剪贴板清空,否贝丨J,调用相应的被H00K掉的API。
[0017]进ー步,所述剪切板包括标准剪贴板和OLE剪贴板,如果粘贴进程是发生在OLE剪贴板中,则不需要清空剪贴板。
[0018]进一歩,进程间的通讯采用共享内存,并使用命名内核对象通知进程访问。
[0019]进ー步,在所述文件过滤驱动模块中注册IRP分发函数,拦截10管理器发往文件系统的IRP请求,井根据过滤策略进行处理,包含以下子步骤,
[0020]S201:当文件过滤驱动模块截获到ー个IRP包吋,检测IPR包是否满足过滤条件,如果满足过滤条件,则直接发往文件系统驱动,如果不满足过滤条件,则根据IRP包类型做如下处理:“打开请求”进入步骤S202,“读请求”进入步骤S203,“写请求”进入步骤S204,“关闭请求”进入步骤S205,“清理请求”进入步骤S206,“查询请求”进入步骤S207 ;
[0021]S202:在“打开请求”处理时,获取文件流上下文,
[0022]如果文件不是首次打开,则添加引用计数,并发往下层驱动,继续构造读请求,IRP包以非重入方式读取文件加密标识,判断是否为加密文件,并设置文件流上下文,如果是加密文件,则设为读时解密,写时加密,井置为加密状态,
[0023]如果文件是首次打开,则设为写时加密,明文文件设置为未被修改状态,并置为未加密状态;
[0024]S203:在“读请求”处理吋,如果是缓冲读请求或文件流上下文未设置读时解密状态,则直接发往下层驱动,重新申请内存与IRP包提供的用户缓冲交換,直到读取完成后将申请的缓冲区中的内容解密并复制到原始缓冲区并向上层完成IRP ;
[0025]S204:在“写请求”处理吋,如果是缓冲写请求,则直接发往下层驱动,如果是非新建的未加密文件写请求,则设置修改状态并发往下层驱动,将IRP提供的用户缓冲中的数据复制到重新申请的内存中,并加密缓冲区数据后发往下层驱动,在下层驱动完成IRP后设置读时解密状态和已写入数据状态并向上层完成IRP ;
[0026]S205:在“关闭请求”处理时,
[0027]如果文件引用计数不为0,则将IRP发往下层驱动,
[0028]如果文件引用计数为0,则判断是否读时解密,如果是读时解密,则写入文件加密标识,如果不是读时解密,则分段读取文件加密后写入文件最后写入的加密标识,最后往上层完成IRP ;
[0029]S206:在“清理请求”处理时,清除文件缓存;
[0030]S207:在“查询请求”处理时,文件的大小为无加密标识的有效数据长度,根据文件大小完成相应子请求。
[0031]进ー步,步骤S201中的过滤条件为:文件没有写入权限、卷上下文不存在、文件流上下文不存在、当前操作为目录文件和当前进程和文件类型不在机密进程白名单中。
[0032]本发明ー种基于HOOK和过滤驱动的双重文件防泄密方法的有益效果是:在本本技术方案中,所采用的方法在应用层和驱动层双重保护文件信息,相互弥补单方可能产生的泄密漏洞,安全稳定可靠,且不需要额外的硬件和软件支持,成本很低,不管是个人还是企事业单位都适合普遍采用。
[0033]基于上述方法,本发明还提供了ー种透明加解密的防泄密系统,该系统为ー种基于HOOK和过滤驱动的双重文件防泄密系统。
[0034]一种基于HOOK和过滤驱动的双重文件防泄密系统,包括服务端、管理端、位于应用层的应用层控制模块、位于应用层的HOOK模块、位于驱动层的文件过滤驱动模块,
[0035]所述服务端用于提供认证和派发加密策略;
[0036]所述管理端用于配置和存储服务端的加密策略;
[0037]所述应用层控制模块用于采集服务端加密策略,并将加密策略发送到HOOK模块和文件过滤驱动模块;
[0038]所述HOOK模块用于根据策略模块传递过来的加密策略监控剪贴板并防止机密进程将数据复制至非机密进程;
[0039]所述文件过滤驱动模块用于根据策略模块传递过来的加密策略拦截发往文件系统驱动的IRP,完成对文件读写内容的自动加解密。
[0040]进ー步,所述文件过滤驱动模块对文件读写内容加密算法采用rc4,根据读写长度和偏移值保证字节对齐,动态地加密数据内容。
[0041]进ー步,所述一种基于HOOK和过滤驱动的双重文件防泄密系统基于Windows平台。
[0042]进ー步,所述策略采集模块将策略信息按规则写入共享内存缓冲区,通过互斥锁同步共享内存缓冲区,HOOK模块从该缓冲区读取策略信息,文件过滤驱动通过通信端ロ与应用层通信。
[0043]本发明ー种基于HOOK和过滤驱动的双重文件防泄密系统的有益效果是:本技术方案提供ー种安全、稳定的防泄密系统,在驱动层和应用层堵住泄密出口,使文件安全性得到保证。【专利附图】

【附图说明】
[0044]图1为本发明一种基于HOOK和过滤驱动的双重文件防泄密方法的过滤驱动“读请求” IRP处理的流程图;
[0045]图2为本发明一种基于HOOK和过滤驱动的双重文件防泄密方法的过滤驱动“写请求” IRP处理的流程图;
[0046]图3为本发明一种基于HOOK和过滤驱动的双重文件防泄密方法的模型;
[0047]图4为本发明一种基于HOOK和过滤驱动的双重文件防泄密系统的结构方框图。
【具体实施方式】
[0048]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0049]一种基于HOOK和过滤驱动的双重文件防泄密方法,首先应用层控制模块向服务端发送申请(即主机身份认证),然后管理端根据应用层控制模块的机主身份认证请求来配置和存储服务端中的加密策略,接着服务端将信息发给应用层控制模块,这里的信息主要是加密策略,最后应用层控制模块将过略策略发送到HOOK模块和驱动模块,所述HOOK模块和文件过滤驱动模块根据过滤策略分别作如下防泄密处理:在所述HOOK模块中,将H00K.DLL加载到系统运行进程中,在应用层使用HOOK拦截对剪贴板的所有系统调用函数,并监控应用层的数据复制;在文件过滤驱动模块中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤策略进行处理。需要说明的是HOOK模块和驱动模块是由应用层控制模块加载启动,但是由系统进程运行的,在未传递加密策略时也会执行过滤(只是过滤策略为空),所有文件都不会加密。
[0050]在HOOK模块中:
[0051]将HOOK.DLL动态库以钩子注入的方式加载到系统运行进程中,拦截对剪贴板(包括标准剪贴板和OLE剪贴板)的所有系统调用函数,监控应用层的数据拷贝。在应用层使用HOOK拦截对剪贴板的所有系统调用函数,HOOK截获剪贴板系统调用的方法为:在应用层控制程序中以全局钩子的方式加载HOOK.DLL到系统所有进程中,并在HOOK.DLL中将剪贴板的系统调用地址替换成自定义的函数地址;如果发生剪贴板数据复制,则判断复制进程是否在机密进程白名单中,如果是,则以原子操作的方式将DLL共享数据段中机密进程复制数据布尔值设为true,如果不是,则以原子操作的方式将DLL共享数据段中机密进程复制数据布尔值设为false ;如果发生剪贴板数据粘贴,则判断粘贴进程是否在机密进程白名单中,如果粘贴是在机密进程白名单中,并且DLL共享中机密进程复制字段为false,则将剪贴板清空,否则,调用相应的被H00K掉的API,如果是发生在OLE剪贴板中则不需要清空剪贴板。对于剪贴板将数据复制粘贴带出的情况,本发明提出了在应用层采用APIH00K的方式,即将剪切板操作需要调用的API替换成程序自定义的函数来拦截指定API,来达到监控剪贴板的目的。本实施例中需要H00K的函数为SetClipboardData、OleSetClipbroad、GetClipboardData、OleGetClipbroad,其中前两个为复制所需调用API,后面两个为粘贴所需调用API。在剪贴板中复制数据可能有四种情况,机密进程到机密进程、机密进程到非机密进程、非机密进程到机密进程和非机密进程到非机密进程。其中只有机密进程复制数据到非机密进程是被禁止的,其他情况可被允许。HOOK.DLL加载时首先通过读取共享内存中的策略信息判断当前进程是否机密进程并设置全局变量g_bClaSSifyPS,然后由HOOK.DLL中的共享变量g_bCopyByClaSSifyPS控制复制进程是否机密进程,对该变量的操作调用InterlockedExchange以原子方式进行。当发生粘贴操作时,通过g_bClassifyPs和g_bCopyByClaSSifyPS判断数据是否从机密进程拷贝到非机密进程,如果是则调用EmptyClipboard函数将剪贴板中的内容清空,否则不做处理。在处理OleGetClipboard对应的HOOK函数时可不对剪贴板做清理操作。
[0052]在文件过滤驱动模块中:
[0053]在过滤驱动中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤策略进行处理。过滤驱动中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤规则进行处理的具体过程为:当文件过滤驱动截获到ー个IRP包时,检测数据包是否满足过滤条件,如果满足过滤条件,则直接发往文件系统驱动,如果不满足过滤条件,则根据IRP类型可选择性的做如下处理:打开请求,读请求,写请求,关闭请求,清理请求,查询请求。
[0054]打开请求:获取文件流上下文,如果不是首次打开则添加引用计数并发往下层驱动。继续构造读请求IRP以非重入方式读取文件加密标识,判断是否加密文件并设置文件流上下文,如果是加密文件则设为读时解密写时加密并置为加密状态,如果是新建文件则设为写时加密,明文文件设置为未被修改状态并置为未加密状态。在处理“打开请求”时,会先调用相应的预处理例程,在该例程中首先通过调用FltGetVolumeContext判断卷设备对象是否是绑定过的卷设备,然后根据文件名对目录或设备做过滤处理,可调用FltGetFileNameInformation来获取文件名信息。接着判断当前进程是否在机密进程白名单中,如果不存在则过滤该IRP,过滤IRP表示传入该卷设备对象的文件IRP不做加密处理,直接发往下层驱动。过滤完成后为当前文件申请文件流上下文,如果之前申请过则増加文件流上下文中的引用计数,根据明文、密文或新建文件来设置相关文件流上下文信息。对明文密文的判断使用1AllocateIRP来手动构造IRP的方式,直接往文件系统驱动发送请求,读取文件加密标识,比较加密标识中的GUID和加密GUID,如果相同则表示该文件为加密文件。
[0055]读请求:如果是缓冲读请求或文件流上下文未设置读时解密状态,则直接发往下层驱动,重新申请内存与IRP提供的用户缓冲交換,直到读取完成后将申请的缓冲区中的内容解密并拷贝到原始缓冲区并向上层完成IRP。在处理“读请求”时,先调用微过滤驱动注册的预处理函数,如图1所示,通过过滤对象获得操作的卷上下文是否是需要加密的上下文,否则直接将IRP传递到下层驱动,然后由回调数据结构体(类似旧过滤模型中的IRP)得到文件流上下文,根据回调数据结构体和流上下文相关參数判断该IRP是否需要过滤,因为微过滤器对文件系统提供的缓冲只有读权限,无法直接解密缓冲区,所以必须要自己申请有读写权限的缓冲区替换原来的缓冲区,最后设置后处理回调上下文,继续传递10请求,这样注册后的处理函数会被调用,进入后处理例程后,此时需要注意的是过滤管理器已将缓冲进行了自动转换,用户需要读取的数据已经在自己提供的MDL缓冲区中,直接对交换缓冲区进行解密,读取多少解密多少,就得到了需要读取的明文数据,最后将交换缓冲中的明文数据直接拷贝到原始的用户缓冲中,继续往下层传递IRP请求。
[0056]写请求:如果是缓冲写请求则直接发往下层驱动,如果是非新建的未加密文件则设置修改状态并发往下层驱动。将IRP提供的用户缓冲中的数据拷贝到重新申请的内存中,并加密缓冲区数据后发往下层驱动,在下层驱动完成IRP后设置读时解密状态和已写入数据状态并向上层完成IRP。在处理“写请求”时,过滤管理器先调用之前注册的预处理例程,如图2所示,同样通过PFLT_CALLBACK_DATA和PCFLT_RELATED_OBJECTS回调结构体获取相关參数对不符合条件的IRP进行过滤,然后直接往下层驱动传递。此例程中对于修改加密做了特殊处理,如果是符合其他条件的未加密文件则修改流上下文的是否修改參数,在IRP_MJ_CLOSE中对其单独进行处理,对于新建文件和已加密文件写入数据都做加密处理;文件对于写请求的加密处理比较简单,同样的申请好MDL缓冲区后,将用户缓冲区中的数据拷贝到新缓冲区中做加密处理,直接传递到下层驱动,这样加密的数据就写到了磁盘文件,在后处理释放申请的缓冲区和相关上下文。
[0057]关闭请求:如果文件引用计数不为0,则将IRP发往下层驱动,否则判断是否读时解密,是则写入文件加密标识,否则分段读取文件加密后写入文件最后写入加密标识。最后往上层完成IRP。在对“关闭请求”处理过程中,对IRP做相应过滤操作后主要处理已加密文件,和新建的并且已写入数据的文件,这两种文件在处理写请求时对数据均做了加密处理,这里只需要最后写入文件加密标识。最后ー种就是未加密的明文文件但是已对文件数据做了修改,这种文件在写请求时未做加密处理,因此需要自己手动构造IRP包以非重入的方式获取文件内容再加密,这里的读取长度要与扇区大小对齐分并且以循环方式读取,然后再构造写请求IRP包将加密的数据写入文件,最后写入文件加密标识。在写入加密标识时一起写入了加密密钥的hash值,这将方便管理端程序的解密出口从数据库中查询解密密钥以便查看早期加密文档或是文档外发管理。
[0058]清理请求:清除文件缓存。
[0059]查询请求:在查询请求处理时,文件的大小为无加密标识的有效数据长度,根据文件大小完成相应子请求。
[0060]其中,所述的过滤条件为:文件没有写入权限、卷上下文不存在、文件流上下文不存在、当前操作为目录文件和当前进程和文件类型不在机密进程白名单中。在过滤驱动中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤规则进行处理的方案中,对于明文文件的加密,构造读取IRP时读取内容长度必须与扇区对齐,将读取内容加密后构造写入IRP将加密数据写入文件,以避免IRP重入。在过滤驱动中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤规则进行处理的技术方案中,机密进程白名单存放于单向链表中,里面包含机密进程名和文件过滤后綴。进程间的通讯采用共享内存,并使用命名内核对象通知进程访问。
[0061]应用层控制模块将过滤策略发往第一层文件防泄密的应用层HOOK.DLL钩子程序和第二层文件防泄密的过滤驱动程序,实现在应用层和驱动层的双重过滤。
[0062]其中,应用层HOOK.DLL钩子程序中的HOOK和过滤驱动程序中的fileflt的工作原理如图3所示,HOOK.DLL被注入系统进程后,可以拦截指定的API,比如传统的钩子透明加密会拦截ー些文件操作函数如CreateFile、ReadFile等,这些API为操作系统核心库kerner32.DLL提供的API,本发明不会拦截这些API,它只需要拦截剪贴板相关的函数,如GetClipbroadData等,H00K拦截后做某些修改后会调用被替换的API继续往下层调用,ntDLL.DLL是最接近内核模式的内核API库,到达内核层后会由10管理器构造出相应的IRP数据包传递给指定驱动。比如如果是一次文件操作,则会构造出对应的文件相关的IRP传递给文件系统驱动(准确说是文件系统驱动的设备对象),由于文件过滤驱动已经创建了过滤设备对象绑定在文件系统驱动设备对象之上(即处于设备栈最上层),所以会先由过滤设备对象对应的驱动程序来处理该IRP,从而达到IRP拦截的效果。驱动中IRP传递方式为向下层驱动传递IRP并往上层驱动返回下层的完成状态。IRP向下完成并返回时会有同步和异步的情况(不同于IRP不再往下层传递情況),有些IRP可能在完成后直接往上层同步返回状态,即不需要在下层驱动完成后做完成后的处理,异步完成则是在下层驱动完成后再次获得IRP的控制权,执行ー些完成后的处理,比如读请求处理时需要在下层驱动读到数据后再做加密处理,而写请求则不需要做完成后处理,本发明中的微过滤驱动将完成例程称为后处理。磁盘驱动则是更底层的驱动主要负责对物理磁盘的读写操作。从宏观上来说,图3所示为:即在用户主机Windows操作系统的文件系统驱动上层添加一个过滤驱动并结合应用层HOOK技木,拦截应用程序在应用层的API调用和驱动层的IRP数据包,以双重防护的方式保护文件私密信息,同时用户空间的控制模块可手动制定策略发往驱动和HOOK模块,灵活实现文件的透明保护。
[0063]本发明的核心IRP过滤和缓存交换处理如下:
[0064]预处理例程中取得IRP包后检测IRP信息,如果IRP是文件过滤驱动需要过滤的,直接发往下层驱动程序,过滤条件如下所示:
[0065](I)调用内核例程FltGetVolumeContext判断接收IRP的卷设备是否绑定过的加密卷设备,不是则过滤;
[0066](2)调用内核例程FltGetStreamContext判断文件流上下文是否存在,不存在则过滤;
[0067](3)判断当前进程是否在机密进程白名单中,不是则过滤,获取当前进程可调用宏PsGetCurrentProcess 来实现;
[0068](4)调用内核宏定义FLT_IS_FAST10_0PERAT10N判断是否快速10,是则过滤;
[0069](5)根据IRP标识判断IRP是否缓冲请求,是则过滤;
[0070](6)根据文件流上下文判断当前文件是否明文文件,是则过滤;
[0071](7)判断文件读取长度是否为0,是则过滤,否则与扇区大小对齐。
[0072]由于IRP提供的读写缓冲区没有写权限,所以读写IRP都需要申请内核缓冲区与其交換,其中读请求的交换步骤如下所示:
[0073]I)、调用 ExAllocatePoolWithTag 分配非分页内存块 newBuf ;
[0074]2)、调用1AllocateMdl为newBuf申请内存描述符,使用MmBuildMdlForNonPagedPool 建立内存描述符 newMdl ;
[0075]3)、调用ExAllocateFromNPagedLookasideList从内核旁氏链表中分配固定内存块p2pCtx,这个用于传递给后处理例程的回调结构体,然后将IRP中的读缓冲区和MDL设置为newBuf和newMdl,调用FltSetCallbackDataDirty通知缓存已经被修改,并将newBuf保存到p2pCtx中的SwappedBuffer,将IRP发往下层驱动。
[0076]4)、后处理例程中,修改过的缓冲自动被交換,从p2pCtx_>SwappedBuffer中读取数据将其解密,获取IRP原始缓冲区origBuf,将解密数据复制到origBuf中,通知上层驱动完成。[0077]基于上述方法,本发明还提供了ー种透明加解密的防泄密系统,该系统为ー种基于HOOK和过滤驱动的双重文件防泄密系统。
[0078]一种基于HOOK和过滤驱动的双重文件防泄密系统,如图4所示,主要包含3个子模块:应用层的HOOK模块、位于驱动层的文件过滤驱动模块,以及位于应用层的策略采集模块,同时,针对该模块设计出了适合企事业单位内部使用防泄密系统,新増加了管理端(Manager)和服务端(Server);所述管理端用于配置和存储加密策略;管理端除负责配置和存储加密策略外,还提供各个组之间的策略和证书管理,同时还提供了文件解密出口功能。所述服务端用于转储子网内各主机信息,并为策略采集模块提供认证和派发加密策略;月艮务端作为通信的中间件程序负责转储子网内各主机信息,并为客户端提供认证以及向客户端派发加密策略。所述策略采集模块用于采集加密策略,并将加密策略信息发送到应用层的HOOK模块及文件过滤驱动模块。所述HOOK模块用于根据策略模块传递过来的加密策略监控剪贴板并防止机密进程将数据复制至非机密进程。所述文件过滤驱动模块用于根据策略模块传递过来的加密策略拦截发往文件系统驱动的IRP,完成对文件读写内容的自动加解密。
[0079]本发明用于基于Windows平台的文件透明加解密系统,【具体实施方式】描述如下:
[0080]实验ー:
[0081](I)实验设计
[0082]PC 机配置为:CPU Core i5_2450M, 2600MHz (26x100),4GB 内存,Windows XP SP3操作系统,客户端运行主机安装Fileflt驱动,服务端不需要加载驱动程序,管理端设定好分组以及相应的策略(实验将记事本、Off ice WorcUOffice Excel和Office PPT设为可信进程并加入机密进程白名単)后为组内成员分配指定策略并启动服务器进程。客户端进程从管理端导出自己主机的证书文件(客户端可选离线式或在线式对客户端主机进行认证,离线式可从管理端导出离线数据包而不需要服务器)。实验采用在线认证的方式导入证书并运行客户端。实验对系统实现性以及漏洞保护做了测试,包括针对txt和Office文档的強制加密、修改加密、另存为和复制粘贴可能泄密的情况以及解密出口功能。
[0083](2)实验结果与评估
[0084]实验ー:启动客户端程序,分别对记事本和Office办公文件做如下测试:
[0085]①新建文件写入数据并以常规后缀保存;
[0086]②新建文件写入数据另存为.dat (或其他非常规后缀);
[0087]③打开加密文件并保存能否正常打开;
[0088]④修改未加密文件保存并再次打开;
[0089]⑤打开未加密文件不修改直接关闭;
[0090]⑥打开文件后将数据分别复制至浏览器和其他机密进程中产看能否正常复制;
[0091]⑦将加密文件复制至管理端,使用管理端的解密出ロ查看能否解密文件。
[0092]第一轮测试完成后编写测试文件实验得到一组结果,表I为第一轮测试中机密进程的测试結果,对于记事本和Office系列软件效果是相同的,系统对于记事本和Office办公软件的支持稳定,根据表I结果显示新建文件和修改后的明文文件能够强制加密,加密文件可正常访问,明文文件仅查看不修改则不会強制加密,测试结果稳定。同时⑥结果显示可信进程无法复制数据至非可信进程,其他情况复制无限制,能够有效防止剪切板数据复制带出的情況。⑦结果显示加密文件在管理端可在无须加载驱动情况下正常解密文件。
[0093]表1:加载驱动条件下文件透明加密状态
【权利要求】
1.一种基于HOOK和过滤驱动的双重文件防泄密方法,其特征在于:包括以下步骤, 5100:应用层控制模块向服务端发送机主身份认证请求; 5200:管理端根据应用层控制模块的机主身份认证请求来配置和存储服务端中的加密策略; S300:服务端将加密策略派发给应用层控制模块; S400:应用层控制模块将过滤策略分别发送到HOOK模块和文件过滤驱动模块,所述HOOK模块和文件过滤驱动模块根据过滤策略分别作如下防泄密处理: 在所述HOOK模块中,将HOOK.DLL加载到系统运行进程中,在应用层使用HOOK拦截对剪贴板的所有系统调用函数,并监控应用层的数据复制; 在文件过滤驱动模块中注册IRP分发函数,拦截IO管理器发往文件系统的IRP请求,井根据过滤策略进行处理。
2.根据权利要求1所述的ー种基于HOOK和过滤驱动的双重文件防泄密方法,其特征在于:在应用层使用HOOK拦截对剪贴板的所有系统调用函数,HOOK截获剪贴板系统调用的方法,包含如下子步骤, S101:在应用层控制程序中以全局钩子的方式加载HOOK.DLL到系统所有进程中,并在HOOK.DLL中将剪贴板的系统调用地址替换成自定义的函数地址,如果发生剪贴板数据复制,则进入步骤S102,如果发生剪贴板数据粘贴,则进入步骤S103 ; S102:发生剪切板数据复制时,判断复制进程是否在机密进程白名单中,如果是,则以原子操作的方式将DLL共享数据段中机密进程复制数据布尔值设为true,如果不是,则以原子操作的方式将DLL共享数据段中机密进程复制数据布尔值设为false ; S103:发生剪切板数据粘贴时,判断粘贴进程是否在机密进程白名单中,如果粘贴是在机密进程白名单中,并且DLL共享中机密进程复制字段为false,则将剪贴板清空,否则,调用相应的被H00K掉的API。
3.根据权利要求2所述的ー种基于H00K和过滤驱动的双重文件防泄密方法,其特征在于:所述剪切板包括标准剪贴板和OLE剪贴板,如果粘贴进程是发生在OLE剪贴板中,则不需要清空剪贴板。
4.根据权利要求1或2所述的ー种基于H00K和过滤驱动的双重文件防泄密方法,其特征在于:进程间的通讯采用共享内存,并使用命名内核对象通知进程访问。
5.根据权利要求1或2所述的ー种基于H00K和过滤驱动的双重文件防泄密方法,其特征在于:在所述文件过滤驱动模块中注册IRP分发函数,拦截10管理器发往文件系统的IRP请求,井根据过滤策略进行处理,包含以下子步骤, S201:当文件过滤驱动模块截获到ー个IRP包时,检测IPR包是否满足过滤条件,如果满足过滤条件,则直接发往文件系统驱动,如果不满足过滤条件,则根据IRP包类型做如下处理:“打开请求”进入步骤S202,“读请求”进入步骤S203,“写请求”进入步骤S204,“关闭请求”进入步骤S205,“清理请求”进入步骤S206,“查询请求”进入步骤S207 ; S202:在“打开请求”处理时,获取文件流上下文, 如果文件不是首次打开,则添加引用计数,并发往下层驱动,继续构造读请求,IRP包以非重入方式读取文件加密标识,判断是否为加密文件,并设置文件流上下文,如果是加密文件,则设为读时解密,写时加密,井置为加密状态,如果文件是首次打开,则设为写时加密,明文文件设置为未被修改状态,并置为未加密状态; 5203:在“读请求”处理吋,如果是缓冲读请求或文件流上下文未设置读时解密状态,则直接发往下层驱动,否则重新申请内存与IRP包提供的用户缓冲交換,直到读取完成后将申请的缓冲区中的内容解密并复制到原始缓冲区并向上层完成IRP ; 5204:在“写请求”处理吋,如果是缓冲写请求,则直接发往下层驱动,如果是非新建的未加密文件写请求,则设置修改状态并发往下层驱动,否则将IRP提供的用户缓冲中的数据复制到重新申请的内存中,并加密缓冲区数据后发往下层驱动,在下层驱动完成IRP后设置读时解密状态和已写入数据状态并向上层完成IRP ; 5205:在“关闭请求”处理时, 如果文件引用计数不为O,则将IRP发往下层驱动, 如果文件引用计数为O,则判断是否读时解密,如果是读时解密,则写入文件加密标识,如果不是读时解密,则分段读取文件加密后写入文件最后写入的加密标识,最后往上层完成 IRP ; 5206:在“清理请求”处理时,清除文件缓存; 5207:在“查询请求”处理时,文件的大小为无加密标识的有效数据长度,根据文件大小完成相应子请求。
6.根据权利要求5所述的ー种基于HOOK和过滤驱动的双重文件防泄密方法,其特征在于:步骤S201中的过滤条件为:文件没有写入权限、卷上下文不存在、文件流上下文不存在、当前操作为目录文件和当前进程和文件类型不在机密进程白名单中。
7.一种基于HOOK和过滤驱动的双重文件防泄密系统,其特征在于:包括服务端、管理端、位于应用层的应用层控制模块、位于应用层的HOOK模块、位于驱动层的文件过滤驱动模块, 所述服务端用于提供认证和派发加密策略; 所述管理端用于配置和存储服务端的加密策略; 所述应用层控制模块用于采集服务端加密策略,并将加密策略发送到HOOK模块和文件过滤驱动模块; 所述HOOK模块用于根据策略模块传递过来的加密策略监控剪贴板并防止机密进程将数据复制至非机密进程; 所述文件过滤驱动模块用于根据策略模块传递过来的加密策略拦截发往文件系统驱动的IRP,完成对文件读写内容的自动加解密。
8.根据根据权利要求7所述的ー种基于HOOK和过滤驱动的双重文件防泄密系统,其特征在于:所述文件过滤驱动模块对文件读写内容加密算法采用rc4,根据读写长度和偏移值保证字节对齐,动态地加密数据内容。
9.根据权利要求7或8所述的ー种基于HOOK和过滤驱动的双重文件防泄密系统,其特征在于:所述ー种基于HOOK和过滤驱动的双重文件防泄密系统基于Windows平台。
10.根据权利要求7或8所述的ー种基于HOOK和过滤驱动的双重文件防泄密系统,其特征在于:所述策略采集模块将策略信息按规则写入共享内存缓冲区,通过互斥锁同步共享内存缓冲区,HOOK模块从该缓冲区读取策略信息,文件过滤驱动通过通信端ロ与应用层通信。`
【文档编号】G06F21/62GK103605930SQ201310617088
【公开日】2014年2月26日 申请日期:2013年11月27日 优先权日:2013年11月27日
【发明者】陈世强, 金恺, 邵楚育 申请人:湖北民族学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1