◆聶燕屏
(中星電子股份有限公司 北京 100086)
流過濾和Ndis防火墻技術在文件加密保護中的應用
◆聶燕屏
(中星電子股份有限公司 北京 100086)
在這個計算機的信息時代,計算機和網絡的運用無處不在,在各行各業,都會使用計算機,以提高效率,節省人力。但是隨著計算機技術和應用的普及,安全問題隨之顯現。所以,很多文檔有權限限制。比如:一些文檔只有相關人員有權查看,一些文檔需要付費查看,等等。這時候,加密技術就會成為解決問題的手段。對需要權限的文檔進行加密,擁有相應權限的個人,可以從文檔的提供方獲取秘鑰對文檔進行解密。只有正確解密的文檔才能被正常瀏覽。本文首先對ndis防火墻技術進行了介紹,分析了ndis技術在文件加密保護中的作用;然后對流過濾技術進行了介紹,并具體講解了流過濾技術在文件加密保護中的應用以及具體算法和流程;最后,針對TCP/IP報文特點,介紹了校驗和算法。
流過濾;Ndis;SMS4;校驗和
對于需要管理并且需要頻繁提供大量文檔的單位,將文檔數字化無疑是必須的。但是基于安全原因,很多文檔需要加密。但是加密的文檔也帶來一些問題。如果一個文檔存儲和管理系統,能夠做到明文存儲,密文發送,那么無疑是很實用的。所以,本人開發了這套文件自動加密系統。這套系統的原理就是利用windows 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.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數據包重新計算校驗和,就可以繼續轉發了。
對于一個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報頭重新計算校驗和。
綜上所述。文件自動加密系統根據防火墻和流過濾的思想,對從文件服務器下載的文件進行加密保護。主要用到的技術有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].北京郵電大學網絡技術研究院.