周益旻,劉方正,杜鎮(zhèn)宇,張 凱
(國防科技大學電子對抗學院,合肥 230037)
互聯(lián)網(wǎng)安全協(xié)議(Internet Protocol Security,IPSec)是由IETF 于1998 年11 月提出的Internet 網(wǎng)絡安全通信規(guī)范,為私有信息通過公網(wǎng)傳輸提供了安全保障[1]。虛擬專用網(wǎng)絡(Virtual Private Network,VPN)可利用廉價接入的公共網(wǎng)絡來傳輸私有數(shù)據(jù),相較傳統(tǒng)專線連網(wǎng)方式更具成本優(yōu)勢,受到各企業(yè)和電信運營商的青睞。IPSec VPN 是基于IPSec 協(xié)議的VPN 技術,常用的VPN 實現(xiàn)協(xié)議包括PPTP、L2TP、IPSec、MPLS 和SSL等[2]。從目前所有VPN 的實現(xiàn)方式來看,基于IPSec 的VPN 技術是一種安全性相對較高的VPN 技術[3]。IPSec VPN 使用IKE 協(xié)議驗證IPSec 通信雙方身份、建立安全關聯(lián)(Security Association,SA)以及生成安全密鑰。IKE協(xié)議對IPSec 的安全性至關重要,IKE 協(xié)議第1 版(簡稱IKEv1)由IETF 于1998 年發(fā)布,并于2005 年發(fā)布第2 版[4]。
雖然IPSec VPN 安全性較高[5],但是長期的應用過程中人們已經(jīng)發(fā)現(xiàn)IKEv1 存在身份泄露[6]、中間人攻擊[7]、拒絕服務攻擊[8]等脆弱性問題。文獻[9]從理論上分析了IKEv1 協(xié)議中存在的脆弱性問題,卻沒有給出具體的實現(xiàn)方案。文獻[10]提出一種ARP欺騙實施中間人攻擊的方法,在局域網(wǎng)中驗證了該方法的可行性,但其不能應用在不同網(wǎng)段的VPN中。文獻[11]通過VPN 指紋識別技術,獲取VPN 服務器設備類型與版本信息,但是卻沒有給出具體的服務器流量獲取方法。
本文分析IPSec VPN 的安全性漏洞,主要是密鑰交換過程中IKE 協(xié)議存在中間人攻擊以及數(shù)據(jù)傳輸過程中OSPF 路由選擇協(xié)議存在的路由欺騙攻擊,研究三種常規(guī)OSPF 路由欺騙方式在IPSec VPN 中間人攻擊中的性能表現(xiàn),同時構(gòu)建IPSec VPN 流量劫持模型及攻擊數(shù)據(jù)包,并設計實施中間人攻擊的IPSec VPN 流量劫持與密鑰獲取算法。
IKEv1 協(xié)商密鑰包括兩個階段:1)對身份進行認證并建立安全關聯(lián)ISAKMP SA;2)建立IPSec SA,為AH 和ESP 封裝數(shù)據(jù)包提供服務。
階段1 與階段2 的協(xié)商過程如圖1 所示。消息①來自客戶端,包括ISAKMP 數(shù)據(jù)包首部HDR、安全關聯(lián)SA、以gxi為參數(shù)的DH 密鑰交換材料KE(gxi)、隨機數(shù)Ni 與身份信息IDii,將其作為第一條信息明文發(fā)送給服務器。消息②來自服務器,同樣包括首部HDR 以及對客戶端SA 的確認以及自身的密鑰材料KE(gxr)、隨機數(shù)Nr、身份信息IDir 與校驗值HASH_R。消息③來自客戶端,對服務器發(fā)送的數(shù)據(jù)進行HASH 校驗,如果與自身計算的HASH 一致則通過身份認證,并回復一個HASH_I 值進行確認。
圖1 激進模式預共享密鑰協(xié)商過程Fig.1 Process of pre-shared key negotiation in aggressive mode
在預共享密鑰認證的方式下,密鑰SKEYID 計算如式(1)所示。消息②中客戶端HASH_I計算如式(2)所示。消息③中服務器HASH_R 計算如式(3)所示VPN 雙方共享密鑰材料計算如式(4)~式(6)所示。IKEv1 階段1 的協(xié)商完成,通信雙方獲得了保護階段2密鑰交換的ISAKMP SA 參數(shù)。階段1 生成的密鑰材料將用于保護階段2 快速模式交換的3 條消息,如式(7)~式(9)所示。
其中,PSK 表示預共享密鑰,gxy表示由gxi和gxr生成的DH 共享密鑰,
_b 表示
有效載荷部分,如Ni_b表示隨機數(shù)Ni 的有效載荷部分,CKY_I、CKY_R 分別表示客戶端與服務器數(shù)據(jù)包首部HDR 中的Cookie 信息,M-ID 表示數(shù)據(jù)包中ID 字段,[]中參數(shù)為可選參數(shù),非強制使用。
在階段2 協(xié)商過程中,消息④來自客戶端,包括ISAKMP 報頭和IPSec SA 有效負載,SA 包含數(shù)據(jù)傳輸?shù)乃刑嶙h和變換。在客戶端和服務器之間將交換一個新的臨時值Ni。消息⑤由服務器發(fā)送給客戶端,其中包含ISAKMP 報頭以及選定的SA,臨時值Nr 和HASH(2)對消息④進行確認。消息⑥來自客戶端,由客戶端對服務器存在性進行驗證并發(fā)送HASH(3)。以上3 條消息均使用SKEYID_e 進行加密。在不需要PFS 交換的情況下,后續(xù)密鑰材料為KEYMAT=prf(SKEYID_d,protocol|SPI|Ni_b|Nr_b),至此IKEv1 階段2 的密鑰協(xié)商完成,通信雙方計算出后續(xù)數(shù)據(jù)加密使用的密鑰材料KEYMAT,用于加密數(shù)據(jù)傳輸。
在上述協(xié)商過程中,由于消息1 與消息2 均使用明文發(fā)送,因此攻擊者在實現(xiàn)IPSec VPN 流量劫持的基礎上,通過分析密鑰協(xié)商階段數(shù)據(jù)可以得到VPN 通信雙方的身份信息以及除了預共享密鑰PSK以外的所有VPN 密鑰協(xié)商參數(shù),預共享密鑰PSK 可通過式(1)、式(3)結(jié)合口令字典暴力破解得出。階段1 協(xié)商過程采用的Diffie-Hellman 密鑰交換體制決定了中間人實施攻擊存在的可能性。因此,只要攻擊者破解了預共享密鑰PSK,再通過偽造客戶端與服務器雙方的身份認證信息,攻擊者就可分別與客戶端、服務器嘗試進行密鑰協(xié)商,以實現(xiàn)IPSec VPN中間人攻擊的目的。因此,實現(xiàn)IPSec VPN 流量劫持是進行中間人攻擊的前提條件。
路由選擇協(xié)議在因特網(wǎng)中決定著數(shù)據(jù)分組的轉(zhuǎn)發(fā)路徑,保證了分組能夠跨越網(wǎng)絡正確高效地到達目的地。OSPF 路由協(xié)議是因特網(wǎng)自治系統(tǒng)中最常用的內(nèi)部網(wǎng)關協(xié)議之一[12]。OSPF 是一種典型的鏈路狀態(tài)路由選擇協(xié)議,路由器通過鏈路狀態(tài)通告(Link State Advertisement,LSA)在鏈路狀態(tài)發(fā)生變化時廣播鏈路狀態(tài)信息。相鄰路由器之間交換LSA 分組,所有有效的LSA 存放在鏈路狀態(tài)數(shù)據(jù)庫中,路由器據(jù)此計算網(wǎng)絡拓撲信息并得到路由表[13]。因此,在LSA 上路由信息的準確性與真實性對于數(shù)據(jù)流量的轉(zhuǎn)發(fā)至關重要。
路由欺騙是一種利用協(xié)議漏洞偽造LSA 篡改路由信息的攻擊方法。路由欺騙[14]攻擊主要有雙LSA攻擊、鄰接欺騙攻擊、單路徑注入攻擊、遠程虛假鏈接等。鄰接路由欺騙常應用在中間人攻擊[15]、DNS欺騙攻擊[16]、拒絕服務攻擊[17]等中,攻擊者通過與網(wǎng)絡中路由器建立鄰接關系,配置OSPF 協(xié)議,觸發(fā)相應的惡意LSA,通過洪泛機制傳播給網(wǎng)絡中其他路由,欺騙區(qū)域中其他路由器,污染其路由表,干擾流量的正常轉(zhuǎn)發(fā)[18]。然而,對于IPSec VPN 中間人攻擊,鄰接路由欺騙雖然僅起到了流量劫持的效果,但卻會影響攻擊者后續(xù)密鑰獲取、數(shù)據(jù)篡改的實現(xiàn)。IPSec VPN 鄰接路由欺騙過程如圖2 所示。當攻擊者通過與未設被動接口的R0 路由器建立鄰接關系后,接入R0 路由器所在的OSPF 區(qū)域,以內(nèi)部路由器身份注入一條關于VPN 服務器網(wǎng)段地址的惡意LSA,R0 收到這條消息后更新其路由表并宣告給其他鄰接路由器,結(jié)合洪泛機制,整個路由區(qū)域內(nèi)大范圍路由器的路由表都將受到污染,當區(qū)域中存在客戶端發(fā)往VPN 服務器通信數(shù)據(jù)時,攻擊者將獲取到客戶端發(fā)往服務器的信息。然而,若攻擊者與服務器之間不存在除R0 外的其他線路,那么當攻擊者通過R0 向真實的VPN 服務器發(fā)送數(shù)據(jù)時,由于其鄰接路由器路由表也被篡改,因此數(shù)據(jù)并不會成功的發(fā)送到服務器,從而影響后續(xù)攻擊。
圖2 IPSec VPN 鄰接路由欺騙過程Fig.2 Process of IPSec VPN adjacent routing spoofing
IPSec VPN 單路徑注入攻擊過程如圖3 所示。攻擊者將R0 路由器作為跳板路由,偽造源地址為F0/1 的數(shù)據(jù)包,冒充R0 路由器,發(fā)送包含關于服務器網(wǎng)段路由信息的惡意LSA 給R1,R1 稱為源污染路由器,R1 收到該LSA 之后,會將這些惡意的LSA 繼續(xù)洪泛出去,使得區(qū)域1 內(nèi)部路由器路由表、鏈路狀態(tài)數(shù)據(jù)庫均受到污染,前往服務器網(wǎng)段的數(shù)據(jù)包會轉(zhuǎn)發(fā)給R0。由于該惡意LSA 是攻擊者偽造的,因此當R0 收到R1 發(fā)回的LSAck 包之后,若僅采取丟棄處理,則不會引起自反擊機制,這樣保證了區(qū)域2 中路由器關于服務器路由地址的正確性,不影響后續(xù)攻擊者對服務器方向數(shù)據(jù)的發(fā)送。然而,單路徑注入攻擊的條件在于跳板主機與源污染路由器之間只能存在一條路徑,使得惡意LSA不會再次通過其他區(qū)域傳播到跳板路由。因此,采用單路徑注入攻擊的方式進行路由欺騙,僅適用于可將客戶端與服務器劃分為兩個區(qū)域,區(qū)域之間有且僅有一條路徑連通的情況。雙LSA 遠程多注入是一種通過改變相關路徑上的路由器LSA,達到對中間流量傳輸路徑進行控制的攻擊方式[19],IPSec VPN 雙LSA 遠程多注入攻擊過程如圖4 所示。
圖3 IPSec VPN 單路徑注入攻擊過程Fig.3 Process of IPSec VPN single path injection attack
圖4 IPSec VPN 雙LSA 遠程多注入攻擊過程Fig.4 Process of IPSec VPN dual LSA remote multiple injection attack
OSPF 協(xié)議規(guī)定兩個具有相同序列號、校驗和且時間差小于15 min 的LSA 為相同的LSA。假定攻擊者通過與網(wǎng)絡中的路由器(圖4 中的R0)建立鄰接關系,獲取到網(wǎng)絡拓撲與OSPF 相關參數(shù),那么雙LSA 注入攻擊就可利用該機制進行構(gòu)造,并以一定時序在網(wǎng)絡中發(fā)送關于某一個污染節(jié)點(也稱受害路由器)(圖4 中的R3)的“觸發(fā)LSA”與“抗反擊LSA”,雙LSA 注入攻擊過程如圖5 所示。
圖5 雙LSA 注入攻擊過程Fig.5 Process of dual LSA injection attack
攻擊者于t0時刻發(fā)生“觸發(fā)LSA”,“觸發(fā)LSA”在傳播到受害者路由器(R3)之前會影響所經(jīng)過的路由器(圖5 中的R1 和R2),當“觸發(fā)LSA”經(jīng)過洪泛于t1時刻到達受害者路由器時,受害者路由器于t3時刻會觸發(fā)自反擊機制,發(fā)送一個更新的“自反擊LSA”,然而由于攻擊者事先構(gòu)造了關于該更新LSA 的具有相同序列號、校驗和且時間差小于15 min 的“抗反擊LSA”并已于t2時刻傳播給其他路由器,此時其他路由再收到該受害路由器更新的LSA 之后,會認為與“抗反擊LSA”相同而丟棄,導致網(wǎng)絡中數(shù)據(jù)鏈路狀態(tài)數(shù)據(jù)庫發(fā)生改變,達到控制中間流量傳輸路徑的效果。因此,采用雙LSA 遠程多注入的攻擊方式,適用于客戶端與服務器之間存在兩條及以上鏈路的情況。本文對上述3 種路由欺騙方式在IPSec VPN 中間人攻擊中的優(yōu)劣勢進行對比分析:1)鄰接路由欺騙,控制流量傳輸路徑、攻擊者獲取目標流量,影響范圍大且攻擊方式簡單,但難以控制欺騙范圍并影響后續(xù)攻擊;2)單路徑注入攻擊,控制流量傳輸路徑,容易控制欺騙范圍,適用于目標網(wǎng)絡之間僅存在唯一鏈路的情況;3)雙LSA 注入攻擊,控制流量傳輸路徑,適用于目標網(wǎng)絡之間存在多條鏈路的情況,攻擊者需要獲取OSPF 網(wǎng)絡相關參數(shù)。
本文選用雙LSA 注入攻擊的方式,實現(xiàn)IPSec VPN 流量劫持。一般而言,通過長期的流量分析,VPN 客戶端與服務器網(wǎng)關地址信息較易獲取,但難點在于選擇受害路由、構(gòu)造“觸發(fā)LSA”以及“抗反擊LSA”并以合適的時序發(fā)送。攻擊者在控制目標流量傳輸路徑后,還需要結(jié)合路由控制手段,對目標流量進行轉(zhuǎn)發(fā)以保證攻擊者偽造的數(shù)據(jù)能夠重新發(fā)送出去。
為方便算法描述,本文將IPSec VPN 網(wǎng)絡分為Client 區(qū)域、Server 區(qū)域以及中間區(qū)域3 個部分。以劫 持Client→Server 單向流 量為例,將Client 與Server 之間的中間網(wǎng)絡用有向圖結(jié)構(gòu)進行表示,每一個頂點代表一個網(wǎng)絡節(jié)點,每一條邊代表一條網(wǎng)絡路徑,箭頭代表流向,如圖6 所示。定義(Vi,Si)為中間網(wǎng)絡中的一個網(wǎng)絡節(jié)點,(V0,S0)和(Vn,Sn)分別為Client端至Server端路徑在中間區(qū)域經(jīng)過的第一個和最后一個路由器節(jié)點,其中,(V0,S0)表示中間區(qū)域中第一個入度為1 且所有VPN 流量均為流入的節(jié)點,(Vn,Sn)表示中間區(qū)域中第一個出度為1 且所有VPN 流量均為流出的節(jié)點。
圖6 Client-to-Server 流量劫持模型Fig.6 Client-to-Server traffic hijacking model
選定一條Client→Server 可達路徑Path,按流量經(jīng)過順序標記Path 上所有節(jié)點作為標記節(jié)點集FlagSet{(V0,S0),(V1,i1),…,(Vi,ii),…,(Vn,Sn)},即圖6 中白色虛框節(jié)點。假定攻擊者所控制的路由節(jié)點 為(Vi,ii)(S0
算法1IPSec VPN 流量劫持算法
FlagSet 輸入順序決定了劫持流量的方向,當輸入順序為(Vn,Sn)→(V0,S0),即可影響Server→Client流量。在不考慮LSA 洪泛時間與數(shù)據(jù)庫更新時間的情況下對所有污染節(jié)點進行注入攻擊,即可達到控制流量路徑的目的。
由于無法對IPSec VPN 加密流量直接解密,直接對加密流量進行篡改會引起通信雙方的警覺,因此攻擊者必須進行身份欺騙:對于VPN 客戶端,攻擊者應偽裝成VPN 服務器,發(fā)送偽造的響應數(shù)據(jù)包,對客戶端數(shù)據(jù)請求進行響應,使得攻擊者能夠獲取客戶端加密密鑰;對于VPN 服務器,攻擊者應偽裝成VPN 客戶端,發(fā)送偽造的協(xié)商請求數(shù)據(jù)包,主動與服務器建立連接,實現(xiàn)IPSec VPN 中間人攻擊。
算法2客戶端KEYMAT 密鑰獲取算法
算法2 開啟一個監(jiān)聽進程,對收到的數(shù)據(jù)流中第一條數(shù)據(jù)包進行檢查,判斷其源地址是否為VPN客戶端地址;若不是,則跳出流程,檢查下一條數(shù)據(jù)包,若是,則繼續(xù)執(zhí)行,判斷其端口號是否為500 且Responder SPI 字段是否為0;若不是,則跳出流程,檢查下一條數(shù)據(jù)包,若是,則表明收到客戶端發(fā)來的階段1 的協(xié)商請求數(shù)據(jù)包,對其進行解析并調(diào)用發(fā)包進程,構(gòu)建響應數(shù)據(jù)包respondpacket_1,填入服務器Cookie、隨機數(shù)Nonce、DH 公鑰等關鍵載荷,利用式(3)計算HASH_R 發(fā)送給客戶端,繼續(xù)監(jiān)聽,并利用式(4)~式(6)輸出階段1 的密鑰SKEYID,階段1協(xié)商完畢;檢查下一條數(shù)據(jù)包端口是否為500、Responder SPI 字段不為0 且MessageID 字段也不為0,若不是,則繼續(xù)檢查下一條數(shù)據(jù)包;若是,則表明收到了客戶端階段2 的協(xié)商請求,利用階段1 的密鑰SKEYID,調(diào)用解密進程,解析數(shù)據(jù)包并調(diào)用發(fā)包進程,構(gòu)建響應數(shù)據(jù)包respondpacket_2,利用式(8)計算HASH(2),填入隨機數(shù)、哈希載荷和身份載荷,發(fā)送給客戶端,階段2 協(xié)商完畢;攻擊者獲得VPN 客戶端后續(xù)加密數(shù)據(jù)密鑰KEYMAT,算法結(jié)束。
算法3服務器KEYMAT 密鑰獲取算法
在算法3中,攻擊者利用流量劫持階段獲得的VPN協(xié)商參數(shù),打開監(jiān)聽進程,偽造并發(fā)送協(xié)商請求aggressivepacket_1,對收到的數(shù)據(jù)包進行檢查,判斷源地址是否為服務器地址;若不是,則檢查下一條數(shù)據(jù)包,若是,則判斷端口號是否為500 且CKY_R ≠0;若不是,則檢查下一條數(shù)據(jù)包,若是,則表明收到階段1 的VPN服務器響應回復,提取數(shù)據(jù)包中隨機數(shù)載荷Nonce 和KE 載荷,利用式(4)~式(6)計算并獲得階段1 密鑰SKEYID,利用式(2)計算HASH_I,并構(gòu)造階段1 響應數(shù)據(jù)包aggressivepacket_2;監(jiān)聽下一條數(shù)據(jù)包,構(gòu)造階段2 協(xié)商請求quickpacket_1,通過SKEYID 加密后發(fā)送給VPN 服務器,若收到端口號為500 且CKY_R≠0、MessageID≠0 的數(shù)據(jù)包,表明收到階段2 的VPN 響應數(shù)據(jù)包,利用式(9)計算HASH(3)載荷,構(gòu)造響應回復quickpacket_2 加密后發(fā)送給VPN 服務器,至此階段2協(xié)商完成,攻擊者獲得VPN 服務器后續(xù)加密密鑰KEYMAT,算法結(jié)束。
為驗證IKEv1 中實際存在的脆弱性以及VPN 流量劫持算法、IPSec VPN 密鑰獲取算法的正確性,本文利用GNS3 軟件搭建仿真網(wǎng)絡拓撲模擬跨網(wǎng)段IPSec VPN 環(huán)境并利用Scapy 庫[20]偽造網(wǎng)絡數(shù)據(jù)包。
實驗主要采用以GNS3 軟件[21]搭建的仿真環(huán)境進行驗證,網(wǎng)絡拓撲環(huán)境如圖7 所示,其中R1,R2,…,R11 是思科C3660 路由器,網(wǎng)絡分為客戶端內(nèi)網(wǎng)、服務器內(nèi)網(wǎng)與中間網(wǎng)絡三部分。中間網(wǎng)絡由路由器R1、R2、R3、R4、R5、R6、R8 和R10 組成,配置OSPFv2 協(xié)議。路由器與主機端口IP 地址已在圖7 中標注。路由器接口IP 地址為網(wǎng)絡號加上路由器的標號,如R1 的兩個接口地址為14.1.1.1 和31.1.1.1,R6 的兩個接口地址為36.1.1.6 和65.1.1.6。IPSec VPN 配置:R7 為VPN 客戶端,R9 為VPN 服務器。雙方使用IKEv1 進行協(xié)商,密鑰協(xié)商采用激進模式預共享密鑰認證方式,加密模式為AES-CBC,校驗算法為HMAC-SHA128,密鑰交換使用DH-1 024。PC1 與PC2 分別位于客戶端內(nèi)網(wǎng)與服務器內(nèi)網(wǎng),使用網(wǎng)關路由器R7 與R9 之間建立的IPSec VPN 進行通信。攻擊者配置:攻擊者實際為一臺Ubuntu16系統(tǒng)虛擬機,通過E1/0 端口連接R4 路由,R4 路由為攻擊者可控路由。
圖7 網(wǎng)絡拓撲環(huán)境Fig.7 Network topology environment
3.2.1 IPSec VPN 流量劫持實驗過程
為驗證IPSec VPN 流量劫持算法的有效性,實驗環(huán)境為客戶端與服務器之間配置了兩條鏈路,即R7-R3-R6-R5-R10-R8-R9 與R7-R3-R1-R4-R2-R8-R9。在正常情況下,客戶端與VPN 服務器網(wǎng)關之間的通信流量不一定經(jīng)過R4,也有可能經(jīng)過R5,攻擊者只實現(xiàn)了對R4的控制。利用雙LSA 遠程多注入攻擊方式,使客戶端與VPN 服務器網(wǎng)關之間的流量一定要經(jīng)過R4。攻擊者實現(xiàn)IPSec VPN 流量劫持主要分為路由欺騙、設置轉(zhuǎn)發(fā)規(guī)則和配置策略路由3 個階段。
IPSec VPN 流量劫持的具體步驟如下:
1)攻擊者向R1、R2 注入受害者路由器R5“觸發(fā)LSA”。
2)攻擊者向R1、R2 注入受害者路由器R5“抗反擊LSA”。
3)攻擊者通過R4 添加轉(zhuǎn)發(fā)規(guī)則,將目的地址為服務器網(wǎng)段(160.18.2.0)的數(shù)據(jù)包轉(zhuǎn)發(fā)給攻擊者(180.16.2.2)。
4)攻擊者通過R4 添加轉(zhuǎn)發(fā)規(guī)則,將目的地址為客戶端網(wǎng)段(172.17.2.0)的數(shù)據(jù)包轉(zhuǎn)發(fā)給攻擊者(180.16.2.2)。
5)攻擊者通過R4 在E1/0 端口配置策略路由,目的地址為服務器網(wǎng)段(160.18.2.0)的數(shù)據(jù)包轉(zhuǎn)發(fā)給R2;目的地址為客戶端網(wǎng)段(172.17.2.0)的數(shù)據(jù)包轉(zhuǎn)發(fā)給R1。
6)攻擊者主機打開流量轉(zhuǎn)發(fā)。
步驟1 和步驟2 注入LSA。以污染R1 為例,攻擊者構(gòu)造關于R5 接口地址的“觸發(fā)LSA”發(fā)送給R1,在1 s 后再發(fā)送“抗反擊LSA”。當R5 收到“觸發(fā)LSA”后仍需要5 s 時間才能發(fā)出“自反擊LSA”,因此攻擊者發(fā)送的“抗反擊LSA”有足夠的時間污染R5 的鄰接路由?!翱狗磽鬖SA”加入了固定值與特定校驗和使得能夠與R5 產(chǎn)生的“自反擊LSA”校驗和一致,具體參數(shù)如表1所示。步驟3 和步驟4 對R4 添加路由規(guī)則,將R4 獲取的IPSec VPN 流量轉(zhuǎn)發(fā)給自己,R4 路由規(guī)則如表2 所示。步驟5 和6 對R4 配置策略路由,添加轉(zhuǎn)發(fā)規(guī)則,將IPSec VPN 流量重新轉(zhuǎn)發(fā)出去,如表3 所示。
表1 R5“抗反擊LSA”過程的主要參數(shù)設置Table 1 Setting of main parameters for the process of R5“anti-counterattack LSA”
表2 R4 路由規(guī)則Table 2 Routing rules of R4
表3 R4 策略路由規(guī)則Table 3 Policy routing rules of R4
3.2.2 IPSec VPN 流量劫持實驗結(jié)果分析
實驗結(jié)果包括路由器路由表攻擊前后對比、IPSec VPN 流量路徑攻擊前后對比、真實路由器鏈路狀態(tài)數(shù)據(jù)庫與被污染路由器鏈路狀態(tài)數(shù)據(jù)庫對比。表4 列出了客戶端出口路由R3 路由表項在受到路由欺騙前后的主要參數(shù)設置。
表4 R3 被攻擊前后路由表項的主要參數(shù)設置Table 4 Setting of main parameters of routing table entry of R3 before and after attacking
由表4 可知,R3 路由器不再選擇R5、R6 所在的路徑,轉(zhuǎn)而選擇R4 路由器所在的路徑。攻擊前客戶端網(wǎng)關(R7)與VPN 服務器網(wǎng)關(R9)的流量傳輸路徑如圖8 所示。R7 前往R9 的流量經(jīng)過R3、R6、R5、R10、R8路由器,而R9前往R7的流量傳輸選擇了另外一條R2、R4、R1、R3的路徑。攻擊后R7與R9的流量傳輸路徑如圖9 所示,由于經(jīng)過了中間人轉(zhuǎn)發(fā),因此中間路由沒有完全顯示。
圖8 攻擊前R7 與R9 的流量路徑Fig.8 The traffic path of R7 and R9 before attacking
圖9 攻擊后R7 與R9 的流量路徑Fig.9 The traffic path of R7 and R9 after attacking
攻擊后R5 與R6 保存的關于R5 的LSA 如圖10所示。可以看出,R5 保存的是真實的LSA,而R6 保存的實際上是攻擊者構(gòu)造的“抗反擊LSA”,R6 鏈路狀態(tài)數(shù)據(jù)庫受到污染。
圖10 R5 與R6 保 存 的LSAFig.10 LSA saved by R5 and R6
3.3.1 IPSec VPN 密鑰獲取實驗過程
根據(jù)上文分析可知,攻擊者獲取VPN 通信流量后,通過破解預共享密鑰PSK,中斷流量轉(zhuǎn)發(fā),即可迫使客戶端重新發(fā)送協(xié)商請求。攻擊者運行客戶端攻擊程序,利用Scapy 庫偽造服務器響應數(shù)據(jù)包進行通信。
根據(jù)客戶端KEYMAT 密鑰獲取算法,客戶端攻擊程序需要構(gòu)造并發(fā)送兩個攻擊數(shù)據(jù)包respondpacket_1 與respondpacket_2,并偽裝成服務器與客戶端進行通信。圖11 給出了一個標準的服務器響應數(shù)據(jù)包結(jié)構(gòu)。Scapy 中數(shù)據(jù)包的構(gòu)建遵循網(wǎng)絡協(xié)議分層的思想,并通過參數(shù)化賦值方式將源地址、目的地址、協(xié)議號填入數(shù)據(jù)包IP 頭部,將源端口、目的端口填入數(shù)據(jù)包UDP 頭部。因此,respondpacket_1 的結(jié)構(gòu)為respondpacket_1=IP()/UDP()/ISAKMP()/ISAKMP_payload_SA()/ISAKMP_payload_KE()/ISAKMP_payload_Nonce()/ISAKMP_payload_Hash()/ISAKMP_payload_ID()。結(jié)合數(shù)據(jù)包標準格式并根據(jù)監(jiān)聽獲得的參數(shù)信息,填入respondpacket_1 并進行校驗,最終調(diào)用send 進程進行發(fā)送。在攻擊程序運行完畢后,獲得階段1 密鑰SKEYID 與階段2 密鑰KEYMAT,如圖12 所示。此時,利用Wireshark 輸入KEYMAT 參數(shù)對客戶端發(fā)送的數(shù)據(jù)進行解密,得到的數(shù)據(jù)包如圖13 所示。
圖11 標準數(shù)據(jù)包結(jié)構(gòu)Fig.11 Standard data pack structure
圖12 客戶端攻擊程序運行結(jié)果Fig.12 Running results of client attack program
圖13 客戶端發(fā)送的數(shù)據(jù)包Fig.13 Data pack sent by the client
攻擊者運行服務器攻擊程序,偽造客戶端發(fā)送協(xié)商請求數(shù)據(jù)包,通過服務器方認證,獲得階段1 和階段2 的密鑰SKEYID’與KEYMAT’,如圖14 所示。攻擊者將客戶端發(fā)送的數(shù)據(jù)包進行篡改后,利用KEYMAT’加密后轉(zhuǎn)發(fā)給服務器,服務器收到的實際數(shù)據(jù)如圖15 所示。
圖14 服務器攻擊程序運行結(jié)果Fig.14 Running results of server attack program
圖15 服務器收到的數(shù)據(jù)包Fig.15 Data pack received by the server
3.3.2 IPSec VPN 密鑰獲取實驗結(jié)果分析
實驗結(jié)果表明,攻擊者在IPSec VPN 流量劫持的基礎上實現(xiàn)了對IPSec VPN 客戶端與服務器雙方的身份偽造,通過攻擊程序獲取了客戶端與服務器雙方的通信密鑰。攻擊者利用獲取的客戶端密鑰對客戶端數(shù)據(jù)解密并篡改后通過服務器端密鑰重新加密發(fā)送給服務器,服務器實際收到的是由攻擊者篡改后的數(shù)據(jù)包,至此中間人攻擊完成且通信雙方均未發(fā)現(xiàn)攻擊者。
本文分析IPSec VPN 中IKE 協(xié)議激進模式和OSPF 路由選擇協(xié)議的安全性漏洞,設計IPSec VPN流量劫持算法與KEYMAT 密鑰獲取算法,通過搭建仿真環(huán)境并選取雙LSA 注入路由欺騙攻擊方式,實現(xiàn)跨網(wǎng)段IPSec VPN 中間人攻擊并驗證了IPSec VPN 協(xié)議的脆弱性。下一步可將本文研究成果應用在邊界網(wǎng)絡設備防護和骨干網(wǎng)絡防御任務中,當IPSec VPN 等邊界網(wǎng)絡設備正常連接出現(xiàn)中斷時,快速有效檢測出中斷原因并評估風險等級,以抵御類似的中間人攻擊,而在數(shù)據(jù)傳輸?shù)墓歉删W(wǎng)絡中對于可能存在的路由欺騙攻擊,主動檢測異常的鏈路狀態(tài)通告,找出潛在的攻擊行為,保障骨干路由安全。