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协议不存在路由问题。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。