◆鄭雨曦
基于SDN和L3_learning組件的ARP欺騙防御研究
◆鄭雨曦
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 四川 610000)
ARP協(xié)議將IP地址轉(zhuǎn)換為物理地址,是TCP/IP協(xié)議棧中極其重要的協(xié)議。但是該協(xié)議缺乏認(rèn)證過程,攻擊者可以通過發(fā)送虛假偽造ARP分組的方式進行欺騙攻擊,使主機緩存中毒,無法進行正常通信。針對這一問題,本文在SDN(軟件定義網(wǎng)絡(luò))架構(gòu)下,構(gòu)建ARP代理的工作模式,研究POX控制器中的L3_learning組件的數(shù)據(jù)轉(zhuǎn)發(fā)功能,為ARP欺騙攻擊的防御提供一定參考價值。
ARP欺騙攻擊;SDN架構(gòu);ARP代理
ARP協(xié)議(地址解析協(xié)議)是TCP/IP協(xié)議棧中最重要的協(xié)議之一,將網(wǎng)絡(luò)中主機的目標(biāo)IP地址轉(zhuǎn)換為目標(biāo)MAC地址,實現(xiàn)網(wǎng)絡(luò)通信中極其重要的一步。但是該協(xié)議缺少認(rèn)證過程,主機無條件地將接收到的所有地址映射關(guān)系存入緩存表中,使攻擊者可以通過偽造數(shù)據(jù)包的方式輕易發(fā)起中間人攻擊,從而獲取通信數(shù)據(jù),造成巨大安全問題。針對該問題,現(xiàn)主要有以下幾類方法解決:
(1)使用加密機制:文獻[1]將ARP報文格式進行擴展,在數(shù)據(jù)幀的尾部加入包含DSA算法簽名的S-ARP首部,提供認(rèn)證服務(wù),但是該方法對標(biāo)準(zhǔn)ARP格式進行改變,在兼容性上存在嚴(yán)重問題;
(2)主動檢測:Pandey等人[2]使用ICMP數(shù)據(jù)包對發(fā)送ARP分組的主機進行嗅探,檢測該主機是否有發(fā)送偽造數(shù)據(jù)的嫌疑;
(3)基于SDN架構(gòu):在文獻[3]中,Sun等人通過控制器對網(wǎng)絡(luò)中信息進行分析檢測,并對端口監(jiān)控統(tǒng)計流量信息,達到欺騙攻擊檢測的目的。
本文針對ARP協(xié)議缺乏認(rèn)證的問題,在SDN架構(gòu)下,使用L3_learning組件處理數(shù)據(jù)分組,將地址映射信息存儲于arpTable中,代替主機對ARP分組進行回應(yīng),提高了ARP協(xié)議過程的安全性。
地址解析協(xié)議(ARP協(xié)議)將網(wǎng)絡(luò)中設(shè)備的IP地址轉(zhuǎn)換為MAC地址,在網(wǎng)絡(luò)通信過程中扮演重要的角色。當(dāng)源主機需要與目標(biāo)主機通信時,先在本地ARP緩存表中查看是否已經(jīng)存儲目標(biāo)主機的MAC地址,若有目標(biāo)MAC地址則可以直接發(fā)送信息,若沒有則廣播包含目的IP地址的ARP請求。目標(biāo)主機接收到該請求后,向源主機單播包含自己MAC地址的ARP回應(yīng)分組,源主機收到回應(yīng)后將目標(biāo)主機的地址映射信息存入本地緩存表中,以便于下次通信使用。
ARP協(xié)議在提供便捷地址轉(zhuǎn)換服務(wù)的同時,存在巨大的安全隱患:缺少身份認(rèn)證過程。當(dāng)網(wǎng)絡(luò)中設(shè)備接收到ARP分組后,不再對數(shù)據(jù)源頭的合法性進行驗證,直接將分組中信息存入緩存表,導(dǎo)致主機可能存儲錯誤映射信息。ARP欺騙攻擊過程如圖1所示。
圖1 ARP欺騙攻擊示意圖
攻擊過程主要有以下幾個步驟:
(1)主機B只知道主機A的IP地址,廣播目標(biāo)IP地址為主機A的IP地址,源MAC地址為主機B自己的MAC地址的ARP請求。
(2)攻擊者收到主機B廣播的請求,偽造虛假ARP回應(yīng)冒充主機A發(fā)送ARP回應(yīng),其中源IP地址為主機A的IP地址,源MAC地址為自己的MAC地址。主機B收到該回應(yīng)后,不再進行任何合法性驗證,直接將錯誤的地址映射關(guān)系存入本地緩存表中。
(3)接收到ARP回應(yīng)后,主機B開始與主機A通信,但是由于存儲了錯誤的MAC地址,數(shù)據(jù)被傳輸給攻擊者,攻擊者竊取數(shù)據(jù)后,再冒充主機B將數(shù)據(jù)重新傳輸給主機A。
整個欺騙攻擊過程中,主機A和B不知道攻擊者的存在,而信息已經(jīng)被竊取甚至篡改。
SDN技術(shù)分離了網(wǎng)絡(luò)的控制平面和數(shù)據(jù)平面,以可編程性的控制平面代替了傳統(tǒng)基于系統(tǒng)嵌入的控制平面,由軟件驅(qū)動的中央控制結(jié)點來自動化控制整個網(wǎng)絡(luò)[4]。
SDN架構(gòu)主要有兩大特點:數(shù)控分離和可編程性。首先,它將數(shù)據(jù)平面與控制平面分離,控制平面通過OpenFlow等控制轉(zhuǎn)發(fā)接口協(xié)議對網(wǎng)絡(luò)中的設(shè)備進行集中式控制,這一過程產(chǎn)生的控制流量在控制器和網(wǎng)絡(luò)設(shè)備間流轉(zhuǎn),與終端設(shè)備通信的數(shù)據(jù)流量相互獨立。其次,網(wǎng)絡(luò)設(shè)備的轉(zhuǎn)發(fā)模式由用戶編程確立,通過對控制結(jié)點的軟件更新可以快速確定網(wǎng)絡(luò)功能。
SDN基本架構(gòu)主要包含三個部分,如圖2所示。
圖2 SDN基本架構(gòu)
SDN架構(gòu)的出現(xiàn)雖然為互聯(lián)網(wǎng)提供一種全新的可能性和發(fā)展方向,使網(wǎng)絡(luò)功能和管理工作變得更加靈活,但是在傳統(tǒng)網(wǎng)絡(luò)中主流的安全方案如串行防火墻和IPS等不再適合在SDN中解決網(wǎng)絡(luò)安全問題[5],尋找新的安全防護方向成為急需攻克的巨大難題。
同時,在SDN架構(gòu)中并沒有對ARP協(xié)議缺乏認(rèn)證的漏洞作出任何改善和彌補。和在傳統(tǒng)網(wǎng)絡(luò)中一樣,攻擊者可以輕易偽造虛假的ARP分組并發(fā)送給網(wǎng)絡(luò)中的合法主機,待目標(biāo)主機將錯誤的地址映射信息存入本地后,竊取甚至篡改主機間的通信數(shù)據(jù)。這一漏洞直接關(guān)系著網(wǎng)絡(luò)服務(wù)的可用性、可靠性和數(shù)據(jù)安全性[6]。
本文基于SDN的特性,使用POX控制器的L3_learning組件對SDN架構(gòu)中ARP協(xié)議缺乏認(rèn)證問題進行改進。
ARP代理的工作模式利用SDN的集中式結(jié)構(gòu),讓控制器代替網(wǎng)絡(luò)設(shè)備來回應(yīng)所有查詢。其工作流程示意圖如圖3所示。
圖3 ARP代理示意圖
SDN控制器建立并維護IP-MAC地址綁定信息的數(shù)據(jù)表arpTable,交換機接收到ARP請求數(shù)據(jù)包后直接轉(zhuǎn)發(fā)給控制器??刂破鹘邮盏紸RP請求后,將ARP回應(yīng)分組作為OpenFlow Packet-out消息發(fā)送給交換機,由交換機發(fā)送給相應(yīng)的端口。
POX控制器是一款完全使用python語言編寫的SDN控制器,它的數(shù)據(jù)轉(zhuǎn)發(fā)功能由forwarding組件包實現(xiàn),該組件包由多種轉(zhuǎn)發(fā)組件組成,其中最常見的是L2_learning組件,通過該組件,OpenFlow交換機可以實現(xiàn)二層自學(xué)習(xí)功能。
而L3_learning比L2_learning組件增加了ARP代理的功能,可以對控制器的報文進行檢測,并代替網(wǎng)絡(luò)設(shè)備構(gòu)造ARP請求與回應(yīng)分組。其工作原理如圖4所示。
圖4 L3_learning組件的處理流程示意圖
L3_learning組件的處理流程為以下步驟:
(1)判斷分組事件是否可以解析,若不能則忽略。
(2)判斷交換機是否已經(jīng)被存儲于緩存表中,若不存在,則將其加入到arpTable中。
(3)判斷分組是否為LLDP分組,若是則忽略該分組。
(4)判斷是否為IPv4分組,將地址、端口信息存入arpTable。
(5)若有源IP地址相關(guān)未發(fā)送的分組,查找arpTable中是否存儲目標(biāo)IP地址,有則直接發(fā)送消息,無則先暫存數(shù)據(jù)并發(fā)送ARP請求數(shù)據(jù)包,獲取目標(biāo)IP地址信息。
(6)若為ARP數(shù)據(jù)包,將地址、端口信息存儲在arpTable中。
(7)判斷分組是否為ARP請求,若為ARP請求,則查找arpTable中是否存在目標(biāo)IP地址,有則發(fā)送回應(yīng),無則洪泛請求。
實驗環(huán)境為Ubuntu操作系統(tǒng)。使用MININET仿真平臺和POX控制器,arpspoof工具進行攻擊,Wireshark進行數(shù)據(jù)抓包。
MININET是由斯坦福大學(xué)Nick McKeown研究小組開發(fā)的輕量級SDN研發(fā)和測試平臺[7]。它支持OpenFlow等接口協(xié)議、可以自定義網(wǎng)絡(luò)拓撲結(jié)構(gòu)。在MININET中可以使用Wireshark在網(wǎng)絡(luò)通信過程進行抓包。安裝MININET后,在Linux系統(tǒng)虛擬機上通過執(zhí)行python文件或者編寫命令均可以搭建SDN網(wǎng)絡(luò)。示例命令如下:
其中,--controller=remote代表網(wǎng)絡(luò)連接遠程控制器;--topo=tree,n,m代表使用樹形拓撲,其中深度為n,寬度為m;--mac表示設(shè)置MAC地址,增加MAC地址的可讀性。
在Ubuntu虛擬機上運行POX控制器,控制器加載L3_learning組件和proto組件包中的arp_responder組件。命令如下:
然后使用MININET構(gòu)建SDN網(wǎng)絡(luò)拓撲,并遠程連接POX控制器,最后使用Linux系統(tǒng)自帶ARP欺騙工具arpspoof進行模擬攻擊。
本文在SDN架構(gòu)下,針對ARP協(xié)議缺少認(rèn)證的漏洞對ARP欺騙防御方案進行研究?;赟DN架構(gòu)的特點,提出使用ARP代理進行改進的方案。該方案在POX控制器上加載L3_learning組件實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)功能,使控制器在運行的過程中代替網(wǎng)絡(luò)設(shè)備進行ARP分組的構(gòu)造和發(fā)送。
該方案解決了非法攻擊者的身份冒充問題,同時不對標(biāo)準(zhǔn)ARP協(xié)議做出修改,克服了傳統(tǒng)網(wǎng)絡(luò)中身份認(rèn)證解決方案的兼容性問題。
[1]D.Bruschi,A. Ornaghi and E.Rosti.S-ARP: a secure address resolution protocol[C]. 19th Annual Computer Security Applications Conference,2003.
[2]P. Pandey.Prevention of ARP spoofing:A probe packet based technique[C].2013 3rd IEEE International Advance Computing Conference IACC),2013.
[3]S.Sun,X.Fu,B.Luo and X.Du.Detecting and Mitigating ARP Attacks in SDN-Based Cloud Environment[C].IEEE INFOCOM 2020-IEEE Conference on Computer Communications Workshops(INFOCOM WKSHPS),2020.
[4]左青云,陳鳴,趙廣松,等.基于OpenFlow的SDN技術(shù)研究[J].軟件學(xué)報,2013.
[5]郭春梅,張如輝,畢學(xué)堯.SDN網(wǎng)絡(luò)技術(shù)及其安全性研究[J].信息網(wǎng)絡(luò)安全,2012.
[6]王淑玲,李濟漢,張云勇,等.SDN架構(gòu)及安全性研究[J].電信科學(xué),2013.
[7]李艷,郝志安,李寧,等.基于mininet的SDN架構(gòu)仿真研究[J].計算機與網(wǎng)絡(luò),2014.