版權申明:轉載自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協議不存在路由問題。ide
因爲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設備,過程以下:
一、USB設備接入USB總線。
二、絕大多數USB設備經過USB總線VCC引腳供電,完成上電過程。
三、USB設備鏈接到USB總線後,USB總線檢測到設備在總線上的上拉電阻,進而檢測到USB設備的鏈接(注意:此處信息很關鍵),檢測到USB設備鏈接後,USB設備地址暫爲默認地址0,而後對USB設備發出復位命令。
四、設備接收到復位命令後,進入設備默認狀態。
五、USB主機給USB設備分配地址。
六、USB主機讀取USB設備描述符,確認USB設備的屬性(注意:U盤之類的設備是經過USB設備描述符確認其類型的,並且一個USB設備可能存在多個接口,每一個接口能夠有不一樣類型的接口描述符,這就意味着一個USB設備可能同時是USB打印機和U盤)。
七、設備配置,包括安裝設備驅動程序。遊戲
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***實驗it
***硬件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固件在正常打印機類接口描述符以外,附加其餘設備類接口描述符,能夠致使更爲危險的***,例如:
一、附加大容量存儲器設備(U盤)類接口描述符,則該USB打印機插入USB接口後除了識別出USB打印機以外,會識別出附加的U盤。若是將病毒或者***程序固化於附加U盤上,經過Autorun.inf等方式可實現PC侵入。自定義的USB固件,甚至能夠在經過Autorun.inf方式完成***後,在固件上將***文件隱藏,使之沒法以任何方式在PC上檢測出。
二、附加USB鍵盤、USB鼠標等人機交互設備(HID)類接口描述符,則該USB打印機插入USB接口後除了識別出USB打印機以外,會識別出附加的鍵盤、鼠標等輸入設備。若是經過自定義USB固件進行自動輸入,模擬用戶輸入操做計算機,後果不堪設想,將硬盤格式化掉也不是沒有可能。
參考連接:
開戰前,美國中央情報局獲悉,伊拉克從法國採購了供防空系統使用的新型打印機,準備經過約旦首都安曼偷運到巴格達,隨即派特工在安曼機場偷偷用一塊固化病毒芯片與打印機中的同類芯片調了包。美軍在戰略空襲發起前,以遙控手段激活病毒,使其從打印機竄入主機,形成伊拉克防空指揮中心主計算機系統程序發生錯亂,工做失靈,導致防空體系中的預警和C3I系統癱瘓,爲美軍順利實施空襲創造了有利條件。 ——某媒體報道
在國內外的報道中,上述案例被反覆的提起,其真僞也反覆遭到質疑,安天微電子與嵌入式實驗室的一羣軟硬件燒友,經過深刻的推導和分析,在硬件和電子電路級別,全面解析了上述過程的實施的可能性和可行性,以及相關的***技巧。最後安天將經過一個爲時5分鐘的安全情景劇,徹底實景浮現出,在當前主流系統的高安全配置下,不經過修改任何軟件驅動,徹底經過硬件修改實施主機控制的實景DEMO。