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

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

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

Syzkaller(Google團隊開發的一款針對Linux內核進行模糊測試的開源工具),最近開始支持USB模糊測試,并且已經在Linux內核中發現了80多個漏洞。目前,鑒于USB本身的復雜性導致的安全性的影響和潛在的大量漏洞,幾乎所有模糊測試專家都開始將他們的模糊測試技術應用于USB的模糊測試中。
什么是USB協議棧?
按著協議,USB分為USB host(USB主機) 和 USB device/gadget(USB從機),USB主機能夠主動發起會話而USB從機則不能發起會話。HOST是主機,好比電腦端那個USB,簡而言之,主機好比電腦端那個USB接口,從機好比就是連接到USB接口的U盤。當我們談論USB時,通常說的是USB主機,例如帶有標準USB端口的筆記本電腦。下圖是Linux USB主機棧。從下到上,分為硬件、內核空間和用戶空間。

USB主機控制器設備(又名HCD)是連接到系統PCI總線的PCI設備,通過USB端口提供USB連接支持。根據USB技術的發展,它也被稱為USB 1.x的UHCI / OHCI,USB 2.x的EHCI和USB 3.x控制器的XHCI。要使內核使用此控制器,我們需要一個USB主機控制器驅動程序,它可以設置PCI配置和DMA。上面是USB內核,實現底層USB協議棧,并使用通用內核API(submit /recv URB)抽象發送/接收USB數據包的方式。上面是不同的USB從機驅動程序,例如USB HID驅動程序和USB大容量存儲驅動程序。這些驅動程序會實現不同的USB類協議(例如,HID,大容量存儲),為內核中的其他子系統(例如輸入和數據塊)提供粘合層,方便用戶空間(例如創建/dev節點)。
由于Linux也廣泛用于嵌入式系統,例如一些USB軟件保護器(USB Dongle),USB從機指的是Linux內的USB軟件保護器硬件和USB模式。 USB從機與USB主機模式完全不同。下圖顯示了Linux內核中的USB從機協議棧。

底部是USB從機控制器(又名UDC),與HCD一樣,UDC也在PHY層內實現特定版本的USB標準。但是,與英特爾最常用的HCD不同,UDC IP來自不同的硬件供應商,例如DWC2/3,OMAP,TUSB和FUSB。這些控制器通常具有其自己的設計規范,并且當它們支持USB On-The-Go(又名OTG)模式時也可遵循HCD規范(例如XHCI規范)。 OTG允許UDC在USB主機和USB從機模式之間切換。例如,當Android設備以MTP的形式與筆記本連接時,Android USB從機控制器處于USB從機模式。如果USB閃存驅動程序插入Android設備,UDC將在USB主機模式下工作。支持OTG的UDC也被USB 3.x標準中的雙角色設備(Dual-Role Device,DRD)控制器取代。因此,不需要OTG數據線來切換UDC的角色,因為角色切換是在DRD控制器的軟件中完成的。
要使用UDC,你需要在內核中使用UDC驅動程序,通過行業標準總線((包括 AMBA™ AHB和AXI接口))提供連接和配置,并為更高層設置DMA。與USB主機協議棧中的USB內核一樣,USB從機協議棧中的USB從機內核也提供API,通過回調和配置來注冊和實現USB從機函數。例如,我們可以通過請求現有的大容量存儲函數(f_mass_storage)將USB描述符傳遞到USB從機內核并實現典型的USB大容量存儲設備。對于諸如MTP的更復雜的協議,用戶空間守護進程或庫提供協議邏輯并通過例如configfs或usbfs與從機函數通信。
USB主機控制器(Host Controller)
USB的拓撲結構決定了主機控制器就是最高統帥,沒有主機控制器的要求,從機永遠不能主動發數據。所以主機控制器在USB的世界里扮演著重要的角色,它是幕后操縱者。
比如說USB主機發送Setup數據包獲取設備描述符是怎么發出去的?這個過程包含很多信息,比如:如何在D+和D-這兩根線上傳過去的、又傳過來的。 這一切的工作都是主機控制器給我們做的,USB主機控制器的規范有很多種,比如UHCI/OHCI。
什么是USB controller?
USB 設備和主機的接口就是host controller,一個主機可以支持多個host controller,比如分別屬于不同廠商的。那么USB host controller 本身是做什么的? 很簡單用于控制,控制所有的USB從機的通信。 CPU把要做的事情分配給主機控制器,然后自己想干什么就干什么去,主機控制器替他去完成剩下的事情,事情辦完了再通知CPU。否則讓CPU去盯著每一個從機做每一件事情,那是不現實的。
控制器的主要工作是什么? 把數扔出去,把數拿回來。絕對不應該偷偷加工數據。
主機控制器控制總線上包的傳輸, 使用1ms或125us的幀。在每幀的開始時,主機控制器產生一個幀開始包(SOF: Start of Frame)。
SOF包用于同步幀的開始和跟蹤幀的數目,包在幀中被傳輸,或由主機到從機(輸入事務),或由從機到主機(輸出事務)。傳輸總是由 主機發起的(輪詢傳輸)。回此每條USB總線只能有一個 主機。每個數據包的傳輸都有一個狀態階段同(同步傳輸除外),數據接收者可以在其中返回ACK(應答接收),NAK(重試),STALL(錯誤條件)或什么也沒有(混亂數據階段,設備不可用或已經斷開)。
USB模糊測試的歷史
FaceDancer
由于可編程USB硬件模糊測試工具——FaceDancer的出現,USB模糊測試開始吸引更多的關注。它支持USB主機和從機模式模擬,并允許發送預先形成帶有漏洞的USB請求和響應。 Umap/Umap2提供了一個用Python編寫的模糊測試框架,它具有面向FaceDancer的不同USB從機和響應模板。TTWE框架通過使用兩個FaceDancer分別模擬USB主機和USB從機來實現USB主機和USB從機之間的MitM,此MitM允許兩個方向的USB數據包突變,從而實現雙方的模糊測試。
目前所有這些解決方案都集中在USB主機協議棧上,其原因是人們假設惡意USB從機不是惡意的USB主機(例如筆記本電腦),并且大多數USB從機固件都是閉源的,因此很難被分析。這意味著,大多數漏洞/錯誤存在于USB內核(用于解析USB響應)和一些常見的USB驅動程序(例如鍵盤)中。這些解決方案的優點是能夠完全模擬USB從機。但是,在我看來,卻有兩方面不足:
1.過于依賴硬件;
2.目標反饋有限。

[1] [2]  下一頁

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