USB硬件***危險性初步分析

版權申明:轉載自billy

1 引言
PC高速總線串行化的“先導者”,當屬USB外設總線。今天,可連接多種外設,支持即插即用(PnP)和熱插拔的USB外設總線/接口,已基本取代以往用於連接外設的並口和串口。支持PnP和熱插拔的USB總線給用戶使用外設帶來了方便,但與此同時,也能給基於USB硬件的***大開方便之門。由於傳統安全軟件多注重防範通過網絡和軟件進行的傳統***,普通PC用戶又對USB硬件和USB總線協議知之甚少,加之USB設備的廣泛使用,基於USB硬件的***相對傳統***可能具有更大的危險性。在可以看見的未來,一臺電路被改造過的USB打印機、一個特殊設計的U盤、一個特殊設計的USB“遊戲密保”……都可能致你的計算機安全性於“死地”,不可不防!本文通過一個實際的例子初步分析這種危險性,並提出***的進一步設想。

2 USB總線與網絡
USB主機接口採用“菊花鏈”方式連接USB設備,通過使用USB HUB,每一個USB主機接口最多可以連接127個USB設備,每一個USB設備都被賦予一個只有USB系統知道的地址,換而言之,一個USB主機接口最多可連接127個地址不同的USB設備。由此看來,完全可以把USB總線看作是連接USB主機和多個USB設備的一種短距離共享式局域網,每個USB設備都相當於一臺計算機——實際上大多數USB設備就是使用單片機或者嵌入式系統實現的。那麼,基於網絡可以對PC進行***,基於USB總線也完全可以。
如果使用OSI的體系結構模型來描述USB協議,那麼USB協議涵蓋OSI模型中的物理層(USB電纜、連接器、配電系統和信號環境)、數據鏈路層(USB數據包)、傳輸層(USB事務)以及會話層、表示層和應用層(不同設備類USB設備的專用協議),不過USB協議不涵蓋網絡層,因爲USB協議不存在路由問題。

由於USB總線相當於“共享式局域網”,爲了防止連接在同一USB主機接口上的多個USB設備同時與USB主機通信而造成衝突,USB協議是一種主/從方式的通信協議,所有數據傳輸均由USB主機發起,同一時刻只與一個USB設備通信。當USB設備需要向USB主機發送數據時,僅將數據放入USB設備中的數據緩衝區中,由USB主機讀取。即使採用中斷傳輸方式,也是通過USB主機定期輪詢檢測需要傳輸的數據,USB主機控制器並未與CPU IRQ相連接(USB主機控制器並不引發真正意義上的硬件中斷)。

3 USB設備的PnP

USB總線支持USB設備的PnP,USB設備接入USB總線(插入USB接口)時,USB總線將枚舉(檢測)USB設備,過程如下:
1、USB設備接入USB總線。
2、絕大多數USB設備通過USB總線VCC引腳供電,完成上電過程。
3、USB設備連接到USB總線後,USB總線檢測到設備在總線上的上拉電阻,進而檢測到USB設備的連接(注意:此處信息很關鍵),檢測到USB設備連接後,USB設備地址暫爲默認地址0,然後對USB設備發出復位命令。
4、設備接收到復位命令後,進入設備默認狀態。
5、USB主機給USB設備分配地址。
6、USB主機讀取USB設備描述符,確認USB設備的屬性(注意:U盤之類的設備是通過USB設備描述符確認其類型的,而且一個USB設備可能存在多個接口,每個接口可以有不同類型的接口描述符,這就意味着一個USB設備可能同時是USB打印機和U盤)。
7、設備配置,包括安裝設備驅動程序。

4 類似網絡的USB協議DoS***設想

一個USB數據包,即使在同步(等時)傳輸方式中,也只能傳輸最大1023字節的數據,其他傳輸類型數據載荷最大僅64字節。由USB設備發送給USB主機的數據包數據載荷通常還會受到USB設備控制器芯片硬件的限制,不可能隨意增大。例如:NXP(PHILIPS)PDIUSBD12 USB設備控制器芯片內部FIFO僅320字節。通過USB協議進行數據傳輸時均由USB主機發起,在數據包大小受到硬件限制的情況下,緩衝區溢出***較易防範,出現致命漏洞的機會較少。但USB總線通過檢測上拉電阻的方式檢測USB設備的連接,這使得USB設備可以設法在硬件上控制此上拉電阻,使得USB總線認爲設備插入或者拔出。

當USB設備配置完成後,或者配置過程中在安裝設備驅動程序之前,通過軟件控制硬件,斷開上拉電阻,USB總線即認爲設備拔出。如果重新連接上拉電阻,USB總線又會認爲設備已插入,於是重新進行USB設備配置……如此反覆,可能會造成對USB主機類似網絡DoS(拒絕服務)的***,致使USB主機和USB總線對其他USB設備的效率下降或者停止響應。

5 USB協議DoS***實驗

***硬件MCU選用AT89C52單片機,USB設備控制器芯片選用PDIUSBD12。PDIUSBD12支持一項名爲SoftConnectTM的技術,芯片內集成USB總線上拉電阻,並可由軟件進行控制,從而在實現USB設備的軟連接。
PDIUSBD12的SoftConnectTM技術使得上述***設想成爲可能,下列運行於AT89C52單片機上的Keil C51自定義USB固件程序段驗證了這一點:
……
reconnect_USB(); //上電覆位,USB 總線重新連接指令
for(;;)[ZS1]
{
if(bEPPflags.bits.configuration)
{
//USB 總線配置成功
LED1=0; //點亮 LED
//以下4行代碼在USB總線配置成功後,通過軟件斷開USB連接(斷開上拉電阻),稍延時後再通過軟件重新連接。
dmsec(10);
disconnect_USB();
dmsec(10);
connect_USB();
}
else
{
LED1=1; //熄滅 LED
}
usbserve(); //處理USB的setup包
}
……
固件寫入AT89C52後,將***硬件設備連接到運行Windows XP的PC上,於是Windows XP反覆檢測到***硬件,可聽到反覆的“叮咚”聲,正常的U盤插入後識別速度明顯下降。

6 進一步的***設想
通過MCU外加USB設備控制器芯片的方式,可以實現自定義的USB固件,進而完成特殊功能,實現特殊***。
USB規範允許最大將90%的帶寬分配給同步傳輸和中斷傳輸,自定義USB固件通過進行大量無實際意義的同步傳輸,可耗盡USB帶寬,同樣可實現類似網絡DoS的***。
如果自定義USB固件通過自定義USB設備描述符,將***硬件向USB總線報告爲U盤等通用設備,則可以進一步實現僞裝和無驅動***。
如果***性的硬件是USB打印機等,通過自定義USB固件在正常打印機類接口描述符之外,附加其他設備類接口描述符,可以導致更爲危險的***,例如:

1、附加大容量存儲器設備(U盤)類接口描述符,則該USB打印機插入USB接口後除了識別出USB打印機之外,會識別出附加的U盤。如果將病毒或者***程序固化於附加U盤上,通過Autorun.inf等方式可實現PC侵入。自定義的USB固件,甚至可以在通過Autorun.inf方式完成***後,在固件上將***文件隱藏,使之無法以任何方式在PC上檢測出。

2、附加USB鍵盤、USB鼠標等人機交互設備(HID)類接口描述符,則該USB打印機插入USB接口後除了識別出USB打印機之外,會識別出附加的鍵盤、鼠標等輸入設備。如果通過自定義USB固件進行自動輸入,模擬用戶輸入操作計算機,後果不堪設想,將硬盤格式化掉也不是沒有可能。
參考鏈接:

開戰前,美國中央情報局獲悉,伊拉克從法國採購了供防空系統使用的新型打印機,準備通過約旦首都安曼偷運到巴格達,隨即派特工在安曼機場偷偷用一塊固化病毒芯片與打印機中的同類芯片調了包。美軍在戰略空襲發起前,以遙控手段激活病毒,使其從打印機竄入主機,造成伊拉克防空指揮中心主計算機系統程序發生錯亂,工作失靈,致使防空體系中的預警和C3I系統癱瘓,爲美軍順利實施空襲創造了有利條件。 ——某媒體報道

在國內外的報道中,上述案例被反覆的提起,其真僞也反覆遭到質疑,安天微電子與嵌入式實驗室的一羣軟硬件燒友,通過深入的推導和分析,在硬件和電子電路級別,全面解析了上述過程的實施的可能性和可行性,以及相關的***技巧。最後安天將通過一個爲時5分鐘的安全情景劇,完全實景浮現出,在當前主流系統的高安全配置下,不通過修改任何軟件驅動,完全通過硬件修改實施主機控制的實景DEMO。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章