陳 鐳,楊章靜,黃 璞
(1. 南京審計大學(xué) 信息工程學(xué)院,江蘇 南京 211815;2. 南京大學(xué) 計算機軟件新技術(shù)國家重點實驗室,江蘇 南京 210232)
軟件定義網(wǎng)絡(luò)(software defined networking,SDN)作為一種新型的網(wǎng)絡(luò)架構(gòu)[1-2],把網(wǎng)絡(luò)控制平面與數(shù)據(jù)平面進行分離。其中控制平面擁有網(wǎng)絡(luò)全局視圖,集中管控網(wǎng)絡(luò)資源,數(shù)據(jù)平面只轉(zhuǎn)發(fā)數(shù)據(jù),大大簡化了網(wǎng)絡(luò)的配置和管理。SDN 這一顛覆性的理念被認為將對未來網(wǎng)絡(luò)產(chǎn)生革命性的影響,在很大程度上代表了未來網(wǎng)絡(luò)的發(fā)展方向,因此將SDN 引入計算機網(wǎng)絡(luò)教學(xué)是必然趨勢。計算機網(wǎng)絡(luò)課程教學(xué),十分注重實踐教學(xué),通過各種不同的組網(wǎng)實驗,讓學(xué)生理解和掌握計算機網(wǎng)絡(luò)的基本原理。
目前大多高校SDN 教學(xué)實驗中普遍存在實體硬件設(shè)備不足及實驗場地的限制,很難大規(guī)模開展SDN實體設(shè)備教學(xué)實驗。學(xué)生在SDN 的學(xué)習(xí)上操作受限,難以深入理解SDN 實驗教學(xué)的原理和內(nèi)涵。虛擬仿真實驗具有成本低、效率高、功能全、靈活等優(yōu)點,是高等教育信息化建設(shè)和實驗教學(xué)的重要手段,在SDN教學(xué)實驗中可以發(fā)揮重要的作用[3-6]。
本文詳細介紹了SDN 的背景知識;對比展示了SDN環(huán)境下幾種不同的DoS攻擊場景[7],包括控制平面、數(shù)據(jù)平面及網(wǎng)絡(luò)主機遭受洪范式或隱藏式拒絕服務(wù)(denial of service,DoS)攻擊的不同特點;采用輕量級網(wǎng)絡(luò)仿真平臺Mininet 搭建SDN 網(wǎng)絡(luò),使用Floodlight控制器軟件和sFlow 流量監(jiān)控軟件,設(shè)計并實現(xiàn)了SDN環(huán)境下的洪范式和隱藏式DoS 攻擊和防御仿真實驗[8]。
開放式網(wǎng)絡(luò)基金會(ONF)提出的OpenFlow 協(xié)議,初步實現(xiàn)了SDN 的核心思想,如圖1 所示,SDN架構(gòu)從底向上分別是基礎(chǔ)設(shè)施層、控制層和應(yīng)用層。
基礎(chǔ)設(shè)施層由支持OpenFlow 協(xié)議的交換機組成,負責(zé)數(shù)據(jù)包的匹配和轉(zhuǎn)發(fā)。控制層獲取底層交換機的信息,實時維護網(wǎng)絡(luò)拓撲和狀態(tài),并為應(yīng)用層提供服務(wù)接口。應(yīng)用層包含各種業(yè)務(wù)和應(yīng)用,通過控制層提供的接口調(diào)用、編排網(wǎng)絡(luò)資源。底層網(wǎng)絡(luò)設(shè)備只負責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),控制層集中掌控網(wǎng)絡(luò)資源,通過應(yīng)用程序就可以完成SDN 全局網(wǎng)絡(luò)的管理。這種架構(gòu)大大降低了網(wǎng)絡(luò)的復(fù)雜度和搭建成本,加速了網(wǎng)絡(luò)部署周期,提高了網(wǎng)絡(luò)管理的靈活性。
圖1 SDN 三層架構(gòu)圖
流表是交換機數(shù)據(jù)轉(zhuǎn)發(fā)功能的核心。OpenFlow1.0協(xié)議中規(guī)定每個流表項由3 部分組成:包頭域、計數(shù)器和動作。
包頭域用于數(shù)據(jù)包的包頭內(nèi)容進行匹配,共有12個匹配項,如表1 所示。包含了傳統(tǒng)網(wǎng)絡(luò)2 層到4 層的尋址信息(Mac、IP、端口)。OpenFlow 交換機可以看成是一種廣義的轉(zhuǎn)發(fā)設(shè)備,同時具備了傳統(tǒng)網(wǎng)絡(luò)交換機、路由器、防火墻的功能。
計數(shù)器用于統(tǒng)計匹配到的數(shù)據(jù)包信息,可以對交換機中的每個數(shù)據(jù)流、端口、隊列、流表分別統(tǒng)計。
動作是指對匹配到的數(shù)據(jù)包的后續(xù)處理方式。OpenFlow 交換機如果沒有定義動作,默認情況下數(shù)據(jù)包被丟棄。常見的動作有:轉(zhuǎn)發(fā)、丟棄、排隊等。
表1 流表包頭域
當主機h1 與主機h2 進行通信時,如圖2 所示,大致包含以下步驟[9]:
步驟1 主機h1 向交換機s1 發(fā)送到主機h2 的數(shù)據(jù)包;交換機s1 查詢流表,若s1 的流表中有匹配項,則轉(zhuǎn)到步驟4。
步驟2 s1 流表中無匹配項,則s1 通過Packet-In消息將數(shù)據(jù)包轉(zhuǎn)發(fā)給控制器。
步驟3 控制器收到s1 的請求信息后,生成相應(yīng)的應(yīng)答策略,并通過Packet-Out 消息下發(fā)至s1。
步驟4 s1 執(zhí)行流表中的應(yīng)答策略,將數(shù)據(jù)包轉(zhuǎn)發(fā)至交換機s2。當交換機s2 收到數(shù)據(jù)包以后,若s2 的流表中有匹配項,則轉(zhuǎn)到步驟7;若s2 的流表中無匹配項,則轉(zhuǎn)到步驟5。
步驟5 與步驟2 相似,s2 流表中無匹配項,則s2 通過Packet-In 消息將數(shù)據(jù)包轉(zhuǎn)發(fā)給控制器。
步驟6 與步驟3 相似,控制器收到s2 的請求信息后,生成相應(yīng)的應(yīng)答策略,并通過Packet-Out 消息下發(fā)至s2。
步驟7 s2 執(zhí)行流表中的應(yīng)答策略,將數(shù)據(jù)包轉(zhuǎn)發(fā)至主機h2。
圖2 基于OpenFlow 的SDN 工作流程
DoS 攻擊通過在短時間內(nèi)向目標網(wǎng)絡(luò)或主機發(fā)送大量的數(shù)據(jù)包,占滿帶寬和服務(wù)資源。當正常用戶進行網(wǎng)絡(luò)通信時,就會出現(xiàn)請求異?;蚍?wù)出錯。DoS攻擊簡單有效,對正常的網(wǎng)絡(luò)通信造成嚴重影響,是網(wǎng)絡(luò)安全領(lǐng)域關(guān)注的重點。
(1)控制器洪范式攻擊[10]。當一個數(shù)據(jù)包沒有匹配到任何流表項時,若交換機緩存未滿,交換機將緩存報文內(nèi)容,并將報文頭封裝在Packet-In 消息中轉(zhuǎn)發(fā)給控制器;一旦交換機緩存滿了,交換機會直接將整個報文都封裝在Packet-In 消息中轉(zhuǎn)發(fā)給控制器,這種方式會大大加重控制器的負擔。此外,控制器有一個路徑計算模塊,當大量偽造的數(shù)據(jù)包到來時,控制器無法計算出完整的路徑信息,會占用控制器大量計算資源,導(dǎo)致控制器無法提供正常服務(wù)。
(2)控制器隱藏式攻擊[11]??刂破鞯耐負浒l(fā)現(xiàn)機制會受到一種隱藏式DoS 攻擊影響??刂破髦芷谛缘叵蛩薪粨Q機下發(fā)封裝有LLDP(鏈路層發(fā)現(xiàn)協(xié)議)幀的Packet-Out 消息。攻擊者在探測LLDP 幀周期的基礎(chǔ)上,對交換機之間鏈路發(fā)起DoS 攻擊,造成LLDP幀連續(xù)丟失,使得控制器誤以為該鏈路斷開,無法準確獲取網(wǎng)絡(luò)拓撲信息。
(1)交換機洪范式攻擊[12]。OpenFlow 交換機流表的存儲能力通常有限,攻擊者針對交換機發(fā)起洪范式DoS 攻擊,短時間內(nèi)產(chǎn)生大量的虛假流請求,出現(xiàn)大量的無用流表項,這些規(guī)則將填滿交換機流表,從而導(dǎo)致合法流量被丟棄。
(2)交換機隱藏式攻擊[13]。SDN 將數(shù)據(jù)層的控制能力完全抽離,數(shù)據(jù)層完全失去了主動監(jiān)管網(wǎng)絡(luò)流量的可能性,因此,數(shù)據(jù)層隱藏式DoS 攻擊變得可行。數(shù)據(jù)層隱藏式DoS 攻擊通過在流表中產(chǎn)生長期存在的流表規(guī)則,從而達到占用流表的攻擊目的。
當攻擊者的目標是網(wǎng)絡(luò)主機時,會操縱僵尸網(wǎng)絡(luò)向目標主機發(fā)送大量并發(fā)攻擊流,從控制器和交換機的角度看,這些流量是正常流量,因為都是合法主機發(fā)送的合法數(shù)據(jù)流,但這些流量最終在目標主機處聚合,形成總量很大的異常流量[14],導(dǎo)致目標主機工作癱瘓。
當網(wǎng)絡(luò)流量壓力比較大,而又無法確認當前流量是否為攻擊流時,可以采用通過流表項將大量的流量轉(zhuǎn)發(fā)到網(wǎng)絡(luò)中的監(jiān)控設(shè)備(例如防火墻),以此轉(zhuǎn)移交換機的壓力,也可以設(shè)置IP 地址的黑白名單,實現(xiàn)對數(shù)據(jù)流的輔助處理(見表2)。
表2 SDN 環(huán)境下DoS 攻擊特點及應(yīng)對方法
硬件環(huán)境:Intel(R) Core(TM) i5-8500U CPU @3.00 GHz 處理器,8 GB DDR4 內(nèi)存,240 GB SSD 硬盤。
軟件環(huán)境:Ubuntu14.04 64 位操作系統(tǒng),JDK1.7,Mininet 2.2.1,Open vSwith2.0.2,OpenFlow1.0 協(xié)議,F(xiàn)loodlight 0.9 版本控制器,sFlow-rt 2.0。
Mininet 是一套擴展性很強的網(wǎng)絡(luò)仿真實驗平臺,除了可以用于SDN 網(wǎng)絡(luò)實驗,還可以用于傳統(tǒng)網(wǎng)絡(luò)實驗。Mininet 能夠在一臺單獨的計算機上虛擬出網(wǎng)絡(luò)主機、網(wǎng)絡(luò)鏈路和交換設(shè)備等,組成一個完整的虛擬網(wǎng)絡(luò)。Floodlight 控制器是一個模塊化、高可用、支持OpenFlow 協(xié)議的控制器。sFlow 是一款實時監(jiān)測網(wǎng)絡(luò)流量的監(jiān)控軟件。sFlow 有Agent 和Collector 兩個模塊,Agent 內(nèi)嵌于網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備(如交換機、路由器),獲取設(shè)備接口的統(tǒng)計信息,將信息封裝成報文發(fā)送給Collector,Collector 對報文分析、匯總、生成流量報告。
(1)啟動Floodligh 控制器。
進入 floodlight 目錄,輸入命令 java -jar target/floodlight.jar
(2)創(chuàng)建網(wǎng)絡(luò)拓撲,連接控制器。
mn --controller=remote,ip=192.168.1.1,port=6633 --topo single,3 --switch ovsk,protocols=OpenFlow10
(3)瀏覽器訪問Floodlight。
打開Floodlight 控制器的管理地址:http://localhost:8080/ui/index.html。從圖形界面可看到,Mininet 成功連接到Floodlight,并可以看到Mininet 生成的網(wǎng)絡(luò)拓撲。
(4)配置sFlow Agent。
先要在虛擬交換機端口處配置 Agent,這樣Collector 才能對收集到的流量信息進行分析和呈現(xiàn)。切換到交換機s1 窗口,開啟OvS 的sFlow 功能,配置Agent 的命令如下:
ovs-vsctl -- --id=@sflow create sflow agent=eth0 target="192.168.1.1:6343" header=128 sampling=10 polling=1 -- set bridge s1 sflow=@sflow
參數(shù)說明:agent,監(jiān)控 eth0 網(wǎng)卡產(chǎn)生的流量;target,sFlow-rt 的ip,默認端口6343;bridge,需要開啟sFlow 的網(wǎng)橋;sampling,采樣率,表示每隔多少個Packet 取樣一次;polling,輪詢時間,每隔多少秒輪詢一次。
(5)配置sFlow-rt Collector。
保持Mininet 運行的終端,再打開一個新的終端窗口,進入sFlow-rt 安裝目錄,輸入./start.sh 命令,啟動 sFlow-rt。sFlow Collector 的默認監(jiān)聽端口為6343,通過瀏覽器輸入http://localhost:8008 打開監(jiān)控頁面。Agent 配置成功后,可以通過對其WebUI 中的Agents選項卡中192.168.1.1條目的網(wǎng)絡(luò)流量進行查看。
最終本文實驗網(wǎng)絡(luò)拓撲如圖3 所示。網(wǎng)絡(luò)中一共有1 臺虛擬交換機s1,s1 上連接3 臺客戶機,分別為h1、h2、h3,為了方便測試網(wǎng)絡(luò)連通性,在Mininet平臺中對網(wǎng)絡(luò)執(zhí)行指令pingall,可測試出主機間能夠相互通信。同時,s1 的其他端口分別連接Floodlight控制器和sFlow Collector 端。
圖3 SDN 環(huán)境下DoS 攻防實驗網(wǎng)絡(luò)拓撲圖
(1)模擬發(fā)起洪范式DoS 攻擊。
在Mininet 終端中執(zhí)行,h1 ping -f h2,-f 參數(shù)的意思是Ping Flood,模擬Flood Attack。可以看到,監(jiān)測流量迅速飆升,如圖4 中第1 階段所示。在系統(tǒng)終端執(zhí)行top 命令,查看到CPU 占用率也會突然增高。
圖4 洪范式DoS 攻防實驗效果圖
(2)控制器向SDN 交換機增加流表規(guī)則。
通過Floodlight 控制器提供的RESTful 接口向交換機s1 下發(fā)流表,丟棄攻擊流量。在Floodlight 控制器中增加流表的命令如下:
curl -d "{"switch": "00:00:00:00:00:00:00:01","name":"flow-drop","cookie":"0","priority":"32768",in_port":"1","active":"true","eth_type":"0x0800","ip_proto":"0x01","idle_timeout":"0","actions":"output=no-forwar d"}" http://192.168.1.1:8080/wm/staticflowpusher/json
參數(shù)說明:name,給流表命名;cookie,流表規(guī)則標識;priority,優(yōu)先級;in_port,入端口;active,是否激活;eth_type,以太網(wǎng)類型;ip_proto,協(xié)議類型;idle_timeout,存活時間;actions,動作。
上述流表下發(fā)到s1 以后,監(jiān)測流量迅速下降,如圖4 中第2 階段所示。所有經(jīng)過交換機1 號端口的ICMP 流量都不會被轉(zhuǎn)發(fā)出去,其他類型的流量(如HTTP)則可以正常轉(zhuǎn)發(fā),即h1 向h2 發(fā)送的Flood Attack 數(shù)據(jù)包迅速地被完全Drop 掉了,成功實現(xiàn)了對洪范式DoS 攻擊的防御。
(3)刪除SDN 交換機中流表規(guī)則。
為證明確實是因為添加了"flow-drop"流表項,阻斷了Dos 攻擊流量,最后通過Floodlight 控制器提供的RESTful 接口向交換機s1 下發(fā)刪除流表命令:
curl -X DELETE -d "{"name":"flow-drop"}"http://192.168.1.1:8080/wm/staticflowpusher/json
上述流表下發(fā)到s1 以后,監(jiān)測到流量又迅速飆升,如圖4 中第3 階段所示,從而可以證明SDN 交換機中的流表項擁有管控流量的能力。
默認的流表規(guī)則采用空閑超時機制,即在規(guī)定時間內(nèi),如果沒有數(shù)據(jù)包匹配,則該流表規(guī)則超時被刪除;如果有數(shù)據(jù)包匹配,則重新更新存活時間,該機制使得一種數(shù)據(jù)層隱藏式DoS 攻擊變得可行,從而達到長期占用流表的目的。
一條流表規(guī)則的基本字段主要有:cookie,流表規(guī)則標識;priority,優(yōu)先級,范圍為0-65535,值越大,優(yōu)先級越高;match,匹配規(guī)則;action,動作;packets,流表已匹配包數(shù);bytes,流表已匹配字節(jié)數(shù);age,流表已存在時間;timeout,存活時間,沒有數(shù)據(jù)包匹配,流表會在到達給定時間后被自動刪除。
(1)模擬隱藏式DoS 攻擊。
因timeout 時間默認設(shè)置為5 s,所以在Mininet終端中執(zhí)行指令,h1 ping –i 4 h2,-i 參數(shù)模擬每隔4 s從h1 主機(1 號端口)向h2 主機(2 號端口)發(fā)送ping 指令數(shù)據(jù)包。
(2)周期性查詢流表規(guī)則。
周期性的通過Floodlight 控制器的UI 界面查詢交換機s1 中的流表規(guī)則如圖5 所示。從圖5 中可看出,在timeout 為5 s 的情況下,當一條流表規(guī)則age 時間很長,而且匹配的packets 相對不多的情況下,很有可能是針對SDN 交換機的隱藏式DoS 攻擊造成的。
圖5 OpenFlow1.0 交換機中端口和流表項
(3)刪除長期存在的流表規(guī)則。
對被懷疑為隱藏式DoS 攻擊的流表規(guī)則,通過Floodlight 控制器提供的RESTful 接口向交換機s1 下發(fā)刪除流表命令進行刪除:curl -X DELETE -d"{"cookie":"90071992524740992"}" http://192.168.1.1:8080/wm/staticflowpusher/json。
SDN 可以對網(wǎng)絡(luò)流量進行實時監(jiān)控、提取、分析,及時調(diào)整流量。本文采用網(wǎng)絡(luò)仿真平臺Mininet 搭建SDN 網(wǎng)絡(luò),使學(xué)生在SDN 的學(xué)習(xí)中不受硬件條件的限制,降低了學(xué)習(xí)門檻,提高了學(xué)生實踐的靈活性。結(jié)合使用Floodlight 控制器軟件和sFlow 流量監(jiān)控軟件,展示了拓撲創(chuàng)建、主機間聯(lián)通測試、流表下發(fā)、流量監(jiān)測等過程,最后以SDN 環(huán)境下的洪范式和隱藏式DoS 攻防案例進行實驗教學(xué),使學(xué)生能夠深入理解SDN 網(wǎng)絡(luò)的機理和內(nèi)涵。