朱绪全,江逸茗,马海龙,包婉宁,张 进
(1.紫金山实验室,江苏 南京 210000;2.国家数字交换系统工程技术研究中心,河南 郑州 450000)
互联网的高速发展带来了网络规模的持续增长以及网络应用的广泛普及,同时给网络安全带来了巨大的挑战,网络空间中充斥着各种未知漏洞和后门等安全隐患,现实世界中,潜在的漏洞和后门无法避免,也无法穷尽,导致当今网络空间存在易攻难守的非对称局面,漏洞和后门问题是网络空间安全中最严重的问题之一[1]。传统网络防御技术如入侵检测系统IDS(Intrusion Detection System)[2]、入侵防御系统IPS(Intrusion Prevention System)[3]、防火墙[4]、漏洞挖掘、特征提取、蜜罐技术[5]、沙箱技术[6]或通过查漏补缺,或通过攻击行为特征等手段来应对网络中频繁出现的各种攻击。一些新型的网络防御手段,如移动目标防御[7,8]采用有效地址突变[9]、IP 地址随机化[10]、端口随机化[11]和加密随机化[12]等多样性技术增强系统脆弱攻击面的不确定性和动态性,有效限制系统脆弱性暴露及被攻击的机会,增加攻击者扫描攻击难度,但是缺乏一定的效能评估机制,存在系统开销过高、影响服务性能等问题。
近年来,邬江兴院士提出的拟态防御理论得到了相关研究人员的关注,通过向系统引入动态(Dynamical)、异构(Heterogeneous)和冗余(Redundant)等特性增强系统广义鲁棒性和安全性,提升系统应对未知威胁的能力。目前拟态防御技术已成功应用于路由器[13]、交换机[14]、域名服务器、软件定义网络SDN(Software Defined Network)控制器[15]和文件存储服务器等。
路由协议安全是网络安全的重要组成部分,路由器等网络通信设备在网络中的位置和路由转发功能决定了其是最佳的攻击实施点。传统的路由设备一般没有防火墙、防病毒等对恶意攻击相关的安全防护手段,并且其潜在的漏洞和后门众多,一旦攻击者控制了路由设备,通过注入恶意网络路由和虚假DNS路由实现网络欺骗、邮箱密码嗅探、中间人攻击及DNS欺骗,进行敏感数据窃取或篡改,甚至导致网络大规模瘫痪。针对主机的攻击,只是攻击了一个点,而对于路由器的攻击则会危及整个网络。
开放式最短路径优先OSPF(Open Shortest Path First)作为一种典型的链路状态协议,具有收敛速度快、无路由环路、支持变长子网掩码和汇总、层次区域划分等优点,目前已经成为网络部署中使用最为广泛的路由协议。
拟态防御体系结构通过引入多个异构冗余的执行体,增强广义鲁棒性,通过不同执行体的策略或者周期性调度,对外呈现特征的不确定性变化,增强安全性。如何实现各异构执行体OSPF协议功能的等价,是支持拟态防御的网络设备亟需解决的问题。本文将聚焦支持拟态防御技术的路由器(以下简称拟态路由器),详细论述OSPF路由协议在拟态防御体系结构中的处理方法,引入依据报文类型进行相应处理的OSPF协议代理组件,保证OSPF路由数据的多元化,便于网络防御中拟态防御方案的有效实施。并在拟态路由器原型样机实现中验证了该方法的可行性和有效性。最后,结合几种经典的OSPF路由攻击产生的路由器安全风险进行了具体说明及实验验证,实验证明拟态路由器通过OSPF协议代理能够实现各个执行体的等价输入,并通过裁决机制发现某个执行体存在的安全漏洞,做出正确的路由选择,有效提高了其应对OSPF网络攻击的能力。
拟态防御使用系统架构技术解决了拟态防御界内基于未知漏洞、后门或病毒木马等不确定威胁,提供了“改变游戏规则”的新途径[16],其核心思想是动态、异构、冗余及负载反馈机制。
(1)动态性:通过不定时地改变对外呈现的执行体,降低单位时间内特定部件的暴露时间,减小漏洞被发现的风险,在感知到威胁发生时,动态替换并隔离被感染执行体,可有效阻断攻击者对目标系统的持续控制。
(2)异构性:基于相异性设计理念,构建多个具备相同功能,但构成原理不同的软硬件执行体环境。理论上这些异构体存在共生漏洞和相同后门的几率微乎其微,确保同样的攻击不会导致2个执行体同时失效。
(3)冗余性:采用多模裁决机制对多个在线的异构执行体的输出结果进行一致性裁决,检测是否发生攻击行为。
拟态防御技术通过引入裁决和负反馈机制,使得系统在具有内在攻击面不确定性的同时,还可根据裁决信息有针对性地调整系统内部结构,对外呈现动态性和广义不确定性,极大地增加了攻击者的攻击难度。
路由器是体系结构和协议族最复杂的网络设备之一,它支持多种管理配置协议、路由控制协议以及各种数据转发业务。
拟态路由器通过在传统路由器架构中引入多个异构冗余的路由执行体,实现平台异构、系统异构及应用异构[17,18]。由于不同执行体之间存在共性漏洞或后门的概率极低,攻击者难以通过一种攻击方法控制所有执行体,从而极大地提高了路由器的安全性。拟态路由器异构执行体如图1所示。
Figure 1 Mimic router heterogeneous executive actor图1 拟态路由器异构执行体示意图
图2展示了拟态路由器架构,拟态模块将管理终端的远程配置命令通过配置代理处理后分发给各个执行体;将邻居路由器的路由协议报文通过路由协议代理处理后分发给各个执行体;对各个执行体管理平面下发的配置指令进行比较裁决,发现并阻断下发恶意配置攻击;通过对各个执行体的路由更新行为进行比较裁决,发现并阻断篡改路由攻击;通过对各个执行体按照裁决模块和系统监测模块的反馈信息实施调度,对外呈现特征的动态变化。
Figure 2 Architecture of mimic router图2 拟态路由器架构图
路由协议是运行在路由器上的协议,主要用来进行路径选择。由于很多路由协议如:OSPF、中间系统到中间系统IS-IS(Intermediate System to Intermediate System)、边界网关协议BGP(Border Gateway Protocol)需要进行会话状态维持,因此协议代理复杂度大幅增加,而且输入输出在系统异侧,多链并行处理交织输出,需要在多个部位设置分发器与裁决点。本文以OSPF协议为例,详细论述了OSPF协议在拟态防御体系结构中的处理方法。
OSPF作为内部网关协议IGP(Interior Gateway Protocol)的典型代表,将自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域,通过链路状态通告LSA(Link State Advertisement)的形式发布路由,依靠在OSPF区域内各设备间交互OSPF报文达到路由信息的统一。
OSPF协议通过Hello报文建立与维持邻居关系,在广播网络或者非广播多路访问网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router),未被选中的路由器统称为DR other;通过DD(Database Description)描述网络拓扑;通过LSR(Link State Request)请求在数据库同步交换过程中发现本路由器中没有或已过时的LSA包内容;通过LSU(Link State Update)存储和传递路径信息;通过LSAck(Link State Acknowledge)对收到的LSU进行应答确认[19 - 21]。
OSPF作为一种典型的链路状态协议,包含常用的7种状态,没有收到Hello时为Down状态;收到Hello时进入Init状态;相互间周期发送Hello的状态为2way邻居状态;交换DD信息初始为Exstart状态;交换DD信息时为Exchange状态;在Loading时发送LSR、LSU和LSAck消息并学习对端的LSA的详细信息;学习完成后进入Full邻接状态。
OSPF协议报文的认证分为3种:空认证、简单密码认证(Simple Password Authentication)和密码学认证(Cryptographic Authentication)。对于简单密码认证的OSPF协议报文,仅针对OSPF协议报文进行认证。对于密码学认证的OSPF协议报文,在对OSPF协议报文进行认证的同时,还需要考虑OSPF协议报文的密码学序列号(Cryptographic Sequence Number),以确保收到的密码学序列号符合标准规定的原则。
根据第2节的描述,OSPF协议维护多种状态,OSPF协议进程在各状态存续期间对于接收到的OSPF报文的处理方法不同,如DD报文只能在Exstart、Exchange状态时处理;LSU报文在Loading、Full状态下处理,在其他状态时直接丢弃。拟态路由器往往包含多个执行相同功能的异构软件(或硬件)结构,在非攻击条件下,简单的复制分发并不能使得各个执行体的OSPF协议状态保持一致。
本文引入依据报文类型进行相应处理的OSPF协议代理组件,实现各异构执行体中OSPF协议功能的等价输入,确保OSPF路由数据的多元化,便于网络防御中拟态防御方案的有效实施。
OSPF协议代理组件(以下简称OSPF代理)是用于协调外部设备与内部各个执行体之间OSPF协议报文的交互而新增的一个功能模块,能够有针对性地依据OSPF协议报文类型进行转发处理,隐藏内部多个执行体,对外部呈现出一个单一的路由设备,以保证外部设备以及拟态设备内部各个执行体对OSPF报文的交互及认证的正确性。
拟态路由器在启动时会指定一个执行体为主执行体,用于外部设备与拟态路由器之间的交互。如图3所示,其中N为执行体数量,OSPF代理将透传主执行体与外界交互的OSPF报文,内部其他执行体的OSPF报文只能与路由协议代理交互,并不发送给外部设备,外部设备不会感知到内部多个执行体的存在。OSPF协议代理能够实现其他执行体的OSPF状态、OSPF链路状态数据库与主执行体一致, 在广播网络或者非广播多路访问网络中选举的DR和BDR与主执行体一致,支持新执行体上线后,OSPF状态及OSPF 链路状态数据库与主执行体达到一致。
Figure 3 OSPF protocol processing in mimic routers图3 拟态路由器OSPF协议处理示意图
结合报文发送的方向,OSPF协议代理将对来自外部设备的OSPF报文以及来自拟态设备内各执行体的OSPF报文分别进行相应的处理。OSPF代理已经成功应用于拟态路由器、拟态交换机等网络设备中。
4.1.1 OSPF代理处理外部设备发送的OSPF报文
(1)OSPF代理处理DD报文。
OSPF代理收到第1条DD报文,说明外部设备与主执行体已经通过Hello消息建立邻居关系,OSPF代理开始执行邻居信息缓存的初始化建立流程,具体处理如下:
①将邻居设备的MAC地址、IP地址、路由器标识Router ID、区域标识Area ID、拟态设备的MAC地址和IP地址添加到缓存列表,这6个字段唯一标识一个邻居设备。
②缓存LSA。根据OSPF标准规定,外部设备与主执行体到达邻接状态后,仅会周期性地发送更新报文或者网络有变化时发送增量更新报文。拟态设备的各个执行体启动时间不同,可能会出现启动时间延迟或执行体被调度后重新上线等情形,导致其链路状态数据库为空。因此,缓存列表需要缓存邻居设备发送的LSA,用于后启动的执行体在与OSPF代理建立邻接关系时,构造报文将LSA通告给执行体,使得各执行体链路状态数据库保持同步,实现各个执行体的OSPF LSU报文的等价输入。
③缓存密码学序列号。根据OSPF标准规定,如果配置MD5检验,设备在接收OSPF报文时,需要保证本次收到的OSPF报文中的密码学序列号大于或等于上次接收到的值,因此需要缓存当前收到的OSPF报文的密码学序列号,用于与从执行体之间的所有OSPF消息交互。
④将报文发送给主执行体。若OSPF代理收到剩余的DD报文,根据OSPF报文携带的源IP、路由器标识Router ID、区域标识Area ID、目的IP查询之前建立的缓存。如果命中,说明外部设备与主执行体已经建立邻居关系,更新邻居缓存中的密码学序列号为报文携带的密码学序列号,并将报文发送给主执行体。
(2)OSPF代理处理Hello报文。
根据OSPF报文携带的源IP、路由器标识Router ID、区域标识Area ID查询缓存是否有该设备的信息。如果命中,说明外部设备与主执行体已经建立邻居关系,更新邻居缓存中的密码学序列号为报文携带的密码学序列号,用于密码学认证时与从执行体交互,将报文发送给各个执行体,用于维持邻居关系。
(3)OSPF协议代理处理LSU报文。
根据OSPF报文携带的源IP、路由器标识Router ID、区域标识Area ID、目的IP查询缓存是否有该设备的信息。如果命中,说明外部设备与主执行体已经建立邻居关系。
①更新邻居缓存中的密码学序列号为报文携带的密码学序列号。
②将报文携带的LSA添加或者更新到缓存的LSA列表中。根据标准规定,更高链路状态序列号、更大校验和、最大年龄条件(缺省为1 h)、老化时间超过Max-Age-Diff(缺省为15 min)且老化时间越小的LSA信息包为最新的LSA。
③将报文发送给各个执行体,用于路由信息的实时更新。
(4)OSPF代理处理LSR和LSAck报文。
根据OSPF报文携带的源IP、路由器标识Router ID、区域标识Area ID查询缓存是否有该设备的信息。如果命中,说明外部设备与主执行体已经建立邻居关系,更新邻居缓存中的密码学序列号为报文携带的密码学序列号,并将报文发送给主执行体。
算法1展示了OSPF处理外部设备发送的OSPF报文的过程,该算法的时间复杂度为O(J*M*K),空间复杂度为O(N*M*K),其中,N为执行体数量,J为拟态路由器的网络接口数,M为一个网络接口下与之建立邻接关系的邻居数,K为该邻居的LSA数量,即路由数量。
算法1OSPF代理处理外部设备发送的报文
输入:外部设备发送的报文。
输出:缓存外部设备信息的列表CCList。
Step1读入外部设备发送的OSPF报文II。
Step2依据报文类型进行相应的处理。
Step3OSPF代理处理DD报文:
Step3.1如果收到的是首条DD,提取报文中关于邻居设备的关键信息到缓存CC中;如果配置了MD5校验,则更新密码学序列号到缓存中;转发DD报文给主执行体。
CC.srcMac=II.srcMac;
CC.dstMac=II.dstMac;
CC.srcIP=II.srcIP;
CC.dstIP=II.dstIP;
CC.routerID=II.routerID;
CC.AreaID=II.AreaID;
CC.lsaList={};
ifII.auth==MD5then
CC.cryptoSeqNum=II.cryptoSeqNum;
endif
CCList.append(CC);
sendToMainActor(II);
Step3.2如果收到后续DD报文,说明之前已经建立过缓存,查询到该缓存CC,如果配置MD5校验,则更新密码学序列号到缓存中,并转发DD报文给主执行体。
forCCinCCListdo
ifCC.srcMac==II.srcMacand
CC.srcIP==II.srcIPand
CC.routerID==II.routerIDand
CC.AreaID==II.AreaIDthen
ifII.auth==MD5then
CC.cryptoSeqNum=II.cryptoSeqNum;
endif
endif
endfor
sendToMainActor(II);
Step4OSPF代理处理LSU报文,查询缓存列表CCList,若命中缓存CC,则将外部设备发送的LSA添加或者更新到缓存的lsaList;如果配置MD5校验,则更新密码学序列号到缓存中;转发LSU报文给所有执行体。
forlsainII.lsalistdo
iflsainCC.lsaListthen
CC.lsaList.update(lsa);
else
CC.lsaList.append(lsa);
endif
ifII.auth==MD5then
CC.cryptoSeqNum=II.cryptoSeqNum;
endif
endfor
sendToAllActor(II);
Step5OSPF代理处理Hello、LSR、LSAck报文:
Step5.1查询缓存列表CCList,若命中缓存CC,如果配置MD5校验,则更新密码学序列号到缓存中。
Step5.2将Hello转发给所有执行体。
Step5.3将LSR、LSAck发送给主执行体。
4.1.2 OSPF代理处理内部执行体发送的OSPF报文
根据4.1.1节描述,外部设备的Hello消息周期性发送,并直接透传给各个从执行体,因此内部各个从执行体与外部设备之间通过Hello消息交互建立邻居关系。
(1)OSPF代理处理主执行体发送的OSPF报文。
将所有类型的OSPF报文直接发送给外部设备。
(2)OSPF代理处理从执行体发送的DD报文。
OSPF代理模拟外部设备与多个从执行体进行消息交互,根据输入报文的源IP、目的IP、区域ID查询4.1.1节生成的缓存列表。如果命中,说明外部设备与主执行体已经建立邻居关系,构造DD报文回复给该执行体。
根据OSPF标准规定,Router ID值较大的设备为主动发起后续DD交互的一方,DD报文的序列号字段以主动发起的一方为准。OSPF代理将接收DD报文的Router ID与查询命中的缓存信息中的邻居设备Router ID进行比较,确定主从关系以及后续的DD序列号的值,分为如下2种情况:
①如果邻居设备为主,OSPF代理模拟邻居设备,内生构造DD报文发送给从执行体,序列号字段从1开始累加。若是第1条DD报文,则填写DB Description中的Init字段为1;否则,填写内生DD报文中DB Description中的Init字段为0,并填写DB Description中的More字段为0。DD报文不携带任何关于LSA Header的相关信息,执行体使用该序列号作为确认序列号与OSPF代理进行交互,主从双方利用序列号来保证DD报文传输的可靠性和完整性。
②如果执行体为主,执行体主动发起DD报文。OSPF代理模拟内生构造DD报文进行回复,并使用执行体发送的序列号作为确认序列号与执行体进行交互,若是第1条DD报文,则填写DB Description中的Init字段为1;否则,填写DB Description中的Init字段为0,并将DB Description中的More字段设置为0,不携带任何关于LSA Header的相关信息。
若收到最后一条执行体发送的DD,将命中缓存的LSA构造成LSU报文发送给该执行体。对于以上构造的DD和LSU报文,如果配置了MD5校验,根据配置的键值等信息重新计算生成新的消息摘要,添加到报文后面,并将命中缓存的密码学序列号填入到构造报文中的密码学序列号字段。
(3)OSPF代理处理从执行体发送的LSR报文。
根据输入报文的源IP、目的IP、区域ID查询生成的缓存列表,如果命中,说明外部设备与主执行体已经建立邻居关系,协议代理构造LSAck报文进行答复。
对于以上构造的LSAck报文,如果配置了MD5校验,根据配置的键值等信息重新计算生成新的消息摘要,添加到报文后面,并将命中缓存的密码学序列号填入到构造报文中的密码学序列号字段。
(4)OSPF代理不处理从执行体发送的Hello和LSAck报文。
算法2是OSPF代理对内部执行体发送报文的核心伪代码。该算法的时间复杂度为O(N*J*M*K),空间复杂度为O(N*M*K),其中,N为执行体数量,J为拟态路由器的网络接口数,M为一个网络接口下与之建立邻接关系的邻居数,K为该邻居的LSA数量,即路由数量。
算法2OSPF代理处理内部执行体发送的报文
输入:执行体发送的报文II,缓存列表CCList。
输出:模拟外部设备构造报文DD、LSU和LSAck。
Step1读入内部执行体发送的OSPF报文II。
Step2若报文来自主执行体,则转发到外部设备。
Step3若报文来自从执行体,OSPF代理依据报文类型进行相应的处理。
Step4OSPF代理处理从执行体发送的DD报文:
Step4.1查询缓存列表CCList,若命中缓存CC,说明外部设备与主执行体已经建立邻居关系,模拟构造DD报文与执行体进行交互。
Step4.2根据缓存信息填写DD报文的关键字段。
Step4.3如果配置了MD5校验,则将缓存中的密码学序列号填充到DD。
Step4.4发送DD报文到执行体:
DD.srcMac=II.dstMac;
DD.dstMac=II.srcMac;
DD.srcIP=II.dstIP;
DD.dstIP=II.srcIP;
DD.AreaID=II.AreaID;
DD.RouterID=CC.RouterID;
DD.moreFlag=0;
DD.lsaHeads={};
ifII.auth==MD5then
获取配置Key ID,计算消息摘要,并填入DD;
DD.crypSeqNum=CC.crypSeqNum;
endif
ifII.DD.InitFlag==1then
ifII.RouterID DD.seqNum=1; else DD.seqNum=II.seqNum; endif DD.InitFlag=1; elseifII.DD.moreFlag==1then DD.InitFlag=0; endif DD.seqNum=II.seqNum+1; elseifII.DD.moreFlag==0then ifII.RouterID>CC.key.RouterIDthen DD.InitFlag=0; endif DD.seqNum=II.seqNum+1; endif replyToActor(DD); Step4.5在DD报文结束后,将缓存信息邻居设备的所有LSA 填充在LSU报文中,并发送给执行体: LSU.srcMac=CC.srcMac; LSU.dstMac=CC.dstMac; LSU.srcIP=CC.srcIP; LSU.dstIP=CC.dstIP; LSU.AreaID=CC.AreaID; LSU.RouterID=CC.RouterID; ifII.auth==MD5then 获取配置Key ID,计算消息摘要,并填入LSU; LSU.cryptoSeqNum=CC.cryptoSeqNum; endif forlsainCCList.lsaListdo LSU.append(lsa); endfor sendToActor(LSU); Step5OSPF代理处理从执行体发送的LSU报文: Step5.1查询缓存列表CCList,若命中缓存CC,模拟构造LSAck报文与执行体进行交互; Step5.2根据缓存信息填写LSAck报文的关键字段; Step5.3如果配置了MD5校验,则将缓存中的密码学序列号填充到LSAck中; Step5.4对于LSU报文中每一个LSA,构造对应的LSA Header填充到LSAck中: LSAck.srcMac=CC.srcMac; LSAck.dstMac=CC.dstMac; LSAck.srcIP=CC.srcIP; LSAck.dstIP=CC.dstIP; LSAck.AreaID=CC.AreaID; LSAck.RouterID=CC.RouterID; ifII.auth==MD5then 获取配置Key ID,计算消息摘要,并填入LSAck; LSAck.crypSeqNum=CC.crypSeqNum; endif forlsainII.lsaListdo LSAck.lsaHeaders.append(lsa.header); endfor sendToActor(LSAck); Step6OSPF代理丢弃从执行体发送的Hello、LSAck和LSR报文。 拟态路由器原型样机采用分布式架构,由业务单元、主控单元、执行体单元和交换单元构成。 本文实验1在拟态路由器原型样机部署OSPF协议代理模块,与思科路由器对接,对OSPF协议代理模块功能进行测试验证。测试网络拓扑如图4所示。 Figure 4 Test network topology图4 测试网络拓扑 图4中,R4作为拟态路由器原型样机,部署OSPF协议代理模块。R1、R2、R3、R5和R6使用了Cisco 3700系列路由器的IOS软件,版本号为12.4(25d)。分别在R1~R6对应接口上配置OSPF,默认Hello发送的间隔时间是10 s,并通告对应的loopback口的IP地址。 图5展示了拟态路由器R4主执行体上的OSPF邻居表和路由信息表,可以看到,R4已经与R3建立邻接关系,并且R4作为DR,R3作为BDR。R4与R5,R6分别建立邻接关系,R5作为BDR,R6作为DR,R4作为DR other。通过查看R4 OSPF生成的路由表可以看出,R4的 OSPF进程已经计算出其他路由器接口的路由。 Figure 5 Neighbor table and routing table of master actor图5 主执行体邻居表和路由信息表 按照算法2流程,OSPF代理模拟外部设备与执行体报文交互流程,其中源IP为3.3.3.1的DB Description、LSU、LSAck报文均由OSPF代理根据算法1进行内生构造后发送给从执行体,如图6所示。 Figure 6 Packets between OSPF agent and slave actor图6 OSPF代理与从执行体报文交互消息 图7显示了在拟态路由器R4中一个内部执行体上观察到的邻居表及路由信息表,可以看出,拟态路由器各执行体的邻接状态和路由表在未收到攻击或者触发后门的前提下,与主执行体的报文的邻居状态和路由表是一致的,从而证实了OSPF代理模块功能的可行性和有效性。 Figure 7 Neighbor table and routing table of slave actor图7 从执行体邻居表和路由信息表 实验2与测试仪表对接,对OSPF代理模块性能进行测试验证,测试仪表使用思博伦公司提供的TC(Test Center)。 TC直连拟态路由器原型样机,分别发送10,100,500,1 000,3 000,5 000条路由,通过计算各执行体同步时间来研究OSPF协议代理性能。图8显示了各执行体在同步不同数量路由时,成功建立邻接关系(Full状态)的时间。其中,执行体2、执行体3、执行体4均为从执行体。通过实验可以看出,主执行体由于与TC直接交互,在20 s以内基本完成邻接关系的建立,状态到达Full状态。而各从执行体与代理建立邻接关系达到Full状态的时间在35 s以内。由此可见,通过OSPF协议代理,各执行体与主执行体建立邻接关系的时间能够控制在不到15 s的范围内,并且不受路由数量的影响。 Figure 8 Completion time of full state per actor图8 各执行体的邻居建立完成时间 图9表示了各执行体在同步不同数量路由时的路由同步完成时间。通过实验可以看出,各执行体所有路由同步完成的时间几乎相同,并且与主执行体完成的时间相差在10 s以内。这充分说明OSPF协议代理能够处理的路由容量满足内部网关协议测试要求,并且能够保持各执行体的高效同步。 Figure 9 Route sync completion time of each actor图9 各执行体的路由同步完成时间 以上2个实验说明,通过引入OSPF协议代理,能够使得拟态路由器各执行体达到相同的状态,并正确计算出路由表,这充分表明了OSPF协议代理功能的可行性和有效性。通过路由更新数量的增长,各执行体依然能够在可接受的时间内同步完成,充分验证了OSPF协议代理的高性能。 OSPF路由协议的正确运行依赖于邻居路由器信息的正确性。现实世界中,网络空间存在着大量虚假的OSPF路由信息,如果未加防范,可能导致路由信息被篡改、恶意路由信息插入等后果,严重危及网络。OSPF协议自身的安全机制具有一定的保护作用,但这些安全机制并非无懈可击,仍具有一定的脆弱性。攻击者通过分析OSPF协议内在的交互机制,研究基于OSPF协议脆弱性的攻击技术,挖掘协议的设计缺陷,突破协议自带的保护机制,扰乱正常协议交互达到攻击目的。在正常状态下,借助OSPF代理能够实现拟态路由器内部各个执行体状态和路由信息的一致性,如果攻击触发了某个执行体的后门或者漏洞,将导致该执行体处于异常状态,拟态路由器能够有效阻断和防范此类攻击。以下将介绍2种经典的OSPF攻击,并对拟态路由器的安全性进行实验验证与分析。 (1)最大序列号攻击:攻击者向OSPF网络发送携带序列号为0x7FFFFFFF(最大序列号)的LSA信息包,成功将恶意LSA安装到网络设备中,由于很多路由设备的OSPF协议实现存在缺陷,导致正确的LSA会被当作过期的LSA而丢弃,导致网络失效。 (2)单LSA攻击:文献[22]中描述了单LSA攻击并验证了攻击的真实性。路由器在处理接收的LSU报文时,没有对链路状态标识与通告路由器(Advertise Router)的一致性进行检查,攻击者利用该缺陷,成功将恶意LSA安装到所有路由器中,从而生成恶意路由信息,该LSA到达目标路由器时,协议进程发现通告路由器不是自己,所以不会触发协议保护机制。 实验网络拓扑如图10所示,左侧设备为攻击者所在主机,R2~R4是思科路由器,R1为拟态路由器原型样机,其中1个执行体采用思科IOS软件,版本号为12.4(25d),其他3个执行体分别安装不同的FRRouting发布的稳定版本。分别在R1~R4、攻击主机上配置OSPF,网络互相连通。 Figure 10 Security test network topology图10 安全性测试网络拓扑 攻击主机发起最大序列号攻击,攻击目标为R1,构造并发送一条恶意Router LSA,设置SequenceNumber为0x7FFFFFFF(最大序列号)。 根据上文描述,OSPF协议代理实现了LSA报文在各个执行体上的等价输入。登录到R1可知,思科执行体由于未对此类攻击进行防范,导致LSA被篡改,如图11所示,可以看出链路状态序列号被修改成0x7FFFFFFF,年龄字段也不正常(年龄默认最大为3 600 s)。 Figure 11 LSA of Cisco actor图11 思科执行体的LSA 而其他3个执行体不存在该漏洞,因此该攻击并不会对其造成影响,如图12所示,LSA各字段正常。 Figure 12 LSA of other actors图12 其他执行体的LSA 拟态路由器通过裁决机制,遵循少数服从多数的原则,实际生效的OSPF配置及路由表仍以多数执行体为准,也不会将该攻击LSA扩散给网络中的其他设备,所以能够有效防范此类攻击带来的网络失效问题。 表1展示了发起最大序列号攻击时,将攻击目标R1分别替换成拟态路由器和思科路由器后,网络的中其他设备的路由信息。以R4为例,可以看出,如果攻击思科路由器,将使得网络的路由器中与受害者相关的路由表项被恶意删除,导致网络中断。实验结果表明,拟态路由器能够识别出最大序列号攻击,有效提高网络防护能力。 Table 1 Route table of R4 in max sequence number attack表1 最大序列号攻击中R4路由表对比 该攻击能够导致网络的路由器中与受害者相关的路由表项被恶意修改,攻击者通过此类组合攻击实现任意路由的修改、添加和删除,严重危及网络安全。 在攻击主机构造并发送一条恶意Router LSA,发起单LSA攻击,攻击目标为R1,设置Advertising Router为与link state ID 不一致的值118.192.11.139,并增加一条目的地为99.99.99.99的恶意路由。 由于该漏洞在思科路由器中被发现,思科执行体的路由表受此攻击影响,链路状态数据库中相应的LSA被篡改,而其他执行体则正常。表2展示了分别将拟态路由器和思科路由器放在攻击目标R1所在位置时,R4的路由表信息。可以看出,单LSA攻击导致R4中与R1相关路由表项已经被攻击者成功修改。实验结果表明,拟态路由器能够识别单LSA攻击,通过裁决机制,发现并阻断篡改路由攻击,有效保护了网络中路由信息的正确性。 Table 2 Route table of R4 in single LSA attack表2 单LSA攻击中R4 路由表对比 以上2个实验表明,拟态路由器能够通过OSPF协议代理实现各个执行体的等价输入,通过部署多个异构冗余的执行体使得执行体存在共性漏洞的可能性极低,通过裁决机制识别出OSPF攻击在执行体上触发的安全漏洞后门,做出正确的路由选择,有效提高了其应对OSPF网络攻击的能力。 本文详细描述了拟态防御体系结构以及拟态路由器的设计原理,论述了OSPF协议报文在拟态防御体系结构中的处理方法,通过引入OSPF协议代理实现在非攻击条件下各异构执行体OSPF协议等价的功能,详细阐述了OSPF协议代理模块的处理过程。最后,在拟态路由器原型样机实现中验证了该方法的可行性和有效性,并针对2种经典的OSPF路由攻击条件下产生的路由器安全风险进行了具体说明及实验验证。通过实验结果分析可知,OSPF协议代理模块的引入能够提升拟态路由器内部各个执行体的安全性以及功能的一致性,能够保证OSPF路由数据的多元化,提升通信系统中数据交互的正常有效性,结合裁决机制能够发现并识别执行体存在的安全漏洞,做出正确的路由选择,有效提高了其应对OSPF网络攻击的能力,便于网络防御中拟态方案的有效实施,能够为其他路由协议代理(如IS-IS、BGP等)提供解决问题的思路。5 拟态路由器OSPF协议功能和性能验证与分析
5.1 OSPF协议功能验证与分析
5.2 OSPF协议性能验证与分析
6 拟态路由器OSPF协议安全性验证与分析
6.1 最大序列号攻击安全验证
6.2 单LSA攻击安全验证
7 结束语