模糊測試是網(wǎng)絡(luò)安全測試領(lǐng)域必然會被提及的一類測試方法。它有著極其鮮明的特點,包括極低的需求依賴性、可逆向的測試?yán)砟畹龋c常規(guī)測試方法顯得是那么的“風(fēng)格迥異”。但同時,這種測試方法又常常能發(fā)現(xiàn)一些核心、嚴(yán)重的BUG,因此其在整個測試體系中有著重要的地位,且這種測試方法也已“潤物細(xì)無聲”地融入到我們的測試活動中了。本次就為大家介紹如何在車載通信領(lǐng)域運用模糊測試。
1
什么是模糊測試
模糊測試的整體測試思路非常簡單,給待測系統(tǒng)輸入“隨機值”,然后監(jiān)測是否出現(xiàn)異常。
圖1 模糊測試示意圖這個過程中有這樣幾個特點:
1
/ 隨機值
隨機值可以是正常的數(shù)據(jù),也可以是非預(yù)期的數(shù)據(jù),通常可以通過變異(篡改原有數(shù)據(jù))和生成(通過規(guī)則偽造數(shù)據(jù))來獲得。且整個測試不是找?guī)讉€隨機值來做測試,而是不斷地輸入大量的隨機值(可以理解為無窮盡)來做長時間的持續(xù)測試。
圖2 功能性測試與模糊測試對比
2
/ 監(jiān)測異常
正是由于待測系統(tǒng)可能接收處理非預(yù)期數(shù)據(jù),因此其會有各種各樣的表現(xiàn)。而異常表現(xiàn)可以是服務(wù)停止、程序崩潰,也可以是資源過載、數(shù)據(jù)丟失。
3
/ 自動化
每個測試輪次都是給定輸入然后監(jiān)測異常,而對于模糊測試來說,這樣的輪次需要執(zhí)行非常多的次數(shù),甚至可以永無止境,所以自動化是基本必須要實現(xiàn)的內(nèi)容。
2
模糊測試運用到車載通信
雖然模糊測試在車載通信測試中很少被單獨拿出來,但實則我們在很多的測試中使用了這種方法。比如:
CAN通信測試中的高負(fù)載測試
對CAN通信注入特定的報文,形成期望的負(fù)載條件,然后監(jiān)測是否有異常。這個測試中的隨機值變量為負(fù)載率和產(chǎn)生負(fù)載的報文ID,異常的判斷可能包括錯誤幀、通信恢復(fù)等,這就形成了一個高負(fù)載模糊測試。
網(wǎng)絡(luò)管理中的休眠喚醒測試
在控制器休眠的各個時刻觸發(fā)喚醒事件,然后監(jiān)測是否正常喚醒。這個測試中隨機值變量是時序,即喚醒事件的觸發(fā)是在什么時刻,異常的判斷是喚醒行為,這就形成了一個休眠喚醒時序模糊測試。
這里舉的2個例子比較特別,想要說明的是我們提及的隨機值并不僅僅是協(xié)議字段或者信號數(shù)值這種很容易聯(lián)想到的數(shù)據(jù),還包括各種狀態(tài)值(如負(fù)載率、吞吐量、頻率等)、時序(如休眠喚醒過程、TCP連接的三次握手、診斷服務(wù)的解鎖交互等)等數(shù)據(jù)。尤其是時序,通常是有一連串的步驟,這一過程中不僅可以將每一步的間隔時間用作隨機值,還可以在各個步驟本身“大做文章”,比如每一步再耦合隨機信號值。 概括起來就是萬物皆可數(shù)據(jù)化,數(shù)據(jù)皆可隨機化,這或許是模糊測試的核心思想。而結(jié)合車載通信本身的特點,我們可以得到一些典型的模糊測試內(nèi)容:
針對協(xié)議中數(shù)據(jù)格式的模糊測試
如CAN總線中接收到不同ID、DLC時,是否出現(xiàn)錯誤幀。這種測試可能更針對CANFD節(jié)點或者OBD節(jié)點,甚至還包括擴展幀、遠(yuǎn)程幀等特殊數(shù)據(jù)。 又比如以太網(wǎng)中接收到不同的源MAC、目標(biāo)MAC、源IP、目標(biāo)IP、源端口、目標(biāo)端口時,是否出現(xiàn)異常。這里的異常又會根據(jù)防火墻策略變得不盡相同,比如無響應(yīng)、重啟、發(fā)出不可達(dá)的錯誤報文等。
圖3 針對協(xié)議中數(shù)據(jù)格式的模糊測試示例-CAN ID模糊測試
針對信號值的模糊測試
如CAN總線中接收到不同的信號值(包括非法值、無效值等),是否出現(xiàn)重啟、死機等情況。 又比如SOME/IP中接收到各種請求、響應(yīng)、訂閱等數(shù)據(jù)(包括非預(yù)期的數(shù)據(jù)類型、編碼、字節(jié)順序等),是否出現(xiàn)服務(wù)暫停、服務(wù)崩潰、死機等情況。
圖4 針對信號值的模糊測試示例-CAN信號模糊測試
針對時序的模糊測試
如上文提及的網(wǎng)絡(luò)管理休眠喚醒測試。 又比如SecOC或者時間同步機制中,需要周期性地對特定基準(zhǔn)進(jìn)行同步處理,又有其他數(shù)據(jù)會使用同步后的基準(zhǔn),而在同步時序中出現(xiàn)各種偏移(包括基準(zhǔn)本身的偏移、應(yīng)用數(shù)據(jù)使用的基準(zhǔn)與基準(zhǔn)更新時刻的偏移等),判斷同步機制是否崩潰。
圖5 針對時序的模糊測試示例-休眠喚醒模糊測試
針對流量的模糊測試
如上文提及的高負(fù)載測試。 又比如網(wǎng)關(guān)節(jié)點的性能測試中,在各端口并行接收不同的數(shù)據(jù)流以構(gòu)成不同的吞吐量,判斷路由機制是否崩潰。
圖6 針對流量的模糊測試示例-吞吐量模糊測試
3
模糊測試中需要注意的問題
雖然有大量的測試可以使用模糊測試方法,但同樣的,模糊測試也有著其局限性或者說不足,如何盡可能地發(fā)揮其優(yōu)點、規(guī)避其不足可能需要考慮以下內(nèi)容:
異常
對于異常的判斷是一個十分困難但又非常重要的點。困難是在于異常的情況比較復(fù)雜且能夠監(jiān)測的手段很多時候是有限的,尤其是需要實現(xiàn)異常情況的自動化監(jiān)測。在車載網(wǎng)絡(luò)中可以用來判斷異常的包括特定信號值、周期報文的周期波動、控制器的電流值、DTC等。對于每一種不同的模糊測試,應(yīng)該需要根據(jù)測試內(nèi)容選擇合適的異常判斷方式。另一個有效的方法是進(jìn)行“插樁”,用來突破控制器本身的局限性,突破常規(guī)“黑盒測試”的局限性。
圖7 插樁示意圖
平衡
由于模糊測試是一種趨近于無窮測試的方式,帶來的必然影響就是時間成本的增加。但是我們實際的產(chǎn)出并不會隨時間增加而呈現(xiàn)線性的增加,因此測試效率會變得越來越低。為了提高測試效率,我們必然會使用一些規(guī)則做隨機值的篩選,但這又必然導(dǎo)致隨機性的降低。正如很多測試?yán)碚撍枋觯皽y試可以證明存在缺陷,但不能證明不存在缺陷”。我們很多的測試都是在投入和產(chǎn)出中尋求平衡,模糊測試由于其特點顯得更加明顯,以至于我們要界定測試是否完成會存在一些爭議和博弈,要處理這樣的平衡,難度會可能大于測試本身。
定位及修復(fù)
測試會發(fā)現(xiàn)問題,這帶來的另一個問題就是如何定位。而模糊測試的特點又會導(dǎo)致問題的定位(包括問題復(fù)現(xiàn))會有很大的難度和不確定性,尤其是當(dāng)模糊測試中隨機值是更多維度的情況下,事情就會變得更加復(fù)雜。另一個需要考慮的點就是問題修復(fù)后的復(fù)測工作,這可能比做一次完整的模糊測試還要麻煩,此時需要解決的點是如何快速驗證問題已被修復(fù)和如何驗證修復(fù)方案是否會產(chǎn)生新的問題。雖然這兩個點在所有測試中都存在,但是由于模糊測試的隨機性,這兩個問題顯得更加困難。 綜合上述幾點考量,個人認(rèn)為對于當(dāng)前的車載通信來說,在開發(fā)前中期采用模糊測試時需要有規(guī)則性和針對性的,雖然我們降低了發(fā)現(xiàn)問題的范圍,但得到的是測試效率、問題修復(fù)效率、資源利用率的有效提升。而隨著軟件的逐步成熟,可以逐步放開原有規(guī)則,增加隨機性。這一過程中也需要結(jié)合自身的情況來做調(diào)整,總之,關(guān)鍵點其實就兩個字:平衡。
4
總結(jié)
模糊測試是一個相當(dāng)有效的測試方法,其隨機性的思想可以讓我們發(fā)現(xiàn)通過邏輯很難想到的問題,這擴大了我們發(fā)現(xiàn)問題的范圍和手段,能有效提高測試經(jīng)驗,這與場景測試有著異曲同工之妙。但同時,其投入多、修復(fù)難的問題也是不可忽視的內(nèi)容。如何達(dá)到平衡是我們必須要考慮的點,總的來說,這是個以時間換經(jīng)驗還是以經(jīng)驗換時間的選擇題。
另外,本文的車載通信測試是廣義概念,也包括了以車載通信技術(shù)作為載體的安全通信、安全診斷、安全刷寫等測試。 北匯信息專注于汽車電子測試,與國內(nèi)外眾多OEM和Tier1合作,在車載通信、診斷刷寫、OTA、車內(nèi)網(wǎng)絡(luò)安全、域控制器功能測試等領(lǐng)域積累了豐富的實踐經(jīng)驗,歡迎大家交流、探討。
審核編輯 :李倩
-
測試
+關(guān)注
關(guān)注
8文章
5359瀏覽量
126868 -
CAN
+關(guān)注
關(guān)注
57文章
2762瀏覽量
464021 -
車載通信
+關(guān)注
關(guān)注
0文章
46瀏覽量
13446
發(fā)布評論請先 登錄
相關(guān)推薦
評論