版权申明:转载自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。