流过滤和Ndis防火墙技术在文件加密保护中的应用
2016-03-13聂燕屏
◆聂燕屏
(中星电子股份有限公司 北京 100086)
流过滤和Ndis防火墙技术在文件加密保护中的应用
◆聂燕屏
(中星电子股份有限公司 北京 100086)
在这个计算机的信息时代,计算机和网络的运用无处不在,在各行各业,都会使用计算机,以提高效率,节省人力。但是随着计算机技术和应用的普及,安全问题随之显现。所以,很多文档有权限限制。比如:一些文档只有相关人员有权查看,一些文档需要付费查看,等等。这时候,加密技术就会成为解决问题的手段。对需要权限的文档进行加密,拥有相应权限的个人,可以从文档的提供方获取秘钥对文档进行解密。只有正确解密的文档才能被正常浏览。本文首先对ndis防火墙技术进行了介绍,分析了ndis技术在文件加密保护中的作用;然后对流过滤技术进行了介绍,并具体讲解了流过滤技术在文件加密保护中的应用以及具体算法和流程;最后,针对TCP/IP报文特点,介绍了校验和算法。
流过滤;Ndis;SMS4;校验和
0 引言
对于需要管理并且需要频繁提供大量文档的单位,将文档数字化无疑是必须的。但是基于安全原因,很多文档需要加密。但是加密的文档也带来一些问题。如果一个文档存储和管理系统,能够做到明文存储,密文发送,那么无疑是很实用的。所以,本人开发了这套文件自动加密系统。这套系统的原理就是利用windows ndis级别防火墙的原理对文件进行保护,采取明文存储,秘文分发的方式。
1 Ndis中间层网络防火墙技术
Ndis是Network Driver Interface Specification的缩写,意为“网络驱动接口规范”。Ndis横跨了传输层、网络层和数据链路层,其作用是屏蔽了底层物理硬件的区别。
Ndis支持三种类型的驱动程序:
Miniport驱动程序;
中间层驱动程序;
Protocol驱动程序。
在这里,我们采用中间层驱动程序。
1.1 Ndis的版本
Ndis版本从支持的操作系统看可以分类两类:Ndis5.x和ndis6.x。Ndis6.x对比ndis5.x变化很大,最重要的是NET_BUFFER替代了NDIS_PACKET。鉴于本系统运行的服务器是win2008R2,所以本文中提到的ndis均指ndis6.x。
1.2 Ndis6的数据结构以及如何获取数据包
ndis6.0中很重要的两个数据结构是NET_BUFFER_LIST和NET_BUFFER。
一个NET_BUFFER_LIST结构指向的是一连串的NET_BUFFER,这些NET_BUFFER中保存的数据包内容属于同一个stream。通过NET_BUFFER_NEXT_NB()可以获取下一个NET_BUFFER。
1.3 Ndis的相关函数
在Ndis中,截获下载数据包的关键函数是FilterSendNetBufferLists和FilterSendNetBufferListsComplete。在ndis驱动安装成功之后,tcp报文就会在FilterSendNetBufferLists函数中以NBL的形式存在。对于NBL数据的处理,就位于这个函数中。而FilterSendNetBufferListsComplete的功能是把发送的结构和数据返还给 Filter Driver。
2 流过滤技术以及具体实现算法
2.1 关于流过滤技术
流过滤技术是在包过滤技术的基础上提出的。流过滤处理的基本单元是数据包,但并不仅限于数据包。
包过滤技术关注的重点是网络层和传输层,根据这几个层次在单个数据包中的信息进行过滤。而流过滤注重的是应用层。
在这里,我利用流过滤的原理,对数据包中的应用层信息,进行加密处理。
2.2 技术方案
这里,以Http传输为例,讲解流过滤技术在文件加密中的技术方案。http走的协议是tcp报文,在流过滤方案中,截获的封包是tcp包。处理流程如下:
对截获的tcp报文进行分类处理。
对1中筛选后的报文进行分析和再次筛选。
对选中的报文记录该报文的源,目的ip和端口。对此连接的tcp包进行滞留。并且接管此tcp连接。
对滞留的数据包进行重组,加密。
将加密后的数据还原,继续转发,并且归还此tcp连接。
2.2.1 报文的分类
因为我们的目的是对http下载携带的文件内容进行加密处理,所以我们关注的重点是带有应用层数据的tcp报文。
Tcp报文首先可以分为带有应用层数据的和不带有应用层数据的。应用层无关报文主要是SYN,FIN,ACK等报文,用于tcp连接和可靠性传输。这类报文和我们的应用无关,直接转发即可。
2.2.2 报文的分析和筛选
带有应用层数据的tcp报文,我们可以进行定向的筛选:以应用层协议关键词进行筛选。比如http协议,应用层会有“HTTP”字样的关键字。然后,深入对http进行分析,http协议有POST,GET和应答。传输文件的关键数据包一般在200OK的应答中。特征是transfe-Encoding的chunk类型(代表以chunk方式控制文件大小),以及filename中的扩展文件名来确定是否是加密需要的报文。
2.2.3 报文的滞留,重组和加密
文件加密根据算法需要加密4096字节的数据。而tcp荷载数据的报文一般长度是1514,所以需要合并几个连续报文以得到4096字节文件内容。
因为是网络传输,tcp报文很有可能是乱序的。所以需要根据tcp的序列号对tcp报文进行重组。Tcp包下一序列号=序列号+数据长度。这里的数据长度是指传输的数据大小,不包括ethernet,ip,tcp的报头的长度。
为了重组报文,需要维护两个队列:顺序队列和乱序队列。
(1)顺序队列
截获一个新的报文后,判断顺序队列是否为空,若为空,判断报文的序列号是否等于startseq,是则插入顺序队列,否,则按照升序插入到乱序队列。
如果顺序队列不为空,判断当前序列号是否等于顺序队列结尾的序列号加上数据长度。若是则插入顺序队列结尾,否则按照升序插入乱序队列。
(2)乱序队列
首先判断乱序队列开始的tcp序列号,与顺序队列结尾报文的下一序列号的大小关系。
如果等于,则将乱序队列的开始报文插入顺序队列的结尾;
如果大于则本轮处理结束;
如果小于,则直接丢弃该报文。
保活。
①发送端
对于tcp连接,系统将报文滞留于,发送端得不到报的回应势必会影响连接。所以我们需要伪装成接收端向发送端发送ack回应。Ack数据报文的序列号等于当前tcp的确认号,确认号,在顺序队列为空时,等于startseq,否则等于顺序队列结尾报文的下一序列号。
②接收端
从截获第一个需要重组的报文起,需要每隔一段时间向接收端发送ack报文以保证连接。此报文的序列号等于startseq,确认号和所有滞留重组的tcp报文确认号相等。
2.2.4 报文的加密
因为根据SMS4加密算法的特性,加密的最小数据单位是16字节,所以,结合实际应用,本系统采用一次性截获全部4096文件内容,然后加密的方式。
在数据报文滞留排序好之后,定位数据位置,为了能够恢复原有的数据包,需要用指针链表,对数据位置进行记录,以便将加密后的内容拷贝回去。
指针链表元素的数据结构主要记录两点:指针和长度。
对于每一个被放入顺序队列中的tcp包,均分配一个指针链表元素,记录下数据所在的起始地址,以及数据实际长度,然后对数据长度进行累加。当顺序表中的实际数据长度>=4096时,将数据拷贝出来,调用加密接口对4096字节进行加密,然后根据指针链表中的元素,将数据拷贝回去之后,对tcp数据包重新计算校验和,就可以继续转发了。
3 Tcp封包的修改
对于一个TCP报文来说,如果它所负载的数据被修改,就需要重新计算校验和,否则数据包不会被正常的接收。
Tcp数据封包所涉及的校验和分为两种:ip校验和以及tcp校验和。TCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。
TCP首部校验和计算三部分:TCP首部+TCP数据+TCP伪首部。
伪首部是为了增加TCP校验和的检错能力:如检查TCP报文是否收错了(目的IP地址)、传输层协议是否选对了(传输层协议号)等。伪首部来自IP首部。
TCP校验和的大致方法如下:
(1)把伪首部、TCP报头、TCP数据分为16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。
(2)把TCP报头中的校验和字段置为0。
(3)用反码相加法累加所有的16位字(进位也要累加)。
以上结果即作为TCP的校验和。
如果tcp包长度改变,还要对ip报头重新计算校验和。
4 总结
综上所述。文件自动加密系统根据防火墙和流过滤的思想,对从文件服务器下载的文件进行加密保护。主要用到的技术有Ndis驱动级防火墙技术以及SMS4加密算法技术。本系统主要针对TCP/IP协议的特点,对经过Ndis驱动的tcp报文进行分类过滤,并根据http协议的特点,对文件进行还原加密,以起到保护文件的作用。
本文的主要研究工作有:
(1)Ndis驱动程序在文件保护中的作用。
(2)流过滤思想在文件保护中的应用。
[1]朱雁辉.windows防火墙与网络封包截获技术[M].北京:电子工业出版社,2002.
[2]yexin218.Filter驱动开发笔记[EB/OL]. http://www.doci n.com/p-97160849.html&endPro=true.
[3]梁军学.深度包检测技术原理及应用[EB/OL].北京邮电大学网络技术研究院.