ACSAC'22:基于差分測試的DPI系統漏洞檢測框架StateDiver
深度包檢測(Deep Packet Inspection,DPI)系統能夠記錄并阻止異常的網絡連接,在網絡防護中發揮著重要作用。然而,DPI系統往往由各廠商自主設計,缺乏統一的安全實現規范,因此,DPI系統中容易出現安全漏洞。攻擊者可以構造攻擊數據包來觸發其漏洞,繞過DPI系統對特定網絡連接的檢查,實現非法數據傳輸與服務訪問的效果。現有工作通常使用人工檢查、符號執行與模糊測試等方法來檢測DPI系統中繞過檢測規則的漏洞,但存在需要過多人工干預、路徑爆炸、反饋信息較少等不足,難以實現高效的漏洞挖掘。為此,開發了基于差分測試的DPI系統漏洞檢測框架StateDiver,該框架以DPI系統的狀態轉移情況為引導,為測試用例的變異和篩選提供指導,實現對DPI系統中繞過檢測規則漏洞的高效挖掘,發現了Snort、Snort++、Suricata等開源DPI系統中的16個規則繞過漏洞(其中,8個為已知漏洞,8個為新發現的漏洞)。
該成果“StateDiver: Testing Deep Packet Inspection Systems with State-Discrepancy Guidance”發表在國際會議Annual Computer Security Applications Conference (ACSAC 2022) 上。ACSAC是CCF B類會議,與DSN、ESORICS和RAID并稱為網絡與信息安全領域的“四小安全會議”。2022年,ACSAC會議共收到投稿303篇,錄用73篇,接收率為24.1%。會議于2022年12月5日至2022年12月9日在美國得克薩斯州奧斯丁舉辦。

- 論文鏈接:
- https://doi.org/10.1145/3564625.3564650
- 代碼鏈接:
- https://github.com/CGCL-codes/StateDiver
背景與動機
傳統網絡防火墻中的普通報文檢測僅能分析傳輸層及以下網絡層級的報文內容,深度包檢測(Deep Packet Inspection,DPI)則能夠對數據包的應用層有效載荷進行解析,從而提供更強的數據包檢測與過濾功能,如對病毒、數據泄露、網絡釣魚攻擊等的檢測與防御。為了實現上述功能,各個廠商需要在DPI系統內部實現一套自己的網絡協議棧,這是因為:1)DPI系統需要持續跟蹤并分析大量網絡數據流,以從中提取出應用層報文信息用于分析,所以,標準的協議棧無法滿足DPI系統的負載需求; 2)不同類型的操作系統(如,Windows和Linux)的協議棧實現以及同一類型不同版本操作系統(如,不同內核版本的Linux操作系統)的協議棧都可能存在差異,為了能夠適配和兼容所有操作系統,DPI系統需要自主實現一套網絡協議棧。
目前,廠商通常依賴協議標準文檔(RFC)來實現DPI系統的協議棧,這一做法帶來如下安全隱患:1)開發人員對自然語言編寫的協議文檔具有不同的理解,因此,其實現的協議棧可能由于理解錯誤而引入安全問題;2)廠商為了提升性能等需求而對協議棧進行定制化實現,可能忽略RFC文檔中規定的某些細節,從而產生具有漏洞的協議棧實現。因此,DPI系統和網絡端設備(客戶端和服務器)對相同數據包可能會有不同的處理邏輯。攻擊者通過精心構造報文,可能使得DPI系統和端設備進入不同的邏輯分支,導致DPI系統的協議棧狀態與網絡端設備的協議棧狀態出現不一致,并最終實現對DPI系統中檢測規則的繞過攻擊。
現有檢測DPI繞過漏洞主要有三種方法,人工分析、符號執行與模糊測試。人工分析主要依靠技術人員經驗和手動測試分析,無法實現自動化的漏洞挖掘;基于符號執行的方法能夠自動且系統地探索DPI自主協議棧的各個分支,但往往需要消耗大量的資源,存在路徑爆炸等問題,這些缺陷阻礙了符號執行針對DPI系統的大規模測試;現有的基于模糊測試的DPI繞過漏洞檢測方法缺少有效的反饋機制,導致其在種子變異的有效性和高效性方面存在不足。為此,我們提出一種以狀態轉移情況為引導機制的差分測試方法,旨在高效檢測DPI系統的繞過漏洞。
設計與實現
通過分析已知的DPI系統繞過漏洞,我們發現,當DPI系統處理攻擊數據包序列時,在包含惡意應用層負載的數據包到達之前,具有漏洞的DPI系統往往會呈現出異常的狀態轉移,如提前轉入TCP的CLOSE_WAIT狀態,而不具有該漏洞的DPI系統則不會出現異常的狀態轉移。由此,我們設想了基于狀態轉移情況來指導動態測試的漏洞檢測方法,優先選擇能夠導致狀態異常轉移的測試數據包作為輸入并在此基礎上進行變異,從而觸發DPI系統中更多的狀態異常轉移,并最終挖掘到導致繞過檢測的漏洞。
然而,直接判斷DPI系統是否處于異常狀態存在挑戰:我們需要嚴格定義異常狀態的特征與判斷標準,而不同的DPI系統的實現架構、編程語言等都不一樣,這就使得難以實現一套通用的高準確率的DPI系統異常狀態識別方法。為此,本文提出了一種差分測試方案,即同時觀測多個DPI系統執行情況,通過對比執行結果來發現狀態的異常轉移。具體而言,我們將一組數據包稱為一個輸入,將該數據包與在此基礎上變異生成的數據包稱為一對輸入。將一對輸入送入多個DPI系統,檢查不同DPI系統內部狀態變化的一致性。如果一個DPI系統對給定的輸入顯示出不同的內部狀態遷移,而其他DPI系統內部狀態遷移未發生變化,則將該DPI系統所達到的新狀態視為異常狀態。為了比較不同DPI系統的內部狀態轉移情況,我們還需要從DPI系統中提取狀態信息。通過對開源DPI系統的分析,我們發現,DPI系統在追蹤網絡連接的過程中,使用多個變量存儲網絡端設備的TCP狀態,并通過調試模塊打印輸出,因此,我們利用調試模塊的輸出來提取DPI系統的內部狀態。此外,我們還在其他關鍵代碼位置處(如數據包接收點、拒絕點、函數退出點)人工添加調試函數,以獲得更細粒度的狀態信息。

圖1 StateDiver 框架
為了能夠高效地分析不同的DPI系統,我們設計并實現了一個基于差分測試的自動化框架StateDiver,其架構如圖1所示。在編譯階段,我們通過狀態插樁在DPI系統中添加狀態跟蹤器,以日志文件形式定期輸出DPI系統的狀態遷移信息。StateDiver的運行分為兩個階段:首先,策略選擇器隨機生成策略并填充種子池,種子池中記錄了當前所有的備選種子,每一個種子是一個生成測試數據包序列的策略(簡稱:策略),通訊器根據策略與服務器進行網絡報文交互,狀態跟蹤器生成每個策略對應的狀態遷移日志;然后,策略選擇器從種子池中循環挑選策略并對其進行變異,狀態跟蹤器捕捉變異后DPI系統的狀態遷移信息,狀態遷移分析器依照狀態遷移引導算法評估變異的水平,并相應地調整優先級和變異頻率等。如果找到一種成功繞過DPI系統的策略(即通訊器收到了服務器的HTTP 200響應數據包),系統將保存該策略并將其作為結果輸出。

圖2 狀態差異引導算法
狀態遷移引導算法如圖2所示。若一個策略由另一個策略通過變異生成,我們稱前者為父策略,后者則稱之為子策略。對于兩個不同的DPI系統(DPI0與DPI1),使用parDPIjStat表示父策略作用下DPIj系統的狀態變化序列(如,[SYN_SENT, SYN_RCVD]),使用currDPIjStat表示子策略作用下DPIj系統的狀態變化序列(如,[SYN_SENT, SYN_RCVD, ESTABLISHED])。CmpDPI函數通過比較parDPIjStat與currDPIjStat的一致性來判斷DPIj系統是否在父策略和子策略的作用下產生了不同的狀態遷移,并用變量DPIjStatAlt記錄比較結果:如果DPIj系統產生了不同狀態遷移,則DPIjStatAlt取值為True,否則為False。如果DPI0存在不同的狀態遷移而DPI1不存在(或DPI0不存在而DPI1存在),則將該變異視為最優變異(best_score);如果DPI0和DPI1均存在不同的狀態遷移,將該變異視為次優變異(good_score);如果DPI0和DPI1均不存在不同的狀態遷移,則將該變異視為最低優先級變異(moderate_score)。
發現與討論
我們將StateDiver與同類工作進行了不同維度的比較。首先,我們評估了StateDiver在真實DPI系統上的漏洞挖掘能力。具體而言,使用StateDiver檢測了三個知名開源DPI系統(Snort,Snort++和Suricata)中的漏洞,成功地發現了16種DPI繞過漏洞,其中8個為以前已經發現的漏洞,而另外8個為首次發現。

圖3 Snort系統下繞過漏洞隨時間變化曲線
此外,我們還比較了使用狀態差異引導算法的StateDiver與同類型的模糊測試工具Geneva的效率。Geneva使用服務端回復報文作為引導,為了控制變量,我們實現了本地測試版本的Geneva-fast、使用狀態差異引導機制替換服務端回復報文引導的Geneva-state,在相同環境下運行24小時并重復5次。如圖3所示,實驗結果表明,StateDiver發現的繞過漏洞數是Geneva的兩倍,并且在找到首個繞過漏洞的耗時上縮短了5倍。此外,StateDiver觸發的狀態遷移數也提高了1.2倍。總體來看,StateDiver在發現繞過策略的數量、發現首個繞過策略所需的時間、以及觸發的狀態遷移數量等方面都優于同類工具Geneva,并且能夠觸發更加復雜的狀態遷移。
綜上,我們提出了一種創新的差分測試反饋機制——狀態差異,實驗證明狀態差異能夠較好地提升差分測試效率,實現對DPI系統繞過檢測規則漏洞的高效挖掘;同時,我們設計并實現了一個基于差分測試的深度包檢測系統漏洞檢測框架StateDiver,并在真實系統中發現了新的繞過漏洞。本工作既為深度包檢測系統安全性測試提供了新的思路,也將為其他領域的動態測試研究提供新的啟示。
詳細內容請參見:
Zhechang Zhang, Bin Yuan, Kehan Yang, Deqing Zou, and Hai Jin. 2022. StateDiver: Testing Deep Packet Inspection Systems with State-Discrepancy Guidance. In Proceedings of the 38th Annual Computer Security Applications Conference (ACSAC '22). 756–768. https://doi.org/10.1145/3564625.3564650