歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

現有USB模糊測試技術的總結(下)

來源:本站整理 作者:佚名 時間:2019-08-12 TAG: 我要投稿

上文我們介紹了USB協議棧和USB模糊測試的歷史,其中講到了一些過去的常用技術和工具,不過它們都存在著一些問題。今天,我們將介紹最新的5種USB模糊測試的解決方案。
Syzkaller
不過幸運的是,最近安德烈•科諾瓦洛夫(Andrey Konovalov)在Google上添加了Syzkaller USB模糊測試支持,并證明了它能夠發現更多漏洞。 Andrey解決了使用Syzkaller 對USB進行模糊測試時的兩個主要問題:
1.內核任務的代碼覆蓋率;
2.同一內核映像中的設備模擬。
由于USB事件和操作發生在IRQ或內核上下文,而不是進程上下文中(例如,舊內核中的khub內核任務中的USB插入檢測),因此基于系統調用的跟蹤和代碼覆蓋不起作用。為了能夠在內核中的任何位置報告代碼覆蓋率,我們需要使用擴展的KCOV內核API來注釋與USB相關的內核源代碼(例如hub.c),以報告代碼覆蓋率。不過,Syzkaller不使用QEMU,而是使用gadgetfs將模糊測試工具的內核驅動程序暴露給用戶空間,然后用戶空間可以管理輸入內容以進行模糊測試。通過在內核配置中啟用USB主機協議棧和USB從機協議棧,并使用虛擬HCD和UDC驅動程序將它們連接在一起。如下所示,Syakaller能夠模糊USB主機設備驅動程序,如USB HID,海量存儲等通過用戶空間對USB模糊測試工具的內核驅動程序進行模擬。

Syzkaller USB模糊測試工具可能是第一個真正的基于覆蓋的USB主機設備驅動模糊測試工具,不過這還要歸功于現有的Syzkaller基礎設施以及對USB主機和從機發起的黑客技術。目前Syzkaller已經被發現了大量的漏洞和錯誤,它的局限性開始顯現,目前發現的大多數問題都在驅動程序的初始化階段(例如探測)。在用戶空間中,模糊測試工具能夠通過探索USB從機描述符中的不同VID / PID組合,來配置模糊測試工具內核驅動程序,進而表示任何USB從機。一方面,Syzkaller能夠觸發幾乎所有USB主機設備驅動程序進行加載,因此代碼覆蓋功能特別強大。另一方面,由于在用戶空間模糊測試工具或模糊測試工具內核驅動程序內沒有提供用于特定設備的真實模擬代碼,因此大多數模糊測試在驅動程序初始化之后停止,因此僅覆蓋驅動程序的一小部分。
最新的USB模糊測試技術
如上所述,大家可能已經注意到,所有這些模糊測試解決方案都集中在USB主機協議棧上,尤其是USB主機設備驅動程序上。另外,由于人們經常將USB引用到USB主機協議棧,并且這些設備驅動程序因包含比內核中的其他組件(例如Windows上的設備驅動程序)更多的漏洞而聞名。但是,以上講的所有USB模糊測試工具所涵蓋的部分都非常少。所以未來的USB模糊測試技術必須解決這個問題。
以下是現有的5種解決方案:HCD驅動程序模糊測試、協議引導或狀態模糊測試(Protocol-guided/Stateful fuzzing)、Android USB模糊測試、協議引導或狀態模糊測試、Type-C/USBIP/WUSB模糊測試,下面我們就來詳細了解一下。
HCD驅動程序模糊測試
如果我們總是將自己限制在USB主機協議棧中,那么HCD驅動程序就會被忽略。與設備驅動程序不同,HCD驅動程序無法通過系統調用在用戶空間訪問(不過可以使用sysfs調整某些參數)。相反,它們從上層(內部)的USB內核(例如,usb_submit_urb)和HCD層(外部)的DMA接收輸入內容。從安全角度來看,外部輸入會比內部輸入帶來更多的威脅。
要直接對HCD驅動程序的內部輸入進行模糊測試,我們需要能夠修改暴露給USB內核的內核API的參數,并從HCD驅動程序獲取代碼覆蓋率。為了直接模糊HCD驅動程序的外部輸入,我們需要對DMA緩沖區和事件隊列以及來自HCD驅動程序的代碼覆蓋率進行修改。請注意,由于TX和RX的代碼路徑不同,因此在這兩種情況下代碼覆蓋率通常不同。因此,我們需要一個細粒度代碼覆蓋率報告來反映這一情況。對DMA緩沖區和事件隊列進行修改實際上是在構建具有模糊功能的HCD仿真器,對于諸如Intel XHCI之類的常見HCD驅動程序,QEMU已經提供了相應的HCD模擬(例如qemu / hw / usb / hcd-xhci.c),并且可以嘗試在其中添加模糊測試功能。對于QEMU不提供HCD模擬的其他HCD驅動程序,需要從頭開始構建HCD模擬。
USB從機協議棧模糊測試
截止目前,我們還沒有對USB從機協議棧進行系統的模糊測試。這種做法在過去是沒問題的,因為我們經常假設USB從機不會發生惡意攻擊。然而,在嵌入式系統(例如Android設備)中廣泛使用的USB OTG和DRD控制器,已經將包括USB從機在內的設備也當作了攻擊目標。例如,我們現在經常會用USB接口對手機進行充電,而沒有人希望他們的手機在充電期間被黑客攻擊。在架構上,Syzkaller USB 模糊測試工具設想了一種模糊USB從機協議棧的方法,如下所示:

用戶空間模糊測試工具不會讓用戶空間模糊測試工具與USB模糊內核驅動程序進行通信,而是與USB主機設備驅動程序進行通信。這樣,模糊測試工具活動將通過USB主機協議棧傳播到USB從機協議棧。因此,我們需要配置內核,以便在同一個內核映像中啟用所有不同的gadget函數,以及代碼覆蓋率報告。然后,我們可以模擬USB從機內核和USB從機功能驅動程序(UDC驅動程序除外)。
Linux-USB Gadget 驅動框架(簡稱 Gadget )實現了 USB 協議定義的設備端的軟件功能。相對于 Linux USB 主機驅動而言。Gadget 框架提出了一套標準API, 在底層, USB 設備控制器 (USB Device Controller, UDC) 驅動則實現這一套 API, 不同的 UDC (通常是 SOC 的一部分) 需要不同的驅動, 甚至基于同樣的 UDC 的不同板子也需要進行代碼修改,這一層我們可以稱之為平臺相關層。
請注意,Syzkaller設想了一種對USB從機協議棧進行模糊測試的方法,這是由于Syzkaller的架構和限制而產生的自然結果。由于Syzkaller是一個系統調用模糊測試工具,這意味著輸入突變發生在系統調用參數中。但這并不意味著我們必須在系統調用層(例如用戶空間)進行模糊測試。如果再次查看上圖,我們可以找到一條從模糊測試工具到模糊測試目標的路徑(例如,USB主機設備驅動程序或USB從機驅動程序)。那么,我們怎么才能知道所有模糊輸入是否都被成功傳播到目標而不是被中間層過濾?這就要看基于系統調用的模糊測試是否適合內核中的USB模糊測試。同樣,Syzkaller USB模糊測試工具可以適應Syzkaller本身的限制,而不是考慮從頭開始構建USB模糊測試工具(例如,USB主機或從機協議棧)。

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.nkppsz.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        秒速时时彩骗局