陳立軍 張 屹 陳孝如
(廣州軟件學院 廣州 510990)
可編程數(shù)據(jù)平面的研究所帶來廣泛而巨大的影響,使幾乎所有的網(wǎng)絡領域參與者都將從中獲益,它有助于網(wǎng)絡系統(tǒng)供應商進行更快速的迭代開發(fā),迅速推出新的功能,甚至直接通過打補丁修復現(xiàn)有產(chǎn)品中發(fā)現(xiàn)的數(shù)據(jù)平面程序漏洞.數(shù)據(jù)平面的靈活性使得各個供應商能夠在系統(tǒng)功能和性能上存在差異化,以有別于其他廠商.最根本的是,這些系統(tǒng)供應商可以從軟件產(chǎn)業(yè)過去幾十年已發(fā)展成熟的軟件編程理論、實踐和工具中受益.
可編程交換機[1]的最新進展,使得可以使用高級領域特定的網(wǎng)絡語言(如NPL[2]和P4[3])在數(shù)據(jù)平面上編程的行為成為可能,這為解決傳統(tǒng)固定管道開關中被認為困難和復雜的網(wǎng)絡問題提供了廣泛的機會.
最近的研究工作,如HULA[4],Contra[5],Blink[6],Net-Cache[7],提出了數(shù)據(jù)驅(qū)動的數(shù)據(jù)平面系統(tǒng),在延遲和吞吐量方面實現(xiàn)了更好的性能,這些系統(tǒng)的核心部分是在數(shù)據(jù)平面上運行包處理算法,連續(xù)監(jiān)控流量情況或監(jiān)聽數(shù)據(jù)平面信號,并在幾十納秒內(nèi)快速響應以適應網(wǎng)絡條件.
盡管這種新穎的數(shù)據(jù)驅(qū)動數(shù)據(jù)平面系統(tǒng)似乎有望實現(xiàn)更好的性能,但它們面臨更大的攻擊面,因此容易受到以前從未見過的網(wǎng)絡攻擊,例如:網(wǎng)絡攻擊者可以潛在地利用控制邏輯的語義并制造對抗性網(wǎng)絡輸入[8-9],這些輸入將直接影響系統(tǒng)所作的決策,并可能對很大一部分流量的行為產(chǎn)生負面影響,潛在地導致嚴重的性能下降.有趣的是,為了生成虛假的數(shù)據(jù)平面信號,攻擊者不需要特殊的特權,因為許多數(shù)據(jù)平面系統(tǒng)可以被欺騙和操縱數(shù)據(jù)平面信號.要解決這個問題,可能需要驗證到達的流量或數(shù)據(jù)平面信號,然而,P4數(shù)據(jù)平面支持有限的操作集,不支持循環(huán)和遞歸,因此意味著我們不能在數(shù)據(jù)平面中運行復雜的加密代碼.
總而言之,為了獲得數(shù)據(jù)驅(qū)動的數(shù)據(jù)平面系統(tǒng)的性能優(yōu)勢,并使此類系統(tǒng)得到廣泛部署,保護系統(tǒng)不受對手攻擊變得至關重要和緊迫.
本文的目標是確保數(shù)據(jù)驅(qū)動系統(tǒng)不受敵對網(wǎng)絡輸入的影響.為了達到這個目標,提出了一個系統(tǒng)來檢測數(shù)據(jù)平面系統(tǒng)和相關的包處理算法,其關鍵思想是,與某些正常標準相比,檢測異常行為.具體來說,本文所提議的方法是:1)精確理解P4中編寫的數(shù)據(jù)平面算法的非對抗性(正常)行為;2)監(jiān)控運行時的實際行為;3)定期將實際行為與正常行為進行比較,當實際行為明顯偏離正常行為時提出警告.
首先,本文將識別對最近提出的數(shù)據(jù)驅(qū)動系統(tǒng)的可能攻擊,并解釋攻擊者如何瞄準特定的系統(tǒng)組件并執(zhí)行攻擊(詳見第2節(jié));其次,提出了一個異常檢測系統(tǒng),該系統(tǒng)對數(shù)據(jù)平面中的數(shù)據(jù)包執(zhí)行的路徑進行統(tǒng)計分析,以檢測異常,這些數(shù)據(jù)在運行時的一個重要變化會暗示異常行為,如果系統(tǒng)受到攻擊,此行為最有可能被觀察到,例如,P4程序中調(diào)用交換機CPU的路徑很昂貴時,應該視為受到攻擊;或者,如果我們突然發(fā)現(xiàn)有太多的包通過這條路徑,可以視為異常行為.
實現(xiàn)所提議的方法主要挑戰(zhàn)是可編程數(shù)據(jù)平面資源受限:每個包的時間預算有限(100 ns)、每個包內(nèi)存訪問次數(shù)有限(每管道階段1~2次)以及有限的存儲能力.本文設計的系統(tǒng)是為了實現(xiàn)在這些限制下工作,具體來說,本文的系統(tǒng)具有3個主要特點:首先,依賴數(shù)據(jù)包執(zhí)行路徑統(tǒng)計來了解數(shù)據(jù)平面系統(tǒng)的正常數(shù)據(jù)包處理行為,然而,在約束下跟蹤數(shù)據(jù)平面中每個數(shù)據(jù)包的執(zhí)行路徑是具有挑戰(zhàn)性的.為此,P4track[10]提出了一種使用BL(Ball-Larus)編碼跟蹤每個數(shù)據(jù)包的執(zhí)行路徑的技術,并表明它在英特爾的Tofino開關約束下運行良好.本文在這項工作的基礎上構建一種系統(tǒng),并將其與本文檢測惡意數(shù)據(jù)包處理行為的方法相結(jié)合(更多細節(jié)見2.2節(jié)).
其次,保持對數(shù)據(jù)包處理的吞吐量影響,或沒有影響的數(shù)據(jù)包執(zhí)行路徑統(tǒng)計數(shù)據(jù)很少.為了實現(xiàn)這一點,本文在哈希表中維護統(tǒng)計信息,該表可以使用有狀態(tài)寄存器來實現(xiàn),并且可以在數(shù)據(jù)平面中以線速度更新,有關哈希表設計選擇的詳細信息在3.2節(jié)中給出.
最后,為了檢測異常行為,必須將跟蹤的數(shù)據(jù)包執(zhí)行路徑統(tǒng)計(或觀察)與預期(或正常)行為進行比較,為此,本文使用Pearson卡方檢驗[11]來確定預期行為與觀察到的行為之間是否存在顯著偏差(更多詳情請參見3.3節(jié)和3.4節(jié)).
武漢大學李健等人[12]提出了一種基于可編程數(shù)據(jù)平面的狀態(tài)防火墻方法,通過在數(shù)據(jù)平面設計有限狀態(tài)機和狀態(tài)表,實現(xiàn)根據(jù)不同的數(shù)據(jù)包類型制定相應的檢測邏輯,將狀態(tài)的檢測和管理邏輯從控制平面轉(zhuǎn)移到數(shù)據(jù)平面.異常檢測的方法與本文方法完全不同,他們是檢查數(shù)據(jù)包的種類,而本文的方法雖然也有對數(shù)據(jù)包種類進行分類,但重點是對數(shù)據(jù)包執(zhí)行路徑的檢查,檢查是否與預期執(zhí)行路徑相同.
中國傳媒大學耿俊杰等人[13]介紹了可編程數(shù)據(jù)平面技術和高性能數(shù)據(jù)中心網(wǎng)絡的研究現(xiàn)狀,并基于可編程數(shù)據(jù)平面以軟件定義的方式實現(xiàn)了優(yōu)先流量控制算法,進而實現(xiàn)了可編程的無損數(shù)據(jù)中心網(wǎng)絡.但他們沒有介紹數(shù)據(jù)平面異常檢測這項功能.
空軍工程大學呂娜等人[14]提出一種基于時延和負載均衡的傳輸節(jié)點遷移策略,將故障控制節(jié)點所管控數(shù)據(jù)平面中的傳輸節(jié)點遷移至其他正??刂乒?jié)點,恢復網(wǎng)絡的正常管控.顯然,他們的方法與本文的出發(fā)點是不一樣的,他們是把故障節(jié)點轉(zhuǎn)移到正常節(jié)點,而不是主動把故障消滅在萌芽狀態(tài).
福建師范大學肖如良等人[15]提出一種基于局部敏感布隆過濾器模型的異常檢測算法.首先利用基于空間劃分的快速變換對數(shù)據(jù)進行哈希映射,然后采用相互競爭策略進行除噪,最后利用0-1編碼構建布隆過濾器.他們的方法與本文也有相似之處,都用到了布隆過濾器,但本文的方法還要執(zhí)行數(shù)據(jù)包執(zhí)行路徑的檢查.
大連理工大學呂浩等人[16]提出了一種時序多尺度自編碼器網(wǎng)絡用于預測未來幀,并通過預測值與真實值的差異完成視頻異常檢測.該方法與本文的方法有點類似,但他們的方法應用有一定的局限性,只能用在視頻信號的異常檢測,而本文的方法是全方位的,只要是應用數(shù)據(jù)平面的網(wǎng)絡都可以應用.
靳曉琪等人[17]提出了基于信息熵的網(wǎng)絡異常檢測及入侵防御系統(tǒng)設計,將主機探測器部署在Linux操作系統(tǒng)上采集相關數(shù)據(jù),并傳遞給分析模塊,結(jié)合信息熵理論推導熵計算公式,分析網(wǎng)絡異常情況,劃分出網(wǎng)絡流量,由此檢測入侵流程,但漏報率最高達到9%.
最近的一項研究工作[8,18]提出了一種概率程序分析器,它使用符號執(zhí)行和模型計數(shù)來分析程序行為,以進行對抗性測試.相比之下,本文根據(jù)實際軌跡在運行時對路徑執(zhí)行概率分布進行建模,并使用該模型來檢查偏差.從文獻[8,18]得知本文的工作很好地補充了概率程序分析器.因為他們的工作可能會在測試期間錯過極端情況,或者在有用的時間內(nèi)探索大型程序的所有可能路徑的成本很高.另一項研究工作[19-21]探索使用靜態(tài)分析或符號執(zhí)行等技術自動驗證有關P4程序的各種屬性,但是,這些工具仍然在P4程序的級別上運行,但無法發(fā)現(xiàn)P4程序在運行時是否受到攻擊者的影響.
現(xiàn)有的數(shù)據(jù)驅(qū)動系統(tǒng),如HULA[4],Blink[6],Poise[22],Silkroad[23]和NetCache[7],利用可編程硬件功能顯著減少了控制回路決策時間、端到端結(jié)束延遲,或遙測數(shù)據(jù)收集和處理開銷,實現(xiàn)了以下功能:1)監(jiān)控網(wǎng)絡流量;2)向控制平面代理和/或相鄰節(jié)點(例如交換機)發(fā)送反饋控制信號;3)采取適當?shù)男袆樱纾簛G棄數(shù)據(jù)包、添加規(guī)則、重新路由流量、更新寄存器和創(chuàng)建數(shù)據(jù)包.
HULA[4]在每個時間窗口中,偵聽攜帶路徑性能指標的定期探測,選擇通往目的地的當前最佳路徑,并在所選路徑上轉(zhuǎn)發(fā)流量;Blink[24]系統(tǒng)跟蹤在當前路徑上流的數(shù)量,如果流的數(shù)量超過某個閾值,則流量將重新路由到備用路徑;如果某個鍵的訪問次數(shù)超過特定次數(shù)(閾值),則NetCache[7]會將其歸類為熱鍵,然后控制平面將這個鍵值對安裝在表中,這樣交換機就可以響應后續(xù)的鍵請求,而無需訪問存儲服務器,從而減少延遲.
確定攻擊數(shù)據(jù)平面系統(tǒng)所需的權限類型很重要,在本節(jié)中,確定誰可以發(fā)送對抗性輸入來攻擊數(shù)據(jù)平面系統(tǒng).
攻擊目標.建立在可編程開關之上的數(shù)據(jù)平面系統(tǒng)可以快速響應數(shù)據(jù)平面信號,此信號有2種:1)由監(jiān)控傳入流量的交換機原語生成的消息;2)控制網(wǎng)絡中其他交換機或主機發(fā)送的報文.
攻擊者及其特權.本文考慮了攻擊者能夠發(fā)送對抗性輸入的2種可能情況:受感染的主機或中間人攻擊,對于這2種類型的攻擊者,假設他們知道哪些數(shù)據(jù)包頭值和數(shù)據(jù)包順序會影響受攻擊數(shù)據(jù)平面系統(tǒng)的決策,攻擊者可以將惡意流量注入網(wǎng)絡,或通過操縱控制數(shù)據(jù)包,或通過創(chuàng)建虛假控制數(shù)據(jù)包來欺騙系統(tǒng).
需要注意的是,為了影響決策制定,攻擊者不需要訪問P4代碼,或知道數(shù)據(jù)包處理行為,或訪問交換機,攻擊者可以通過其他方式(例如通過監(jiān)控端到端性能)找到控制邏輯的語義,然后推斷數(shù)據(jù)包頭值及其順序以影響決策,例如:在NetCache系統(tǒng)中,攻擊者可以通過觀察鍵變熱前后響應時間的差異,來推斷將鍵歸類為“熱”的閾值.
在這種情況下,本文識別對數(shù)據(jù)平面系統(tǒng)的攻擊,尤其是那些針對響應數(shù)據(jù)平面信號的特定系統(tǒng)組件的攻擊,表1總結(jié)了本文將在下面介紹的對數(shù)據(jù)驅(qū)動數(shù)據(jù)平面系統(tǒng)的可能攻擊:
表1 可能對數(shù)據(jù)平面系統(tǒng)進行攻擊的詳細信息
1) CPU耗盡.計算成本表示要為特定輸入(數(shù)據(jù)/控制包)執(zhí)行的工作量,通常,并非所有輸入都具有相同的計算成本——數(shù)據(jù)平面中的數(shù)據(jù)包處理速度非???納秒到微秒),調(diào)用控制平面(例如復制到CPU)的數(shù)據(jù)包處理速度很慢(毫秒到秒),因此,在更大的時間尺度上調(diào)用控制平面是一種很好的做法,攻擊者可以利用這一點并專門制作輸入以連續(xù)調(diào)用控制平面,從而成功耗盡交換機CPU資源.
2) 內(nèi)存飽和.數(shù)據(jù)平面有2種狀態(tài):無狀態(tài)匹配操作表規(guī)則和有狀態(tài)寄存器,這些狀態(tài)要么在SRAM中維護,要么在TCAM中維護(TCAM是一種三態(tài)內(nèi)容尋址存儲器,主要用于快速查找ACL、路由等表項),要么在兩者中都維護,其中TCAM擁有幾千條規(guī)則[29].在某些系統(tǒng)中,每當有來自數(shù)據(jù)平面的信號時,控制平面代理就不斷地更新匹配動作規(guī)則,例如,考慮上面提到的NetCache[7]系統(tǒng)的密鑰分類,對手可以利用這一過程,以目標訪問不同的密鑰,每個密鑰都超過其閾值,最終會導致為太多的鍵安裝規(guī)則,由于安裝太多的鍵而丟棄合法的鍵請求,缺少空間而丟棄合法的鍵請求,從而增加端到端延遲,類似地,有狀態(tài)寄存器通常是預先分配的,只要滿足某些條件(例如在新流到達時分配塊),就會在運行時分配寄存器塊,對手可以經(jīng)常注入欺騙流,目的是使有狀態(tài)寄存器飽和,從而導致內(nèi)存飽和攻擊,內(nèi)存飽和的后果是不可預測的,交換機可能表現(xiàn)異常(例如丟包),或者攻擊者可能成功地逃避防御者.
3) 性能下降.為了快速處理動態(tài)網(wǎng)絡事件(例如:擁塞、鏈路/交換機故障),一些系統(tǒng)在控制平面響應之前立即在數(shù)據(jù)平面上作出決定,例如,HULA[4]監(jiān)聽探頭中攜帶的網(wǎng)絡反饋,并快速響應決策(例如重路由流量),以避免性能下降.然而,在這種情況下,可能潛在地利用控制邏輯的語義來編制網(wǎng)絡輸入(例如:修改/延遲探測),并影響數(shù)據(jù)平面上的決策,因此將潛在地導致對很大一部分流量的行為產(chǎn)生負面影響,從而降低總體網(wǎng)絡性能.
4) 損壞網(wǎng)絡統(tǒng)計數(shù)據(jù).流量工程、安全審計等網(wǎng)絡管理任務在很大程度上依賴于由數(shù)據(jù)平面監(jiān)控原語生成的網(wǎng)絡遙測數(shù)據(jù)(例如:平均、最小、計數(shù)估計),為了以線速度執(zhí)行監(jiān)控,通常使用像布隆過濾器及其變體(例如:計數(shù)布隆過濾器)這樣的緊湊數(shù)據(jù)結(jié)構,它們具有空間效率高和每包計算成本低的特點.此外,為了保持較低的誤報率,一般使用由多個哈希函數(shù)(例如k個)索引的多個布隆過濾器,例如,要檢查數(shù)據(jù)包是否屬于舊流,數(shù)據(jù)包的五元組流密鑰被哈希k次,如果所有k位置的條目都設置為1,則該數(shù)據(jù)包被標記為舊流,否則,該數(shù)據(jù)包被標記為新流.先前關于攻擊布隆過濾器的研究[30]表明,攻擊者可以通過產(chǎn)生流量以增加1的數(shù)量來污染布隆過濾器,這樣誤報率顯著增加,從而誤導學習算法并成功逃避檢測;另一種可能的嘗試為,通過生成流量,使得最后一個哈希函數(shù)的流鍵值為0,其他哈希函數(shù)的流鍵值為1,從而增加查詢執(zhí)行時間和成員查詢的開銷.
本文工作的主要目標是在運行時檢測數(shù)據(jù)平面系統(tǒng)是否受到攻擊,首先,提出了一種異常檢測系統(tǒng),該系統(tǒng)對交換數(shù)據(jù)平面的數(shù)據(jù)包執(zhí)行路徑統(tǒng)計分析.
圖1示出本文異常檢測的方法:
該系統(tǒng)大致可分為3個階段:
1) 模型預期行為.本文的系統(tǒng)在正常條件下監(jiān)控流量,其中在數(shù)據(jù)平面中運行的P4程序編碼跟蹤和維護數(shù)據(jù)包執(zhí)行路徑統(tǒng)計信息,控制平面定期收集統(tǒng)計信息并構建數(shù)據(jù)包執(zhí)行路徑分布,這將是預期的分布.
2) 捕獲觀察到的行為.在運行時捕獲每個時間窗口的數(shù)據(jù)包執(zhí)行路徑統(tǒng)計信息,控制平面使用它構建數(shù)據(jù)包執(zhí)行路徑分布——觀察到的分布.
3) 計算偏差.本文使用稱為卡方檢驗的統(tǒng)計檢驗技術計算預期分布和觀察到的分布之間的偏差,并在觀察到顯著偏差時發(fā)出警報.
數(shù)據(jù)包可能采用P4程序中的任何路徑,為了跟蹤每條路徑(應用的表和執(zhí)行的動作)需要擴充原始P4程序,以便在數(shù)據(jù)包傳輸時更新每個數(shù)據(jù)包的狀態(tài),如數(shù)據(jù)包頭向量(PHV).然而,由于PHV是一種稀缺資源,路徑編碼技術應該在可編程數(shù)據(jù)平面的資源限制下運行.最近,P4track[10]表明BL編碼技術[30]適合跟蹤P4程序中的數(shù)據(jù)包執(zhí)行路徑,這是因為P4程序是無循環(huán)的,編碼不需要復雜的更新,對路徑變量的加法操作已經(jīng)足夠,本文使用這種技術跟蹤路徑并在該技術之上構建預期和觀察到的分布.
下面簡要介紹BL編碼技術的核心思想:由于P4程序是無循環(huán)的,因此P4程序的控制流圖(CFG)是一個有向無環(huán)圖(DAG),其中每個節(jié)點代表一個程序語句,例如表、動作或條件.BL編碼算法執(zhí)行DAG的反向拓撲排序,并為每條邊分配1個標簽,這樣,當給定的輸入數(shù)據(jù)包從一個程序語句轉(zhuǎn)換到下一個程序語句時,PHV中維護的數(shù)據(jù)包路徑變量被添加到相關聯(lián)的邊緣標簽,最后,在DAG(或程序)處理結(jié)束時,路徑變量值唯一地表示數(shù)據(jù)包在程序中所走的路徑,因此,如果存在N條可能的路徑,則程序處理后的路徑變量在0~N-1之間具有唯一值.
運行示例:圖2(a)示出NetCache[7]P4程序的CFG,它首先檢查是否收到有效的NetCache查詢數(shù)據(jù)包(CFG 中的節(jié)點A),如果收到則通過應用read_query表(節(jié)點B)檢查查詢響應是否在緩存中,如果查詢正常,則生成響應數(shù)據(jù)包并發(fā)送給發(fā)送方(節(jié)點C和節(jié)點D),否則,它會檢查該查詢之前是否已多次出現(xiàn),如果是則查詢會變得很熱,并且會向本地交換機CPU發(fā)送信號,后者又會在緩存(節(jié)點E和節(jié)點F)中安裝響應,否則,查詢將發(fā)送到目標服務器(節(jié)點G),最后,退出操作標志.
在CFG上運行BL算法時,為E→G,C→E,B→H,A→H分別分配標號1,1,3,4,當包遍歷1條邊時,相關的邊標簽被添加到每個包的路徑變量V中,CFG從根節(jié)點(A)到葉節(jié)點(H)有5條不同的路徑,當程序完成數(shù)據(jù)包處理時,V的值必須在圖2(a)所示的0~4的范圍內(nèi).
多變量BL編碼:簡單的調(diào)整BL編碼在操作復雜性和流水線階段數(shù)量方面,可能產(chǎn)生巨大的開銷,具體地說,適用于大型P4程序,如switchP4[3]路徑變量大小可以大到幾百位,使得線速率的整數(shù)運算成為挑戰(zhàn).另一個問題是通過多個表更新相同的路徑變量迫使編譯器將表放在多個階段,否則這些階段將被映射到相同的階段,從而增加階段的數(shù)量.P4track[10]通過為BL編碼(MVBL)使用多個變量來處理這些挑戰(zhàn),其關鍵思想是仔細劃分原始DAG,并為每個分區(qū)(即子DAG)分配1個變量,分別跟蹤包的執(zhí)行路徑,通過這樣操作,由于每個子DAG比原始DAG有更少的路徑,路徑變量大小將保持在算術操作數(shù)的限制內(nèi),并且將不同的路徑變量分配給映射到同一階段的表,使它們在BL編碼后共存于同一階段.
本文使用哈希表來維護每條路徑的統(tǒng)計信息,對路徑變量值(V)進行哈希,并將該哈希值用作在哈希表中查找條目的鍵,如果存在該鍵則增加現(xiàn)有計數(shù)器,否則使用該鍵分配和初始化一個條目.本文利用SRAM中的有狀態(tài)寄存器以線速率存儲和更新哈希表項.在一個大型P4程序中路徑的數(shù)量會激增,因此需要大內(nèi)存來保持較低的哈希沖突概率,然而,在實際操作中,包會遍歷所有可能路徑的一小部分,因此,與交換機中可用的SRAM相比[29]所需的內(nèi)存相當?shù)?本文的實驗中,觀察到Netcache中的數(shù)據(jù)包,P4在600個可能路徑中穿越10個路徑[7],在Blink中在108個路徑中穿越60個路徑[30],本文還觀察到,穿過不同窗口的路徑數(shù)量在大多數(shù)情況下保持不變,如果它發(fā)生變化,百分比變化非常小.因此,給定一個大小為500 KB、有100個鍵的哈希表,預期的沖突數(shù)是0.077,這是通常建議限制鍵數(shù)的0.1%.
此外,本文的控制平面代理將重置在2個后續(xù)窗口中計數(shù)器值相同的陳舊項,這一清理過程進一步降低了碰撞率,如果MVBL編碼是適當?shù)模瑢τ诙鄠€路徑變量,它需要額外的內(nèi)存來維護統(tǒng)計數(shù)據(jù),以便碰撞率在限制之下.
為了建模預期行為,本文在交換機上部署帶有BL算法和哈希表的P4程序,收集一段時間內(nèi)(訓練階段)真實流量的包執(zhí)行路徑分布,捕獲P4程序中每個執(zhí)行路徑上的數(shù)據(jù)包數(shù)量,通過定期收集數(shù)據(jù)平面哈希表中維護的每條路徑統(tǒng)計信息來構建預期的分布,例如E,形式上,假設在給定的時間窗口wi中有k條路徑,則當前窗口wi的預期分布Ewi定義為[31]
Ewi=(Ewi(1),Ewi(2),…,Ewi(k)),
(1)
其中Ewi(1),Ewi(2),…,Ewi(k)分別表示對應于路徑1,2,…,k的頻率,令Si為在此窗口中看到的總數(shù)據(jù)包,由式(2)給出:
(2)
在為每個窗口捕獲Ew和S之后,對每個路徑對應的概率進行建模,以定義NULL假設,根據(jù)由式(3)給出的集合M來定義NULL假設:
M=(p1,p2,…,pk),
(3)
其中p1,p2,…,pk分別表示對應于路徑1,2,…,k的概率,具體來說,如果有n個窗口,則路徑j對應的概率pj由式(4)給出:
(4)
總之,本文用M表示預期行為,并將其用作驗證觀察到的分布參考.
給定預期流量分布的基準,應該確定觀察到的流量是否超出常規(guī)模式,為此,在訓練階段之后,本文收集哈希表中維護的每個路徑的流量統(tǒng)計信息,并將觀察到的分布與M進行比較,形式上,對于給定的窗口wi,觀察到的分布O定義為
Owi=(Owi(1),Owi(2),…,Owi(L)),
(5)
其中Owi(1),Owi(2),…,Owi(L)表示在路徑L上觀察到的數(shù)據(jù)包數(shù)量,令Si是在wi中看到的總數(shù)據(jù)包,由式(6)給出:
(6)
本文使用卡方檢驗[11]測量觀察到的分布和預期分布之間的偏差,獨立的卡方檢驗χ2比較2個頻率分布(M和O)以查看它們是否相關,具體來說,將窗口i的χ2定義為
(7)
其中路徑j,Ewi(j)的預期計數(shù)定義為
Ewi(j)=pj×Si.
(8)
小的卡方值意味著觀察到的分布數(shù)據(jù)與預期數(shù)據(jù)非常吻合,另一方面,較大的卡方值意味著觀察到的數(shù)據(jù)與預期數(shù)據(jù)有很大的偏差.
觀察到的路徑集(L)可能與M中的預期路徑集(K)不同,為了解決這個問題,本文考慮2種情況:L?K和LK.當L?K時,對于K-L集合中的那些路徑,觀察到的數(shù)據(jù)包計數(shù)為0;另一方面,當LK時,本文將一個小的閾值ti添加到預期集合L-K中,以使卡方值無限,根據(jù)卡方p=1,當標準卡方值比較小時,觀察到的分布偏離了預期.
1) 實驗環(huán)境.為了證明本文方法的可行性,本文對NetCache[7]P4程序進行了初步實驗,通過P4c編譯器生成的.json和.dot文件來構建NetCache P4程序CFG[3],接下來,在CFG上運行BL算法并解釋原始P4程序中的動作和條件語句.目前,P4程序是手動注釋的,本文可以通過逐行解析P4程序,并使用更新BL變量的代碼附加操作和條件塊自動執(zhí)行此步驟,最后,在數(shù)據(jù)包處理的末尾添加一個哈希表,并將帶有注釋的P4程序部署在P4交換機上.本文的實驗是在Mininet v2.3.0中進行的,其中有1個P4交換機、8個鍵值存儲主機、1個請求密鑰的客戶端、1個使用熱鍵更新交換機緩存的控制器,以及1個使用bash腳本多次讀取實驗的收集器,每個實驗包含大約4萬個查詢,運行時間為3 min,BL編碼、收集和驗證的代碼是用Python編寫的.
2) 內(nèi)存飽和攻擊.如前所述,如果請求的密鑰超過某個閾值,則NetCache系統(tǒng)將密鑰分類為“熱”,一旦攻擊者發(fā)現(xiàn)了這個閾值,可以用不同的熱鍵來制造流量,從而導致:在緩存中安裝不需要的密鑰以及當緩存被填滿時,合法的密鑰被釋放,從而增加合法流量的響應時間.
3) 實驗.首先,發(fā)送正常流量,收集數(shù)據(jù)包執(zhí)行多窗口的路徑計數(shù)器,再根據(jù)3.3節(jié)中描述的預期分布模型,正常的流量遵循齊夫定律(Zipf)的分布,其中鍵請求的頻率與其排名成反比,即10%的鍵占查詢的60%~90%[32],建立期望分布模型后,注入攻擊流量,收集路徑統(tǒng)計信息,并進行卡方檢驗.攻擊流量中的密鑰是隨機生成的,目的是創(chuàng)建更多熱鍵,設置緩存大小為8 KB.
4) 結(jié)果.為了解釋卡方檢驗結(jié)果,本文將實際的卡方值與預先設定的卡方閾值進行比較,圖3(a)和圖3(b)中的紅色虛線顯示卡方p值被設置為21,當觀察到的路徑的數(shù)量小于11時,與標準閾值一致,通過比較,如果實際值或觀測值低于給定卡方閾值,則表示系統(tǒng)行為符合預期;如果實際值或觀測值超過閾值,本文可以得出系統(tǒng)顯示異常行為的結(jié)論.
圖3(a)中的綠虛線表示當沒有攻擊流量時,卡方值低于閾值,當系統(tǒng)受到攻擊時,如圖3(b)所示,卡方值增加并飽和.實驗表明,本文的異常檢測方法能夠檢測系統(tǒng)中的異常行為.
圖4總結(jié)了多次運行NetCache的實驗結(jié)果,x軸表示攻擊查詢的百分比,y軸表示實際的卡方值與閾值的卡方值的距離,實際值與閾值之間的差值是多次運行時的平均值,本文將攻擊查詢的百分比從0更改為50%,并記錄每個場景的平均值,當沒有攻擊查詢(即0攻擊百分比)時,結(jié)果為負值,如圖4中的綠色條形圖所示,表示沒有受到攻擊;當攻擊查詢的百分比增加時,看到一個正的平均值,如圖4中藍色條形圖所示,這表明本文的系統(tǒng)能夠成功地檢測到攻擊行為,即使攻擊流量百分比很低.
本文對建立在可編程交換機上的現(xiàn)有數(shù)據(jù)驅(qū)動數(shù)據(jù)平面系統(tǒng)的可能攻擊進行了分類,并設計了一種異常檢測系統(tǒng),幫助確定數(shù)據(jù)平面系統(tǒng)是否受到對手的攻擊,實驗證明了本文設計的系統(tǒng)在檢測NetCache數(shù)據(jù)平面系統(tǒng)的數(shù)據(jù)包處理行為異常方面的可行性和有效性.未來的工作是改進攻擊者模型,通過不斷學習,避免誤報使模型適應新常態(tài),使設計對可能的攻擊具有魯棒性.