文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.191091
中文引用格式: 荊琛,傅曉彤,董偉,等. 基于Q-學習算法的有狀態(tài)網(wǎng)絡協(xié)議模糊測試方法研究[J].電子技術(shù)應用,2020,46(4):49-52,56.
英文引用格式: Jing Chen,F(xiàn)u Xiaotong,Dong Wei,et al. Research on fuzzing method of stateful network protocol based on Q-learning algorithm[J]. Application of Electronic Technique,2020,46(4):49-52,56.
0 引言
協(xié)議漏洞挖掘是保證網(wǎng)絡通信安全的重要手段,傳統(tǒng)漏洞挖掘技術(shù)主要包括逆向分析[1-2]和模糊測試[3]。其中,模糊測試具有準確率高、不要求源代碼、適用性高等優(yōu)點,是目前最常用的協(xié)議漏洞挖掘方法。有狀態(tài)網(wǎng)絡協(xié)議模糊測試技術(shù)的主要發(fā)展歷程如下。
最初,使用傳統(tǒng)的模糊測試方法對包括有狀態(tài)網(wǎng)絡協(xié)議在內(nèi)的所有網(wǎng)絡協(xié)議進行測試,通過變異或生成的方法產(chǎn)生大量測試用例,將其作為協(xié)議實體程序的輸入,期望這些不尋常的輸入能引發(fā)協(xié)議實體異常,從中找到協(xié)議的安全漏洞[4-5]。這種測試方法對于有狀態(tài)網(wǎng)絡協(xié)議來說,當測試用例與協(xié)議實體狀態(tài)不匹配時,測試用例可能會被協(xié)議實體直接丟棄,測試用例有效性低[6]。
于是,研究人員提出了根據(jù)協(xié)議狀態(tài)機構(gòu)造測試序列的有狀態(tài)網(wǎng)絡協(xié)議模糊測試方法[7-9],主要包括3個步驟:(1)通過正常的報文交互,將協(xié)議實體引導至某個待測狀態(tài),這些正常交互報文所構(gòu)成的序列稱為前置引導序列;(2)向協(xié)議實體輸入報文類型與被測狀態(tài)相對應的測試用例,檢測是否存在異常,如果檢測到協(xié)議實體在處理測試用例后出現(xiàn)系統(tǒng)崩潰或者停止響應等異常情況,則保存錯誤現(xiàn)場以待進一步分析;(3)若未檢測到異常,還需按照特定順序輸入正常報文將協(xié)議實體引導至終止狀態(tài),準備下一輪測試,這些正常報文所構(gòu)成的序列被稱為回歸序列。這種測試方法提高了測試用例有效性,但前置引導序列和回歸序列這些輔助報文在測試過程中的重復交互降低了測試效率,且因是根據(jù)協(xié)議實體所處的協(xié)議狀態(tài)輸入報文類型相對應的測試用例,導致無法發(fā)現(xiàn)由報文異常輸入順序所引出的協(xié)議缺陷。
因此,本文針對有狀態(tài)網(wǎng)絡協(xié)議提出了一種基于Q-學習算法的模糊測試方法,不需要引導狀態(tài)的輔助類型報文,且能在確保一定的測試用例有效性前提下,引入報文異常輸入順序測試。
1 關(guān)于有狀態(tài)網(wǎng)絡協(xié)議的模糊測試
1.1 有狀態(tài)網(wǎng)絡協(xié)議
根據(jù)輸入報文相互之間是否存在關(guān)聯(lián),網(wǎng)絡通信協(xié)議可分為無狀態(tài)協(xié)議和有狀態(tài)協(xié)議兩類[10]。無狀態(tài)協(xié)議是指報文發(fā)送方輸出的各個報文之間沒有關(guān)聯(lián)性,而對于有狀態(tài)協(xié)議,協(xié)議實體會記錄所接收到的報文信息,在處理報文后可能會出現(xiàn)協(xié)議狀態(tài)的變化。有狀態(tài)網(wǎng)絡通信協(xié)議通常采用確定有限狀態(tài)機(Deterministic Finite Automation,DFA)[11]作為協(xié)議交互的形式化描述模型。
將DFA定義為一個六元組M=(S,I,O,δ,β,T),其中:S={s0,s1,…,sn}是有限狀態(tài)集合,其中s0表示為M的初始狀態(tài),且在任意時刻,M只能處于某一狀態(tài)si,有限狀態(tài)機由s0狀態(tài)開始接收輸入;I={i1,i2,…,im}是有限輸入符號集合;O={o1,o2,…,om}是有限輸出符號集合;δ:S×I→S是狀態(tài)遷移函數(shù);β:S×I→O是狀態(tài)輸出函數(shù);T是終結(jié)狀態(tài)集合。當DFA應用于網(wǎng)絡協(xié)議描述時,I表示協(xié)議實體可接受并正常處理的輸入報文類型集合,O表示協(xié)議實體輸出的報文類型集合,以M表示協(xié)議狀態(tài)機。
以FTP協(xié)議[12]狀態(tài)機為例,其輸入輸出報文類型的抽象符號如表1所示,M包括8個狀態(tài),狀態(tài)集合S={s0,s1,s2,s3,s4,s5,s6,s7}。狀態(tài)機M如圖1所示,其中s0到s1的遷移表示為i1/o1,它表示協(xié)議實體處于s0狀態(tài)時,如果接收USER類型報文(用i1表示),將輸出331類型報文(用o1表示),同時協(xié)議實體狀態(tài)遷移至s1狀態(tài)。
1.2 關(guān)于有狀態(tài)網(wǎng)絡協(xié)議的模糊測試
在實施模糊測試時,協(xié)議實體對每個測試用例會給出相應的反饋信息[13],例如當測試用例不能被正確地接收處理時,協(xié)議實體會通過響應報文的形式告知。當協(xié)議實體處于狀態(tài)si,輸入報文im,根據(jù)協(xié)議狀態(tài)機將協(xié)議在狀態(tài)si處理報文im后輸出的響應報文on稱為由狀態(tài)si與輸入im確定的期望響應報文,如果得到的輸出不是響應報文on,則稱之為由狀態(tài)si與輸入im確定的非期望響應報文;若根據(jù)協(xié)議狀態(tài)機,狀態(tài)si與報文im并無對應關(guān)系,則將得到的任何響應報文都稱為由狀態(tài)si與輸入im確定的非期望響應報文。另外,在測試時,若在設定時間閾值內(nèi)未返回任何報文,也視為得到的是非期望響應報文。關(guān)于有狀態(tài)網(wǎng)絡協(xié)議的模糊測試,測試用例可以分為以下4類:
(1)第一類測試用例導致協(xié)議實體崩潰;
(2)第二類測試用例能夠被程序正確接收處理,可以引發(fā)協(xié)議實體狀態(tài)跳轉(zhuǎn)并輸出期望響應報文;
(3)第三類是導致協(xié)議實體輸出非期望響應報文的被協(xié)議實體直接丟棄的測試用例,沒有進行程序執(zhí)行過程,不會引發(fā)協(xié)議實體程序異常和狀態(tài)的轉(zhuǎn)換;
(4)第四類是導致協(xié)議實體輸出非期望響應報文的引出協(xié)議實體缺陷的測試用例。
對網(wǎng)絡協(xié)議的模糊測試過程主要是為了發(fā)現(xiàn)能夠觸發(fā)協(xié)議實體異常的測試用例,對于確定的測試用例集,如何能讓這些測試用例在模糊測試過程中達到最佳效果?考慮降低第三類測試用例的出現(xiàn)率,提高第一、四類測試用例的出現(xiàn)率。關(guān)于一個測試用例,它是觸發(fā)協(xié)議實體異常的第一、四類測試用例,還是被程序正確處理的第二類測試用例,或是被丟棄的第三類測試用例?這與輸入該測試用例時協(xié)議實體所處的狀態(tài)密切相關(guān)。因此,考慮在測試時根據(jù)協(xié)議實體狀態(tài)選取測試用例。對協(xié)議實體的狀態(tài)推斷主要依據(jù)于協(xié)議實體的響應報文。對于在si狀態(tài)下輸入由im變異生成的測試用例,如果協(xié)議實體的響應報文是協(xié)議狀態(tài)si和輸入im所對應的期望響應報文,那么表明測試用例為第二類測試用例,被協(xié)議實體正常接收處理,協(xié)議實體狀態(tài)已經(jīng)處于sj狀態(tài),可以根據(jù)狀態(tài)sj選取測試用例進行下一步測試。如果協(xié)議實體的響應報文屬于協(xié)議狀態(tài)si和輸入im所對應的非期望響應報文,那么協(xié)議實體可能仍處于si狀態(tài),也可能由于測試用例的作用,跳轉(zhuǎn)到狀態(tài)si之外的狀態(tài)。在這種情況下,需要輸入與狀態(tài)si相對應的正常輸入報文in,觀察協(xié)議實體的響應,如果響應報文是狀態(tài)si和輸入in所對應的期望響應報文,那么表明測試用例為第三類測試用例且此時協(xié)議實體已經(jīng)被引導至sq狀態(tài),繼續(xù)輸入根據(jù)狀態(tài)sq選取的測試用例進行測試;如果響應報文是狀態(tài)si和輸入in所對應的非期望響應報文,那么在輸入報文in之前,協(xié)議實體可能出現(xiàn)異常,表明測試用例為第四類測試用例,需要保存輸入數(shù)據(jù)以待進一步分析。
2 基于Q-學習算法的模糊測試方法
2.1 強化學習
強化學習是一種從環(huán)境狀態(tài)映射到動作的學習,目標是使智能體在與環(huán)境的互動過程中獲得最大累積獎賞[14]。強化學習把學習看作試探評價過程,如圖2所示,智能體根據(jù)環(huán)境狀態(tài)st選擇一個動作at作用于環(huán)境,環(huán)境在動作at的作用下轉(zhuǎn)移到狀態(tài)st+1,同時產(chǎn)生一個獎賞rt反饋給智能體,智能體再根據(jù)獎賞rt與狀態(tài)st+1選擇下一個動作,選擇原則是使獎賞最大化。
強化學習的目的是尋找一個策略π:S→A,使得每個狀態(tài)s的值函數(shù)Vπ(s)或狀態(tài)-動作值函數(shù)Qπ(s,a)達到最大?!爸岛瘮?shù)”與“狀態(tài)-動作值函數(shù)”分別表示指定“狀態(tài)”上以及指定“狀態(tài)-動作”上的累積獎賞[15]。
Q-學習算法[16]是一種異策略時序差分強化學習算法,Q-學習算法中狀態(tài)-動作值函數(shù)采用實際Q值增量式更新,對于狀態(tài)-動作對(s,a)的值函數(shù)Q(s,a),根據(jù)每次采樣得到的立即獎賞r進行一次更新:
2.2 基于Q-學習算法的有狀態(tài)網(wǎng)絡協(xié)議模糊測試方法
在1.2小節(jié),已經(jīng)提出根據(jù)協(xié)議實體狀態(tài)選取測試用例的思想。由于主要是想通過輸入報文類型與被測狀態(tài)不對應的測試用例引入報文異常輸入順序測試,提高漏洞挖掘能力,因此,考慮根據(jù)協(xié)議實體狀態(tài)選擇報文類型,然后根據(jù)報文類型選取測試用例進行測試。那么,應該以何種策略來根據(jù)協(xié)議實體狀態(tài)選擇報文類型,以使得在引入報文異常輸入順序測試后仍能確保一定的測試用例有效性呢?這一問題可以通過制定恰當?shù)莫勝p規(guī)則轉(zhuǎn)化為強化學習中尋找策略π的問題來加以解決,下面就通過Q-學習算法來解決該問題。
(1)狀態(tài)集合
S={s0,s1,…,sn},即協(xié)議的狀態(tài)集合。
(2)動作集合
A={a1,a2,…,am}={i1,i2,…,im},即協(xié)議的輸入報文類型集合。
(3)動作探索策略
Q-學習通過探索-利用過程發(fā)現(xiàn)最優(yōu)獎賞,“利用”過程選擇最大Q值所對應的輸入報文類型,“探索”過程則是隨機選擇輸入報文類型以防止發(fā)現(xiàn)不了最優(yōu)獎賞。本文采用“-貪婪探索策略”,在協(xié)議狀態(tài)s下以小概率隨機選擇輸入報文類型,以概率1-選擇具有最大Q值的輸入報文類型。
(4)立即獎賞
在協(xié)議狀態(tài)s下選擇報文類型為a的測試用例進行測試后,根據(jù)測試用例的類別確定狀態(tài)-動作對(s,a)的立即獎賞r。
根據(jù)協(xié)議實體狀態(tài)s,依據(jù)“-貪婪探索策略”選擇報文類型為a的測試用例對協(xié)議實體進行測試。輸入測試用例后,通過觀察協(xié)議實體是否崩潰判斷測試用例是否為第一類測試用例;通過響應報文分析協(xié)議實體狀態(tài)并區(qū)分第二、三、四類測試用例。根據(jù)測試用例的類別確定狀態(tài)-動作對(s,a)的立即獎賞r,通過獎賞r更新Q值與策略π,降低第三類測試用例的出現(xiàn)率,提高第一、四類測試用例的出現(xiàn)率?;赒-學習算法的有狀態(tài)網(wǎng)絡協(xié)議模糊測試方法描述如下:
(1)建立狀態(tài)空間S和動作空間A;
(2)初始化Q值表和策略π;
(3)初始化協(xié)議實體狀態(tài)至s0;
(4)依據(jù)“-貪婪探索策略”,根據(jù)協(xié)議實體當前狀態(tài)s選擇報文類型為a的測試用例輸入?yún)f(xié)議實體;
(5)在協(xié)議實體處理測試用例后,觀察協(xié)議實體反饋信息,分析協(xié)議實體當前狀態(tài),判斷測試用例類別,確定狀態(tài)-動作對(s,a)的立即獎賞r;
(6)更新Q值表;
(7)更新策略π;
(8)若測試用例為第一、四類測試用例,記錄異常后跳轉(zhuǎn)至步驟(3);若協(xié)議實體當前狀態(tài)為協(xié)議終結(jié)狀態(tài),跳轉(zhuǎn)至步驟(3);否則跳轉(zhuǎn)至步驟(4)。
3 實驗與分析
3.1 實驗建立
Sulley[17]是目前較為成熟的模糊測試框架,有對有狀態(tài)網(wǎng)絡協(xié)議進行模糊測試的完整測試方案。本文方法Q-Fuzzing 將與Sulley按照以下描述場景進行仿真實驗對比:以FTP協(xié)議實體作為測試對象,兩種方法均采用由Sulley變異策略生成的測試用例,測試用例的漏洞挖掘效力相當。
3.2 實驗結(jié)果分析
3.2.1 測試效率評估
測試效率是指單位時間輸入的測試用例數(shù)量,用向被測協(xié)議實體輸入的測試用例個數(shù)與發(fā)送報文的總數(shù)的比值值來衡量測試效率,值的數(shù)學表達式為:=∑A/∑m,其中,∑A表示輸入的測試用例總數(shù),∑m表示發(fā)送報文的總數(shù)?!艫一定時,值越大,說明發(fā)送輔助類型的報文越少,單位時間輸入的測試用例數(shù)量越高,測試效率越高。在測試過程中,Q-Fuzzing與Sulley的值與輸入的測試用例總數(shù)∑A的關(guān)系如圖3所示。
Sulley采用完善的引導機制,隨著測試路徑的深入,前置引導序列等輔助報文的比重越來越大,值越來越低。Q-Fuzzing雖在分析協(xié)議實體狀態(tài)時存在一定的輔助報文交互,但是該方法不需要引導狀態(tài)的輔助報文,輔助報文的比重較低,值相對較高。
3.2.2 測試用例有效性評估
假設輸入的某個測試用例沒有被協(xié)議實體直接拋棄,而是進行程序執(zhí)行過程,那么稱該測試用例為有效完成測試的測試用例(簡稱為有效測試用例)。測試用例有效性是指一個測試用例為有效測試用例的概率,以有效測試用例個數(shù)與輸入的測試用例總數(shù)的比值φ表示測試用例有效性,φ的數(shù)學表達式為:φ=∑Ac/∑A,其中,∑Ac表示有效測試用例總數(shù),∑A表示輸入的測試用例總數(shù)。在測試過程中,Q-Fuzzing與Sulley的測試用例有效性φ與輸入的測試用例總數(shù)∑A的關(guān)系如圖4所示。
Sulley采用完善的引導機制,使得測試用例可以在協(xié)議實體處于對應狀態(tài)時進行輸入,測試用例有效性較高。Q-Fuzzing在測試初期,輸入報文時盲目性較大,存在很多被拋棄的測試用例,測試用例有效性低,但隨著在測試過程中實踐學習,測試用例有效性逐步提高,最終趨于穩(wěn)定。
3.2.3 漏洞挖掘能力
漏洞挖掘能力是指在模糊測試正常執(zhí)行條件下挖掘漏洞的數(shù)目。兩種方法挖掘漏洞數(shù)目如表2所示。
在漏洞挖掘能力方面,Q-Fuzzing效果好于Sulley。對于FTP 協(xié)議實體中存在的3個漏洞:(1)當協(xié)議實體狀態(tài)轉(zhuǎn)換序列為s0->s1->s2->s3->s4時,輸入變異的i5報文后,協(xié)議實體崩潰;(2)當協(xié)議實體狀態(tài)轉(zhuǎn)換序列為s5->s4->s5時,輸入與s5狀態(tài)并不對應的i12的變異報文后,協(xié)議實體崩潰;(3)當協(xié)議實體狀態(tài)轉(zhuǎn)換序列為s0->s1->s2->s3->s4->s5時,輸入變異的i7報文,協(xié)議實體出現(xiàn)狀態(tài)異常遷移,協(xié)議實體既不處于s5狀態(tài)也不處于s6狀態(tài)。Q-Fuzzing挖掘出漏洞1、2、3,Sulley僅挖掘出漏洞1,未能挖掘出漏洞2、3。
根據(jù)測試效率與挖掘漏洞能力比較,相比于Sulley測試方法,本文測試方法Q-Fuzzing具有明顯的優(yōu)勢,達到了預期的測試效果。
4 結(jié)論
本文提出了一種基于Q-學習算法的有狀態(tài)網(wǎng)絡協(xié)議模糊測試方法,通過反饋信息分析協(xié)議實體狀態(tài),根據(jù)協(xié)議實體狀態(tài)和Q值選取測試用例進行測試。實驗結(jié)果表明,該方法不需要引導狀態(tài)的輔助類型報文,且能在確保一定的測試用例有效性下,進行報文異常輸入順序測試,顯著提高了測試效率和漏洞挖掘能力。在該方法中,協(xié)議狀態(tài)機的完整性以及學習算法中參數(shù)的設定對測試結(jié)果的影響很大, 因此,下一步有必要對協(xié)議狀態(tài)機以及參數(shù)的調(diào)節(jié)進行深入的研究。
參考文獻
[1] 程必成,劉仁輝,趙云飛,等.非標工業(yè)控制協(xié)議格式逆向方法研究[J].電子技術(shù)應用,2018,44(4):126-129.
[2] 魏驍,劉仁輝,許鳳凱.基于靜態(tài)二進制分析的工控協(xié)議逆向分析[J].電子技術(shù)應用,2018,44(3):126-130.
[3] 張雄,李舟軍.模糊測試技術(shù)研究綜述[J].計算機科學,2016,43(5):1-8,26.
[4] SUTTON M,GREENE A,AMINI P.Fuzzing:brute force vulner-ability discovery[M].[S.l.]:Pearson Education,2007.
[5] 王穎,楊義先,鈕心忻,等.基于控制流序位比對的智能Fuzzing測試方法[J].通信學報,2013,34(4):114-121.
[6] MUNEA T L,LIM H,SHON T.Network protocol fuzz testing for information systems and applications: a survey and taxonomy[J].Multimedia Tools & Applications,2016,75(22):14745-14757.
[7] ZHAO J,CHEN S,LIANG S,et al.RFSM-fuzzing a smart fuzzing algorithm based on regression FSM[C].Eighth International Conference on P2P,Parallel,Grid,Cloud and Internet Computing.IEEE,2013:380-386.
[8] CUI B,LIANG S,CHEN S,et al.A novel fuzzing method for Zigbee based on finite state machine[J].International Journal of Distributed Sensor Networks,2014,2014(3):1-12.
[9] 康紅凱,吳禮發(fā),洪征,等.一種基于FSM的BGP-4協(xié)議模糊測試方法[J].計算機工程與應用,2017,53(6):111-117.
[10] 張寶峰,張翀斌,許源.基于模糊測試的網(wǎng)絡協(xié)議漏洞挖掘[J].清華大學學報(自然科學版),2009(s2):2113-2118.
[11] NARAYAN J,SHUKLA S K,CLANCY T C.A survey of automatic protocol reverse engineering tools[J].ACM Computing Surveys,2015,48(3):1-26.
[12] GASCON H,WRESSNEGGER C,YAMAGUCHI F,et al.Pulsar:stateful black-box fuzzing of proprietary network protocols[M].Security and Privacy in Communication Networks.Springer International Publishing,2015:330-347.
[13] 張洪澤,洪征,周勝利,等.基于協(xié)議狀態(tài)機遍歷的模糊測試優(yōu)化方法[J].計算機工程與應用,2020,56(4):82-91.
[14] SUTTON R S,BARTO A G.Reinforcement learning:an introduction[M].Cambridge,USA:MIT Press,1998.
[15] 周志華.機器學習[M].北京:清華大學出版社,2016.
[16] WATKINS C J C H.Learning from delayed rewards[J].Robotics & Autonomous Systems,1989,15(4):233-235.
[17] GitHub.Sulley[EB/OL].(2013-06-11)[2015-06-29]. https://github.com/OpenRCE/sulley.
作者信息:
荊 琛1,2,傅曉彤1,董 偉2,趙云飛2
(1.西安電子科技大學 網(wǎng)絡與信息安全學院,陜西 西安710071;2.華北計算機系統(tǒng)工程研究所,北京102209)