摘 要:針對SSL VPN在會話結(jié)束后會在遠(yuǎn)程主機(jī)上留下會話痕跡這一安全隱患,提出了一種基于磁盤過濾驅(qū)動的Cache Clean工作機(jī)制。該機(jī)制的核心思想是在對上層操作系統(tǒng)透明的情況下,重定向?qū)Υ疟P操作的I/O請求包,在會話結(jié)束后自動清除會話數(shù)據(jù),極大地增強(qiáng)了SSL VPN會話的安全性。
關(guān)鍵詞:SSL VPN; Cache Clean; I/O請求包; 重定向
中圖法分類號:TP393.08文獻(xiàn)標(biāo)識碼:A
文章編號:1001—3695(2007)02—0145—03
隨著SSL VPN應(yīng)用的逐漸升溫,越來越多的企業(yè)開始采納SSL VPN的網(wǎng)絡(luò)架構(gòu)來解決企業(yè)的遠(yuǎn)程訪問需求。SSL VPN遠(yuǎn)程訪問技術(shù)的一大好處就是任何一臺客戶端機(jī)器只要有Web瀏覽器就能安全地訪問企業(yè)網(wǎng)絡(luò)。但問題是這些客戶端機(jī)器并非都是企業(yè)所有,任意非授權(quán)用戶都可以使用,這就導(dǎo)致了SSL VPN在會話結(jié)束后,客戶機(jī)上緩存的數(shù)據(jù)可能被竊取。為了解決這個問題,眾多SSL VPN廠商都在它們的產(chǎn)品中實(shí)現(xiàn)了能在SSL會話結(jié)束后自動清除遠(yuǎn)程主機(jī)緩存數(shù)據(jù)的機(jī)制。Aventail,Cisco,Whale等公司都在這一方面投入了大量研究并給出了自己的解決方案(虛擬安全桌面),但有些解決方案并不能完全消除這種安全隱患,Google的桌面搜索引擎以及類似的工具會自動復(fù)制那些在SSL會話期間被訪問過的資料。基于這些考慮本文提出了一種遠(yuǎn)程主機(jī)Cache Clean的工作機(jī)制,它利用磁盤過濾驅(qū)動來重定向?qū)懭氪疟P的數(shù)據(jù),使所有對磁盤寫的數(shù)據(jù)加密存儲在一個虛擬磁盤空間,在會話結(jié)束后此虛擬磁盤空間可自動從文件系統(tǒng)中清除。該方法能從根本上解決上述隱患,避免Google桌面搜索引擎等類似工具的緩存機(jī)制。
1 Cache Clean的設(shè)計思想
Cache Clean的工作機(jī)制是在ActiveX包中嵌入一個磁盤過濾驅(qū)動程序,在SSL VPN客戶端啟動時加載磁盤過濾驅(qū)動。磁盤過濾驅(qū)動設(shè)備掛接在Disk設(shè)備驅(qū)動之上,可以截獲所有操作磁盤的IRP包(主要是IRP_MJ_READ和IRP_MJ_WRITE這兩種IRP包),它在文件系統(tǒng)中的位置如圖1所示。
驅(qū)動加載后,通過驅(qū)動為VPN客戶端提供的接口操縱重定向管理引擎,構(gòu)造IRP包來讀取整個磁盤的分區(qū)、分區(qū)類型和空閑扇區(qū),得到整個磁盤的空閑扇區(qū)后使用AVL(Adelson Velskii and Landis)樹來管理整個空閑扇區(qū)(Space Sector Tree,SST)。磁盤過濾驅(qū)動設(shè)備掛接在Disk驅(qū)動設(shè)備之上,可以截獲所有寫向磁盤的數(shù)據(jù),然后根據(jù)SST查詢最匹配的空間將數(shù)據(jù)加密后寫入,并使用另一個AVL樹來管理這個映射關(guān)系(Map Sector Tree,MST)。對從磁盤讀數(shù)據(jù)的IRP包根據(jù)MST來匹配,并根據(jù)匹配結(jié)果來讀取所需的所有數(shù)據(jù)。例如,如果系統(tǒng)現(xiàn)在要向磁盤的扇區(qū)1,2,3寫數(shù)據(jù),只需把它的數(shù)據(jù)寫入可用扇區(qū)4,5,6即可,并記下扇區(qū)1,2,3到扇區(qū)4,5,6的映射關(guān)系。當(dāng)系統(tǒng)要讀取扇區(qū)1,2,3的內(nèi)容時,查詢MST可知系統(tǒng)實(shí)際要讀的數(shù)據(jù)是扇區(qū)4,5,6中的內(nèi)容,然后構(gòu)造自己的IRP包去讀取扇區(qū)4,5,6的數(shù)據(jù),把得到的數(shù)據(jù)填入系統(tǒng)傳下來的IRP包中,最后成功返回。基于這一原理可以對寫磁盤的所有數(shù)據(jù)重定向,而只有這個動態(tài)的MST才知道數(shù)據(jù)的真實(shí)所在,在SSL VPN會話結(jié)束后,所有動態(tài)的MST都釋放了,也就是說整個系統(tǒng)恢復(fù)到了在SSL VPN會話前的那個狀態(tài)。
2 Cache Clean的具體實(shí)現(xiàn)
磁盤過濾驅(qū)動是按照WDM框架來實(shí)現(xiàn)的。通過對文件系統(tǒng)的分析可得到整個磁盤的空閑扇區(qū),然后把所有對磁盤的寫操作重定向到這些空閑扇區(qū),并使用AES加密算法對數(shù)據(jù)進(jìn)行加密。整個Cache Clean在內(nèi)核的功能模塊如圖2所示。
2.1 SST管理模塊
NTFS文件系統(tǒng)和FAT32文件系統(tǒng)都是以簇為單位來管理磁盤中的空閑扇區(qū),通過對NTFS文件系統(tǒng)和FAT32文件系統(tǒng)的數(shù)據(jù)組織結(jié)構(gòu)的分析可以得到整個磁盤的空閑扇區(qū)分布情況。在分析具體的文件系統(tǒng)前,首先應(yīng)該得到磁盤的分區(qū)情況以及各個分區(qū)的分區(qū)類型、分區(qū)大小。Windows的磁盤分區(qū)管理設(shè)備提供了這個接口,構(gòu)造一個IOCTL為IOCTL_DISK_GET_DRIVE_LAYOUT的IRP包發(fā)給磁盤設(shè)備就能獲取整個磁盤的分區(qū)情況和各個分區(qū)的類型,獲得分區(qū)情況后需要根據(jù)分區(qū)類型來獲得各個分區(qū)的空閑扇區(qū)。
(1)NTFS文件系統(tǒng)。該文件系統(tǒng)中所有的數(shù)據(jù),包括系統(tǒng)信息,如引導(dǎo)程序、記錄整個卷的分配狀態(tài)位圖和用于文件定位及恢復(fù)的數(shù)據(jù)結(jié)構(gòu)等都以文件的形式存在,它的空閑扇區(qū)都是以簇為單位存儲在一個稱為SBitmap的文件中。SBitmap文件中的一個bit代表一個簇,0表示可用,1表示被占用,只用定位SBitmap文件的偏移及大小即可。定位SBitmap文件,首先需要找MFT表文件的位置,在SBoot文件中有MFT表的起始簇號LCN,根據(jù)LCN可以計算出MFT的準(zhǔn)確位置,而SBitmap文件就位于MFT表中的第六個文件。定位SBitmap文件后,根據(jù)文件的每個bit值就可計算出整個磁盤分區(qū)的空閑扇區(qū)。
(2)FAT32文件系統(tǒng)。該文件系統(tǒng)是用FAT表來跟蹤磁盤上的每個文件。FAT32文件系統(tǒng)的FAT表是緊接在保留扇區(qū)的后面,0x00000000H表示此簇可用,遍歷完整的FAT表就可以計算出這個分區(qū)的可用簇。
在知道各個分區(qū)的可用簇之后,根據(jù)簇與扇區(qū)的關(guān)系可以推算出整個分區(qū)空閑扇區(qū)分布情況。最后以連續(xù)扇區(qū)空間的大小為關(guān)鍵字,用AVL樹將其組織起來。在整個框架中只有在向磁盤寫時才需要用到它,同時為了避免產(chǎn)生過多的扇區(qū)碎片出現(xiàn),在查詢可用扇區(qū)塊時采用的是最小匹配原則。
2.2 MST管理模塊
操作系統(tǒng)對磁盤的讀寫操作在內(nèi)核都是以IRP包的形式來訪問磁盤的,訪問大小都是以扇區(qū)為單位,每個IRP操作磁盤的偏移地址是磁盤的物理偏移。為了使重定向后的數(shù)據(jù)能返回給操作系統(tǒng)應(yīng)用程序,需要建立一種映射匹配關(guān)系。此映射關(guān)系的結(jié)構(gòu)為
為了加快映射匹配的速度,采用AVL樹來進(jìn)行結(jié)構(gòu)組織,關(guān)鍵字為OldByteOffset,向外提供了Insert和Search功能。在整個框架中有兩個地方需要用到映射關(guān)系表:①在IRP_MJ_READ時需要Search映射關(guān)系表,查詢是否有匹配的部分。最復(fù)雜的情況是有部分匹配,有部分沒有匹配,這就需要對原來的IRP包進(jìn)行分割請求。圖3是對IRP分割情況的詳細(xì)描述。一個IRP包要讀取扇區(qū)1—6,經(jīng)過映射關(guān)系表得到扇區(qū)1,2對應(yīng)于10,11,扇區(qū)5對應(yīng)于15,而其余沒有映射關(guān)系的扇區(qū)都需讀取原來的扇區(qū)3,4,6。這就是說,一個IRP包分成了四個IRP包,只有等到四個IRP包的數(shù)據(jù)都讀到后,才能把數(shù)據(jù)全部按順序?qū)懙皆瓉淼腎RP包中,最后才能成功返回,否則都會返回IRP讀操作失敗。②在IRP_MJ_WRITE時,將扇區(qū)映射關(guān)系Insert到映射關(guān)系表中。
2.3 加/解密引擎
本文采用AES加密算法對數(shù)據(jù)加密。密鑰長度和數(shù)據(jù)加密分組大小為128bits,采用的輪數(shù)為10;使用四行四列的矩陣來存儲數(shù)據(jù),數(shù)據(jù)字節(jié)的排列順序以列序?yàn)橹鳎總€元素為8bits。數(shù)據(jù)加密使用輪運(yùn)算,主要由四步操作構(gòu)成:字節(jié)變換(BS)、行移位變換(SR)、列混合變換(MC)和輪密鑰相加變換(ADK)。下面對AES的密鑰生成、加密和解密過程作簡單論述。
(1)密匙生成。采用偽隨機(jī)數(shù)來生成密鑰,以系統(tǒng)當(dāng)前時間為種子,使用Srand和Rand函數(shù)產(chǎn)生隨機(jī)數(shù),對產(chǎn)生的32bits隨機(jī)數(shù)進(jìn)行四倍移位擴(kuò)展可得到128bits的加密密鑰。
(2)加密過程。首先對加密密鑰和數(shù)據(jù)進(jìn)行異或運(yùn)算(ADK)得到矩陣A,接著對A中的數(shù)據(jù)進(jìn)行字節(jié)替換操作(BS)得到矩陣B,再對B中的每一行按不同的位移量進(jìn)行行移位(SR)得到矩陣C,最后對C中的每列并行應(yīng)用線性變換(MC),依次進(jìn)行10次輪運(yùn)算可得到加密數(shù)據(jù)。
(3)解密過程。使用與加密相反的逆操作(IADK,IBS,ISR和IMC)對數(shù)據(jù)進(jìn)行逆并倒置其次序解密。
整個加/解密引擎的工作機(jī)制如圖4所示。
當(dāng)IRP寫請求①到達(dá)時,根據(jù)當(dāng)前系統(tǒng)時間產(chǎn)生一個AES加密密鑰存入Key Table并將key送入加密引擎中加密⑦,加密后將數(shù)據(jù)寫入磁盤③。當(dāng)IRP讀請求②到達(dá)時,根據(jù)其請求的數(shù)據(jù)地址偏移查詢MST,對IRP讀請求進(jìn)行分割,將分割后的IRP包依次送入搜索引擎③,根據(jù)地址偏移查詢Key Table,將得到的key送入解密引擎解密④。解密后若還有分割后的IRP包⑤,則繼續(xù)循環(huán);若沒有則將解密后的數(shù)據(jù)組包返回給上層驅(qū)動⑥。
3 性能分析與測試結(jié)果
本文采用AES加密算法對寫入磁盤的數(shù)據(jù)進(jìn)行加密保護(hù),而數(shù)據(jù)加密的安全性與密鑰的保護(hù)和加密算法相關(guān)。在選擇密鑰上,使用以系統(tǒng)時間為種子的偽隨機(jī)數(shù),而獲取偽隨機(jī)數(shù)的概率為1/232,也就是說破譯密鑰的概率只有1/232。而AES算法本身具有抵抗已知的所有密碼攻擊手段的高安全性的特點(diǎn),再加上數(shù)據(jù)重定向的無規(guī)律性,所以直接從磁盤上獲取會話數(shù)據(jù)的概率極小。
與無Cache Clean相比,Cache Clean的主要時間開銷為TSearch_Map,TSearch_Space,TInsert_Map,TnIrp和TEncryp。其中TSearch_Map 為查詢映射表所耗時間;TSearch_Space為查詢空閑扇區(qū)表所耗時間;TInsert_Map 為增加映射關(guān)系到映射表所耗時間;TnIrp為IRP讀寫包從請求到返回所耗時間;TEncryp為加密/解密所耗時間。
TSearch_Map,TInsert_Map和TSearch_Space 的值主要與查詢的速度相關(guān)。為了減少查詢時間,本文采用AVL平衡二叉樹來組織映射關(guān)系表和空閑扇區(qū)表。假設(shè)有n個節(jié)點(diǎn)的AVL樹,其高度不超過3/2 log2(n+1),也就是說一個有10GB可用空間的磁盤中,以簇為單位(假設(shè)簇的大小為4 096Bytes)進(jìn)行分割,并且這些簇都是不連續(xù)存放的,一共有10G/4096=2 621 440個節(jié)點(diǎn),這樣算得AVL樹的高度不超過3/2 log2(2621440+1)=21。也就是說10GB空間按簇為單位分成節(jié)點(diǎn)構(gòu)造成AVL樹后,查詢一個節(jié)點(diǎn)最多只需比較21次,而查詢21次CPU消耗的時間微乎其微。對于TnIrp,因?yàn)閷?yīng)于系統(tǒng)的一個IRP讀寫包,根據(jù)匹配情況可能需要創(chuàng)建多個IRP包才能取得系統(tǒng)所需的數(shù)據(jù),但是出現(xiàn)一個IRP包對應(yīng)于很多IRP包的情況很少,小概率的事件產(chǎn)生的延遲是可以接受的。TEncryp主要與AES加密算法的加密/解密速度有關(guān)。在CPU為Intel Pentium 800Hz,Memery為128MB,操作系統(tǒng)為Windows 2000的情況下,AES加密/解密的速度為37MBps,造成的延遲是可以接受的。在CPU為Intel Pentium 800Hz,Memery為128MB,硬盤轉(zhuǎn)速為7200轉(zhuǎn)/s,操作系統(tǒng)為Windows 2000,無任何殺毒軟件的情況下,加載Cache Clean前與加載后對磁盤讀寫操作的性能如圖5所示。
從圖5中可以看出,加載Cache Clean后磁盤讀寫性能有所下降,下降的幅度基本穩(wěn)定。在保證了SSL VPN遠(yuǎn)程會話內(nèi)容安全的情況下,犧牲些磁盤讀寫性能是可以接受的。
4 結(jié)束語
本文提出了一種基于磁盤過濾驅(qū)動的SSL VPN遠(yuǎn)程接入點(diǎn)Cache Clean的工作機(jī)制,它可以完全清除遠(yuǎn)程接入用戶在會話過程中所有在客戶端機(jī)器上的緩存數(shù)據(jù),并且使用AES加密算法對緩存的會話數(shù)據(jù)進(jìn)行加密,避免了非法授權(quán)用戶利用數(shù)據(jù)恢復(fù)技術(shù)竊取會話數(shù)據(jù),極大地增強(qiáng)了SSL VPN遠(yuǎn)程會話的安全性。
本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。