◆聶燕屏
(中星電子股份有限公司 北京 100086)
流過(guò)濾和Ndis防火墻技術(shù)在文件加密保護(hù)中的應(yīng)用
◆聶燕屏
(中星電子股份有限公司 北京 100086)
在這個(gè)計(jì)算機(jī)的信息時(shí)代,計(jì)算機(jī)和網(wǎng)絡(luò)的運(yùn)用無(wú)處不在,在各行各業(yè),都會(huì)使用計(jì)算機(jī),以提高效率,節(jié)省人力。但是隨著計(jì)算機(jī)技術(shù)和應(yīng)用的普及,安全問(wèn)題隨之顯現(xiàn)。所以,很多文檔有權(quán)限限制。比如:一些文檔只有相關(guān)人員有權(quán)查看,一些文檔需要付費(fèi)查看,等等。這時(shí)候,加密技術(shù)就會(huì)成為解決問(wèn)題的手段。對(duì)需要權(quán)限的文檔進(jìn)行加密,擁有相應(yīng)權(quán)限的個(gè)人,可以從文檔的提供方獲取秘鑰對(duì)文檔進(jìn)行解密。只有正確解密的文檔才能被正常瀏覽。本文首先對(duì)ndis防火墻技術(shù)進(jìn)行了介紹,分析了ndis技術(shù)在文件加密保護(hù)中的作用;然后對(duì)流過(guò)濾技術(shù)進(jìn)行了介紹,并具體講解了流過(guò)濾技術(shù)在文件加密保護(hù)中的應(yīng)用以及具體算法和流程;最后,針對(duì)TCP/IP報(bào)文特點(diǎn),介紹了校驗(yàn)和算法。
流過(guò)濾;Ndis;SMS4;校驗(yàn)和
對(duì)于需要管理并且需要頻繁提供大量文檔的單位,將文檔數(shù)字化無(wú)疑是必須的。但是基于安全原因,很多文檔需要加密。但是加密的文檔也帶來(lái)一些問(wèn)題。如果一個(gè)文檔存儲(chǔ)和管理系統(tǒng),能夠做到明文存儲(chǔ),密文發(fā)送,那么無(wú)疑是很實(shí)用的。所以,本人開(kāi)發(fā)了這套文件自動(dòng)加密系統(tǒng)。這套系統(tǒng)的原理就是利用windows ndis級(jí)別防火墻的原理對(duì)文件進(jìn)行保護(hù),采取明文存儲(chǔ),秘文分發(fā)的方式。
Ndis是Network Driver Interface Specification的縮寫(xiě),意為“網(wǎng)絡(luò)驅(qū)動(dòng)接口規(guī)范”。Ndis橫跨了傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層,其作用是屏蔽了底層物理硬件的區(qū)別。
Ndis支持三種類(lèi)型的驅(qū)動(dòng)程序:
Miniport驅(qū)動(dòng)程序;
中間層驅(qū)動(dòng)程序;
Protocol驅(qū)動(dòng)程序。
在這里,我們采用中間層驅(qū)動(dòng)程序。
1.1 Ndis的版本
Ndis版本從支持的操作系統(tǒng)看可以分類(lèi)兩類(lèi):Ndis5.x和ndis6.x。Ndis6.x對(duì)比ndis5.x變化很大,最重要的是NET_BUFFER替代了NDIS_PACKET。鑒于本系統(tǒng)運(yùn)行的服務(wù)器是win2008R2,所以本文中提到的ndis均指ndis6.x。
1.2 Ndis6的數(shù)據(jù)結(jié)構(gòu)以及如何獲取數(shù)據(jù)包
ndis6.0中很重要的兩個(gè)數(shù)據(jù)結(jié)構(gòu)是NET_BUFFER_LIST和NET_BUFFER。
一個(gè)NET_BUFFER_LIST結(jié)構(gòu)指向的是一連串的NET_BUFFER,這些NET_BUFFER中保存的數(shù)據(jù)包內(nèi)容屬于同一個(gè)stream。通過(guò)NET_BUFFER_NEXT_NB()可以獲取下一個(gè)NET_BUFFER。
1.3 Ndis的相關(guān)函數(shù)
在Ndis中,截獲下載數(shù)據(jù)包的關(guān)鍵函數(shù)是FilterSendNetBufferLists和FilterSendNetBufferListsComplete。在ndis驅(qū)動(dòng)安裝成功之后,tcp報(bào)文就會(huì)在FilterSendNetBufferLists函數(shù)中以NBL的形式存在。對(duì)于NBL數(shù)據(jù)的處理,就位于這個(gè)函數(shù)中。而FilterSendNetBufferListsComplete的功能是把發(fā)送的結(jié)構(gòu)和數(shù)據(jù)返還給 Filter Driver。
2.1 關(guān)于流過(guò)濾技術(shù)
流過(guò)濾技術(shù)是在包過(guò)濾技術(shù)的基礎(chǔ)上提出的。流過(guò)濾處理的基本單元是數(shù)據(jù)包,但并不僅限于數(shù)據(jù)包。
包過(guò)濾技術(shù)關(guān)注的重點(diǎn)是網(wǎng)絡(luò)層和傳輸層,根據(jù)這幾個(gè)層次在單個(gè)數(shù)據(jù)包中的信息進(jìn)行過(guò)濾。而流過(guò)濾注重的是應(yīng)用層。
在這里,我利用流過(guò)濾的原理,對(duì)數(shù)據(jù)包中的應(yīng)用層信息,進(jìn)行加密處理。
2.2 技術(shù)方案
這里,以Http傳輸為例,講解流過(guò)濾技術(shù)在文件加密中的技術(shù)方案。http走的協(xié)議是tcp報(bào)文,在流過(guò)濾方案中,截獲的封包是tcp包。處理流程如下:
對(duì)截獲的tcp報(bào)文進(jìn)行分類(lèi)處理。
對(duì)1中篩選后的報(bào)文進(jìn)行分析和再次篩選。
對(duì)選中的報(bào)文記錄該報(bào)文的源,目的ip和端口。對(duì)此連接的tcp包進(jìn)行滯留。并且接管此tcp連接。
對(duì)滯留的數(shù)據(jù)包進(jìn)行重組,加密。
將加密后的數(shù)據(jù)還原,繼續(xù)轉(zhuǎn)發(fā),并且歸還此tcp連接。
2.2.1 報(bào)文的分類(lèi)
因?yàn)槲覀兊哪康氖菍?duì)http下載攜帶的文件內(nèi)容進(jìn)行加密處理,所以我們關(guān)注的重點(diǎn)是帶有應(yīng)用層數(shù)據(jù)的tcp報(bào)文。
Tcp報(bào)文首先可以分為帶有應(yīng)用層數(shù)據(jù)的和不帶有應(yīng)用層數(shù)據(jù)的。應(yīng)用層無(wú)關(guān)報(bào)文主要是SYN,F(xiàn)IN,ACK等報(bào)文,用于tcp連接和可靠性傳輸。這類(lèi)報(bào)文和我們的應(yīng)用無(wú)關(guān),直接轉(zhuǎn)發(fā)即可。
2.2.2 報(bào)文的分析和篩選
帶有應(yīng)用層數(shù)據(jù)的tcp報(bào)文,我們可以進(jìn)行定向的篩選:以應(yīng)用層協(xié)議關(guān)鍵詞進(jìn)行篩選。比如http協(xié)議,應(yīng)用層會(huì)有“HTTP”字樣的關(guān)鍵字。然后,深入對(duì)http進(jìn)行分析,http協(xié)議有POST,GET和應(yīng)答。傳輸文件的關(guān)鍵數(shù)據(jù)包一般在200OK的應(yīng)答中。特征是transfe-Encoding的chunk類(lèi)型(代表以chunk方式控制文件大?。?,以及filename中的擴(kuò)展文件名來(lái)確定是否是加密需要的報(bào)文。
2.2.3 報(bào)文的滯留,重組和加密
文件加密根據(jù)算法需要加密4096字節(jié)的數(shù)據(jù)。而tcp荷載數(shù)據(jù)的報(bào)文一般長(zhǎng)度是1514,所以需要合并幾個(gè)連續(xù)報(bào)文以得到4096字節(jié)文件內(nèi)容。
因?yàn)槭蔷W(wǎng)絡(luò)傳輸,tcp報(bào)文很有可能是亂序的。所以需要根據(jù)tcp的序列號(hào)對(duì)tcp報(bào)文進(jìn)行重組。Tcp包下一序列號(hào)=序列號(hào)+數(shù)據(jù)長(zhǎng)度。這里的數(shù)據(jù)長(zhǎng)度是指?jìng)鬏數(shù)臄?shù)據(jù)大小,不包括ethernet,ip,tcp的報(bào)頭的長(zhǎng)度。
為了重組報(bào)文,需要維護(hù)兩個(gè)隊(duì)列:順序隊(duì)列和亂序隊(duì)列。
(1)順序隊(duì)列
截獲一個(gè)新的報(bào)文后,判斷順序隊(duì)列是否為空,若為空,判斷報(bào)文的序列號(hào)是否等于startseq,是則插入順序隊(duì)列,否,則按照升序插入到亂序隊(duì)列。
如果順序隊(duì)列不為空,判斷當(dāng)前序列號(hào)是否等于順序隊(duì)列結(jié)尾的序列號(hào)加上數(shù)據(jù)長(zhǎng)度。若是則插入順序隊(duì)列結(jié)尾,否則按照升序插入亂序隊(duì)列。
(2)亂序隊(duì)列
首先判斷亂序隊(duì)列開(kāi)始的tcp序列號(hào),與順序隊(duì)列結(jié)尾報(bào)文的下一序列號(hào)的大小關(guān)系。
如果等于,則將亂序隊(duì)列的開(kāi)始報(bào)文插入順序隊(duì)列的結(jié)尾;
如果大于則本輪處理結(jié)束;
如果小于,則直接丟棄該報(bào)文。
?;?。
①發(fā)送端
對(duì)于tcp連接,系統(tǒng)將報(bào)文滯留于,發(fā)送端得不到報(bào)的回應(yīng)勢(shì)必會(huì)影響連接。所以我們需要偽裝成接收端向發(fā)送端發(fā)送ack回應(yīng)。Ack數(shù)據(jù)報(bào)文的序列號(hào)等于當(dāng)前tcp的確認(rèn)號(hào),確認(rèn)號(hào),在順序隊(duì)列為空時(shí),等于startseq,否則等于順序隊(duì)列結(jié)尾報(bào)文的下一序列號(hào)。
②接收端
從截獲第一個(gè)需要重組的報(bào)文起,需要每隔一段時(shí)間向接收端發(fā)送ack報(bào)文以保證連接。此報(bào)文的序列號(hào)等于startseq,確認(rèn)號(hào)和所有滯留重組的tcp報(bào)文確認(rèn)號(hào)相等。
2.2.4 報(bào)文的加密
因?yàn)楦鶕?jù)SMS4加密算法的特性,加密的最小數(shù)據(jù)單位是16字節(jié),所以,結(jié)合實(shí)際應(yīng)用,本系統(tǒng)采用一次性截獲全部4096文件內(nèi)容,然后加密的方式。
在數(shù)據(jù)報(bào)文滯留排序好之后,定位數(shù)據(jù)位置,為了能夠恢復(fù)原有的數(shù)據(jù)包,需要用指針鏈表,對(duì)數(shù)據(jù)位置進(jìn)行記錄,以便將加密后的內(nèi)容拷貝回去。
指針鏈表元素的數(shù)據(jù)結(jié)構(gòu)主要記錄兩點(diǎn):指針和長(zhǎng)度。
對(duì)于每一個(gè)被放入順序隊(duì)列中的tcp包,均分配一個(gè)指針鏈表元素,記錄下數(shù)據(jù)所在的起始地址,以及數(shù)據(jù)實(shí)際長(zhǎng)度,然后對(duì)數(shù)據(jù)長(zhǎng)度進(jìn)行累加。當(dāng)順序表中的實(shí)際數(shù)據(jù)長(zhǎng)度>=4096時(shí),將數(shù)據(jù)拷貝出來(lái),調(diào)用加密接口對(duì)4096字節(jié)進(jìn)行加密,然后根據(jù)指針鏈表中的元素,將數(shù)據(jù)拷貝回去之后,對(duì)tcp數(shù)據(jù)包重新計(jì)算校驗(yàn)和,就可以繼續(xù)轉(zhuǎn)發(fā)了。
對(duì)于一個(gè)TCP報(bào)文來(lái)說(shuō),如果它所負(fù)載的數(shù)據(jù)被修改,就需要重新計(jì)算校驗(yàn)和,否則數(shù)據(jù)包不會(huì)被正常的接收。
Tcp數(shù)據(jù)封包所涉及的校驗(yàn)和分為兩種:ip校驗(yàn)和以及tcp校驗(yàn)和。TCP校驗(yàn)和覆蓋TCP首部和TCP數(shù)據(jù),而IP首部中的校驗(yàn)和只覆蓋IP的首部,不覆蓋IP數(shù)據(jù)報(bào)中的任何數(shù)據(jù)。
TCP首部校驗(yàn)和計(jì)算三部分:TCP首部+TCP數(shù)據(jù)+TCP偽首部。
偽首部是為了增加TCP校驗(yàn)和的檢錯(cuò)能力:如檢查T(mén)CP報(bào)文是否收錯(cuò)了(目的IP地址)、傳輸層協(xié)議是否選對(duì)了(傳輸層協(xié)議號(hào))等。偽首部來(lái)自IP首部。
TCP校驗(yàn)和的大致方法如下:
(1)把偽首部、TCP報(bào)頭、TCP數(shù)據(jù)分為16位的字,如果總長(zhǎng)度為奇數(shù)個(gè)字節(jié),則在最后增添一個(gè)位都為0的字節(jié)。
(2)把TCP報(bào)頭中的校驗(yàn)和字段置為0。
(3)用反碼相加法累加所有的16位字(進(jìn)位也要累加)。
以上結(jié)果即作為T(mén)CP的校驗(yàn)和。
如果tcp包長(zhǎng)度改變,還要對(duì)ip報(bào)頭重新計(jì)算校驗(yàn)和。
綜上所述。文件自動(dòng)加密系統(tǒng)根據(jù)防火墻和流過(guò)濾的思想,對(duì)從文件服務(wù)器下載的文件進(jìn)行加密保護(hù)。主要用到的技術(shù)有Ndis驅(qū)動(dòng)級(jí)防火墻技術(shù)以及SMS4加密算法技術(shù)。本系統(tǒng)主要針對(duì)TCP/IP協(xié)議的特點(diǎn),對(duì)經(jīng)過(guò)Ndis驅(qū)動(dòng)的tcp報(bào)文進(jìn)行分類(lèi)過(guò)濾,并根據(jù)http協(xié)議的特點(diǎn),對(duì)文件進(jìn)行還原加密,以起到保護(hù)文件的作用。
本文的主要研究工作有:
(1)Ndis驅(qū)動(dòng)程序在文件保護(hù)中的作用。
(2)流過(guò)濾思想在文件保護(hù)中的應(yīng)用。
[1]朱雁輝.windows防火墻與網(wǎng)絡(luò)封包截獲技術(shù)[M].北京:電子工業(yè)出版社,2002.
[2]yexin218.Filter驅(qū)動(dòng)開(kāi)發(fā)筆記[EB/OL]. http://www.doci n.com/p-97160849.html&endPro=true.
[3]梁軍學(xué).深度包檢測(cè)技術(shù)原理及應(yīng)用[EB/OL].北京郵電大學(xué)網(wǎng)絡(luò)技術(shù)研究院.