开放科学(资源服务)标志码(OSID):
互联网安全协议(Internet Protocol Security,IPSec)是由IETF于1998年11月提出的Internet网络安全通信规范,为私有信息通过公网传输提供了安全保障[1]。虚拟专用网络(Virtual Private Network,VPN)可利用廉价接入的公共网络来传输私有数据,相较传统专线连网方式更具成本优势,受到各企业和电信运营商的青睐。IPSec VPN是基于IPSec协议的VPN技术,常用的VPN实现协议包括PPTP、L2TP、IPSec、MPLS和SSL等[2]。从目前所有VPN的实现方式来看,基于IPSec的VPN技术是一种安全性相对较高的VPN技术[3]。IPSec VPN使用IKE协议验证IPSec通信双方身份、建立安全关联(Security Association,SA)以及生成安全密钥。IKE协议对IPSec的安全性至关重要,IKE协议第1版(简称IKEv1)由IETF于1998年发布,并于2005年发布第2版[4]。
虽然IPSec VPN安全性较高[5],但是长期的应用过程中人们已经发现IKEv1存在身份泄露[6]、中间人攻击[7]、拒绝服务攻击[8]等脆弱性问题。文献[9]从理论上分析了IKEv1协议中存在的脆弱性问题,却没有给出具体的实现方案。文献[10]提出一种ARP欺骗实施中间人攻击的方法,在局域网中验证了该方法的可行性,但其不能应用在不同网段的VPN中。文献[11]通过VPN指纹识别技术,获取VPN服务器设备类型与版本信息,但是却没有给出具体的服务器流量获取方法。
本文分析IPSec VPN的安全性漏洞,主要是密钥交换过程中IKE协议存在中间人攻击以及数据传输过程中OSPF路由选择协议存在的路由欺骗攻击,研究三种常规OSPF路由欺骗方式在IPSec VPN中间人攻击中的性能表现,同时构建IPSec VPN流量劫持模型及攻击数据包,并设计实施中间人攻击的IPSec VPN流量劫持与密钥获取算法。
1 IPSec VPN脆弱性分析 1.1 IKEv1协议密钥协商过程脆弱点分析IKEv1协商密钥包括两个阶段:1)对身份进行认证并建立安全关联ISAKMP SA;2)建立IPSec SA,为AH和ESP封装数据包提供服务。
阶段1与阶段2的协商过程如图 1所示。消息①来自客户端,包括ISAKMP数据包首部HDR、安全关联SA、以gxi为参数的DH密钥交换材料KE(gxi)、随机数Ni与身份信息IDii,将其作为第一条信息明文发送给服务器。消息②来自服务器,同样包括首部HDR以及对客户端SA的确认以及自身的密钥材料KE(gxr)、随机数Nr、身份信息IDir与校验值HASH_R。消息③来自客户端,对服务器发送的数据进行HASH校验,如果与自身计算的HASH一致则通过身份认证,并回复一个HASH_I值进行确认。
|
Download:
|
| 图 1 激进模式预共享密钥协商过程 Fig. 1 Process of pre-shared key negotiation in aggressive mode | |
在预共享密钥认证的方式下,密钥SKEYID计算如式(1)所示。消息②中客户端HASH_I计算如式(2)所示。消息③中服务器HASH_R计算如式(3)所示VPN双方共享密钥材料计算如式(4)~式(6)所示。IKEv1阶段1的协商完成,通信双方获得了保护阶段2密钥交换的ISAKMP SA参数。阶段1生成的密钥材料将用于保护阶段2快速模式交换的3条消息,如式(7)~式(9)所示。
| $ \mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{P}\mathrm{S}\mathrm{K}, \mathrm{N}\mathrm{i}\_\mathrm{b}|\mathrm{N}\mathrm{r}\_\mathrm{b}) $ | (1) |
| $ \begin{array}{l}\mathrm{H}\mathrm{A}\mathrm{S}\mathrm{H}\_\mathrm{I}=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}, {g}^{xi}|{g}^{xr}|\\ \;\;\;\;\;\; \;\;\;\;\;\; \mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{I}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{R}|\mathrm{S}\mathrm{A}\mathrm{i}\_\mathrm{b}|\mathrm{I}\mathrm{D}\mathrm{i}\mathrm{i}\_\mathrm{b})\end{array} $ | (2) |
| $ \begin{array}{l}\mathrm{H}\mathrm{A}\mathrm{S}\mathrm{H}\_\mathrm{R}=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}, {g}^{xr}|{g}^{xi}|\\ \;\;\;\;\;\; \;\;\;\;\;\; \mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{R}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{I}|\mathrm{S}\mathrm{A}\mathrm{i}\_\mathrm{b}|\mathrm{I}\mathrm{D}\mathrm{i}\mathrm{r}\_\mathrm{b})\end{array} $ | (3) |
| $ \mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}\_\mathrm{d}=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}, {g}^{xy}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{I}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{R}|0) $ | (4) |
| $ \mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}\_\mathrm{a}=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}, {g}^{xy}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{I}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{R}|1) $ | (5) |
| $ \mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}\_\mathrm{e}=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}, {g}^{xy}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{I}|\mathrm{C}\mathrm{K}\mathrm{Y}\_\mathrm{R}|2) $ | (6) |
| $ \mathrm{H}\mathrm{A}\mathrm{S}\mathrm{H}\left(1\right)=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}\_\mathrm{a}, \mathrm{M}\mathrm{‑}\mathrm{N}\mathrm{i}[\left|\mathrm{K}\mathrm{E}\right]\left[\right|\mathrm{I}\mathrm{D}\mathrm{c}\mathrm{i}\left|\mathrm{I}\mathrm{D}\mathrm{c}\mathrm{r}\right]) $ | (7) |
| $ \begin{array}{l}\mathrm{H}\mathrm{A}\mathrm{S}\mathrm{H}\left(2\right)=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}\_\mathrm{a}, \mathrm{M}\mathrm{‑}\mathrm{I}\mathrm{D}|\mathrm{N}\mathrm{i}\_\mathrm{b}|\\ \;\;\;\;\;\; \;\;\;\;\;\; \mathrm{S}\mathrm{A}\left|\mathrm{N}\mathrm{r}\right[\left|\mathrm{K}\mathrm{E}\right]\left[\right|\mathrm{I}\mathrm{D}\mathrm{c}\mathrm{i}\left|\mathrm{I}\mathrm{D}\mathrm{c}\mathrm{r}\right])\end{array} $ | (8) |
| $ \mathrm{H}\mathrm{A}\mathrm{S}\mathrm{H}\left(3\right)=\mathrm{p}\mathrm{r}\mathrm{f}(\mathrm{S}\mathrm{K}\mathrm{E}\mathrm{Y}\mathrm{I}\mathrm{D}\_\mathrm{a}, \mathrm{M}\mathrm{‑}\mathrm{I}\mathrm{D}|\mathrm{N}\mathrm{i}\_\mathrm{b}|\mathrm{N}\mathrm{r}\_\mathrm{b}) $ | (9) |
其中,PSK表示预共享密钥,gxy表示由gxi和gxr生成的DH共享密钥,< P > _b表示 < P > 有效载荷部分,如Ni_b表示随机数Ni的有效载荷部分,CKY_I、CKY_R分别表示客户端与服务器数据包首部HDR中的Cookie信息,M-ID表示数据包中ID字段,[]中参数为可选参数,非强制使用。
在阶段2协商过程中,消息④来自客户端,包括ISAKMP报头和IPSec SA有效负载,SA包含数据传输的所有提议和变换。在客户端和服务器之间将交换一个新的临时值Ni。消息⑤由服务器发送给客户端,其中包含ISAKMP报头以及选定的SA,临时值Nr和HASH(2)对消息④进行确认。消息⑥来自客户端,由客户端对服务器存在性进行验证并发送HASH(3)。以上3条消息均使用SKEYID_e进行加密。在不需要PFS交换的情况下,后续密钥材料为KEYMAT=prf(SKEYID_d,protocol|SPI|Ni_b|Nr_b),至此IKEv1阶段2的密钥协商完成,通信双方计算出后续数据加密使用的密钥材料KEYMAT,用于加密数据传输。
在上述协商过程中,由于消息1与消息2均使用明文发送,因此攻击者在实现IPSec VPN流量劫持的基础上,通过分析密钥协商阶段数据可以得到VPN通信双方的身份信息以及除了预共享密钥PSK以外的所有VPN密钥协商参数,预共享密钥PSK可通过式(1)、式(3)结合口令字典暴力破解得出。阶段1协商过程采用的Diffie-Hellman密钥交换体制决定了中间人实施攻击存在的可能性。因此,只要攻击者破解了预共享密钥PSK,再通过伪造客户端与服务器双方的身份认证信息,攻击者就可分别与客户端、服务器尝试进行密钥协商,以实现IPSec VPN中间人攻击的目的。因此,实现IPSec VPN流量劫持是进行中间人攻击的前提条件。
1.2 OSPF协议路由欺骗流量劫持分析路由选择协议在因特网中决定着数据分组的转发路径,保证了分组能够跨越网络正确高效地到达目的地。OSPF路由协议是因特网自治系统中最常用的内部网关协议之一[12]。OSPF是一种典型的链路状态路由选择协议,路由器通过链路状态通告(Link State Advertisement,LSA)在链路状态发生变化时广播链路状态信息。相邻路由器之间交换LSA分组,所有有效的LSA存放在链路状态数据库中,路由器据此计算网络拓扑信息并得到路由表[13]。因此,在LSA上路由信息的准确性与真实性对于数据流量的转发至关重要。
路由欺骗是一种利用协议漏洞伪造LSA篡改路由信息的攻击方法。路由欺骗[14]攻击主要有双LSA攻击、邻接欺骗攻击、单路径注入攻击、远程虚假链接等。邻接路由欺骗常应用在中间人攻击[15]、DNS欺骗攻击[16]、拒绝服务攻击[17]等中,攻击者通过与网络中路由器建立邻接关系,配置OSPF协议,触发相应的恶意LSA,通过洪泛机制传播给网络中其他路由,欺骗区域中其他路由器,污染其路由表,干扰流量的正常转发[18]。然而,对于IPSec VPN中间人攻击,邻接路由欺骗虽然仅起到了流量劫持的效果,但却会影响攻击者后续密钥获取、数据篡改的实现。IPSec VPN邻接路由欺骗过程如图 2所示。当攻击者通过与未设被动接口的R0路由器建立邻接关系后,接入R0路由器所在的OSPF区域,以内部路由器身份注入一条关于VPN服务器网段地址的恶意LSA,R0收到这条消息后更新其路由表并宣告给其他邻接路由器,结合洪泛机制,整个路由区域内大范围路由器的路由表都将受到污染,当区域中存在客户端发往VPN服务器通信数据时,攻击者将获取到客户端发往服务器的信息。然而,若攻击者与服务器之间不存在除R0外的其他线路,那么当攻击者通过R0向真实的VPN服务器发送数据时,由于其邻接路由器路由表也被篡改,因此数据并不会成功的发送到服务器,从而影响后续攻击。
|
Download:
|
| 图 2 IPSec VPN邻接路由欺骗过程 Fig. 2 Process of IPSec VPN adjacent routing spoofing | |
IPSec VPN单路径注入攻击过程如图 3所示。攻击者将R0路由器作为跳板路由,伪造源地址为F0/1的数据包,冒充R0路由器,发送包含关于服务器网段路由信息的恶意LSA给R1,R1称为源污染路由器,R1收到该LSA之后,会将这些恶意的LSA继续洪泛出去,使得区域1内部路由器路由表、链路状态数据库均受到污染,前往服务器网段的数据包会转发给R0。由于该恶意LSA是攻击者伪造的,因此当R0收到R1发回的LSAck包之后,若仅采取丢弃处理,则不会引起自反击机制,这样保证了区域2中路由器关于服务器路由地址的正确性,不影响后续攻击者对服务器方向数据的发送。然而,单路径注入攻击的条件在于跳板主机与源污染路由器之间只能存在一条路径,使得恶意LSA不会再次通过其他区域传播到跳板路由。因此,采用单路径注入攻击的方式进行路由欺骗,仅适用于可将客户端与服务器划分为两个区域,区域之间有且仅有一条路径连通的情况。双LSA远程多注入是一种通过改变相关路径上的路由器LSA,达到对中间流量传输路径进行控制的攻击方式[19],IPSec VPN双LSA远程多注入攻击过程如图 4所示。
|
Download:
|
| 图 3 IPSec VPN单路径注入攻击过程 Fig. 3 Process of IPSec VPN single path injection attack | |
|
Download:
|
| 图 4 IPSec VPN双LSA远程多注入攻击过程 Fig. 4 Process of IPSec VPN dual LSA remote multiple injection attack | |
OSPF协议规定两个具有相同序列号、校验和且时间差小于15 min的LSA为相同的LSA。假定攻击者通过与网络中的路由器(图 4中的R0)建立邻接关系,获取到网络拓扑与OSPF相关参数,那么双LSA注入攻击就可利用该机制进行构造,并以一定时序在网络中发送关于某一个污染节点(也称受害路由器)(图 4中的R3)的“触发LSA”与“抗反击LSA”,双LSA注入攻击过程如图 5所示。
|
Download:
|
| 图 5 双LSA注入攻击过程 Fig. 5 Process of dual LSA injection attack | |
攻击者于t0时刻发生“触发LSA”,“触发LSA”在传播到受害者路由器(R3)之前会影响所经过的路由器(图 5中的R1和R2),当“触发LSA”经过洪泛于t1时刻到达受害者路由器时,受害者路由器于t3时刻会触发自反击机制,发送一个更新的“自反击LSA”,然而由于攻击者事先构造了关于该更新LSA的具有相同序列号、校验和且时间差小于15 min的“抗反击LSA”并已于t2时刻传播给其他路由器,此时其他路由再收到该受害路由器更新的LSA之后,会认为与“抗反击LSA”相同而丢弃,导致网络中数据链路状态数据库发生改变,达到控制中间流量传输路径的效果。因此,采用双LSA远程多注入的攻击方式,适用于客户端与服务器之间存在两条及以上链路的情况。本文对上述3种路由欺骗方式在IPSec VPN中间人攻击中的优劣势进行对比分析:1)邻接路由欺骗,控制流量传输路径、攻击者获取目标流量,影响范围大且攻击方式简单,但难以控制欺骗范围并影响后续攻击;2)单路径注入攻击,控制流量传输路径,容易控制欺骗范围,适用于目标网络之间仅存在唯一链路的情况;3)双LSA注入攻击,控制流量传输路径,适用于目标网络之间存在多条链路的情况,攻击者需要获取OSPF网络相关参数。
本文选用双LSA注入攻击的方式,实现IPSec VPN流量劫持。一般而言,通过长期的流量分析,VPN客户端与服务器网关地址信息较易获取,但难点在于选择受害路由、构造“触发LSA”以及“抗反击LSA”并以合适的时序发送。攻击者在控制目标流量传输路径后,还需要结合路由控制手段,对目标流量进行转发以保证攻击者伪造的数据能够重新发送出去。
2 算法设计 2.1 IPSec VPN流量劫持算法为方便算法描述,本文将IPSec VPN网络分为Client区域、Server区域以及中间区域3个部分。以劫持Client→Server单向流量为例,将Client与Server之间的中间网络用有向图结构进行表示,每一个顶点代表一个网络节点,每一条边代表一条网络路径,箭头代表流向,如图 6所示。定义(Vi,Si)为中间网络中的一个网络节点,(V0,S0)和(Vn,Sn)分别为Client端至Server端路径在中间区域经过的第一个和最后一个路由器节点,其中,(V0,S0)表示中间区域中第一个入度为1且所有VPN流量均为流入的节点,(Vn,Sn)表示中间区域中第一个出度为1且所有VPN流量均为流出的节点。
|
Download:
|
| 图 6 Client-to-Server流量劫持模型 Fig. 6 Client-to-Server traffic hijacking model | |
选定一条Client→Server可达路径Path,按流量经过顺序标记Path上所有节点作为标记节点集FlagSet{(V0,S0),(V1,i1),…,(Vi,ii),…,(Vn,Sn)},即图 6中白色虚框节点。假定攻击者所控制的路由节点为(Vi,ii)(S0 < i < Sn),那么当Client→Server流量流经
算法1 IPSec VPN流量劫持算法
输入 中间网络拓扑Map、标记路径节点集合FlagSet
输出 污染节点集合PoisionSet
1.CurrentNode←FlagSet(1);
//将第一个标记节点作为当前节点
2.while CurrentNode ≠ FlagSet(end)
//如果当前节点没有到最后一个已标记节点
3.outAdjSet=GetoutAdjSet(CurrentNode);
//当前节点的所有出度节点放进outAdjSet集合中
4.for i←1 to Sizeof(outAdjSet)do
5.if outAdjSet(i)
6.PoisionSet←outAdjSet(i);
//表明是分支路径,需要将其污染
7.else
8.CurrentNode←outAdjSet(i);
//移动到下一个标记节点
9.end if
10.end for
11.end while
12.Output(PoisionSet);
FlagSet输入顺序决定了劫持流量的方向,当输入顺序为(Vn,Sn)→(V0,S0),即可影响Server→Client流量。在不考虑LSA洪泛时间与数据库更新时间的情况下对所有污染节点进行注入攻击,即可达到控制流量路径的目的。
2.2 客户端KEYMAT密钥获取算法由于无法对IPSec VPN加密流量直接解密,直接对加密流量进行篡改会引起通信双方的警觉,因此攻击者必须进行身份欺骗:对于VPN客户端,攻击者应伪装成VPN服务器,发送伪造的响应数据包,对客户端数据请求进行响应,使得攻击者能够获取客户端加密密钥;对于VPN服务器,攻击者应伪装成VPN客户端,发送伪造的协商请求数据包,主动与服务器建立连接,实现IPSec VPN中间人攻击。
算法2 客户端KEYMAT密钥获取算法
输入 packet数据流
输出 客户端密钥KEYMAT
1.sniffing //打开监听进程
2.for packets do
3.if packet.src=VPN客户端
4.if port=500 and CKY_R=0 then
//判断是否为阶段1的VPN协商请求
5.send respondpacket_1
6.continue
//阶段1协商完毕
7.else if port=500 and CKY_R≠0 and MessageID≠0 then
//判断是否为阶段2的VPN协商请求
8.send respondpacket_2
//发送阶段2响应数据包
9.return客户端密钥KEYMAT
10.end if
11.end if
12.end for
算法2开启一个监听进程,对收到的数据流中第一条数据包进行检查,判断其源地址是否为VPN客户端地址;若不是,则跳出流程,检查下一条数据包,若是,则继续执行,判断其端口号是否为500且Responder SPI字段是否为0;若不是,则跳出流程,检查下一条数据包,若是,则表明收到客户端发来的阶段1的协商请求数据包,对其进行解析并调用发包进程,构建响应数据包respondpacket_1,填入服务器Cookie、随机数Nonce、DH公钥等关键载荷,利用式(3)计算HASH_R发送给客户端,继续监听,并利用式(4)~式(6)输出阶段1的密钥SKEYID,阶段1协商完毕;检查下一条数据包端口是否为500、Responder SPI字段不为0且MessageID字段也不为0,若不是,则继续检查下一条数据包;若是,则表明收到了客户端阶段2的协商请求,利用阶段1的密钥SKEYID,调用解密进程,解析数据包并调用发包进程,构建响应数据包respondpacket_2,利用式(8)计算HASH(2),填入随机数、哈希载荷和身份载荷,发送给客户端,阶段2协商完毕;攻击者获得VPN客户端后续加密数据密钥KEYMAT,算法结束。
2.3 服务器KEYMAT密钥获取算法算法3 服务器KEYMAT密钥获取算法
输入 伪造的协商请求aggressivepacket_1、packet数据流
输出 服务器密钥KEYMAT’
1.sniffing and send aggressivepacket_1
2.for packets do
3.if packet.src=VPN服务器
4.if port=500 and CKY_R≠0 then
//判断是否为阶段1的VPN服务器响应回复
5.send aggressivepacket_2
//发送回复响应数据包,完成阶段1的协商请求
6.send quickpacket_1
//发送阶段2的第一个数据包,进入快速模式协商阶段
7.continue
8.end if
9.if port=500 and CKY_R≠0 and MessageID≠0 then
//判断是否收到阶段2的VPN服务器响应数据包
10.send quickpacket_2
//响应服务器阶段2的数据包,完成快速模式认证
11.return服务器密钥KEYMAT’
12.end if
13.end if
14.end for
在算法3中,攻击者利用流量劫持阶段获得的VPN协商参数,打开监听进程,伪造并发送协商请求aggressivepacket_1,对收到的数据包进行检查,判断源地址是否为服务器地址;若不是,则检查下一条数据包,若是,则判断端口号是否为500且CKY_R ≠0;若不是,则检查下一条数据包,若是,则表明收到阶段1的VPN服务器响应回复,提取数据包中随机数载荷Nonce和KE载荷,利用式(4)~式(6)计算并获得阶段1密钥SKEYID,利用式(2)计算HASH_I,并构造阶段1响应数据包aggressivepacket_2;监听下一条数据包,构造阶段2协商请求quickpacket_1,通过SKEYID加密后发送给VPN服务器,若收到端口号为500且CKY_R≠0、MessageID≠0的数据包,表明收到阶段2的VPN响应数据包,利用式(9)计算HASH(3)载荷,构造响应回复quickpacket_2加密后发送给VPN服务器,至此阶段2协商完成,攻击者获得VPN服务器后续加密密钥KEYMAT,算法结束。
3 实验与结果分析为验证IKEv1中实际存在的脆弱性以及VPN流量劫持算法、IPSec VPN密钥获取算法的正确性,本文利用GNS3软件搭建仿真网络拓扑模拟跨网段IPSec VPN环境并利用Scapy库[20]伪造网络数据包。
3.1 实验环境实验主要采用以GNS3软件[21]搭建的仿真环境进行验证,网络拓扑环境如图 7所示,其中R1,R2,…,R11是思科C3660路由器,网络分为客户端内网、服务器内网与中间网络三部分。中间网络由路由器R1、R2、R3、R4、R5、R6、R8和R10组成,配置OSPFv2协议。路由器与主机端口IP地址已在图 7中标注。路由器接口IP地址为网络号加上路由器的标号,如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进行协商,密钥协商采用激进模式预共享密钥认证方式,加密模式为AES-CBC,校验算法为HMAC-SHA128,密钥交换使用DH-1 024。PC1与PC2分别位于客户端内网与服务器内网,使用网关路由器R7与R9之间建立的IPSec VPN进行通信。攻击者配置:攻击者实际为一台Ubuntu16系统虚拟机,通过E1/0端口连接R4路由,R4路由为攻击者可控路由。
|
Download:
|
| 图 7 网络拓扑环境 Fig. 7 Network topology environment | |
为验证IPSec VPN流量劫持算法的有效性,实验环境为客户端与服务器之间配置了两条链路,即R7-R3-R6-R5-R10-R8-R9与R7-R3-R1-R4-R2-R8-R9。在正常情况下,客户端与VPN服务器网关之间的通信流量不一定经过R4,也有可能经过R5,攻击者只实现了对R4的控制。利用双LSA远程多注入攻击方式,使客户端与VPN服务器网关之间的流量一定要经过R4。攻击者实现IPSec VPN流量劫持主要分为路由欺骗、设置转发规则和配置策略路由3个阶段。
IPSec VPN流量劫持的具体步骤如下:
1)攻击者向R1、R2注入受害者路由器R5“触发LSA”。
2)攻击者向R1、R2注入受害者路由器R5“抗反击LSA”。
3)攻击者通过R4添加转发规则,将目的地址为服务器网段(160.18.2.0)的数据包转发给攻击者(180.16.2.2)。
4)攻击者通过R4添加转发规则,将目的地址为客户端网段(172.17.2.0)的数据包转发给攻击者(180.16.2.2)。
5)攻击者通过R4在E1/0端口配置策略路由,目的地址为服务器网段(160.18.2.0)的数据包转发给R2;目的地址为客户端网段(172.17.2.0)的数据包转发给R1。
6)攻击者主机打开流量转发。
步骤1和步骤2注入LSA。以污染R1为例,攻击者构造关于R5接口地址的“触发LSA”发送给R1,在1 s后再发送“抗反击LSA”。当R5收到“触发LSA”后仍需要5 s时间才能发出“自反击LSA”,因此攻击者发送的“抗反击LSA”有足够的时间污染R5的邻接路由。“抗反击LSA”加入了固定值与特定校验和使得能够与R5产生的“自反击LSA”校验和一致,具体参数如表 1所示。步骤3和步骤4对R4添加路由规则,将R4获取的IPSec VPN流量转发给自己,R4路由规则如表 2所示。步骤5和6对R4配置策略路由,添加转发规则,将IPSec VPN流量重新转发出去,如表 3所示。
|
下载CSV 表 1 R5 “抗反击LSA”过程的主要参数设置 Table 1 Setting of main parameters for the process of R5 "anti-counterattack LSA" |
|
下载CSV 表 2 R4路由规则 Table 2 Routing rules of R4 |
|
下载CSV 表 3 R4策略路由规则 Table 3 Policy routing rules of R4 |
实验结果包括路由器路由表攻击前后对比、IPSec VPN流量路径攻击前后对比、真实路由器链路状态数据库与被污染路由器链路状态数据库对比。表 4列出了客户端出口路由R3路由表项在受到路由欺骗前后的主要参数设置。
|
下载CSV 表 4 R3被攻击前后路由表项的主要参数设置 Table 4 Setting of main parameters of routing table entry of R3 before and after attacking |
由表 4可知,R3路由器不再选择R5、R6所在的路径,转而选择R4路由器所在的路径。攻击前客户端网关(R7)与VPN服务器网关(R9)的流量传输路径如图 8所示。R7前往R9的流量经过R3、R6、R5、R10、R8路由器,而R9前往R7的流量传输选择了另外一条R2、R4、R1、R3的路径。攻击后R7与R9的流量传输路径如图 9所示,由于经过了中间人转发,因此中间路由没有完全显示。
|
Download:
|
| 图 8 攻击前R7与R9的流量路径 Fig. 8 The traffic path of R7 and R9 before attacking | |
|
Download:
|
| 图 9 攻击后R7与R9的流量路径 Fig. 9 The traffic path of R7 and R9 after attacking | |
攻击后R5与R6保存的关于R5的LSA如图 10所示。可以看出,R5保存的是真实的LSA,而R6保存的实际上是攻击者构造的“抗反击LSA”,R6链路状态数据库受到污染。
|
Download:
|
| 图 10 R5与R6保存的LSA Fig. 10 LSA saved by R5 and R6 | |
根据上文分析可知,攻击者获取VPN通信流量后,通过破解预共享密钥PSK,中断流量转发,即可迫使客户端重新发送协商请求。攻击者运行客户端攻击程序,利用Scapy库伪造服务器响应数据包进行通信。
根据客户端KEYMAT密钥获取算法,客户端攻击程序需要构造并发送两个攻击数据包respondpacket_1与respondpacket_2,并伪装成服务器与客户端进行通信。图 11给出了一个标准的服务器响应数据包结构。Scapy中数据包的构建遵循网络协议分层的思想,并通过参数化赋值方式将源地址、目的地址、协议号填入数据包IP头部,将源端口、目的端口填入数据包UDP头部。因此,respondpacket_1的结构为respondpacket_1=IP()/UDP()/ISAKMP()/ISAKMP_payload_SA()/ISAKMP_payload_KE()/ISAKMP_payload_Nonce()/ISAKMP_payload_Hash()/ISAKMP_payload_ID()。结合数据包标准格式并根据监听获得的参数信息,填入respondpacket_1并进行校验,最终调用send进程进行发送。在攻击程序运行完毕后,获得阶段1密钥SKEYID与阶段2密钥KEYMAT,如图 12所示。此时,利用Wireshark输入KEYMAT参数对客户端发送的数据进行解密,得到的数据包如图 13所示。
|
Download:
|
| 图 11 标准数据包结构 Fig. 11 Standard data pack structure | |
|
Download:
|
| 图 12 客户端攻击程序运行结果 Fig. 12 Running results of client attack program | |
|
Download:
|
| 图 13 客户端发送的数据包 Fig. 13 Data pack sent by the client | |
攻击者运行服务器攻击程序,伪造客户端发送协商请求数据包,通过服务器方认证,获得阶段1和阶段2的密钥SKEYID’与KEYMAT’,如图 14所示。攻击者将客户端发送的数据包进行篡改后,利用KEYMAT’加密后转发给服务器,服务器收到的实际数据如图 15所示。
|
Download:
|
| 图 14 服务器攻击程序运行结果 Fig. 14 Running results of server attack program | |
|
Download:
|
| 图 15 服务器收到的数据包 Fig. 15 Data pack received by the server | |
实验结果表明,攻击者在IPSec VPN流量劫持的基础上实现了对IPSec VPN客户端与服务器双方的身份伪造,通过攻击程序获取了客户端与服务器双方的通信密钥。攻击者利用获取的客户端密钥对客户端数据解密并篡改后通过服务器端密钥重新加密发送给服务器,服务器实际收到的是由攻击者篡改后的数据包,至此中间人攻击完成且通信双方均未发现攻击者。
4 结束语本文分析IPSec VPN中IKE协议激进模式和OSPF路由选择协议的安全性漏洞,设计IPSec VPN流量劫持算法与KEYMAT密钥获取算法,通过搭建仿真环境并选取双LSA注入路由欺骗攻击方式,实现跨网段IPSec VPN中间人攻击并验证了IPSec VPN协议的脆弱性。下一步可将本文研究成果应用在边界网络设备防护和骨干网络防御任务中,当IPSec VPN等边界网络设备正常连接出现中断时,快速有效检测出中断原因并评估风险等级,以抵御类似的中间人攻击,而在数据传输的骨干网络中对于可能存在的路由欺骗攻击,主动检测异常的链路状态通告,找出潜在的攻击行为,保障骨干路由安全。
| [1] |
WANG Fengling. Study on application of VPN technology based on IPSec[J]. Computer Technology and Development, 2012, 22(9): 250-252. (in Chinese) 王凤领. 基于IPSec的VPN技术的应用研究[J]. 计算机技术与发展, 2012, 22(9): 250-252. |
| [2] |
XU Min. VPN technology overview and application[J]. Information Communication, 2013(10): 260-261. (in Chinese) 许敏. VPN技术综述及应用[J]. 信息通信, 2013(10): 260-261. |
| [3] |
XU Xijie. Research on key technology in the VRN penetrate-defense[D]. Harbin: Harbin Engineering University, 2012. (in Chinese) 徐希杰. 基于中间人的VPN穿透对抗关键技术研究[D]. 哈尔滨: 哈尔滨工程大学, 2012. |
| [4] |
SCHILLER J. Cryptographic algorithms for use in the Internet Key Exchange version 2(IKEv2): RFC 4307[S]. Massachusetts Institute of Technology, 2005: 1-5.
|
| [5] |
FELSCH D, GROTHE M, JÖRG S, et al. The dangers of key reuse: practical attacks on IPsec IKE[C]//Proceedings of USENIX Security Symposium. [S.l.]: USENIX Press, 2018: 567-583.
|
| [6] |
LIU Dongxi, ZHANG Long, BAI Yingcai. Two modifications on IKE protocol with pre-shared key authentication[J]. Journal of Shanghai Jiaotong University, 2003, E-8(2): 142-145. |
| [7] |
PATERSON K G. A cryptographic tour of the IPsec standards[J]. Information Security Technical Report, 2006, 11(2): 72-81. DOI:10.1016/j.istr.2006.03.004 |
| [8] |
ZHAO Erfan, XIONG Gang. Reflective denial-of-service based on IKEv2 protocol[J]. Communications Technology, 2019, 52(2): 444-448. 赵尔凡, 熊刚. 基于IKEv2反射式拒绝服务研究[J]. 通信技术, 2019, 52(2): 444-448. DOI:10.3969/j.issn.1002-0802.2019.02.031 |
| [9] |
ZHOU Meng, BAI Jianrong. Analysis to man-in-the-middle attack for IKEvl on the aggressive mode[J]. Journal of University of Electronic Science and Technology of China, 2010, 39(1): 97-100, 151. (in Chinese) 周梦, 白建荣. 激进模式下对IKEv1的中间人攻击分析[J]. 电子科技大学学报, 2010, 39(1): 97-100, 151. |
| [10] |
ZHANG Weile, YU Yang, TANG Jun, et al. Analyses of security flaws of IKE and test[J]. Computer Engineering and Design, 2007, 28(12): 2811-2813. (in Chinese) 张卫乐, 余洋, 汤隽, 等. IKE协议安全隐患分析与验证[J]. 计算机工程与设计, 2007, 28(12): 2811-2813. DOI:10.3969/j.issn.1000-7024.2007.12.016 |
| [11] |
KANG B H, BALITANAS M O. Vulnerabilities of VPN using IPSec and defensive measures[J]. International Journal of ADVANCED SCIENCE and Technology, 2009, 8(7): 9-18. |
| [12] |
MAGNANI D B, CARVALHO I A, NORONHA T F. Robust optimization for OSPF routing[J]. IFAC Papers on Line, 2016, 49(12): 461-466. DOI:10.1016/j.ifacol.2016.07.654 |
| [13] |
CARIA M, JUKAN A. Link capacity planning for fault tolerant operation in hybrid SDN/OSPF networks[EB/OL]. [2020-04-02]. https://arxiv.org/abs/1604.05534.
|
| [14] |
XIA Yunfeng. Analysis of routing spoofing based on OSPF routing protocol[D]. Nanjing: Southeast University, 2014. (in Chinese) 夏云峰. 基于OSPF路由协议的路由欺骗分析[D]. 南京: 东南大学, 2014 |
| [15] |
GUO Weixing, LIU Xu, WU Hao. MITM attack detection method based on ARP cache overtime[J]. Computer Engineering, 2008, 34(13): 133-135. (in Chinese) 郭卫兴, 刘旭, 吴灏. 基于ARP缓存超时的中间人攻击检测方法[J]. 计算机工程, 2008, 34(13): 133-135. DOI:10.3969/j.issn.1000-3428.2008.13.048 |
| [16] |
KONG Zheng, JIANG Xiuzhu. DNS spoofing principle and its defense scheme[J]. Computer Engineering, 2010, 36(3): 125-127. (in Chinese) 孔政, 姜秀柱. DNS欺骗原理及其防御方案[J]. 计算机工程, 2010, 36(3): 125-127. |
| [17] |
QIN Zunying, LI Guodong, LI Wei. Design and implemen-tation of OSPF protocol vulnerability analysis and detection system[J]. Journal of Communications, 2013, 34(S2): 58-63. (in Chinese) 覃遵颖, 李国栋, 李卫. OSPF协议脆弱性分析与检测系统的设计和实现[J]. 通信学报, 2013, 34(S2): 58-63. |
| [18] |
LI Pengfei, CHEN Ming, QIAN Hongyan. ARSAO: a general detection and defense mechanism against routing spoofing attacks on OSPF protocol[J]. Computer Technology and Development, 2019, 29(10): 120-126. (in Chinese) 李鹏飞, 陈鸣, 钱红燕. ARSAO: 一种通用的检测与防御OSPF路由欺骗的机制[J]. 计算机技术与发展, 2019, 29(10): 120-126. DOI:10.3969/j.issn.1673-629X.2019.10.025 |
| [19] |
NAKIBLY G, KIRSHON A, GONIKMAN D, et al.Persistent OSPF attacks[EB/OL].[2020-04-02].https://www.docin.com/p-717369563.html.
|
| [20] |
LI Zhaobin, MAO Fangyi, WANG Yaojun, et al. The application of Scapy in network equipment security test[J]. Journal of Beijing Institute of Electronic Science and Technology, 2016, 24(4): 73-77. (in Chinese) 李兆斌, 茅方毅, 王瑶君, 等. Scapy在网络设备安全性测试中的应用[J]. 北京电子科技学院学报, 2016, 24(4): 73-77. DOI:10.3969/j.issn.1672-464X.2016.04.013 |
| [21] |
HAO Xianyun. Simulation of RIP routing based on GNS3[J]. Research and Exploration in Laboratory, 2019, 38(7): 124-129, 166. (in Chinese) 郝贤云. 基于GNS3的RIP路由协议仿真[J]. 实验室研究与探索, 2019, 38(7): 124-129, 166. DOI:10.3969/j.issn.1006-7167.2019.07.029 |
2021, Vol. 47
