汪小琦,胡曦明,2*,李 鵬,2,馬 苗,2
(1.陜西師范大學 計算機科學學院,陜西 西安 710119;2.現代教學技術教育部重點實驗室,陜西 西安 710119)
在物聯網、云計算和人工智能等新一輪信息科技革命的熱潮中,個人上網加速向萬物互聯縱深推進成為“互聯網+”戰略推動新興產業轉型升級的標志性和基礎性的重要驅動力。然而,面對互聯網醫療、智能家居和智慧校園等新行業新場景催生的高密度、大規模端系統互聯需求,傳統IPv4地址體系在可分配地址空間不足、地址管理機制不完備和地址安全性保障缺失等關鍵技術性能方面存在制約性短板的問題日益凸顯。
IPv6作為全球公認的下一代互聯網技術[1],能夠以充足的網絡地址、先進的管理機制和新穎的安全性保障為新一代信息技術發展提供廣闊的創新空間。相對于IPv4體系,IPv6地址管理技術既是最具代表性的革新與進步,又是整個IPv6體系中最為基礎和關鍵的技術之一。面向未來物聯網、云計算、人工智能等新技術產生的巨大變革,IPv6地址管理在協議、機制等方面不可避免地將面臨新的安全性挑戰[2]。在進一步深化產教融合,加強教育鏈與產業鏈有機銜接的背景下,該文聚焦IPv6網絡安全實驗技術創新驅動課程教學改革和人才培養高質量發展,在分析IPv6地址管理協議的基礎上,針對當前IPv6地址管理安全實驗技術亟待發展的現實需求,提出了“Python+仿真平臺”的創新設計并在教學實踐中具體應用。
IPv6地址管理協議體系由兩部分組成,一部分是對IPv4地址管理方式的繼承,包括基于手動分配的地址靜態配置與基于DHCPv6的有狀態地址自動配置[3];另一部分是新增的IPv6無狀態地址自動配置SLAAC(stateless address auto configuration)方式。這樣的設計既能夠兼容原有IPv4地址體系[4],又能夠讓IPv6地址分配和管理更加高效。
IPv6無狀態地址自動配置是通過網絡層的鄰居發現協議NDP(neighbor discovery protocol)實現的,地址信息分配與管理基于四種類型的ICMPv6協議報文,分別是:路由請求報文RS(router solicitation)、鄰居請求報文NS(neighbor solicitation)、路由通告報文RA(router advertisement)、鄰居通告報文NA(neighbor advertisement)。NDP發現鏈路上彼此連接的鄰居節點和地址配置信息[5],在實時維護與鄰居節點之間的鏈路可達性與可達路徑等鏈路狀態的基礎上,實現對鄰居節點的IPv6地址自動分配與跟蹤管理。
鄰居發現協議NDP實現了IPv6無狀態地址自動配置機制[6],機制分為用戶發送RS報文請求前綴和網關路由器周期性發送攜帶配置信息的RA報文兩種方式,具體報文交互過程如下:
①終端用戶根據一定規則生成臨時鏈路本地地址,并在局域網內發送該地址的NS報文,進行鏈路本地地址重復地址檢測DAD(duplicate address detection)。
②網關發送包含地址前綴等配置信息的RA報文,使終端用戶成功配置全球單播地址;如果終端用戶未接收到RA報文,可主動發送RS報文,請求網關的RA報文配置全球單播地址。
③終端用戶發送包含全球單播地址的NS報文,進行全球單播地址重復地址檢測。
此后,位于IPv6局域網鏈路上的終端用戶成功配置鏈路本地地址和全球單播地址兩類地址。從上述過程可以看到,鄰居發現協議NDP通過RS、NS、RA和NA報文自動交互,實現了IPv6無狀態地址自動配置,可極大地緩解地址配置過程中人工和服務器壓力,具有全自動和即插即用等優勢,非常有利于未來智能化應用的發展,但DAD過程對移動節點地址切換具有一定時延[7]。
由于IPv6網絡實驗室設備投入大、建設周期長,目前主要依賴仿真平臺開展IPv6實驗教學。仿真平臺具有技術成熟、運行穩定和便于操作等優勢,但在面向大規模學生群體的探究性實驗中,仿真平臺往往表現出可開發性、可拓展性不足[8],常局限于單一的攻擊和防御模式[9]。因此該文提出Python開發與仿真平臺融合的IPv6安全性實驗新技術,如圖1所示,既可有效利用仿真平臺成熟、穩定的優勢,又可融入自主開發實驗要素,滿足開展創新性、高階性和具有挑戰度的個性化探究實驗。

圖1 “Python+仿真平臺”實驗技術
(1)Python開發層。
開發層可向上為實驗人員提供個性化、開放式的實驗定制開發接口,向下通過輸入輸出接口與實驗運行模塊實現過程交互。
開發人員可通過Python內置scapy模塊或自主編程等多種方式開發實驗插件,實現探測、路由跟蹤等網絡行為,數據包組包發包等數據源對象以及控制邏輯等功能。
(2)實驗運行層。
仿真平臺可采用華為、華三等主流模擬器,用來實現路由器、交換機等設備的虛擬仿真[10],為開發層提供支撐實驗的基礎網絡結構和仿真運行環境。Python程序與仿真平臺既相互協同工作,又相對獨立,相互之間通過通道式的雙向接口進行數據和控制的交互。
(3)測量分析層。
測量分析層通過數據接口實時接收實驗運行模塊輸出的實驗數據,通過協議分析工具如Wireshark等實現對實驗的過程性分析。
如何基于Python實現可編程攻擊方,控制報文生成并發送到仿真平臺中與輸入仿真過程是“Python+仿真平臺”的關鍵,具體可分為四個部分。
(1)創建交互接口。
交互接口是一種通道式的雙向接口,連接著Python開發層與實驗運行層,負責Python程序與仿真軟件之間的運行交互。通過本地主機搜尋并激活本地“環回適配器”后,仿真平臺創建“云對象”橋接本地環回網絡,從而完成Python程序與仿真軟件的接口創建。該方法提高了仿真平臺的可操作性,節省了創建虛擬網卡等繁瑣工作,并且避免了綁定真實網絡網卡導致實驗操作引起的公共網絡故障。
(2)過程控制。
Python開發層通過交互接口實現對仿真平臺實驗運行報文的實時監聽,然后嗅探、過濾出目標類型的報文,實現對實驗狀態的偵聽監控。Python程序實現示例如下:
示例一:監聽本地環回網卡功能實現需要開發層確定接受鏈路層數據幀類型的協議和實驗網卡名稱,具體程序為:listen_socket=conf.L2listen(type=ETH_P_ALL,iface="Microsoft KM-TEST環回適配器")。
示例二:獲取仿真平臺運行的網卡,然后確定過濾報文的類型和數量,可以實現嗅探過濾報文(如icmpv6報文)的同時對報文調用響應方法,并返回響應結果。具體程序為:package=sniff(iface="Microsoft KM-TEST 環回適配器",filter="ICMPv6",count=20,prn=pack_callback)。
(3)攻擊模式。
攻擊模式具體包括單線程攻擊和多線程攻擊。處于開發層的Python程序實時監控實驗運行層中主機的地址配置信息,如果有新的主機加入實驗,Python程序則對應新建主機控制線程,并將線程號與該主機的MAC地址綁定之后存儲形成字典數據。
(4)數據源生成。
開發層的Python程序可以與實驗運行層的仿真軟件交互實驗數據,通過Python開發自主設計報文類型并賦值,可以實現偽造、錯造和竊取報文等攻擊操作,其中偽造報文的關鍵實現如表1所示。

表1 偽造報文關鍵技術
開發Python可編程攻擊方可以根據具體實驗需要,自主設計報文類型和賦值,并可根據整個實驗進程自動調整發包種類和報文值,具有個性化、智能化的技術優點。
基于上述“Python+仿真平臺”實驗技術,通過鏈路本地DAD和地址前綴欺騙的攻擊與防御實例研究,進一步豐富IPv6實驗教學內容和提升IPv6網絡安全性。
(1)環境搭建。
實驗運行層部署華為eNSP模擬器為仿真平臺,建立的網絡拓撲如圖2所示,其中以基于Python開發的“云對象”為攻擊方,以路由器UserA和UserB為被攻擊方。

圖2 實驗拓撲
(2)環境配置。
首先在實驗運行層的仿真平臺進行無狀態地址自動配置實驗,作為后續攻擊與防御實驗的基礎,具體配置如表2所示。

表2 實驗設備配置
開啟Attacker、UserA和UserB無狀態地址自動配置功能,查看本地主機網卡信息和UserA、UserB地址,由圖2設備信息可以看到,Gateway等路由器的鏈路本地地址采用基于MAC地址的EUI-64規則生成[11-12],相比之下Attacker的鏈路本地地址是隨機生成,與MAC地址無關。其主要原因是防止PC機的MAC地址泄露帶來安全隱患。
(3)流程設計。
IPv6無狀態地址自動配置在實現地址管理功能的過程中,也帶來新的網絡安全漏洞。以下基于“Python+仿真平臺”技術,提出IPv6地址管理攻擊實驗流程設計(見圖3),有效促進IPv6實驗教學發展。

圖3 IPv6地址管理攻擊實驗流程
3.2.1 攻擊原理
由IPv6地址管理機制可知,在無狀態地址自動配置過程中,有兩次DAD過程,并且是在網段內廣播地址檢測報文[13]。攻擊方可以在接收報文后,發送包含相同IPv6地址的NA報文來響應NS報文,聲稱該IP地址已經在使用,造成大量的IP地址和網絡資源浪費,形成網絡攻擊[14]。
3.2.2 攻擊實驗
(1)單線程攻擊。
首先,實驗運行層的仿真平臺開啟UserA無狀態地址自動配置,廣播發送NS報文進行鏈路本地地址唯一性檢查,攻擊方Attacker自主檢測到節點配置地址。然后,Python程序分析NS報文,提取其聲明的地址fe80::2e0:fcff:fe7c:2f78添加至偽造NA報文的Target Address字段并作為網絡層的源地址,同時將攻擊方的MAC地址填入地址解析選項字段,完善各標志位,逐層封裝,過程如圖4所示。隨后,Python程序控制攻擊方發送偽造報文,進行DAD攻擊。此時,被攻擊方UserA查看地址配置信息可發現節點地址末尾顯示“DUPLICATE”字樣,表示IPv6地址在局域網內重復,地址配置失敗。

圖4 鏈路本地DAD攻擊
(2)多線程攻擊。
在實驗拓撲(圖2)中啟用UserB作為新設備與UserA一起加入網絡,當Python開發層檢測到新設備加入時,根據攻擊模式對不同新節點建立對應線程,在字典數據結構中以鍵值對“Key:Value”形式存儲MAC地址和線程號,例如存儲節點UserA、UserB信息為:{"00e0-fc7c-2f78":"Thread1","00e0-fc9b-4e33":"Thread2"}。
在此基礎上,Python程序傳送不同設備NS報文中的MAC、IPv6字段至數據源,用以偽造鏈路NA報文并發送,從而實現多線程條件下鏈路本地DAD攻擊。Attacker接口抓包獲得攻擊過程如圖5所示。

圖5 鏈路本地DAD攻擊
3.3.1 攻擊原理
在配置全球單播地址過程中,鏈路內的節點依據接收到的RA報文進行地址配置,且不對發送方進行網關身份驗證。攻擊方利用該漏洞,自行發送包含無效地址前綴的路由通告RA報文,被攻擊方自動使用該前綴進行全球單播地址配置得到的地址是無效的,從而實現拒絕服務攻擊[15]。
3.3.2 攻擊實驗
在實驗教學中,為了避免節點配置過程中無法區分網關和攻擊方發送的RA報文正確性,使得攻擊實驗存在偶然性,攻擊方可以選擇將全球單播DAD攻擊同地址前綴欺騙攻擊結合,具體過程如圖6所示。

圖6 實驗教學過程
(1)全球單播DAD攻擊。
UserA鏈路本地地址配置成功后,接收網關RA報文獲取前綴信息,配置全球單播地址為2001:db08:acad:1:2e0:fcff:fe7c:2f78,并發送NS報文對該地址進行聲明。Python開發的攻擊方讀取該NS報文,偽造類似上述鏈路本地DAD攻擊的NA報文使節點聲明全球單播地址失效,導致UserA配置全球單播地址失敗。經局域網內ping實驗驗證,UserA此時雖然擁有本地鏈路地址,可在局域網內正常通信,但由于全球單播地址缺失無法跨網段通信。
(2)地址前綴欺騙。
由于針對UserA的全球單播DAD攻擊造成真實網關發布的前綴信息對UserA不可用。此時,Python開發的攻擊方偽造RA報文,添加相應的前綴選項字段包含虛假前綴:2001:db08:acad:2::/64,同時攜帶鏈路MAC地址解析選項字段,將報文廣播至實驗運行層的所有網段。由于UserA完全信任網段內的報文,因此在收到偽造的RA報文后,將按其配置全球單播地址,導致地址前綴被欺騙。
(3)抓包分析。
如圖7所示,使用Wireshark軟件對UserA接口上的報文進行抓包。UserA成功配置無效的全球單播地址2001:db08:acad:2:2e0:fcff:fe7c:2f78。另外,通過仿真平臺地址查看命令,發現原本擁有正確全球單播地址的UserB主機也另外獲得了前綴為2001:db08:acad:2::/64的新IPv6地址。此時的UserA僅可以使用虛假全球單播地址與UserB通信。

圖7 基于全球單播DAD的前綴欺騙
為了防范IPv6地址管理的安全漏洞,抵御惡意主機對IPv6網絡的攻擊,可以在用戶終端、局域網內和二層交換設備處分別通過改進NDP協議、建立鄰居控制服務器以及配置控制信息交互命令等方式綜合提升網絡安全性能,具體可采取以下三種有效措施。
(1)安全鄰居發現協議(SEND)。
通過加密地址生成技術(CGA)、數字簽名等方法對通信過程進行加密,可有效防止IP地址被盜用。當經過重復地址檢測發現存在沖突地址時,CGA能夠通過重新計算生成新的地址[16],有效實現DAD攻擊防御。
(2)安全鄰居發現協議(IPSec-SEND)。
在鄰居發現協議的基礎上,IPSec-SEND采用IPsec認證頭AH(authentication header)作為節點間通信的安全協議,提供IP和MAC綁定認證,能有效解決由偽造IP地址、路由信息等攻擊行為造成的各種網絡安全問題[17]。
(3)ND Snooping技術。
華為[18]與華三[19]等公司二層交換機具有ND Snooping機制,可防御利用鄰居發現協議進行的網絡攻擊。ND Snooping通過自動的ND監控模式監聽DAD交互過程,通過獲取合法用戶的IP-MAC對應關系,建立起鄰居信任表,從面可以對端口輸入報文進行合法性檢測,放行匹配綁定的報文,丟棄不匹配的報文,有效實現IPv6節點接入控制。
《教育部關于一流本科課程建設的實施意見》明確提出高階性、創新性和挑戰度的“兩性一度”一流本科課程發展導向,如何以教育技術創新支撐優質課程教學在高水平本科教育建設中的基礎性地位成為新時代高等教育教學改革的熱點。該文著眼于實驗技術創新驅動課程教學改革,提出了“Python+仿真平臺”的IPv6網絡安全實驗新技術,通過無狀態地址自動配置過程中的鏈路本地DAD和地址前綴欺騙的攻防實驗,深入而細致地論述了“Python+仿真平臺”教學應用的方法與過程。經過多年級多班次的實驗教學實踐表明,“Python+仿真平臺”將Python可開發性與仿真平臺的工具性有機融合,為面向“兩性一度”導向的綜合性實驗教學改革提供了切實可行的技術途徑。