劉夢琪 彭輝水 黃旺 中車株洲電力機車研究所有限公司
模糊控制的特點是適用范圍廣且對時變負載具有一定的魯棒性,它不依賴于被控對象的數(shù)學模型,適用于非線性系統(tǒng)的控制中。
模糊控制基本原理主要包括如下四部分:
(1)模糊化。簡單來說就是將清晰量轉(zhuǎn)化為模糊集,根據(jù)一定的轉(zhuǎn)換規(guī)則,將選定的模糊控制輸入轉(zhuǎn)換為系統(tǒng)能夠識別的模糊量,具體包括以下三步:
第一,對輸入進行處理,使其滿足模糊控制的要求;
第二,將第一步處理后的輸入進行尺度變換;
第三,確定各輸入的模糊語言取值及對應隸屬度函數(shù)。
(2)規(guī)則庫。模糊規(guī)則庫的作用是存放全部控制規(guī)則,為下一步的模糊推理提供語言控制規(guī)則。這些規(guī)則通過專家知識和使用人員經(jīng)驗總結得出,是一種根據(jù)人的直覺推理的語言表達形式。
(3)模糊推理。主要實現(xiàn)基于模糊規(guī)則和推理合成規(guī)則,從輸入到輸出模糊集的映射,這是模糊邏輯控制器的核心,它將基于模糊概念和推理模糊控制作用,應用模糊關系和推理規(guī)則模仿人類做出決定。
(4)解模糊。主要是將推理得到的控制量轉(zhuǎn)化為最終的輸出。
模糊測試是一種自動化或半自動化的漏洞挖掘技術,多用于安全性測試,通過將非預期的數(shù)據(jù)插入目標軟件程序的輸入中,并監(jiān)測目標程序的異常以識別未知的軟件漏洞。模糊測試方法通常分為3 種:白盒,用于測試源代碼或反匯編代碼;黑盒,則無需審查源代碼;以及灰盒,與黑盒相近,但將先前得到的結果數(shù)據(jù)作為反饋。模糊測試可以通過事先對目標程序進行研究,將得到的經(jīng)驗和知識轉(zhuǎn)化為更高效的模糊器(Fuzzer)。它充分利用了機器隨機生成和發(fā)送數(shù)據(jù)的能力,同時試圖引入使用人員的相關經(jīng)驗。
模糊測試會根據(jù)各種因素如目標系統(tǒng)、需要測試的數(shù)據(jù)格式等的不同而使用不同的方法,但模糊測試的過程基本由以下幾個步驟組成:
(1)確定測試對象和輸入向量
不確定目標程序則無法決定決定具體的模糊測試工具或方法。從安全角度考慮,被利用的漏洞幾乎都是由于應用程序接收未過濾非法數(shù)據(jù)或校驗確認的用戶輸入所引起的。無法定位輸入源將對模糊測試產(chǎn)生嚴重影響,因此確定輸入向量集對模糊測試而言至關重要。目標程序能夠接收的數(shù)據(jù)都屬于輸入向量,包括文件、環(huán)境變量和命令行參數(shù)等,這些都是可能的模糊測試變量。
(2)生成模糊測試數(shù)據(jù)。確定輸入向量后,可以生成模糊測試數(shù)據(jù)。在實際測試中,會根據(jù)目標程序的不同,選擇對應的測試數(shù)據(jù)生成方式,可以采用對數(shù)據(jù)樣本進行變異或根據(jù)協(xié)議動態(tài)生成等方式,自動化生成大量的模糊測試數(shù)據(jù)。
(3)執(zhí)行模糊測試數(shù)據(jù)。這一步與上一步生成模糊測試數(shù)據(jù)同時進行,也需要使用自動化的工具來執(zhí)行,執(zhí)行過程一般包括啟動目標程序、發(fā)送測試數(shù)據(jù)到目標程序等。
圖2 典型的模糊測試流程
(4)監(jiān)測異常。在模糊測試過程中,如果失去了對異常的監(jiān)測,最終即使確定出現(xiàn)異常,也無法判斷異常產(chǎn)生的原因,追蹤引發(fā)目標程序異常的源測試數(shù)據(jù)。監(jiān)測方式不必依賴目標應用程序和模糊測試方法。
(5)確定可利用性。雖然該步驟不屬于模糊測試的必要流程,但根據(jù)軟件測試的最終目的,監(jiān)測到異常后,需要確定所發(fā)現(xiàn)的異常能否被進一步利用。不管采用什么類型的模糊測試,該步驟一般由具備豐富的安全領域?qū)I(yè)知識和相關的經(jīng)驗的人員手動完成。
除了確定可利用性外,在模糊測試中,都應該考慮到上述其他階段。各階段的順序和側(cè)重點會根據(jù)測試人員的最終目標而不同。盡管模糊測試功能強大,但不說明它能發(fā)現(xiàn)目標軟件中所有的錯誤。
一個典型的模糊測試的流程如圖1 所示:
模糊測試的執(zhí)行過程可以簡單描述為:通過隨機或半隨機的方式生成輸入數(shù)據(jù);將數(shù)據(jù)輸入目標程序;檢測被測系統(tǒng)的狀態(tài)是否正常;監(jiān)控目標程序的狀態(tài)判斷是否存在漏洞。
(1) 模糊測試與云計算
9 年前一篇研究文章中提出了“云端模糊測試將徹底改變安全測試”,模糊測試軟件可利用大量可用基礎設施并行執(zhí)行不同測試,因此模糊測試十分適用于云計算,將安全測試托管在云端,簡化了從每個應用收集信息、推送更新、驅(qū)動未來開發(fā)改進的過程,也減少了人力物力的投入,甚至可以依靠自動向代碼提交不良輸入來發(fā)現(xiàn)軟件漏洞。
(2)模糊測試與神經(jīng)網(wǎng)絡
因為人工智能的不斷發(fā)展,神經(jīng)網(wǎng)絡可以令模糊測試工具變得更加高效。模糊測試工具可以通過持續(xù)的模糊測試訓練,學習模糊測試變異的類型或要應用的策略等。為了具備足夠的訓練數(shù)據(jù),產(chǎn)生足夠的模式,運用大量的輸入-輸出樣本矢量對對模糊測試工具進行訓練。在發(fā)現(xiàn)漏洞之后,通過神經(jīng)網(wǎng)絡確認漏洞是否值得利用,以及是否會被利用。模糊測試本身采用傳統(tǒng)自動化方法加人工監(jiān)督的方式進行。
(3)模糊控制用于自動化測試判據(jù)
伴隨著模糊控制技術的發(fā)展和完善,模糊測試在測試用例的需求被不斷滿足,但從軟件測試的流程來看,測試用例僅僅只測試流程的一部分,還有一個重要的項點是測試結果。一般而言,可以根據(jù)需求中給定的范圍判斷測試結果是否通過。但在一些情況下,尤其是處于邊界情況時,更多的需要測試人員與設計人員進行溝通,人為確定結論。同時,當結果有特殊波動,但總體或平均值仍在允許范圍內(nèi)時,也存在判斷失誤的可能性。在測試結論上如果能帶入模糊控制理論,配合神經(jīng)網(wǎng)絡算法模型,能更好地改善因邊界點等問題所造成的測試判據(jù)有誤的情況。
(4)模糊測試結合其他安全方法
模糊測試技術在未來有可能會結合其他多種軟件漏洞發(fā)掘分析方法。例如當模糊測試無法確保足夠的代碼覆蓋時,可以考慮將代碼審查同模糊測試相結合,把代碼覆蓋作為一種度量手段來確定模糊測試的完成程度。還可以考慮另一種混合分析的方法。首先對源代碼進行自動化評審,這種典型的白盒測試通常會發(fā)現(xiàn)大量的潛在的漏洞,但是可能產(chǎn)生誤報,因為它在運行時不能確認結果的最終形式。這時可以利用靜態(tài)掃描的結果來幫助生成模糊測試用例,協(xié)助在動態(tài)模糊測試階段中證明或反駁那些潛在的漏洞。
本文對模糊控制的發(fā)展歷程進行了簡要的介紹,并在此基礎上分析了模糊測試的研究現(xiàn)狀與典型應用,同時展望了未來模糊控制在測試上的發(fā)展方向。模糊測試概念的提出已經(jīng)有些年頭了,也得到了一定的重視與發(fā)展。但其執(zhí)行相當困難,很難擁有合適的資源,對一般的公司企業(yè)沒有太大吸引力。人工智能(AI)或神經(jīng)網(wǎng)絡逐步進入傳統(tǒng)模糊測試技術,造就了查找目標程序或系統(tǒng)漏洞的強大工具,企業(yè)和軟件供應商可以通過模糊測試更容易地找出系統(tǒng)中的潛在可利用漏洞。通過深入研究,模糊測試技術極有可能成為未來混合型軟件測試中一個重要的組成部分。