劉順

摘要:隨著網絡攻擊的多元化、復雜化、智能化,網絡安全面臨的挑戰日益嚴峻。本文使用LCS(最長公共子序列)算法對網絡通信協議數據格式進行識別,針對網絡上應用較為廣泛的SSL/TLS通信協議,在模式測試平臺PEACH框架的基礎上進行了改進。
關鍵詞:模糊測試;LCS算法;PEACH
中圖分類號:TP393.04 文獻標識碼:A 文章編號:1007-9416(2018)12-0180-01
1 軟件安全性測試
對軟件進行安全性測試,分為白盒測試和黑盒測試。白盒測試是指通過程序的源代碼進行測試,從代碼句法發現內部代碼在算法、溢出、路徑、條件等等中的缺陷或錯誤。黑盒測試也稱為功能測試、行為測試或數據驅動測試,測試人員完全不考慮程序內部的邏輯結構和內部特性,只依據程序的需求規格說明書,檢查程序的功能是否符合功能說明[1]。目前應用更為普遍和廣泛的是動態模糊測試。模糊測試本質是一種黑盒測試,其主要方法是構造一定量的畸形數據,使得目標系統崩潰,常用于網絡服務、文檔程序類的漏洞挖掘和測試。
2 基于網絡協議的模糊測試框架
目前廣泛使用的兩款網絡協議模糊測試框架有SPIKE和Peach。
SPIKE使用C語言編寫,提供了一系列允許快速和高效的開發網絡協議模糊測試器的API,在SPIKE中數據結構被分解表示成塊,這個塊同時包含二進制數據和塊大小,這樣產生的數據就可以被SPIKE以不同的格式嵌入到自身測試數據中去,當需要在特定位置嵌入精確數據的時候,塊就能大大節省了我們自行計算的時間,SPIKE是一個GPL的API和一套工具,它使你可以快速創建任何網絡協議壓力測試的測試器。
Peach使用python語言編寫,是一個開源的框架,使用標準接口,可以支持使用任何格式、網絡協議、應用協議,Android設備,裝置驅動程序或嵌入式硬件的安全測試,Peach體系結構允許研究者聚焦于一個個的特定的協議的子組件,然后組合起來創建完整的模糊測試器,這種方法可能不如基于塊的開發速度,但是對代碼的復用的支持比其他模糊測試工具好。
3 網絡通信數據格式識別
網絡通信協議的格式特征往往體現于那些在多個網絡會話中出現的子串,這些不變量在一定程度上確定了網絡通信協議的格式[2]?;谶@點選擇使用LCS算法進行報文協議的分析,這個算法對于同一類流量可以取得比較好的效果。
LCS算法步驟介紹[3]:
(1)定義dp[i][j]:表示字符串序列A的前i個字符組成的序列Ax和字符串序列B的前j個字符組成的序列By之間的最長公共子序列L(i,j)的長度(m,n分別為Ax和By的長度,i<=m,j<=n)。
(2)如果Ax[i]=By[j],那么Ax與By之間的最長公共子序列L(i,j)的最后一項一定是這個元素,所以dp[i][j]=dp[i-1][j-1]+1。
(3)如果Ax[i]!=By[j],設LCS(i-1,j-1)是L(i-1,j-1)的最后一個元素,或者L(i-1,j-1)是空序列,則LCS(i-1,j-1)!=Ax[i]和LCS(i-1,j-1)!=By[j]至少有一個不成立。
當LCS(i-1,j-1)!=Ax[i]時,dp[i][j]=dp[i-1][j];
當LCS(i-1,j-1)!=By[j]時,dp[i][j]=dp[i][j-1];
所以dp[i][j]=max(dp[i-1][j],dp[i][j-1])。
(4)要求出任意一個最長公共子序列,考慮上面的遞推式,L(i,j)的最后一個元素LCS(i,j)的來源有三種情況:
dp[i][j]=dp[i-1][j-1]+1,LCS(i-1,j-1)接上LCS(i,j),表示從斜向上左方來;
dp[i][j]=dp[i-1][j],LCS(i-1,j)接上LCS(i,j),表示從上方過來;
dp[i][j]=dp[i][j-1],LCS(i,j-1)接上LCS(i,j),表示從左方過來。
4 Peach框架改進
4.1 網絡數據通信部分改進
我們在Peach平臺的基礎上,對其核心部分進行了改造,使用了中間人攻擊模式,平臺作為服務端和客戶端的橋梁,對服務器和客戶端之間的數據進行連接和轉發。這樣設計平臺可以直接獲取到測試數據,而無須再使用wireshark等數據嗅探工具,既省去了后期還需要對分片數據進行再組包的麻煩,也避免了因數據組包而可能導致的錯誤,而且可以同時對服務端和客戶端進行測試,提高了測試效率。改進后的平臺如圖1所示。
4.2 數據編譯器部分改進
Peach模糊測試框架內預先制定了一些處理輸入文件的規則,它會根據樣本文件給定的數據結構格式生成隨機數據填充,或者對文件中的數據進行變異,從而產生粒度更小針對性更強的畸形樣本文件。
但Peach對于數據的變異處理僅針對數據中的可變化部分進行處理,對于格式部分即數據中不變部分未做處理,這樣在一定程度上丟棄了一些可能造成程序內存溢出的情況。針對這個情況,我們在對數據的變異處理部分,加入了對可能是數據長度指示的數據的變異處理。
數據長度指示在實際數據中分為兩種,第一種是指示服務端或客戶端自身后續將要跟隨的數據塊大小,第二種是指示期望對方返回的數據塊大小。針對ssl協議,第一種情況,采取的策略是在數據不變部分的尾部取2字節,或是在可變部分的頭部取2字節,來判斷是否為可變部分的長度指示;第二種情況,采取的策略是在不可變部分中查找可能是長度指示的連續2字節。
5 實驗結果
改進后的Peach平臺可以完整的記錄雙方通訊數據,準確的識別出TLS/SSL數據格式。使用改進后的數據編譯器,成功發現了原PEACH平臺無法發現的心臟出血漏洞。
6 結語
網絡安全正受到人們越來越多的重視,漏洞的發現與補救也成為網絡安全防護的重中之重。模糊測試作為漏洞發現的一種方法,其普遍適用性和簡便性,使得其在漏洞挖掘中扮演著越來越重要的角色。在今后的研究中,要重點在變異數據生成方面和自動化方便做更深入的研究和探索。
參考文獻
[1]梁紅碩,馮曉東,賈永勝.論黑盒測試與白盒測試在軟件測試中的不同作用[J].商場現代化,2010(16):5-6.
[2]潘道欣,王軼駿,薛質.基于網絡協議逆向分析的遠程控制木馬漏洞挖掘[J].計算機工程,2016,42(02):146-150+156.
[3]于海英.字符串相似度度量中LCS和GST算法比較[J].電子科技,2011,24(03):101-103+124.
Fuzzy Test Framework for SSL/TLS Protocol
LIU Shun
(School of Information Science @ Engineering Lanzhou University,Lanzhou? Gansu 730000)
Abstract:With the diversification, complexity and intelligence of cyber attacks, the challenges facing network security are increasingly severe. In this paper, LCS (longest common subsequence) algorithm is used to identify the data format of network communication protocol. Aiming at the widely used SSL/TLS communication protocol on the network, an improvement is made on the basis of PEACH framework, a pattern testing platform.
Key words:fuzzy test; LCS algorithm; PEACH