周開波 張治兵 王小雨 劉欣東
(中國信息通信研究院泰爾系統(tǒng)實驗室,北京 100191)
強制性國家標(biāo)準(zhǔn)GB 40050-2021《網(wǎng)絡(luò)關(guān)鍵設(shè)備安全通用要求》于2021年2月20日發(fā)布,并于2021年8月1日正式實施。GB 40050-2021的安全功能要求部分第5.8節(jié)提出,通信協(xié)議應(yīng)滿足協(xié)議健壯性要求,防范異常報文攻擊。GB 40050-2021的安全保障要求部分第6.1節(jié)提出,網(wǎng)絡(luò)關(guān)鍵設(shè)備的提供者在設(shè)計和開發(fā)階段應(yīng)采用健壯性測試等方式對設(shè)備進(jìn)行安全性測試。
對用于跨網(wǎng)段互聯(lián)的網(wǎng)絡(luò)設(shè)備而言,為方便路由的通告,通常要求支持至少一種以上的路由轉(zhuǎn)發(fā)協(xié)議。路由轉(zhuǎn)發(fā)協(xié)議根據(jù)工作的機制,分為鏈路狀態(tài)協(xié)議和距離矢量協(xié)議,常見路由轉(zhuǎn)發(fā)協(xié)議包括RIP[1]、OSPF[2]和BGP[3]。其中,RIP屬于域內(nèi)距離矢量協(xié)議、OSPF屬于域內(nèi)鏈路狀態(tài)協(xié)議、BGP屬于域間距離矢量協(xié)議。
針對路由協(xié)議的攻擊是現(xiàn)實存在的并且多次出現(xiàn)過。2011年和2013年在美國舉辦的黑帽大會上,來自以色列的電子戰(zhàn)爭研究與仿真中心(National EW Research and Simulation Center)研究員GaBI Nakibly曝光了OSPF路由器協(xié)議存在的一個漏洞。攻擊者利用該漏洞可以欺騙正常的OSPF路由器,使之接受偽造的路由表更新,并最終控制整個網(wǎng)絡(luò)中所有路由器的路由表,通過偽造網(wǎng)絡(luò)路由,攻擊者可以改變網(wǎng)絡(luò)流量的流向,實現(xiàn)對數(shù)據(jù)流的監(jiān)聽,或者造成路由環(huán)路,形成拒絕服務(wù)攻擊。2002年,F(xiàn)X在柏林舉辦的Chaos Communication Congress 2002大會上展示了針對Cisco路由器OSPF的攻擊概念驗證代碼,攻擊成功后可以將配置文件寫入到路由器的非易失隨機存儲器(Non-Volatile RAMs,NVRAM)中。對于BGP路由轉(zhuǎn)發(fā)協(xié)議,最具代表性的攻擊手段就是通過修改自身或者轉(zhuǎn)發(fā)的正確路由信息,引發(fā)自制系統(tǒng)被錯誤路由誤導(dǎo)的域間路由劫持[4-6]。
本文第2部分對LTS系統(tǒng)、IOLTS系統(tǒng)模型進(jìn)行了介紹;第3部分結(jié)合路由協(xié)議的特點,提出了路由協(xié)議的通用健壯性分析模型;第4部分以網(wǎng)絡(luò)設(shè)備中部署量最大的OSPF路由協(xié)議為例進(jìn)行了健壯性的分析,給出了生成健壯性測試路徑的方法;第5部分給出了總結(jié)。
對于轉(zhuǎn)移關(guān)系T,還有以下的推論。
輸入輸出分離的標(biāo)識轉(zhuǎn)換系統(tǒng)(Input/ Output LTS,IOLTS)相對于LTS的主要改進(jìn)是將動作標(biāo)識的集合分為輸入和輸出兩個部分,以便于更好地分析基于狀態(tài)和輸入而進(jìn)行狀態(tài)轉(zhuǎn)換的協(xié)議。其中L1表示輸入動作標(biāo)識集合,L0表示輸出動作標(biāo)識集合,L=LI∪LO,LI∩LO=?。
健壯性指的是網(wǎng)絡(luò)關(guān)鍵設(shè)備或部件在無效數(shù)據(jù)輸入或者在高強度輸入等環(huán)境下,各項功能可保持正確運行的程度。健壯性測試中,特別關(guān)注的是無效的輸入對整個系統(tǒng)穩(wěn)定運行的危害。一個健壯性良好的系統(tǒng)即使收到無效的輸入或處在不適當(dāng)?shù)氖褂铆h(huán)境中也能運行,不出現(xiàn)宕機等情況[9-10]。
圖1 LTS模型示例
圖2 IOLTS模型示例
一個運行路由協(xié)議的網(wǎng)絡(luò)可以簡化并抽象為具有多種狀態(tài)的兩個節(jié)點通過報文交互所組成的系統(tǒng)(見圖 3)。
其中,S1和S2代表兩個運行路由協(xié)議的節(jié)點。為體現(xiàn)在兩個節(jié)點之間的報文交互過程,引入了一個虛擬的中間層(Medium層),在中間層用雙層圈代表對應(yīng)節(jié)點中發(fā)送報文的狀態(tài),其中用于交互的報文組合分別是{!a, ?a}、{!b, ?b}和{!m, ?m}。“!”表示這是一個輸出報文的動作,“?”表示這是一個收到報文的動作。
在圖3中,僅考慮路由協(xié)議正常交互的過程,但為分析協(xié)議的健壯性,還需要考慮路由協(xié)議在各個狀態(tài)下收到各種類型報文的情況。對于某一個協(xié)議狀態(tài),對應(yīng)的輸入可以分為以下3類。
(1)符合協(xié)議定義的報文且出現(xiàn)在合適的狀態(tài),稱為有效的報文,其集合記為PEP。
(2)符合協(xié)議定義的報文但出現(xiàn)在不合適的狀態(tài),稱為不合適的報文,其集合記為POP;所有符合協(xié)議定義的報文集合記為PP,PP=PEP∪POP。
綜合有效、不合適和無效輸入之后的協(xié)議模型見圖4。在圖4中IPP模塊用于處理無效報文,其中?A表示收到的無效報文的集合,!e為處理之后的輸出,處理完無效報文之后協(xié)議返回到原來的狀態(tài)。此外,針對每一個狀態(tài),?Ni表示在該狀態(tài)下收到的不合適報文的集合。
圖3 路由協(xié)議模型
圖4 協(xié)議健壯性分析模型
需要注意的是,在分析模型的建立中,需要考慮到協(xié)議中沒有明確定義的狀態(tài),但此類狀態(tài)對于明確模型又非常重要。此時,可以自主地在模型中增加此類狀態(tài)。因此,模型中的狀態(tài)總數(shù)應(yīng)該≥協(xié)議中規(guī)定的狀態(tài)數(shù)量。PP=[?x,?y,?z,?a,?b,?m,!a,!b,!m,?A,!e,?N1,?N2,?N3,?N4,?N5]。轉(zhuǎn)移關(guān)系的生成步驟如下。
(1)明確初始狀態(tài)。在本協(xié)議健壯性分析模型中,初始狀態(tài)為S1-1,S2-1。
(2)確定終結(jié)狀態(tài)的集合。終結(jié)狀態(tài)指的是通過一次轉(zhuǎn)換就到達(dá)初始狀態(tài)的狀態(tài)。在圖4中,對于狀態(tài)S1-1,其終結(jié)狀態(tài)的集合記為S1-1End,S1-1End={S1-4,S1-5}。
(3)從每一個終結(jié)狀態(tài)開始,查找回溯到初始狀態(tài)的路徑。
(4)在回溯的路徑中,如果出現(xiàn)了交互報文組合中的輸入動作,則在回溯的路徑中添加對應(yīng)的輸出動作,開始遞歸回溯。
(5)輸出所有的轉(zhuǎn)移關(guān)系。
例如,在圖4中,其中一條轉(zhuǎn)移關(guān)系就是[S1-5,?m,S1-2,?x,S1-1,S2-2,?a,S2-1]。
之后,根據(jù)轉(zhuǎn)移關(guān)系編寫測試?yán)?Si,Ti,Result>指的是在轉(zhuǎn)移關(guān)系Si的情況下,生成測試?yán)齌i,其對應(yīng)的系統(tǒng)響應(yīng)為Result。對網(wǎng)絡(luò)路由協(xié)議的具體實現(xiàn)而言,如果滿足:?{Si∈L*}|
OSPF是互聯(lián)網(wǎng)上最為常見的鏈路狀態(tài)路由協(xié)議,使用在自治域內(nèi)部。OSPF路由協(xié)議通過收集路由域內(nèi)各路由器的鏈路狀態(tài),形成網(wǎng)絡(luò)的拓?fù)?,再根?jù)網(wǎng)絡(luò)拓?fù)?,利用最短路徑算法得出該路由器至其他網(wǎng)絡(luò)(主機)的路由表。適用于IPv4的OSPF v2版本于1998年發(fā)布,編號為RFC 2328[3]。OSPF將數(shù)據(jù)直接封裝在IP包中,所使用的IP協(xié)議號是89。由于IP協(xié)議不能保證協(xié)議報文的可靠傳送,OSPF自身實現(xiàn)了消息檢錯糾錯功能和報文的重傳機制。OSPFv2采用鑒權(quán)機制來保證安全,只允許可信任的OSPF路由器加入路由域。
路由器RT1和RT2 OSPF協(xié)議交互的流程見圖 5。初始階段,兩個路由器的OSPF協(xié)議均處于Down狀態(tài)。RT1在發(fā)出Hello報文后,收到了RT2的Hello報文,并在RT2發(fā)來的Hello報文中看到RT1已經(jīng)列入到鄰居列表,表示雙方已經(jīng)建立起雙向會話。之后,RT1和RT2通過交互數(shù)據(jù)庫描述(Database Description,DD)報文協(xié)商以誰為主進(jìn)行下一步的數(shù)據(jù)庫信息交互。數(shù)據(jù)庫信息交互完成后,RT1和RT2分別向?qū)Ψ秸埱箧溌窢顟B(tài)(Link State,LS)信息,實現(xiàn)雙方鏈路狀態(tài)數(shù)據(jù)庫信息的同步。鏈路狀態(tài)數(shù)據(jù)庫同步之后,RT1和RT2進(jìn)入Full狀態(tài),表示雙方的OSPF鄰接關(guān)系建立,并基于各自的鏈路狀態(tài)數(shù)據(jù)庫計算路由表。
根據(jù)RFC2328的定義和圖 5所示的協(xié)議交互流程,再考慮到系統(tǒng)在各狀態(tài)可能收到的報文情況,得到OSPFv2協(xié)議的IOLTS模型,如圖 6所示。為便于展示OSPF的IOLTS模型,無效報文處理模塊IPP分為4個邏輯模塊。為便于更好地分析OSPF路由協(xié)議的轉(zhuǎn)移狀態(tài),在圖 6中引入了協(xié)議中沒有的狀態(tài),用比正常狀態(tài)更小的、加粗的、斷續(xù)圓圈表示。
圖5 OSPF路由協(xié)議交互過程
圖6 OSPFv2 IOLTS模型
OSPFv2模型中的各動作說明見表1。Medium層展示RT1和RT2之間有消息交互的狀態(tài)和交互的消息內(nèi)容,其中RT1在狀態(tài)S1、S2、S4、S5、S6與RT2有消息交互,RT2在狀態(tài)S2、S8、S9、S10、S21與RT2有消息交互。交互的動作組合為:、、、、、、、、、。
表1 OSPFv2 IOLTS模型動作說明
根據(jù)第3部分提供的轉(zhuǎn)移路徑的生成方法,以RT1的S1-Down狀態(tài)作為初始狀態(tài),其對應(yīng)的終結(jié)狀態(tài)的集合S1-Down-End={S2-Init,S3-2Way,S4-ExStart,S5-Exchange,S6-Loading,S7-Full}。
接下來以S7-Full為例進(jìn)行回溯,查找回溯到初始狀態(tài)S1-Down的路徑,即S1-Down到S7-Full的轉(zhuǎn)移關(guān)系。首先,在RT1中查找其中一條轉(zhuǎn)移關(guān)系為:{RT1{S7-Full,!E11,S18-D7,?E9-y+011-R2,S9-ExchangeD,!E9-y010-R1,S5-Exchange,?E2,S1-Down}。
到達(dá)初始狀態(tài)之后,檢查現(xiàn)在的轉(zhuǎn)移關(guān)系是否存在消息交互的工作組合,發(fā)現(xiàn)有動作組合存在。在RT2中繼續(xù)查找至初始狀態(tài)的轉(zhuǎn)移關(guān)系,新的轉(zhuǎn)移為:{RT1{S7-Full,!E11,S18-D7,?E9-y+011-R2,S9-ExchangeD,!E9-y010-R1,S5-Exchange,?E2,S1-Down}RT2{S9-ExchangeD,Tau,S22-D9,?E9-y010-R1,S5-Exchange,?E2,S1-Down}}。
再次檢查新增的轉(zhuǎn)移關(guān)系中是否存在消息交互的工作組合,發(fā)現(xiàn)有 動作組合存在。在RT1中繼續(xù)查找至初始狀態(tài)的轉(zhuǎn)移關(guān)系,新的轉(zhuǎn)移為:{RT1{S7-Full,!E11,S18-D7,?E9-y+011-R2,S9-ExchangeD,!E9-y010-R1,S5-Exchange,?E2,S1-Down}RT2{S9-ExchangeD,Tau,S22-D9,?E9-y010-R1,S5-Exchange,?E2,S1-Down}RT1{S5-Exchange,?E2,S1-Down}}。在新增的轉(zhuǎn)移關(guān)系中沒有發(fā)現(xiàn)動作組合的存在。至此,一條完整的轉(zhuǎn)移關(guān)系查找完成。
考慮到最后生成的轉(zhuǎn)移關(guān)系跨越了系統(tǒng)中的兩個節(jié)點,為方便測試?yán)木帉?,可以將每一個節(jié)點相關(guān)的轉(zhuǎn)移關(guān)系生成一個測試?yán)?。在上述的轉(zhuǎn)移關(guān)系中,RT1和RT2相關(guān)的轉(zhuǎn)移關(guān)系可以生成3個測試?yán)渲信cRT1相關(guān)的測試?yán)秊?個,與RT2相關(guān)的測試?yán)秊?個。
路由協(xié)議的健壯性可以通過上述方法生成的測試?yán)齺磉M(jìn)行驗證。但在實際的驗證過程中,按照上述的分析模型會生成巨量的測試?yán)?,?zhí)行全部的測試?yán)枰^長的時間。而且根據(jù)不同的轉(zhuǎn)移關(guān)系生成的測試?yán)赡苡兄貜?fù),如何消除重復(fù)的測試?yán)?yōu)化同類無效報文測試?yán)⑻岣邷y試?yán)傻男实仁窍乱徊叫枰芯康闹攸c。