新四季網

基於工控私有協議的模糊測試方法與流程

2023-06-05 05:23:21


本發明屬於工業網絡安全技術領域和模糊測試技術領域的結合,涉及了一種工控私有協議的學習方法和基於工控私有協議的模糊測試方法。



背景技術:

工業控制系統(industrialcontrolsystems,ics)是指工業生產過程中的控制網絡和系統,是國家關鍵基礎設施的關鍵組成部分。目前,工業控制系統已廣泛應用於石油石化,交通控制,電力設施,製造業以及核工業等各工業領域。隨著我國信息化和工業化的深度融合,工業控制系統在工業生產過程中得到了越來越廣泛的應用,越來越多的工業現場設備集成乙太網通信功能,與erp甚至網際網路相連,在提高數據共享效率,改進企業管理水平的同時也引入了黑客,病毒木馬等安全風險。由於工業控制系統與石油化工等工業領域息息相關,一旦工業控制系統等國家安全基礎設施受到網絡攻擊,將會造成財產損失、人員傷亡等嚴重後果,對社會穩定造成重大威脅。

近年來,針對工業控制網絡的攻擊屢見不鮮。2010年,網絡超級武器「stuxnet」病毒通過針對性的入侵ics系統,嚴重威脅到伊朗布希爾核電站核反應堆的安全運營,這次被稱為「震網」的攻擊事件使人們對關鍵基礎設施網絡安全問題的關注度大大上升。權威工業安全事件信息庫risi(repositoryofsecurityincidents)統計,截止2011年,全球已發生200餘起針對工業控制系統的重大攻擊事件,尤其在2000年以後,隨著通用協議、通用硬體、通用軟體在工業控制系統中的應用,對過程控制系統和數據採集監控系統的攻擊增長了近10倍。工控系統之所以會成為攻擊者的目標,根源之處還是在於系統軟體,網絡協議,設備在設計之初只專注於實用性和功能性,並未考慮安全性問題,在使用之中便暴露出安全漏洞。漏洞挖掘是探測系統軟體漏洞的常見技術手段,是解決工控系統安全的根本,它可以在威脅未發生時就檢測出系統存在的安全隱患。國內外安全領域對漏洞挖掘技術的研究已具有一定的成果,但傳統網絡的漏洞挖掘方法並不適用於工控網絡,如何對工業控制系統進行漏洞挖掘的研究較少。面對日益嚴重的工控網絡安全問題,基於工控網絡的漏洞挖掘方法也在發展之中。



技術實現要素:

為解決上述問題,本發明考慮了工業網絡的特殊性,針對工控網絡設備經常使用私有協議的特點,提出了一種工控私有協議的學習方法和基於工控私有協議的模糊測試方法。通過工控主從通信鏈路獲取的報文樣本數據,學習私有協議的協議特徵信息,將協議特徵信息作為構建測試用例以及對測試用例變異的依據,從而以網絡流量的方式,測試支持此私有協議的過程邏輯控制器(plc)的健壯性,同時對被測對象進行異常監控,記錄被測對象發生的異常信息。

為了達到本發明的目的,本發明結合工控私有協議學習方法和工控私有協議模糊方法,提出了一種基於工控私有協議模糊測試方法,該方法由數據預處理模塊、協議學習模塊、模糊測試模塊、異常報警模塊共四部分構成。

數據預處理模塊。此模塊作用是採集樣本數據包,將樣本數據包讀取到程序內存中。因此,此模塊由兩個功能子模塊構成。功能一,樣本採集模塊,在程序運行階段,在主從通信鏈路之間使用鏡像埠的方式採集一個工業流程周期內的雙向數據包,保存為pcap文件,作為樣本集,放置在程序根目錄下。功能二,樣本讀取模塊,此功能通過利用對winpcap封裝好的sharppcap,使用用於文件數據捕獲的icapturedevice接口,使用tcpdump規則對樣本集內的數據包進行過濾,如果不屬於需要進行分析的數據報文,則將其丟棄。將需要分析的協議報文通過請求與響應對應的形式保存到程序內部的請求響應隊列中,再將所有請求保存到請求隊列中。兩個緩存隊列提交給協議學習模塊使用。

協議學習模塊。此模塊的作用是根據數據預處理模塊提供的緩存隊列,利用學習算法,首先將請求隊列中的協議報文進行分類,然後針對每類報文進行請求欄位特徵的學習,最後對請求與響應之間欄位特徵的關係進行學習,因此,此模塊由兩個功能子模塊構成。功能一,報文分類模塊,首先獲取數據處理模塊中的請求響應隊列和請求隊列,根據請求隊列,學習統計出請求數據包樣本的可變域和不可變域,最大報文長度,最小報文長度,可變域中該字節的變化率,稱這些屬性為基本屬性,通過請求響應隊列和請求隊列以及統計學習到的上述基本屬性,實例化一個節點作為根節點。通常,工控協議存在控制命令標識符,命令標識符往往在樣本中屬於可變域並且變化率低,並且在協議欄位頭部的位置,所以,通過可變域的變化率尋找變化率最小,並且前一個字節不為0x00的第一個字節索引為劃分依據字節,根據此字節的不同將兩個緩存隊列進行劃分,並且分別統計上述的基本屬性,根據統計信息實例化多個節點作為根節點的葉子節點。在具有葉子節點的情況下,需要判斷葉子節點是否需要繼續劃分,統計一個節點中的最小變化率索引的集合,由於,工控協議往往存在命令表示符和子命令標識符,同一層的兄弟節點的命令標識符位置應該接近,所以,判斷葉子節點是否需要繼續劃分的依據為,一個節點的子節點集合中,如果子節點的最小變化率索引的集合有交集,則該子節點集合中所有的節點都應劃分,否則停止劃分。如果滿足劃分的條件,則應該確定使用哪一個字節進行劃分,由於有些需要劃分的節點的劃分依據已經成為不可變域,為了使劃分的更加精確,可以將劃分的依據節點向後移,所以確定使用哪一個字節進行劃分的依據為,根據一個節點,獲取此節點中變化率最小,並且前一個字節不為0x00的字節,查看該字節是否存在於該節點的兄弟節點的不可變域中,如果存在,則該節點和其他兄弟節點各自按照其變化率最小且前一個字節不為0x00的字節進行劃分,否則統計每個子節點其變化率最小且前一個字節不為0x00的字節,取出該字節在各個兄弟節點中索引最小的索引,每個子節點依據此字節進行劃分。劃分出來的子節點繼續根據是否劃分的條件和劃分的節點進行操作,最多不超過4層,直到所有節點不可再劃分為止。功能二,協議學習模塊,分類完畢後,對每個葉子節點,首先劃分該節點的可變域和不可變域,統計該節點可變域的樣本頻率,然後,收集屬於不可變域且前一個字節為0x00,或屬於可變域的節點作為長度域的初始化空間,以向量集的形式,統計長度域最小的可能範圍。接著使用apriori算法學習協議欄位間的關聯規則,此關聯規則的學習共有兩個步驟,步驟一,尋找數據包間的單獨項,統計出現的次數形成初始候選集,然後根據最小支持度進行裁剪,得到初始頻繁集,通過頻繁集的自連接生成下一輪的候選集,直到進行裁剪之後頻繁集內個體為零為止,最後,可得到最終的頻繁集。步驟二,根據頻繁集,首先統計頻繁集中所有出現的子集,統計每個子集出現的次數。然後,根據子集的支持度,使用條件概率的方法,計算不相交的兩個子集間的關聯概率,以最小置信度進行裁剪,最後得出該葉子節點的強關聯規則。學習的最後,需要使用請求響應隊列,學習請求與響應的對應的特徵關係,該方法由三個步驟,步驟一,針對請求響應隊列中的一對請求響應數據,以字節為單位,使用雙序列比對算法中的needleman/wunsch算法,將請求的個數加一作為行數,響應的個數加一作為列數,構造比對矩陣,使用動態規劃的思想和填充規則,將矩陣內部進行填充,步驟二,從矩陣的右下角開始,使用回溯規則進行規則,將相等的字節索引進行記錄,獲得一對請求與響應間的比對序列,步驟三,將該節點下的請求響應數據依次進行步驟一、二的操作,最後對所有數據所得的結果求交集,得出最終的請求響應特徵比對結果。將學習到的可變域與不可變域,可變域的樣本頻率,長度域向量集,關聯規則、請求響應特徵比對結果依附於相關的葉子節點上。

模糊測試模塊。此模塊的作用是根據協議學習模塊學習的協議特徵,構造符合協議特徵的應用報文並且在協議特徵的基礎上進行變異操作,生成模糊測試用例,之後通過數據通信模塊將測試用例發生給被測對象(plc)。因此,此模塊由兩個功能子模塊構成,功能一,用例生成模塊,以葉子節點作為處理單元,以字節作為變化單位。首先,通過該節點的最後一個不可變域的索引、樣本最大長度、樣本最小長度,確定樣本的data數據域,以隨機的方式生成data數據域的長度,再進行隨機填充。然後,統計該節點的不可變域和該節點的父節點的不可變域的差集,將該集合作為第一步變異的空間,隨機選擇字節進行隨機填充,將所有不可變域存入一個記錄隊列。接著,以apriori關聯規則的結果概率,選擇關聯規則的條件或結果,使用可變域的變異規則,進行隨機變異,再次使用可變域的變異規則,將識別出的長度域進行隨機變異,把關聯規則中的條件結果和長度域均加入記錄隊列。最後,從第一個字節向後遍歷非data數據域的部分,如果該字節不存在於記錄隊列意味著該字節還未生成,因此,使用可變域的變異規則,生成該可變域,最終將生成的各種域進行拼接,形成一個測試用例。功能二,數據通信模塊,將生成的測試用例通過socket異步通信的方式,首先建立連接,然後send測試數據,接著監聽響應數據,receive響應信息,將響應數據和對應的測試數據進行記錄,最後斷開連接,進行下一個測試用例的生成和發送。

異常報警模塊,此模塊的作用是在測試用例發送的同時,實時對接收到的響應以及被測對象的狀態進行監控,如果發生異常,通過報警記錄的功能對信息記錄。因此該模塊由兩個功能子模塊構成。功能一,異常監控模塊,在發送測試用例,接收到測試用例的響應數據之後,通過學習的請求與響應之間的特徵關係,對記錄的請求與響應進行匹配,查看是否符合該葉子節點下的多序列比對特徵,如果不匹配,則進行報警操作;在發送測試用例之前,檢測socket的tcp是否連接成功,如果不成功,則進行報警操作。功能二,報警記錄模塊,該模塊的作用是將報警的信息進行記錄顯示,需要將報警進行記錄到資料庫中。

本發明提出了一種工控私有協議的學習方法和基於工控私有協議的模糊測試方法,在支持私有協議的工控設備運行於工業現場之前,對設備的安全性和健壯性進行測試,發現工控設備異常情況,提前獲知可能存在的危險。

附圖說明

圖1是本發明工控私有協議模糊測試方法的結構示意圖。

圖2是本發明私有協議樹學習構建的流程示意圖。

圖3是本發明私有協議特徵欄位學習的流程示意圖。

圖4是本發明模糊測試的流程示意圖。

具體實施方式

以下將結合附圖所示的具體實施方式對本發明進行詳細描述。

圖1是本發明基於工控私有協議模糊測試方法的結構示意圖,如圖1所示,其步驟包括:

步驟11:在正常工控工藝環境中,採集私有協議的通信流量,使用wireshark保存為pcap文件。程序通過sharppcap的icapturedevice接口實例化虛擬的捕獲設備,使用tcpdump規則對樣本集進行過濾,將所有的請求數據保存在請求隊列,將所有的請求響應數據保存在請求響應隊列。

步驟12:通過兩個緩存隊列,使用協議樹生成算法對私有協議報文進行分類,以實例化樹節點方法和是否繼續劃分的判斷條件以及劃分依據條件,生成一個私有協議特徵分類樹。其中分類的過程和判斷依據條件為:首先獲取數據處理模塊中的請求響應隊列和請求隊列,根據請求隊列,學習統計出請求數據包樣本的可變域和不可變域,最大報文長度,最小報文長度,可變域中該字節的變化率,稱這些屬性為基本屬性,通過請求響應隊列和請求隊列以及統計學習到的上述基本屬性,實例化一個節點作為根節點。通過可變域的變化率尋找變化率最小,並且前一個字節不為0x00的第一個字節索引為劃分依據字節,根據此字節的不同將兩個緩存隊列進行劃分,並且分別統計上述的基本屬性,根據統計信息實例化多個節點作為根節點的葉子節點。在具有葉子節點的情況下,需要判斷葉子節點是否需要繼續劃分,統計一個節點中的最小變化率索引的集合,判斷葉子節點是否需要繼續劃分的依據為,一個節點的子節點集合中,如果子節點的最小變化率索引的集合有交集,則該子節點集合中所有的節點都應劃分,否則停止劃分。如果滿足劃分的條件,則應該確定使用哪一個字節進行劃分,確定使用哪一個字節進行劃分的依據為,根據一個節點,獲取此節點中變化率最小,並且前一個字節不為0x00的字節,查看該字節是否存在於該節點的兄弟節點的不可變域中,如果存在,則該節點和其他兄弟節點各自按照其變化率最小且前一個字節不為0x00的字節進行劃分,否則統計每個子節點其變化率最小且前一個字節不為0x00的字節,取出該字節在各個兄弟節點中索引最小的索引,每個子節點依據此字節進行劃分。劃分出來的子節點繼續根據是否劃分的條件和劃分的節點進行操作,最多不超過4層,直到所有節點不可再劃分為止。

對該樹進行廣度優先搜索遍歷,遍歷到每一個節點時,統計該節點內數據樣本的最大長度和最小長度。以最小長度為遍歷字節序列統計該節點的可變域和不可變域。根據統計出的可變域,統計序列組中相同域中出現的數據,計算相同域中不同數據在序列樣本中出現的頻率,例如,設索引1為序列組中第一個出現的可變域,長度為2個字節,1中出現的(0x81,0x02)概率為0.12,則可將此組信息表示為{1,(0x81,0x02),0.12}。最終得到該節點的可變域的樣本頻率。

對該節點中的每個數據包數據的序列,窮舉所有可能出現的連續字節的組合,計算每種組合的字節長度值,從起始位遍歷每一個可變域,查看該可變域中字節的值是否和出現在該字節索引之後的連續字節組合的長度相匹配,如果匹配,則形成一個長度域向量,例如,s表示起始域序號,e表示終止域序號,l表示長度域序號,p表示長度域在可變域之內的偏移,h表示長度域的長度,則匹配信息以{s,e,l,p,h}的向量形式記錄下來,將一個數據包所有的匹配信息形成一系列的長度向量集,對所有數據包的長度向量集做相同的操作,然後求它們的交集。最後得出識別出的長度域集合,此長度域的數量可能不唯一,但都符合報文樣本數據情況。

對該節點的可變域進行統計,生成樣本數據集。統計樣本數據集內部的所有可變域的頻率,生成初始候選集。使用最小支持度進行裁剪,然後進行自連接操作,統計每個個體在初始樣本集內出現的次數,生成第二輪的候選集,再次進行上述自連接並且統計候選集出現頻率的操作,進行自連接操作和統計頻繁集的時候需要滿足兩個條件:兩個項集可以進行連接的條件是它們有k-1項是相同的,並且如果一個項集有一個子集不為頻繁集中的項集則該項集也不為頻繁集中的項集。在裁剪之後如果候選集為空則停止操作,上一輪的候選集成為頻繁集。統計這個頻繁集中的項集符合索引前後關係且不相交的兩個子集,前者置信度的條件,後者為置信度的結論。x為置信度的條件,y為置信度的結論,其中x,y均表示每個報文序列特徵域之中的數據,supp函數表示x與y同時在樣本集中出現的概率其值表示x與y的支持度,conf函數表示在x出現的情況下,y出現的概率,其值表示x與y的置信度,則支持度和置信度的計算方法為:

對每一個條件結果進行計算之後,生成apriori關聯規則列表,依附於該葉子節點上。

獲取節點的請求響應列表,對每一對請求響應構建雙序列比對矩陣x,矩陣的行為m+1,列為n+1,m為請求數據長度,n為響應數據長度,首先對矩陣的0行和第0列進行填充,填充的方法為:

x(i,0)=0;x(0,j)=0(0≤i≤m,0≤j≤n)

然後以從左上到右下的方向填充矩陣中的其他元素,

填充的方法為:

ai和bj代表第i個索引的請求字節值和第j個索引的響應字節值,max為取最大值的函數。接著通過矩陣,從矩陣的右下角開始進行回溯操作,若ai=bj,則回溯到左上角單元格,並且對請求與響應的索引進行對應記錄,若ai≠bj,回溯到左上角、上邊、左邊中值最大的單元格,若有相同最大值的單元格,優先級按照左上角、上邊、左邊的順序。回溯到矩陣左上角為止,生成該請求響應對的比對特徵。對所有請求響應序列進行特徵比對操作後,求所有比對特徵的交集,生成最終的請求響應比對特徵。最後將記錄的協議請求響應比對特徵依附於該節點上。

步驟13:隨機選擇一個葉子節點,該葉子節點的數據包最大長度為m,最後一個不可變域的索引為c,隨機生成一個x,取值範圍為0≤x≤2,則所生成測試用例數據域的長度l為:

random(min,max)函數表示取min到max-1之間的隨機數,包含min和max-1,然後對生成的數據域進行隨機填充。尋找該節點和該節點的父節點的不可變域的差,隨機選擇一個字節進行變異,以長度域,apriori關聯規則域的,未處理可變域的順序對每個域中的數據進行變異,維持原有樣本空間內的數據的概率為pi,i為該可變字節中每個字節值出現的樣本,n為該節點數據包的個數,qi為i樣本的頻率,則pi為:

最終構造了一個基於該葉子節點的私有協議的測試用例。

通過socket建立tcp連接,連接建立成功後,將測試用例數據發送給plc,等待響應數據,將請求與響應數據成對放入緩存隊列中。通過請求與響應的特徵,比對是否滿足該節點的請求與響應的比對特徵以及是否下一次tcp連接成功,如果滿足且連接成功則繼續發送下一個測試用例,如果不滿足或連接不成功則由異常報警模塊處理。

步驟14:對無法建立tcp連接情況和不符合請求響應比對特徵的情況,記錄其有關信息,存入報警資料庫中,停止測試用例發送過程。

圖2是本發明基於工控私有協議的協議樹學習構建方法的流程示意圖,如圖2所示,其步驟包括:

步驟21:啟動協議樹的創建,開始創建一顆私有協議分類樹。

步驟22:從讀取的數據包樣本內存中,獲取請求隊列和請求響應隊列。

步驟23:以請求隊列中數據最小長度為最大值,統計請求數據的可變域和不可變域。

步驟24:根據統計的可變域,統計每個可變域的變化次數,統計變化頻率最低的可變域的索引序列。

步驟25:通過請求隊列,統計請求隊列的最大長度和最小長度。

步驟26:將上述統計信息和兩個隊列封裝為一個樹節點。

步驟27:判斷該節點是否為根節點,如果是則跳轉步驟28,否則跳轉步驟210。

步驟28:通過變化頻率最低的可變域的索引序列,尋找第一個,並且前一個字節不為0x00的字節的索引為劃分依據字節。

步驟29:根據劃分依據對請求隊列和請求響應隊列進行劃分。

步驟210:如果該節點的最小變化率索引和其兄弟節點的最小變化率索引有交集,則該子節點集合中所有的節點都應劃分,如果需要繼續劃分則跳轉步驟211,否則跳轉步驟216。

步驟211:獲取此節點中變化率最小,並且前一個字節不為0x00的字節,查看該字節是否存在於其兄弟節點的不可變域中,如果存在,則該節點和其他兄弟節點各自按照其變化率最小且前一個字節不為0x00的字節進行劃分,否則統計每個子節點其變化率最小且前一個字節不為0x00的字節,每個子節點依據此字節進行劃分。根據此規則獲取該節點的劃分的依據。

步驟212:判讀劃分的依據是否為同一字節。如果是則跳轉步驟213,否則跳轉步驟214。

步驟213:使用獲取的同一個字節,對請求與請求響應的隊列進行劃分。

步驟214:通過變化率最小,並且前一個字節不為0x00的字節的條件獲取該節點的劃分依據。

步驟215:對該節點自身的劃分依據對請求隊列與響應請求隊列進行劃分。

步驟216:判斷是否所有的節點都通過劃分操作。如果是則跳轉步驟217,否則跳轉步驟218。

步驟217:劃分完畢,協議樹構建完成,停止協議樹的學習操作。

步驟218:獲取下一個未劃分的節點,進行學習操作。

圖3是本發明基於工控私有協議的協議特徵學習方法的流程示意圖,如圖3所示,其步驟包括:

步驟31:通過葉子節點開始協議特徵的學習。

步驟32:獲取一個分好類的葉子節點。

步驟33:開始學習該節點中可變域樣本頻率的學習。

步驟34:獲取該節點中的數據包請求隊列。

步驟35:使用該節點的最大長度為最大值遍歷所有請求數據的索引。

步驟36:每遍歷到一個索引之後查看該索引是否存在於該節點的不可變域中,如果存在則跳轉到步驟35,否則跳轉到步驟37。

步驟37:將該索引在請求隊列出現的所有值進行統計。

步驟38:對所有統計出的值,統計它們各自在請求隊列中出現的頻率。

步驟39:判斷該遍歷的索引是否為最後一個可變域索引,如果是則跳轉到步驟310,否則跳轉到步驟35。

步驟310:統計所有可變域的樣本頻率之後,生成該節點的可變域樣本頻率特徵。

步驟311:對該節點的長度域開始進行學習。

步驟312:通過該節點的可變域,找到所有可能成為長度域的索引,構成長度序列

步驟313:遍歷一個請求隊列的序列,統計該序列的子集,不包含自身序列。

步驟314:根據長度序列和該序列的子集,子集出現在長度域之後,長度域的值為子集的長度,以向量的形式表示一種長度域的可能性,一個序列統計出一個向量集表示來長度域的多種可能性。

步驟315:判讀該數據序列是否為最後一個請求隊列的序列,如果是,跳轉到步驟316,否則跳轉到步驟313。

步驟316:每個序列進行長度向量集的統計,生成該節點長度向量集的集合。

步驟317:對整個該節點長度向量集的集合求交集。

步驟318:生成最終的該節點的長度向量集特徵。

步驟319:開始對該節點進行apriori關聯規則的學習。

步驟320:定義該方法的最小支持度和最小置信度。

步驟321:對每個序列,以索引值的方式,生成一個序列的樣本,再生成該節點的樣本集。

步驟322:通過節點的樣本集,統計每個樣本中的個體在樣本集中出現的次數,計算該樣本個體的支持度。

步驟323:以樣本個體作為項集,和它所對應的支持度生成初始樣本頻繁集,對初始樣本頻繁集進行裁剪生成初始頻繁集。

步驟324:對頻繁集中的項集,通過數據表中的自連接方法,進行自連接操作,除去相同項集的自連接結果。

步驟325:兩個項集長度都為k,如果不是具有k-1個相同的個體索引值,則將該兩個項集自連接的結果除去,如果自連接的結果項集有一個子集不存在於前一輪的頻繁集中,則將該自連接的結果除去。進行項集的過濾操作。

步驟326:通過前一輪的頻繁集,統計項集在樣本集中出現的頻率,得到的自連接的項集的支持度。

步驟327:使用最小支持度對自連接結果進行裁剪,生成該輪次的頻繁集。

步驟328:判斷經過裁剪之後該頻繁集是否內部項集個數為零,如果是,則跳轉步驟329,否則跳轉步驟319。

步驟329:得出一個頻繁集,對其項集進行置信度的學習,獲取一個項集,統計其所有的子集,不包括其本身。

步驟330:生成該項集條件結果的對應列表,保證條件子集索引全在結果子集索引之前。

步驟331:生成該項集的條件結果集合。

步驟332:獲取一個條件結果,通過上述置信度計算公式計算其置信度。

步驟333:判斷是否為條件結果集合中最後一個條件結果,如果是,則跳轉步驟334,否則跳轉步驟332。

步驟334:對該項集學習到的條件結果、置信度集合通過最小置信度進行裁剪,生成該項集最終的關聯規則集。

步驟335:判斷是否為頻繁集中最後一個項集,如果是,則跳轉步驟336,否則跳轉步驟329。

步驟336:對該頻繁集中條件結果、置信度的所有情況進行統計,生成該節點的apriori關聯規則特徵集。

步驟337:開啟對請求響應隊列中的請求響應對的進行協議關係的學習。

步驟338:獲取該節點的請求響應隊列。

步驟339:對該獲取的請求響應隊列,遍歷一個請求響應對。

步驟340:以請求序列的長度加一為行數,響應序列的長度加一為列數,形成比對矩陣,根據上述的填充規則,首先填充第一行和一列的值,然後再填充剩下的矩陣值,完成比對矩陣的創建。

步驟341:使用比對矩陣的回溯方法,從矩陣右下角開始回溯。若行列對應的索引值相等,則回溯到左上角單元格,並且對請求與響應的索引進行對應記錄,若行列對應的索引值不相等,回溯到左上角、上邊、左邊中值最大的單元格,若有相同最大值的單元格,優先級按照左上角、上邊、左邊的順序。回溯到矩陣左上角為止。

步驟342:對回溯過程中相等的索引,以成對的方式進行記錄。

步驟343:回溯結束之後,生成一對請求響應的比對特徵。

步驟344:判斷是否為該請求響應隊列的最後一個請求響應對,如果不是,則跳轉步驟339,否則跳轉步驟345。

步驟345:統計完該節點下的所有請求響應對之後,對所有請求響應對的比對特徵求交集。

步驟346:所得的交集為該節點的請求響應協議比對特徵。

步驟347:將學習的可變域的樣本頻率、長度域集合特徵、apriori關聯規則特徵集,請求響應協議比對特徵依附於該葉子節點上。

步驟348:判斷該節點是否為此協議樹最後一個葉子節點,如果是,則跳轉步驟349,否則跳轉步驟32。

步驟349:生成該協議樹中葉子節點的協議特徵,結束協議特徵的學習。

圖4是本發明基於工控私有協議的模糊測試方法的流程示意圖,如圖4所示,其步驟包括:

步驟41:開始模糊測試過程,向被測對象發送測試用例,監聽響應數據。

步驟42:獲取協議樹中的所有葉子節點。

步驟43:根據協議樹獲取到的葉子節點,隨機選擇一個葉子節點。

步驟44:使用該節點的最大長度,最小長度,最後一個不可變域的索引,和隨機數生成方法,確定數據域的長度。

步驟45:遍歷數據域,對每個索引字節進行隨機填充,生成該測試用例的數據域部分。

步驟46:根據該節點的不可變域和該節點父節點的不可變域,確定該節點的不可變域的差集。

步驟47:根據該節點的不可變域的差集,隨機選擇一個不可變域差集的索引字節進行變異。

步驟48:使用apriori關聯規則的結果概率,隨機選擇關聯規則的條件或結果,使用可變域的變異規則,隨機選擇一個索引字節進行變異操作。

步驟49:獲取該節點的長度域集合,對所有長度域進行遍歷,對每個長度域進行變異操作。

步驟410:將以進行處理變異的特徵,apriori特徵,長度域特徵,不可變域加入到變異記錄隊列。

步驟411:獲取該節點的可變域,遍歷該節點的可變域。

步驟412:判斷此可變域的索引是否在記錄隊列裡。如果是,則跳轉步驟411,否則,跳轉步驟413。

步驟413:對變異到的索引字節進行隨機變異。

步驟414:對進行了變異操作的索引加入到記錄隊列。

步驟415:判斷該遍歷的可變域是否是該節點最後一個可變域,如果是,則跳轉步驟416,如果不是,則跳轉步驟411。

步驟416:和之前生成的數據域進行合併,生成一個測試用例。

步驟417:通過socket技術,與被測對象進行tcp連接。

步驟418:判斷tcp連接是否連接成功,如果連接成功,則跳轉到步驟419,如果未連接成功,則認為是異常信息需要進行報警操作,則跳轉步驟424。

步驟419:通過socket向被測對象send該生成的測試用例。

步驟420:判斷發送的測試用例是否接受到了被測設備的響應,如果接受到了,則跳轉步驟421,否則跳轉步驟43。

步驟421:將發送的測試用例和該測試用例接受到的響應進行配對,保存到緩存隊列中。

步驟422:使用學習的請求響應協議比對特徵對該請求與響應數據進行比對。

步驟423:查看通過請求響應協議比對特徵是否匹配成功,如果成功則跳轉步驟425,否則,發生請求與響應信息不匹配,認為是異常信息,需要報警操作,跳轉步驟424。

步驟424:將未成功建立tcp連接或請求響應未匹配成功的異常信息記錄到報警信息資料庫中。

步驟425:判讀用戶是否自行停止模糊測試過程,如果是,則跳轉步驟426,否則跳轉步驟43。

步驟426:完成一次模糊測試,停止該模糊測試過程。

本發明可以解決在面對工控私有網絡協議的情況下進行漏洞挖掘的問題,相比較於傳統模糊測試框架,具有更高的測試效率。

應當理解,雖然本說明書根據實施方式加以描述,但是並非每個實施方式僅包含一個獨立的技術方案,說明書的這種敘述方式僅僅是為了清楚起見,本領域的技術人員應當將說明書作為一個整體,各個實施方式中的技術方案也可以適當組合,按照本領域技術人員的理解來實施。

上文所列出的一系列詳細說明僅僅是針對本發明的可行性實施方式的具體說明,它們並非用於限制本發明的保護範圍,凡是未脫離發明技藝精神所作的等效實施方式或變更均應包含在本發明的保護範圍之內。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀