汪小琦,胡曦明,2*,李 鵬,2,馬 苗,2
(1.陜西師范大學(xué) 計算機科學(xué)學(xué)院,陜西 西安 710119;2.現(xiàn)代教學(xué)技術(shù)教育部重點實驗室,陜西 西安 710119)
在物聯(lián)網(wǎng)、云計算和人工智能等新一輪信息科技革命的熱潮中,個人上網(wǎng)加速向萬物互聯(lián)縱深推進成為“互聯(lián)網(wǎng)+”戰(zhàn)略推動新興產(chǎn)業(yè)轉(zhuǎn)型升級的標志性和基礎(chǔ)性的重要驅(qū)動力。然而,面對互聯(lián)網(wǎng)醫(yī)療、智能家居和智慧校園等新行業(yè)新場景催生的高密度、大規(guī)模端系統(tǒng)互聯(lián)需求,傳統(tǒng)IPv4地址體系在可分配地址空間不足、地址管理機制不完備和地址安全性保障缺失等關(guān)鍵技術(shù)性能方面存在制約性短板的問題日益凸顯。
IPv6作為全球公認的下一代互聯(lián)網(wǎng)技術(shù)[1],能夠以充足的網(wǎng)絡(luò)地址、先進的管理機制和新穎的安全性保障為新一代信息技術(shù)發(fā)展提供廣闊的創(chuàng)新空間。相對于IPv4體系,IPv6地址管理技術(shù)既是最具代表性的革新與進步,又是整個IPv6體系中最為基礎(chǔ)和關(guān)鍵的技術(shù)之一。面向未來物聯(lián)網(wǎng)、云計算、人工智能等新技術(shù)產(chǎn)生的巨大變革,IPv6地址管理在協(xié)議、機制等方面不可避免地將面臨新的安全性挑戰(zhàn)[2]。在進一步深化產(chǎn)教融合,加強教育鏈與產(chǎn)業(yè)鏈有機銜接的背景下,該文聚焦IPv6網(wǎng)絡(luò)安全實驗技術(shù)創(chuàng)新驅(qū)動課程教學(xué)改革和人才培養(yǎng)高質(zhì)量發(fā)展,在分析IPv6地址管理協(xié)議的基礎(chǔ)上,針對當(dāng)前IPv6地址管理安全實驗技術(shù)亟待發(fā)展的現(xiàn)實需求,提出了“Python+仿真平臺”的創(chuàng)新設(shè)計并在教學(xué)實踐中具體應(yīng)用。
IPv6地址管理協(xié)議體系由兩部分組成,一部分是對IPv4地址管理方式的繼承,包括基于手動分配的地址靜態(tài)配置與基于DHCPv6的有狀態(tài)地址自動配置[3];另一部分是新增的IPv6無狀態(tài)地址自動配置SLAAC(stateless address auto configuration)方式。這樣的設(shè)計既能夠兼容原有IPv4地址體系[4],又能夠讓IPv6地址分配和管理更加高效。
IPv6無狀態(tài)地址自動配置是通過網(wǎng)絡(luò)層的鄰居發(fā)現(xiàn)協(xié)議NDP(neighbor discovery protocol)實現(xiàn)的,地址信息分配與管理基于四種類型的ICMPv6協(xié)議報文,分別是:路由請求報文RS(router solicitation)、鄰居請求報文NS(neighbor solicitation)、路由通告報文RA(router advertisement)、鄰居通告報文NA(neighbor advertisement)。NDP發(fā)現(xiàn)鏈路上彼此連接的鄰居節(jié)點和地址配置信息[5],在實時維護與鄰居節(jié)點之間的鏈路可達性與可達路徑等鏈路狀態(tài)的基礎(chǔ)上,實現(xiàn)對鄰居節(jié)點的IPv6地址自動分配與跟蹤管理。
鄰居發(fā)現(xiàn)協(xié)議NDP實現(xiàn)了IPv6無狀態(tài)地址自動配置機制[6],機制分為用戶發(fā)送RS報文請求前綴和網(wǎng)關(guān)路由器周期性發(fā)送攜帶配置信息的RA報文兩種方式,具體報文交互過程如下:
①終端用戶根據(jù)一定規(guī)則生成臨時鏈路本地地址,并在局域網(wǎng)內(nèi)發(fā)送該地址的NS報文,進行鏈路本地地址重復(fù)地址檢測DAD(duplicate address detection)。
②網(wǎng)關(guān)發(fā)送包含地址前綴等配置信息的RA報文,使終端用戶成功配置全球單播地址;如果終端用戶未接收到RA報文,可主動發(fā)送RS報文,請求網(wǎng)關(guān)的RA報文配置全球單播地址。
③終端用戶發(fā)送包含全球單播地址的NS報文,進行全球單播地址重復(fù)地址檢測。
此后,位于IPv6局域網(wǎng)鏈路上的終端用戶成功配置鏈路本地地址和全球單播地址兩類地址。從上述過程可以看到,鄰居發(fā)現(xiàn)協(xié)議NDP通過RS、NS、RA和NA報文自動交互,實現(xiàn)了IPv6無狀態(tài)地址自動配置,可極大地緩解地址配置過程中人工和服務(wù)器壓力,具有全自動和即插即用等優(yōu)勢,非常有利于未來智能化應(yīng)用的發(fā)展,但DAD過程對移動節(jié)點地址切換具有一定時延[7]。
由于IPv6網(wǎng)絡(luò)實驗室設(shè)備投入大、建設(shè)周期長,目前主要依賴仿真平臺開展IPv6實驗教學(xué)。仿真平臺具有技術(shù)成熟、運行穩(wěn)定和便于操作等優(yōu)勢,但在面向大規(guī)模學(xué)生群體的探究性實驗中,仿真平臺往往表現(xiàn)出可開發(fā)性、可拓展性不足[8],常局限于單一的攻擊和防御模式[9]。因此該文提出Python開發(fā)與仿真平臺融合的IPv6安全性實驗新技術(shù),如圖1所示,既可有效利用仿真平臺成熟、穩(wěn)定的優(yōu)勢,又可融入自主開發(fā)實驗要素,滿足開展創(chuàng)新性、高階性和具有挑戰(zhàn)度的個性化探究實驗。
圖1 “Python+仿真平臺”實驗技術(shù)
(1)Python開發(fā)層。
開發(fā)層可向上為實驗人員提供個性化、開放式的實驗定制開發(fā)接口,向下通過輸入輸出接口與實驗運行模塊實現(xiàn)過程交互。
開發(fā)人員可通過Python內(nèi)置scapy模塊或自主編程等多種方式開發(fā)實驗插件,實現(xiàn)探測、路由跟蹤等網(wǎng)絡(luò)行為,數(shù)據(jù)包組包發(fā)包等數(shù)據(jù)源對象以及控制邏輯等功能。
(2)實驗運行層。
仿真平臺可采用華為、華三等主流模擬器,用來實現(xiàn)路由器、交換機等設(shè)備的虛擬仿真[10],為開發(fā)層提供支撐實驗的基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)和仿真運行環(huán)境。Python程序與仿真平臺既相互協(xié)同工作,又相對獨立,相互之間通過通道式的雙向接口進行數(shù)據(jù)和控制的交互。
(3)測量分析層。
測量分析層通過數(shù)據(jù)接口實時接收實驗運行模塊輸出的實驗數(shù)據(jù),通過協(xié)議分析工具如Wireshark等實現(xiàn)對實驗的過程性分析。
如何基于Python實現(xiàn)可編程攻擊方,控制報文生成并發(fā)送到仿真平臺中與輸入仿真過程是“Python+仿真平臺”的關(guān)鍵,具體可分為四個部分。
(1)創(chuàng)建交互接口。
交互接口是一種通道式的雙向接口,連接著Python開發(fā)層與實驗運行層,負責(zé)Python程序與仿真軟件之間的運行交互。通過本地主機搜尋并激活本地“環(huán)回適配器”后,仿真平臺創(chuàng)建“云對象”橋接本地環(huán)回網(wǎng)絡(luò),從而完成Python程序與仿真軟件的接口創(chuàng)建。該方法提高了仿真平臺的可操作性,節(jié)省了創(chuàng)建虛擬網(wǎng)卡等繁瑣工作,并且避免了綁定真實網(wǎng)絡(luò)網(wǎng)卡導(dǎo)致實驗操作引起的公共網(wǎng)絡(luò)故障。
(2)過程控制。
Python開發(fā)層通過交互接口實現(xiàn)對仿真平臺實驗運行報文的實時監(jiān)聽,然后嗅探、過濾出目標類型的報文,實現(xiàn)對實驗狀態(tài)的偵聽監(jiān)控。Python程序?qū)崿F(xiàn)示例如下:
示例一:監(jiān)聽本地環(huán)回網(wǎng)卡功能實現(xiàn)需要開發(fā)層確定接受鏈路層數(shù)據(jù)幀類型的協(xié)議和實驗網(wǎng)卡名稱,具體程序為:listen_socket=conf.L2listen(type=ETH_P_ALL,iface="Microsoft KM-TEST環(huán)回適配器")。
示例二:獲取仿真平臺運行的網(wǎng)卡,然后確定過濾報文的類型和數(shù)量,可以實現(xiàn)嗅探過濾報文(如icmpv6報文)的同時對報文調(diào)用響應(yīng)方法,并返回響應(yīng)結(jié)果。具體程序為:package=sniff(iface="Microsoft KM-TEST 環(huán)回適配器",filter="ICMPv6",count=20,prn=pack_callback)。
(3)攻擊模式。
攻擊模式具體包括單線程攻擊和多線程攻擊。處于開發(fā)層的Python程序?qū)崟r監(jiān)控實驗運行層中主機的地址配置信息,如果有新的主機加入實驗,Python程序則對應(yīng)新建主機控制線程,并將線程號與該主機的MAC地址綁定之后存儲形成字典數(shù)據(jù)。
(4)數(shù)據(jù)源生成。
開發(fā)層的Python程序可以與實驗運行層的仿真軟件交互實驗數(shù)據(jù),通過Python開發(fā)自主設(shè)計報文類型并賦值,可以實現(xiàn)偽造、錯造和竊取報文等攻擊操作,其中偽造報文的關(guān)鍵實現(xiàn)如表1所示。
表1 偽造報文關(guān)鍵技術(shù)
開發(fā)Python可編程攻擊方可以根據(jù)具體實驗需要,自主設(shè)計報文類型和賦值,并可根據(jù)整個實驗進程自動調(diào)整發(fā)包種類和報文值,具有個性化、智能化的技術(shù)優(yōu)點。
基于上述“Python+仿真平臺”實驗技術(shù),通過鏈路本地DAD和地址前綴欺騙的攻擊與防御實例研究,進一步豐富IPv6實驗教學(xué)內(nèi)容和提升IPv6網(wǎng)絡(luò)安全性。
(1)環(huán)境搭建。
實驗運行層部署華為eNSP模擬器為仿真平臺,建立的網(wǎng)絡(luò)拓撲如圖2所示,其中以基于Python開發(fā)的“云對象”為攻擊方,以路由器UserA和UserB為被攻擊方。
圖2 實驗拓撲
(2)環(huán)境配置。
首先在實驗運行層的仿真平臺進行無狀態(tài)地址自動配置實驗,作為后續(xù)攻擊與防御實驗的基礎(chǔ),具體配置如表2所示。
表2 實驗設(shè)備配置
開啟Attacker、UserA和UserB無狀態(tài)地址自動配置功能,查看本地主機網(wǎng)卡信息和UserA、UserB地址,由圖2設(shè)備信息可以看到,Gateway等路由器的鏈路本地地址采用基于MAC地址的EUI-64規(guī)則生成[11-12],相比之下Attacker的鏈路本地地址是隨機生成,與MAC地址無關(guān)。其主要原因是防止PC機的MAC地址泄露帶來安全隱患。
(3)流程設(shè)計。
IPv6無狀態(tài)地址自動配置在實現(xiàn)地址管理功能的過程中,也帶來新的網(wǎng)絡(luò)安全漏洞。以下基于“Python+仿真平臺”技術(shù),提出IPv6地址管理攻擊實驗流程設(shè)計(見圖3),有效促進IPv6實驗教學(xué)發(fā)展。
圖3 IPv6地址管理攻擊實驗流程
3.2.1 攻擊原理
由IPv6地址管理機制可知,在無狀態(tài)地址自動配置過程中,有兩次DAD過程,并且是在網(wǎng)段內(nèi)廣播地址檢測報文[13]。攻擊方可以在接收報文后,發(fā)送包含相同IPv6地址的NA報文來響應(yīng)NS報文,聲稱該IP地址已經(jīng)在使用,造成大量的IP地址和網(wǎng)絡(luò)資源浪費,形成網(wǎng)絡(luò)攻擊[14]。
3.2.2 攻擊實驗
(1)單線程攻擊。
首先,實驗運行層的仿真平臺開啟UserA無狀態(tài)地址自動配置,廣播發(fā)送NS報文進行鏈路本地地址唯一性檢查,攻擊方Attacker自主檢測到節(jié)點配置地址。然后,Python程序分析NS報文,提取其聲明的地址fe80::2e0:fcff:fe7c:2f78添加至偽造NA報文的Target Address字段并作為網(wǎng)絡(luò)層的源地址,同時將攻擊方的MAC地址填入地址解析選項字段,完善各標志位,逐層封裝,過程如圖4所示。隨后,Python程序控制攻擊方發(fā)送偽造報文,進行DAD攻擊。此時,被攻擊方UserA查看地址配置信息可發(fā)現(xiàn)節(jié)點地址末尾顯示“DUPLICATE”字樣,表示IPv6地址在局域網(wǎng)內(nèi)重復(fù),地址配置失敗。
圖4 鏈路本地DAD攻擊
(2)多線程攻擊。
在實驗拓撲(圖2)中啟用UserB作為新設(shè)備與UserA一起加入網(wǎng)絡(luò),當(dāng)Python開發(fā)層檢測到新設(shè)備加入時,根據(jù)攻擊模式對不同新節(jié)點建立對應(yīng)線程,在字典數(shù)據(jù)結(jié)構(gòu)中以鍵值對“Key:Value”形式存儲MAC地址和線程號,例如存儲節(jié)點UserA、UserB信息為:{"00e0-fc7c-2f78":"Thread1","00e0-fc9b-4e33":"Thread2"}。
在此基礎(chǔ)上,Python程序傳送不同設(shè)備NS報文中的MAC、IPv6字段至數(shù)據(jù)源,用以偽造鏈路NA報文并發(fā)送,從而實現(xiàn)多線程條件下鏈路本地DAD攻擊。Attacker接口抓包獲得攻擊過程如圖5所示。
圖5 鏈路本地DAD攻擊
3.3.1 攻擊原理
在配置全球單播地址過程中,鏈路內(nèi)的節(jié)點依據(jù)接收到的RA報文進行地址配置,且不對發(fā)送方進行網(wǎng)關(guān)身份驗證。攻擊方利用該漏洞,自行發(fā)送包含無效地址前綴的路由通告RA報文,被攻擊方自動使用該前綴進行全球單播地址配置得到的地址是無效的,從而實現(xiàn)拒絕服務(wù)攻擊[15]。
3.3.2 攻擊實驗
在實驗教學(xué)中,為了避免節(jié)點配置過程中無法區(qū)分網(wǎng)關(guān)和攻擊方發(fā)送的RA報文正確性,使得攻擊實驗存在偶然性,攻擊方可以選擇將全球單播DAD攻擊同地址前綴欺騙攻擊結(jié)合,具體過程如圖6所示。
圖6 實驗教學(xué)過程
(1)全球單播DAD攻擊。
UserA鏈路本地地址配置成功后,接收網(wǎng)關(guān)RA報文獲取前綴信息,配置全球單播地址為2001:db08:acad:1:2e0:fcff:fe7c:2f78,并發(fā)送NS報文對該地址進行聲明。Python開發(fā)的攻擊方讀取該NS報文,偽造類似上述鏈路本地DAD攻擊的NA報文使節(jié)點聲明全球單播地址失效,導(dǎo)致UserA配置全球單播地址失敗。經(jīng)局域網(wǎng)內(nèi)ping實驗驗證,UserA此時雖然擁有本地鏈路地址,可在局域網(wǎng)內(nèi)正常通信,但由于全球單播地址缺失無法跨網(wǎng)段通信。
(2)地址前綴欺騙。
由于針對UserA的全球單播DAD攻擊造成真實網(wǎng)關(guān)發(fā)布的前綴信息對UserA不可用。此時,Python開發(fā)的攻擊方偽造RA報文,添加相應(yīng)的前綴選項字段包含虛假前綴:2001:db08:acad:2::/64,同時攜帶鏈路MAC地址解析選項字段,將報文廣播至實驗運行層的所有網(wǎng)段。由于UserA完全信任網(wǎng)段內(nèi)的報文,因此在收到偽造的RA報文后,將按其配置全球單播地址,導(dǎo)致地址前綴被欺騙。
(3)抓包分析。
如圖7所示,使用Wireshark軟件對UserA接口上的報文進行抓包。UserA成功配置無效的全球單播地址2001:db08:acad:2:2e0:fcff:fe7c:2f78。另外,通過仿真平臺地址查看命令,發(fā)現(xiàn)原本擁有正確全球單播地址的UserB主機也另外獲得了前綴為2001:db08:acad:2::/64的新IPv6地址。此時的UserA僅可以使用虛假全球單播地址與UserB通信。
圖7 基于全球單播DAD的前綴欺騙
為了防范IPv6地址管理的安全漏洞,抵御惡意主機對IPv6網(wǎng)絡(luò)的攻擊,可以在用戶終端、局域網(wǎng)內(nèi)和二層交換設(shè)備處分別通過改進NDP協(xié)議、建立鄰居控制服務(wù)器以及配置控制信息交互命令等方式綜合提升網(wǎng)絡(luò)安全性能,具體可采取以下三種有效措施。
(1)安全鄰居發(fā)現(xiàn)協(xié)議(SEND)。
通過加密地址生成技術(shù)(CGA)、數(shù)字簽名等方法對通信過程進行加密,可有效防止IP地址被盜用。當(dāng)經(jīng)過重復(fù)地址檢測發(fā)現(xiàn)存在沖突地址時,CGA能夠通過重新計算生成新的地址[16],有效實現(xiàn)DAD攻擊防御。
(2)安全鄰居發(fā)現(xiàn)協(xié)議(IPSec-SEND)。
在鄰居發(fā)現(xiàn)協(xié)議的基礎(chǔ)上,IPSec-SEND采用IPsec認證頭AH(authentication header)作為節(jié)點間通信的安全協(xié)議,提供IP和MAC綁定認證,能有效解決由偽造IP地址、路由信息等攻擊行為造成的各種網(wǎng)絡(luò)安全問題[17]。
(3)ND Snooping技術(shù)。
華為[18]與華三[19]等公司二層交換機具有ND Snooping機制,可防御利用鄰居發(fā)現(xiàn)協(xié)議進行的網(wǎng)絡(luò)攻擊。ND Snooping通過自動的ND監(jiān)控模式監(jiān)聽DAD交互過程,通過獲取合法用戶的IP-MAC對應(yīng)關(guān)系,建立起鄰居信任表,從面可以對端口輸入報文進行合法性檢測,放行匹配綁定的報文,丟棄不匹配的報文,有效實現(xiàn)IPv6節(jié)點接入控制。
《教育部關(guān)于一流本科課程建設(shè)的實施意見》明確提出高階性、創(chuàng)新性和挑戰(zhàn)度的“兩性一度”一流本科課程發(fā)展導(dǎo)向,如何以教育技術(shù)創(chuàng)新支撐優(yōu)質(zhì)課程教學(xué)在高水平本科教育建設(shè)中的基礎(chǔ)性地位成為新時代高等教育教學(xué)改革的熱點。該文著眼于實驗技術(shù)創(chuàng)新驅(qū)動課程教學(xué)改革,提出了“Python+仿真平臺”的IPv6網(wǎng)絡(luò)安全實驗新技術(shù),通過無狀態(tài)地址自動配置過程中的鏈路本地DAD和地址前綴欺騙的攻防實驗,深入而細致地論述了“Python+仿真平臺”教學(xué)應(yīng)用的方法與過程。經(jīng)過多年級多班次的實驗教學(xué)實踐表明,“Python+仿真平臺”將Python可開發(fā)性與仿真平臺的工具性有機融合,為面向“兩性一度”導(dǎo)向的綜合性實驗教學(xué)改革提供了切實可行的技術(shù)途徑。