李鹏飞,陈 鸣,钱红燕
(南京航空航天大学 计算机科学与技术学院,江苏 南京 211106)
路由选择协议对于因特网至关重要,决定着数据分组的转发路径,保证了分组能够跨越网络正确、高效地到达目的地。开放式最短路径优先(open shortest path first,OSPF)路由协议[1-2]是因特网自治系统中最常用的内部网关协议之一,尽管有一定的安全保护措施,OSPF仍受到许多攻击者的觊觎[3-4]。
OSPF是一种典型的链路状态路由选择协议,每当链路的状态发生变化(如开销的变化或连接/中断状态的变化)或经过一定时间,路由器就会利用链路状态通告(link state advertisement,LSA)广播链路状态信息。LSA是描述网络拓扑的分组,记录相邻路由器信息,在相邻路由器中交换[5-6],所有有效的LSA会被存放在链路状态数据库中,路由器根据链路状态数据库计算得到路由表。因此,LSA上的路由信息的真实性和准确性至关重要,一旦被篡改,虚假的路由将会导致整个网络陷于混乱。路由欺骗[7-11]是一种利用协议漏洞伪造LSA篡改路由信息的攻击方法。一旦攻击者实施路由欺骗攻击,会严重影响网络的安全,造成分组无法到达目的地、路由环路、流量黑洞、网络瘫痪等严重后果。而路由选择中的洪泛机制会进一步增强路由欺骗攻击的破坏力[12]。此机制虽然在功能上是必要的,但同时会在整个网络中洪泛虚假的LSA,导致大面积的路由污染[13]。
文中通过对目前已存在的多种OSPF路由欺骗攻击进行分析和分类,提出了有针对性的检测算法;设计了一种通用的检测和防御系统,基于网络功能虚拟化(NFV)实现了原型系统,并通过实验证明了该系统和相关技术的有效性。
目前为止,针对攻击方法的研究,主要在于新型路由欺骗攻击的发现。文献[7]提出了一种新型的路由欺骗攻击,利用协议处理LSA头部时,不检查链路状态ID和路由器标识的一致性,成功躲过反击机制,同时该文献还提出了三种预防的方法。文献[8]发现了两种逃避反击机制的新攻击,分别为邻接欺骗攻击和单路径攻击。文献[9-10]发现了两种危害性很大的路由欺骗攻击,分别为双LSA注入攻击和远程邻接攻击。文献[11]在双LSA注入攻击的基础上提出了双LSA远程多注入攻击。这些文献提出的路由欺骗攻击都是利用了协议缺陷或者漏洞,逃避反击机制对路由器进行攻击。
关于OSPF协议安全性的研究主要集中在攻击分析、消耗资源类攻击的检测以及防范。文献[14]提出一种冗余的网络系统架构,降低LSA伪造攻击对网络的影响,提高OSPF网络系统的生存能力。文献[15]设计一种模型来分析验证OSPF协议中关键漏洞的存在,并通过此方法提出并验证了一个新漏洞。文献[16]引入了一种渗透工具来检查OSPF口令强度,增加网络的安全性,但该工具受到了路由器硬件和操作系统版本的限制。文献[17]对OSPF协议进行安全性分析,并建议将基于软件包分析的入侵检测功能加入规范。文献[18]利用路由器嵌入的TPM模块和内部的动态度量模块防止遭受操作系统层面的入侵,利用系统处理攻击报文的流程来判断是否受到最大年龄攻击等三种攻击。该方法将整个系统存在于路由器内部,能够经济有效地检测这三种攻击。文献[19]设计了一个通用、多模式的OSPF协议脆弱性检测系统,利用网络受到资源消耗攻击时,CPU满载无法处理SNMP(simple network management protocol )请求的特点,采用SNMP和旁路监听相结合的方法实现检测结果的实时监控,有效地检测出消耗资源类的攻击。
网络功能虚拟化(network functions virtualization,NFV)[20]是一种利用通用硬件以及虚拟化技术,承载多种功能的软件来代替传统硬件,实现各种网络功能或网络设备的技术。通过NFV技术,使网络功能不再依赖专用硬件,减少了网络设备的成本,实现网络新业务的快速开发与部署,为网络发展注入新的动力。
表1列出了目前主要欺骗方法的特点。通过进一步分析发现,当欺骗攻击不引起反击机制时,尽管欺骗攻击的原理不同,但有着以下的共同特性,且与网络拓扑无关:
(1)攻击者发送一个恶意的路由器LSA。“恶意”指它的LSA 部分与链路状态数据库中真实的LSA不同;
(2)攻击者会收到一个LSAck 包,表明恶意LSA 通过了协议的校验和检查;
(3)由于协议的缺陷等原因,恶意的LSA 并不会引起反击机制,使其篡改了真实的LSA 达到欺骗的效果。
表1 攻击特点
当某种欺骗攻击引起反击机制时,尽管具体方式有所不同,但它们欺骗原理相似[9], 且实现的攻击均具有以下特性:
(1)攻击者按序向路由器发送触发LSA 和抗反击LSA,且抗反击LSA与链路状态数据库中真实的LSA 不同;
(2)这两条报文的时间间隔在1~5 s,并且攻击者都收到两个报文的LSAck包;
(3)触发LSA 引起了反击机制,然而由于抗反击LSA 和反击LSA 的校验和、序列号相同,且时间差在15 min以内,这两种报文先到的被保存,后到的被丢弃。
由此,将这六种路由欺骗攻击分为两大类:第一类为引起反击类攻击,第二类为不引起反击类攻击。
对于引起反击和不引起反击的两类路由欺骗攻击,分别设计了相应的检测算法。
2.2.1 算法I:不引起反击类攻击的检测算法
邻接欺骗、远程邻接欺骗、单路径注入、LSA覆盖等不会引起OSPF协议反击机制,根据它们的特性设计算法I。
算法I:检测不引起反击类攻击的算法。
Input:路由器的OSPF报文流
Output:OSPF欺骗存在与否
1:for position←next_begin+1 to trace_num do //position为检测的当前报文位置
2:for index←position to window_size do//window_size为滑动窗口大小
3:if 此条报文是router LSA do
4:if LSAs∈{LS Database}then
5:记录时间戳、链路号等参数
6:if 存在LSAck包 then
7:if 存在合法的反击LSA then
8:break
9:else if 未告警 then
10:告警
11:end for
12:滑动窗口+1
13:end for
算法I先解析流中的每条路由器LSA,记录下捕获报文的时间戳、报文所在网桥号、序列号等参数,与链路状态数据库的链路信息对比,判断其是否为恶意;若不是,跳出流程,反之,继续执行,判断其是否合法、是否引起反击机制。合法指该LSA通过了协议的过程化检查与约束,之后进程会回复一个LSAck报文。由反击机制特点可知:反击LSA的序列号比恶意LSA的序列号大1,链路状态ID和恶意LSA的相同,链路状态信息和真实的链路状态数据库中的相同。据此判断恶意LSA是否引起反击机制。若出现,跳出流程,从下一条报文重新执行流程。反之,由于所有洪泛的恶意LSA 之间的链路状态ID和序列号都相同,比较两次告警恶意LSA 的链路状态ID和序列号可判断告警是否重复,找出最先发送恶意LSA 报文的路由器或主机。
2.2.2 算法II:引起反击类攻击检测算法
目前引起反击类攻击仅有双LSA注入攻击和双LSA远程多注入攻击两种。根据特性设计算法II。
算法II:检测引起反击类攻击的算法。
Input:路由器的OSPF报文流
Output:OSPF欺骗存在与否
1:for position←next_begin+1 to trace_num do
2:for index←position to window_size do
3:if 此条报文是router LSA do //触发LSA
4:保存时间戳、链路号等参数
5:if 存在LSAck then
6:if 存在抗反击LSA then
7:if 存在抗反击LSA的LSAck then
8:if LSAs∈{LS Database}then
9:break
10:else if 未告警 then
11:告警
12:end for
13:滑动窗口+1
14:end for
与算法I相同的是解析路由器LSA时都会记录下捕获的时间戳、报文所在网桥号等参数。但是它们算法流程并不相同,后者将采集到的路由器LSA作为触发LSA执行算法流程,依次判断其是否合法、是否出现抗反击LSA以及抗反击LSA是否合法是否恶意、告警是否重复。
尽管两类路由欺骗攻击篡改某些路由器的路由表,但不会影响受害路由器的反击LSA到达所有路由器。所以检测到欺骗攻击后,向路由器发送一条序列号更大的LSA,刻意引起它的反击机制,将使攻击失去效果。基于该原理,本节提出了OSPF路由欺骗攻击的防御机制,能够有效地防御大部分OSPF路由欺骗攻击。但邻接欺骗攻击和远程邻接欺骗攻击,因它们通过伪装成路由器,发送关于自身的虚假LSA,即使再次引起反击机制,洪泛的依旧是虚假路由,所以不能通过激发协议的反击机制进行防御。这两种攻击需要通知管理员处置。
文中基于NFV提出了通用的系统架构,如图1所示,该架构主要分为采集层和分析层。
采集层主要包含若干中间盒,以及采集、通信和防御实施三大模块。采集模块功能主要包括:捕获流经路由器各端口的OSPF分组;过滤掉与欺骗攻击无关的OSPF Hello报文;解析协议报文。通信模块将解析完的报文发送给分析服务器以及接收分析服务器的防御指令。防御实施模块接收分析服务器的防御指令后,构造新的路由器LSA后发送给路由器。
图1 ARSAO的系统架构
分析层包含一个分析服务器,由通信、防御分析两大模块组成。通信模块接收来自中间盒的协议报文和发送防御指令。防御分析模块将协议报文加上链路号和时间戳形成trace记录流;获取每条协议报文的核心参数;调用两类检测算法多线程检测trace记录流;检测到攻击后告警并构造防御指令。
考虑到开销、效率、实时性等因素,分析服务器和中间盒之间采用UDP协议进行通信。
中间盒是指在Linux容器(LXC)中运行具有特定检测与防御功能的虚拟网络功能(VNF)。它通过网桥连接到路由器之间,用软件实现中间盒是文中的研究点之一。它的程序设计基于socket编程,利用了libpcap、tcpdump、libnet技术。中间盒各个模块的工作流程如图2所示。
图2 中间盒工作流程
通信模块在初始化阶段,打开一个UDP socket,利用send to函数向分析服务器发送数据包,recvfrom函数接收分析服务器的防御指令。
采集模块在监测接口的数据链路层增加一个旁路处理,基于libpcap利用原始套接字从链路层驱动程序中获取数据包的拷贝,通过Tap函数将数据包发送给BSD Packet Filter(BPF)过滤器。定义过滤规则对数据包进行逐一匹配,符合条件的使用tcpdump中的对应函数对报文进行解析,之后存放入内核缓冲区,并传递给用户缓冲区。
防御实施模块每当其接收到分析服务器的防御指令后,调用libnet函数库自底层向上层构造新的触发LSA。
分析服务器是指在LXC中具有特定分析功能的VNF,它通过一个网桥桥接所有的中间盒,确保及时地接收中间盒发送来的协议报文。它的工作过程如下:程序初始化阶段打开UDP socket,监听端口,等待连接请求,利用recvfrom函数接收协议报文。接收报文后,对每条报文添加网桥ID和时间戳,存入接收缓冲区,利用正则表达式过滤读取参数,存入trace记录中,然后使用pthread_create函数开启两个线程,分别调用两类检测算法对流检测,判断是否存在攻击。若存在,生成告警信息,存入日志文件,并且生成防御指令。最后利用sendto函数发送防御指令。
trace记录的结构如图3所示。时间戳占2个字节,表示协议报文被捕获的时间;网桥ID占2个字节,标识报文所在的网桥;LSA类型占1个字节,表示LSA类型,当OSPF分组类型不为LSU时,自动填充0;链路数占2个字节,表示路由器接口活动的数量;链路ID占4个字节,表示路由器接口所连接的对象;链路数据占4个字节,为IP地址掩码或接口的IP地址。时间戳取自宿主服务器的时钟,解决各个路由器、中间盒时钟不同步问题,保证检测逻辑的正确性。
图3 trace记录结构
防御指令中包含:恶意LSA序列号、链路状态ID、区域ID、中间盒IP地址、目标路由器IP地址。这些参数用于中间盒构造LSA。
为了验证ARSAO系统的功能和性能,对该系统进行实验测试。实验设备和环境配置如下:宿主服务器为ThinkServer RD550(内存32 GB、Xeon(R) CPU4核、x5647 @2.93 GHz);服务器的操作系统为Ubuntu 16.04,以LXC作为虚拟机构建NFV网络作为测试原型系统的环境[21-22]。
原型系统的NFV网络如图4所示。该网络是由17台配置OSPF协议的路由器R1-R17组成,它分为5个区域Aera0-Aera4。包含虚拟主机6台H1-H6。网段的掩码皆为255.255.255.0。此外原型系统设置了5个检测中间盒和1个分析服务器。
图4 测试原型系统的NFV网络
由于双LSA远程多注入攻击与双LSA注入攻击类似以及邻接欺骗攻击与远程邻接欺骗攻击类似,实验选择对邻接欺骗攻击、双LSA注入攻击、LSA攻击覆盖攻击、单路径注入攻击这四种路由欺骗攻击行为进行验证,测试系统的检测功能和防御功能。分别在Area1、Area2、Area3、Area4依次进行这四种攻击(时间间隔1 s)。
Area1内,攻击者H2发送所构造的Hello报文,与R2建立邻接关系,之后注入恶意的攻击报文。Area2内,攻击者从R17向R14注入触发LSA和抗反击LSA报文;Area3内,攻击者从R7向R15发送覆盖攻击的LSA报文,Area4内,攻击者从R11向R13注入关于R12的恶意LSA报文。攻击前,记录R2、R14、R15、R13的路由表。攻击后,再次查看受害路由器的路由表,对比可得路由表项被篡改。表2为R2被攻击后的路由表项列表,最后一行为多出的恶意的路由信息。
表2 路由器R2被攻击后的路由表项
图5中的日志文件显示了ARSAO系统对攻击特征的报文进行了告警,并且准确找出了攻击源。检测到攻击的5 s后,再次查看受害路由器的路由表,大部分路由器的路由表已经恢复,未恢复的R2则由管理员进行处置。
实验表明:ARSAO系统能够检测出这两大类路由欺骗攻击、准确找到攻击源、防御其中的大部分攻击。(邻接欺骗攻击、远程邻接欺骗攻击除外)
图5 日志文件
为了测试系统的性能,选择双LSA注入攻击和单路径攻击进行实验,选取检测时间、防御时间、误报率和漏报率作为指标。公式如下:
t检测时间=t检测到攻击的时刻-t攻击的时刻
(1)
t防御时间=t检测到构造的触发LSA报文时刻-t检测到攻击的时刻
(2)
p误报率=n误报/n攻击
(3)
p漏报率=n漏报/n攻击
(4)
为了更好地模拟真实的网络环境,利用流量发生软件Iperf设置背景流量,流量控制软件Netem设置丢包率和时延。在不同的丢包率和时延下,在Area1、Area2、Area3、Area4内分别间隔1 s进行双LSA注入攻击和单路径注入攻击。一共进行10轮实验,每轮一类欺骗攻击100次,检测时间、防御时间是1 000次实验的平均值,误报率和漏报率为10轮实验的平均值。实验结果见图6~图9。
图6 时延对检测时间和防御时间的影响
由图6可知,两类攻击的检测需都要一定的时间。200 ms时延下,引起反击类的检测时间与防御时间分别为3.72 s和2.49 s,不引起反击类的检测时间与防御时间分别为5.85 s和2.66 s。不引起反击类攻击的检测时间明显大于引起反击类攻击的检测时间,防御时间两类攻击相差不多,两类攻击的检测时间和防御时间随着网络时延基本呈线性增加。
图7显示的是丢包率对检测时间和防御时间的影响。这两类攻击的检测时间与防御时间随着丢包率的增大有一定的波动,但并没有明显影响。
图8给出了不同时延下两类攻击的漏报率和误报率。从图8可知,当时延较小时,时延的增加不会使系统产生误报,而当时延高于一定的值α(1~1.5 s)时,系统开始出现漏报,且漏报率随着时延的增大逐渐增大。
图7 丢包率对检测时间和防御时间的影响
图8 时延对漏报率和误报率的影响
图9 丢包对漏报率和误报率的影响
图9给出了不同丢包率下两类攻击的漏报率和误报率,两者皆随着丢包率的增加急剧升高。一旦网络出现丢包,网络出现的情况有很多,可能是因出现恶意LSA的确认报文丢失导致系统出现攻击的漏报;也有可能引起反击类攻击的反击LSA报文丢失,导致系统将把这类攻击误判成另一类攻击。同一丢包率下,引起自反击类攻击的误判率低于另一类,漏判率高于另一类。因为反击类攻击检测算法步骤较多,其中任何一个步骤的报文不正确,都会导致漏判,所有步骤都满足,才会误判。
上述实验结果表明,网络时延和丢包对ARSAO系统的性能产生了一定的影响,但在非极端的网络时延和丢包的情况下,该系统能够用统一的通用设施快速有效地检测出各种OSPF欺骗攻击并能够进行及时防御,检测具有低误报率和低漏报率,提升了NFV网络的安全性和健壮性。由于采用通用基础设施,系统也具有经济性。
目前对于出现的多种OSPF路由欺骗攻击仍缺乏有效的检测和防御方法。文中在深入研究OSPF路由欺骗攻击的基础上,将它们分为两类,提出了两类OSPF路由欺骗攻击的ARSAO机制。基于NFV技术,提出并实现了一种通用的支持检测与防御的系统。原型系统实验表明,ARSAO具有经济性、灵活、易于部署等特点,能够准确快速地检测出除邻接欺骗攻击和远程邻接欺骗攻击外的OSPF的路由欺骗攻击,并能迅速地进行故障恢复达到防御的效果,提高NFV网络的安全性。下一步,将该研究扩展到检测与防御其他类型网络攻击的工作中。