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