本文,我将主要通过上图的分类方式来探讨针对USB的攻击向量问题。最上层涉及到更多关于人类应用、业务的基本交互场景。传输层包括设备的固件、协议栈等。物理层则主要描述USB总线上的通信问题。
一、人类因素
本节从人类本身的特点讨论USB的攻击行为。例如:机密USB被外部人员或组织的利用等。
0xA1 外部威胁
大部分安全从业人员认为,所有的USB攻击都是主机插入了外部usb设备,而这些设备通常带有不同形式的恶意代码。恶意人员会想方设法的欺骗用户,将一个不可信的设备插入到他们的主机中。在社会工程学范畴,这并不是很困难的事情。根据Steve Stasiukonis报告《Social engineering, theUSB way》说,2006年的渗透测试行动中,黑客在三天内将威胁U盘插入了目标公司内部的75%的主机上。美国国土安全部(Department of Homeland Security)在一项类似的实验中也证实了了这一结果,60%的政府设备有机会会被外部人员接触;更有意思的是,报告还指出,当司机、文秘等职业得到更多的场所准入权之后,外部人员接触终端设备的数字上升到90%。
0xA2 内部威胁
USB设备快速下降的成本使公司和消费者选择利用USB设备存储和传输涉密数据。与任何物理设备一样,USB驱动器也可能因人为错误而损坏,丢弃。这种处理往往会导致有害的结果。2011年,Ponemon Institute(波耐蒙研究所)发布了一项研究,记录了400家不同的公司;他们发现这些公司因为随意丢弃USB设备而损失了250万美元。2011年晚些时候,一名澳大利亚国防援助人员在经过科威特时丢失了存储在U盘上的绝密文件。完美的人越是容易犯错误,这样总会给公司甚至国家带来沉重的代价。
USB介质也为内部攻击者泄露机密信息提供了便利途径。2010年,二等兵Chelsea Manning违反《反间谍法》被捕,原因是泄露了美国军方的私人视频。曼宁使用了便携式存储设备,因为出口管制很松,为了突破军队网络的空挡,向外界泄露信息。Edward Snowden(斯诺登)使用类似的技术从位于夏威夷的军事基地窃取了美国国家安全局的绝密数据。当然国内的黄*事件也是很典型的案例(下图)。USB设备的普遍性和可移植性既是挑战也是机遇。一方面,它们的易用性极大地帮助了消费者和公司完成日常任务。另一方面,USB设备本身实际上是超越技术范畴的行政安全道德领域,可能会对组织造成巨大的影响。
二、应用层
应用层攻击涉及主机用户空间进程及其与设备功能的交互。这一层的攻击通常分为两类:代码注入攻击和数据过滤攻击。
0xB1 代码注入
USB存储已被多个恶意软件利用。据本人知道的案例,Duqu病毒使用应用层rootkit来隐藏USB存储设备上的恶意文件。Conficker、Flame病毒则使用了0day攻击和恶意autorun。当U盘连接到主机时,inf文件自动执行恶意软件。尽管自动运行功能在成为Windows平台的主要威胁之一后受到了限制,但由于操作系统的漏洞(Bad-USB等),类似的功能仍然可用。
0xB2 数据过滤
由于USB设备通常不会对主机上正在通信的应用程序进行身份验证,因此应用程序可能会对USB设备写入或者读取数据。例如,网络摄像头本地的数据的存储,USB设备本地日志的保存、usb应用层存在的各种安全漏洞都可能会成为关键的因素。
三、传输层
0xC1 协议伪造
USB设备利用主机对任何连接设备的完全信任,它们往往为终端操作系统提供附加的驱动层接口。像USB橡皮鸭或USBdriveby(http://samy.pl/usbdriveby/)这样的设备连接到主机系统时,它驱动层协议栈所有的回调接口(包括用户不知道的)都会被枚举。这种功能可以通过将恶意代码嵌入到其他正常的设备(例如,蓝牙耳机中的网络适配器)来隐藏。
TURNIPSCHOOL项目(http://www.nsaplayset.org/turnipschool)是一个改进的USB电缆,该设备具有4层PCB板、内置芯片的接口扩展 USB HUB、来自德州仪器的内置射频收发器单片机和一个3D打印的塑料模具。设备连接到主机后,主机上运行的软件可以通过RF接口提取数据或接收命令。使得USB传输层变成可二次编程,可以用于USB设备的安全过滤产品的开发。
识别和减轻这些恶意的接口在传统上是困难的。因为对手可以简单地重新编程任何USB基本数据(VID、PID)来规避操作系统中的设备白名单或黑名单规则。此外,由于恶意人员可以合理地使用了音频耳机等组合设备,攻击面广、隐藏率高,降低了攻击的成本。
0xC2 协议漏洞
主机的USB协议栈只要符合USB标准就可以了,第三方完全可以自由扩展,所以肯定会有大量的传输协议层漏洞。使用FaceDancer进行Fuzzing技术(笔者未来会写个Facedancer使用教程),我们会发现了许多内核层的任意代码执行漏洞,在2017年,谷歌研究员也在不同的Linux内核USB驱动中发现了超过40个漏洞。在某些情况下,这些漏洞可能在主机的设备枚举期间被利用。也可能作为一个中间人设备进行数据的嗅探。
四、物理层
物理层攻击包括对USB总线通信中的机密性和完整性的攻击。
0xD1 物理窃听
无论数据是否敏感,传输的过程中总是需要暴露在管道一段时间。排除透明加密的情况,大部分流量一定会满足USB底层传输标准,我们使用硬件键盘记录器,来进行一次大流量审计,提取USB存储、甚至USB键盘的重要信息。键盘记录器都是小型设备,放置在主机端口和外设间抓包。在usb3.0之前,恶意外设可以窃听所有连接设备的下行流量。
(A transparent defense againstUSB eavesdropping attacks)M.Neugschwandtner
我们甚至可以通过USB电流嗅探,示波器信道采集等方式进行攻击,从信道数据可以获得当前主机的重要特征信息,恶意智能手机可以使用该信息来组成攻击目标的提权shellcode。(Android安全研究综述)蒋绍林
Usb嗅探的另一种方法是使用USB协议分析仪提取总线状态的时序特征,并使用机器学习分类来推断主机的操作系统,获取具体信息。Betas提出了一种基于时间间隔的指纹打印方案,该方案可以从商用智能电话启动。他们表明,特定的操作系统版本和型号可以以高达90%的准确度通过设备之间发送数据包的间隔来检测。尽管基于时序的指纹显着提高了规避漏洞的门槛,但是经验丰富的木马设计者可以修改其时序特征来逃避检测。
0xD2 侧信道攻击(电磁、电源攻击)
近年来,研究人员研究攻击者如何使用植入射频发射器的从普通的终端中窃取数据。这种方法需要一个硬改的USB插头或设备,还要有一个专用嵌入式的射频发射机。USBee是一款作为射频发射器发射电磁辐射的设备,对敏感数据进行编码/抓取等操作。当然如果无法接触到目标机器的时候,黑客可以用一根普通的电线触摸目标机器暴露的金属部分,得到的信号可以用来提取重要的密钥信息。Oswald等人展示了如何基于功耗和电磁辐射从Yubikey 2中提取AES 128位密钥。(Side-channel attacks on the yubikey2one-time password generator) Oswald
电量注入的能力也被用来对终端造成物理损坏。USB Killer在USB key的PCB板的两侧嵌入多个电容。一旦连接到主机,USB杀手从主机USB总线消耗电流,对自己的电容器进行充电。一旦完全充电,负200V DC通过主机的USB数据线放电。这个充电/放电循环一直进行,直到USB killer移除或终端被破坏。在新版本的USB电源传输和Type-C连接器标准中,设备能够获取和传输高达100W的电量,它们可以损坏主机且不可修复。(完)
*本文作者:李泉@战争贩子,转载请注明来自FreeBuf.COM