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