USB是现代计算机系统中最常见的外设接口,其固有的安全性问题使其成为攻击者的目标。USB的一个众所周知的限制是数据流量未加密,这为攻击者在通信路径中执行中间人攻击提供了便利。本文介绍了一种新型攻击 – 对USB通信的路径外注入攻击(Off-Path Injection Attack),并展示了一个恶意设备,可以放置在目标设备和主机之间的通信路径之外。该恶意设备能向通信路径注入数据,从而伪造数据的输入来源,欺骗主机系统。
本文还演示了两个具体的攻击示例:第一个是键盘命令注入(Keystroke Command Injection),攻击者可以利用该漏洞执行系统命令。第二个示例是劫持文件传输(Hijacking File Transfer)。路径外注入攻击的源代码地址为:https://github.com/0xADE1A1DE/USB-Injection
通用串行总线(USB,Universal Serial Bus)已成为计算机外围设备连接的实用标准。自上世纪90年代末首次推出以来,USB已经取代了几乎所有其他外设连接标准。在整个标准的开发过程中,简单、易用和低成本实施一直是优先考虑的因素,但是USB的安全性在很大程度上被忽视了。
USB的安全模型依赖于限制物理访问,而不是依赖于安全技术,例如权限、加密和认证。特别地,操作系统通常会在连接后立即信任任何USB设备,并且很少提供关于设备性质或功能的反馈。鉴于USB的无处不在,了解和描述各种使用和配置场景带来的攻击面和由此产生的威胁非常重要。这种特性可以进一步增强USB的安全使用,减轻各种基于USB的攻击。
由于用户经常将不受信任的USB设备插入他们的计算机,许多先前的研究已经证明了通过受损设备对USB生态系统的攻击。除了具有直接数据访问权限的设备的路径攻击之外,USB还容易受到路径外攻击,即攻击者的设备不直接位于目标设备和USB主机之间的路径上。
下图的左半部分总结了针对USB的传统攻击模型。在USB 1.x和USB 2.0中,下游流量(主机到设备)在总线上广播,使得总线上的所有设备都可以观察到它。对上游流量机密性的路径外攻击也是可能的,因为设备可以观察到由相邻USB端口上的设备发送的USB流量,这是由于电气串扰引起的。
本文的主要研究目标是探讨对USB数据完整性进行路径外攻击的可行性,并详细描述了一种路径外的USB注入攻击。该攻击允许位于目标设备和主机之间通信路径之外的恶意设备发送被主机接受为来自目标设备的数据,参见上图右半部分。
• 攻击机制:在主机对设备进行探测时,主机和连接链上的集线器无法对来自被探测设备的响应进行验证。这就给恶意的路径外设备提供了机会,在主机探测不同目标设备时模拟响应,导致主机接受来自目标设备的数据。
• 攻击概述:在攻击场景中,攻击者控制的设备被识别为正常的USB设备,并执行与该设备类型相符的预期功能。此外,攻击者的设备还会监控所有下行USB流量。当它检测到主机对受信任目标设备进行探测时,它会发送一个恶意响应,使其看起来像是由目标设备发送的响应。同时,目标设备也会响应探测信号,从而在恶意设备和目标设备之间形成竞争条件。在恶意设备赢得竞争的情况下,主机会接受恶意响应,就像它是由目标设备发送的一样。
• 攻击实施:研究人员实现了一个USB 1.x 恶意设备,它被识别为鼠标,但当主机探测到单独的目标键盘设备时,发送恶意键盘输入。攻击者可以在易受攻击的配置下始终赢得传输竞争,从而导致键盘命令注入攻击。此外,研究人员还构建了一个USB 2.0 设备,它被识别为串行通信设备,并监控USB闪存驱动器的通信。当替换文件的内容在驱动器传输时,将驻留在主机上。
• 保护策略绕过:即使主机的 USB 堆栈已经使用了防御性设备授权策略进行检测,注入攻击仍然能够通过在链路层伪造证明来绕过这种防御。这种方法使得攻击者能够利用任何被信任的设备接口或通信渠道。恶意设备能够绕过所有基于此类策略的防御措施,从而实现对设备功能的限制。
•USB:USB(Universal Serial Bus)于1996年首次发布,旨在简化计算机外围设备的使用,同时用单一接口取代过多的当时常见的定制互连。USB 引入的主要简化是它允许在插入时自动配置外围设备,称为”即插即用”。USB 1.x 有两种数据传输模式,统称为经典速度:1.5 Mbps 低速(LS)和12 Mbps 全速(FS)。人机接口设备(HID)和其他对带宽要求不高的设备继续使用USB 1.x。
•USB 2.0:USB 2.0 于2000年发布,是 USB 规范的扩展,能够在高速(HS)模式下以480 Mbps的速度运行。由于提高了数据传输速度,USB 2.0 能够满足成像、数据采集系统和大容量存储设备等高带宽应用的需求。
•USB 3 和 4:USB 3.x 最初于2008年发布,是该协议的最新主要版本,速度范围从 5 Gbps(超高速)到 20 Gbps(超高速Plus)。与旧设备版本的向后兼容性内置于 USB 3.x 主机系统中。最新版本 USB 4 于2019年发布,运行速度高达 40 Gbps。
A. USB 通信
USB系统采用树形拓扑结构,其中根是主机USB控制器,它具有一个嵌入式根集线器,为外围设备提供连接点。标准(非根)集线器(Hub)最多可连接五个设备,在一条链上扩展 USB 端口的数量,最多支持127个设备。USB 通信由主机进行仲裁,通信数据未加密。在 USB 1.x 和 2.0 中,下行流量是广播的,而后续版本中则为单播。在所有版本的 USB 协议中,上行流量是单播到主机的。主机使用基于轮询的时分多路复用(TDM)来管理共享总线。
•端点(Endpoint):端点本质上是数据的接收器和源,USB 设备通过它们进行通信。在设备端,端点通常以硬件缓冲区的形式实现,而在主机端,则以管道(pipe)的形式实现。所有设备都必须支持 CONTROL 端点 0,用于枚举和状态报告。设备还可以支持最多15个额外的IN和OUT端点,用于实际的数据传输。
•USB 事务协议:所有版本的USB使用相同的基本事务协议模型。USB的数据通信发生在事务中,一个事务最多包含三个数据包传输,包括令牌(Token)、数据(Data)和握手(Handshake)阶段。主机总是通过向下游发送令牌来启动事务。令牌包含预期接收者的地址、定义事务类型的数据包标识符和端点编号。根据USB标准,设备必须只处理和响应发送给它们的令牌,而忽略其他令牌。数据在一次事务中只在一个方向上传输,方向在令牌包标识符中指定(相对于主机)。
例如,主机将发送一个OUT令牌以指示它将在数据阶段向设备传输数据,请参见下图(a)。类似地,主机使用IN令牌来探测设备以在数据阶段提供输入(下图(b))。如果设备没有数据要发送,它们会发送”NAK”握手,参见下图(c)。在数据或握手阶段的数据包中,任何部分都无法识别数据包的来源。数据包的源是隐式的,设备通过令牌阶段的寻址确定接收该数据包的设备。
•USB 2.0 高速扩展:如上所述,在OUT事务期间,主机控制总线的大部分时间都用于等待握手阶段,此时设备只能回复ACK或NAK来接收数据。这种设计可能会导致传输时间的浪费,特别是当设备由于未准备好接收数据而拒绝事务时。为了缓解这种情况,USB 2.0在高速(HS)的OUT通信之前引入了额外的预事务交换机制。在这种情况下,主机首先发送一个PING令牌来查询设备是否准备好接收数据。设备可以使用NYET(尚未)消息或ACK进行响应,其中NYET表示设备尚未准备好,而ACK表示设备已准备好接收数据。如果设备回复NYET,主机将继续发送PING令牌进行查询,直到设备回复ACK。一旦设备回复ACK,主机就开始OUT事务,并将数据发送给设备。
•向后兼容性:为了获得高带宽的好处,USB 2.0系统中的主机和集线器之间的通信都是以高速(HS)模式(480Mbps)进行的。这是通过USB 2.0集线器内部的事务转换器(Transaction Translator,TT)模块实现的。TT模块执行下行速度模式转换,并缓冲来自低速(LS)或全速(FS)设备的传输,然后在高速总线上重复上行传输。在将高速数据传输给下游低速或全速设备之前,主机会发送一个”SPLIT”数据包给集线器,指示集线器将下一个传输转换为1.x速度模式,然后再将其传递给目标设备。这些”SPLIT”数据包在令牌阶段之前发送,仅用于主机和集线器之间的通信,对终端设备是不可见的。每个”SPLIT”数据包包括一个信息字段,指定连接到集线器的目标设备,这样只有该集线器才会对后续传输进行速度转换。
•USB路由:上面讨论的向后兼容性设计为转换后的经典速度流量引入了一种路由到集线器的机制。下行经典速度流量通过HS的SPLIT标头进行广播,然后仅在目标集线器的TT进行转换,以便以经典速度进行进一步广播。此外,集线器可以设计为单TT系统(如下图的上半部分),其中一个TT处理所有经典速度流量;或者作为多TT系统(如下图的上下半部分),每个下游端口都有自己的TT。这也为通过多TT集线器的经典速度流量引入了到特定端口的路由机制。
•枚举:USB枚举是一种过程,用于识别最近插入的设备并在设备与主机之间建立连接。当设备插入时,主机会发送请求以获取设备描述符集,其中包含设备自我报告的信息(尚未经过验证)。接着,主机会配置输出功率和速度模式,并加载适当的驱动程序以支持该设备。新连接的设备在枚举过程中使用地址0,直到主机在早期阶段为设备分配一个唯一地址。
B. 通用 USB 设备架构
下图显示了 USB 设备的通用硬件架构。物理层收发器(PHY,Physical Layer Transceiver)负责管理物理总线上的活动,它允许通过差分数据线发送和接收串行信号。USB控制器内部的串行接口引擎(SIE, Serial Interface Engine)模块执行事务协议,处理时间关键的操作,并简化与微控制器的接口。在进行多路分解之前,SIE会处理令牌地址检查,并促进各个端点之间的信息交换。
在注入攻击的威胁模型中,存在以下情景:至少有两个USB设备通过一个USB集线器连接到一个公共主机。其中一个设备是恶意攻击平台,由攻击者控制。另一个设备是目标设备,攻击者希望冒充的设备,不受攻击者的影响。重要的是,根据USB系统的树形拓扑结构,攻击平台和目标设备在逻辑上是独立的,但在物理上共享与主机的通信路径。系统可能连接了其他USB设备,这些设备被视为旁观者,不受攻击者影响,并在不受干扰的USB通信下执行其功能。
其他系统组件:除攻击平台外的所有系统组件都是可信的。包括连接目标设备到主机路径上的集线器以及主机的操作系统。假设没有恶意或受损的实体可能会帮助攻击平台冒充目标设备。
设备授权策略:假设主机的USB软件堆栈实施了设备授权策略的功能。这些策略限制系统支持和允许的设备类型,例如通过授权列表。或者在插入新设备时,策略可能要求某种形式的用户批准。此类策略可以限制与设备之间的通信性质,例如过滤恶意通信或确保流量符合广播设备类型的通信协议。
授权正确实施:如果存在设备授权策略,假设这些工具已经正确实施和部署,并在软件堆栈中对设备进行了指纹识别。还假设此类策略已正确配置,准确地代表了用户的意图,用户和策略信任目标设备并允许其进行通信。授权策略甚至可能完全禁止与攻击平台进行通信,只允许与特定可信设备进行USB通信。
攻击平台表现为一个看似无害的USB设备,其目标是隐蔽地将上游通信数据注入总线,以冒充目标设备。为了实现这一目的,攻击平台具备监控主机下游通信的功能,以寻找用于目标设备识别的探针,从而触发注入。
•路径外注入:如下图所示,主机首先广播一个探针,请求目标设备(①)的输入。攻击平台观察主机的探针(②),并使用与预期目标设备响应格式匹配的上游数据传输(③)进行响应。这种行为违反了USB规范。然而,如果攻击平台能够在目标设备之前做出响应,集线器可能会接受注入的传输并将其向上游转发,同时忽略目标设备的真实响应(④)。由于USB数据和握手响应不携带地址信息,因此当响应到达主机时,主机无法根据接收到的数据来区分其来源,而是将响应识别为最近一次探测到的设备。因此,在USB集线器向上游转发注入响应的情况下,来自攻击平台的响应会被自动识别为目标设备(⑤)。
•绕过策略:攻击利用了规范合规性假设带来的 USB 协议漏洞。由此可以绕过主机硬件上的 USB 授权策略,因为主机的 USB 控制器无法验证注入的 USB 流量的来源。关键的后续影响是注入攻击还绕过了基于软件的保护策略,因为这些策略隐含地信任从主机的 USB 控制器接收到的通信被正确识别。
•传输冲突:注入攻击利用了被攻击目标和攻击平台之间的竞争。如果攻击平台设法在目标设备开始发送响应之前发送响应,那么攻击者显然会赢得竞争并注入他们的响应。然而,在目标开始传输之前注入整个响应是不太可能的,特别是当攻击者希望注入大量数据时。当目标设备和攻击平台的传输发生碰撞时,集线器需要处理碰撞。下图描述了这种DATA – DATA 冲突。
•冲突解决:在发生冲突的情况下,USB 规范允许两种行为:集线器可以将后来的传输视为错误,完全忽略它们;或者,集线器可以检测到冲突并将“乱码”错误消息向上游发送到主机。忽略和丢弃传输的集线器很容易受到注入攻击,而对于使用碰撞检测集线器,注入攻击仍然可以对目标设备造成拒绝服务 (DoS),阻止它们输入。
•触发注入:在 USB 1.x 和 2.0 系统中,下游通信是广播的,这意味着所有连接在 USB 拓扑中的设备都可以直接监控下游流量,即使是路径之外的设备也可以。攻击平台会在下游流量中寻找特定的模式,一旦检测到这些模式,它们就会向上游注入流量。模式的最后部分通常包含一个针对目标设备的 IN 令牌,主机使用该令牌来请求输入。
许多设备类别在 USB 协议之上实现自己的通信协议,通常涉及多个事务和多个端点。例如,主机可以通过使用 OUT 端点事务向下游设备发送命令来请求某些数据。为了影响这些更高级别的通信,攻击平台必须能够识别相关的消息序列,并根据目标设备的类协议上下文来触发注入。攻击平台使用精心设计的数据包来匹配相应的格式。
•现有设备:USB事务协议通常由设备的USB控制器中的专用SIE(串行接口引擎)硬件模块来实现。它的功能包括处理传入令牌的地址检查和后续处理,即当令牌与设备地址匹配时,SIE将数据写入OUT端点缓冲区或从IN端点缓冲区读取数据。通过修改SIE,特别是SIE的令牌地址检查功能,可以将现有设备转变为攻击平台。
•目标设备类型:为了实现攻击平台,需要修改设备的SIE硬件实现,该SIE位于其USB控制器中。这涉及修改实现USB设备内核的RTL(寄存器传输级)源代码。在硬件级别进行工作可以提供对时序的高度精确的控制,从而确保平台根据攻击要求在传输竞争中取得优势。作为替代解决方案,一些通用微控制器具有USB连接功能,在软件/固件中实现了SIE,并通过内部(直接到FS)或外部PHY(物理层)支持USB接口。虽然修改此类实现的固件可能是实现攻击目标的可行方法,但在本文中采用了基于硬件的解决方案,因为它们对于控制平台功能来说更具优势。
•硬件设置:通过使用现有的 USB 设备内核,构建了两个原型攻击,并将它们部署在 FPGA 上。这些平台基于 USB 1.x 和 2.0 设备的实现,每个主要版本对应一个,因为这些版本具有不同的电气接口和略微不同的硬件行为。虽然它们在很大程度上相似,但设备的某些属性在实现之间有所不同。下表列出了这些差异:
A. USB 1.x 攻击平台
•内核:使用VHDL编写的内核来创建经典速度(1.x)平台。该内核包含了执行设备控制器内所有硬件模块功能的元素,如前面描述的PHY和SIE。然而,与之前描述的不同,这个内核的结构是单片式的,而不是分成多个模块。在传统设备中,跨所有端点的通信由设备微控制器处理。然后修改了内核的功能,使其直接在硬件中通过控制端点(0)上的通信来定义设备的枚举。此外,该内核还允许通过输入/输出(非控制)端点的通信直接在硬件中实现。该内核直接与USB差分数据线D+和D-连接,并可以设置为以低速(LS)或全速(FS)设备模式运行。
•部署:在Digilent Basys 3开发板上的Xilinx Artix-7 FPGA上实例化了这个内核。直接将USB数据线连接到板上的3.3V通用I/O引脚,通过拼接的USB电缆实现连接。以下是装置的示意图。为了将设备配置为在低速(LS)模式下工作,通过一个1.5kΩ电阻器将D线上拉至3.3V,以向主机发出速度模式信号,并设置相关的差分信号极性。要在全速(FS)模式下工作,必须将D+线拉高。
B. USB 2.0 攻击平台
•内核:高速(HS)攻击平台基于改编的、使用VHDL编写的许可设备内核IP。该内核实例化了一个SIE并实现了枚举功能,处理所有控制交互在端点0上。FIFO接口支持IN和OUT端点的数据传输。该内核通过低引脚数接口与外部PHY(UTMI+或ULPI)相连。这个接口是SIE与USB收发器之间的实际标准接口,使用8位宽的数据总线和由PHY计时的控制信号,其中60MHz的信号来自于480Mbps的高速数据线转换。
•部署:将该内核移植到Digilent Genesys 2开发板上的Xilinx Kintex-7 FPGA上。该开发板通过其通用I/O引脚连接到Waveshare USB3300 PHY板的UTMI+引脚,下图显示了此设备的示意图。
C. SIE 修改
端点1通常是设备使用的主要输入(IN)端点,而端点0是在枚举期间用于传输设置信息的控制端点。为了避免干扰目标设备的枚举过程,将平台配置为仅注入端点1的数据流量。举例来说,在USB 1.x设备的RTL源代码实现中,以下代码行定义了设备对传入令牌的地址检查行为逻辑:
其中‘/=’是 VHDL 不等式运算符。当此 if 语句由于地址不匹配(第一个条件)或传输错误(第二个条件)而评估为真时,不再处理当前检查的令牌数据包并且设备等待下一个令牌。通过将此行修改为以下内容,将设备转换为攻击平台:
如果设备针对端点1进行修改,它们可以处理地址不匹配的传入令牌。通过这个修改,攻击平台将代表自己和与之以相同速度模式连接的目标设备注入端点1的数据流量。因此,进一步改变了端点1的行为逻辑,只有对于地址不匹配的传入令牌,设备才会发送数据,并允许设备对自己的数据流量进行忽略,并向自己的所有传入令牌发送NAK响应。类似地,对USB 2.0设备的实现进行了修改,以达到相同的效果。
A. 测试方法
•拓扑:为了测试注入攻击,配置攻击平台,并注入一个独特且易于识别的数据序列到USB通信流中。然后进行实验设置,其中攻击平台和目标设备以相同的速度模式通过一个被测集线器连接到主机PC。在下图中,将这个集线器称为公共集线器
•实验设置:在主机和公共集线器之间,连接了一个 Totalphase Beagle USB 5000 协议分析器,它观察并记录公共集线器和主机之间链路上的所有流量。由于目标设备和攻击平台都通过公共集线器连接到主机,因此协议分析器还会捕获主机与这些设备之间的所有流量。每个实验重复三次,每个操作速度一次。对于 LS 和 FS 运行速度,使用了 USB 1.x 攻击平台,将键盘作为目标设备。对于 HS 运行速度,将 USB 2.0 攻击平台与大容量存储目标设备一起使用。
•通信分析:当攻击平台在目标设备的时间段内注入传输时,也会发送真正的目标响应,从而导致公共集线器发生冲突。易受攻击的集线器继续向上游转发第一个传入传输并阻止所有随后到达的同时传输。在实验中,观察到协议分析器日志属性的攻击平台传输到目标设备的指定地址的唯一数据序列,可以明显看出这一结果。否则,如果集线器在检测到冲突时向上游发送乱码/错误序列,则唯一数据序列不会出现在协议分析器的日志中。
B. 针对 USB 2.0 Hub
•结果:发现在16个测试的集线器设备中,有13个设备容易受到某种形式的注入攻击。其中一台设备易受USB 1.x和USB 2.0注入攻击,七台设备仅易受USB 1.x注入攻击,四台设备仅易受USB 2.0注入攻击。有趣的是,所有嵌入式集线器都容易受到注入攻击,即使没有任何外部USB集线器,也有可能攻击具有它们的主板。
•拒绝服务:其中攻击平台发送NAK以响应主机发送给目标设备的每个探针。在易受攻击的集线器中,攻击平台获得竞争优势,主机接受了注入的NAK。而在非易受攻击的集线器中,集线器检测到冲突并发送错误信号,有效地删除了目标设备的响应。因此,无论哪种情况,拒绝服务攻击都是有效的。唯一的例外是嵌入式集线器,在某种配置下,目标设备有时会获得竞争优势,从而抵御了攻击。另外,多TT集线器可以防止USB 1.x流量的注入,因为下游的探针不会到达攻击平台。
C. 针对 USB 3.x Hub
研究人员还测试了13个USB 3.x集线器。为了向后兼容,这些USB 3.x集线器由两个逻辑集线器组成,一个处理USB 3.x SuperSpeed流量,另一个处理与USB 2.0设备的兼容性。由于攻击平台不以SuperSpeed模式运行,因此实验仅测试了内部的USB 2.0集线器。总体而言,USB 3.x集线器不容易受到注入攻击,只有一个集线器允许注入,而其他12个集线器则不允许。然而,USB 3.x集线器仍然容易受到针对USB 2.0目标设备的拒绝服务攻击。此外,连接到USB 1.x目标设备的内部集线器(单TT)也可能受到USB 1.x拒绝服务攻击。
D. Root Hub
目前的研究主要集中在USB网络树内部层中使用的标准集线器上。根集线器是主机系统上提供第一层连接点的设备,其结构与标准USB集线器有所不同。根集线器的架构和操作模型在USB的可扩展主机控制器接口(xHCI)规范中进行了定义,该规范标准化了USB软件和硬件之间的通信方法。
xHCI规范指定了维护端口与连接设备关联的机制,并最终将传输路由到这些设备,以便在USB网络树中进行正确的数据传输。由于xHCI规范的指导,根集线器能够有效地管理和控制与其连接的设备,并确保没有跨根集线器端口的下游USB 1.x和2.0流量的广播。USB 3.0集线器架构如下图所示:
由于攻击平台依赖于广播流量来计时注入,不能指望在下游流量未广播时攻击会起作用。通过对多个 xHCI 根集线器进行测试,发现没有一个容易受到攻击,因为攻击者看不到发送到目标设备的探针。
A. 键盘命令注入
•键盘 USB 堆栈:HID键盘通常在LS模式下运行,并使用端点1作为其主要且唯一的输入端点。它们是报告字符键按下和释放事件的简单设备。除了USB事务协议之外,主机没有使用更高级别的协议来获取数据。因此,研究人员直接调整了USB 1.x攻击平台,模拟发送按键命令给主机,就像在协议伪装攻击中可能发送的一样。
•攻击载荷:在临时的微处理器应用程序实现中,通过将数据包的有效负载直接编程到平台内核的硬件中,将其与板上按钮的按下事件关联起来。有效负载序列在Windows系统上打开命令提示符。
•DoS-Switch:使用DoS-Switch对该平台进行测试,该开关可以代表目标设备选择性地注入NAK以阻止其输入被转发。这对于阻止攻击平台注入连续的数据包有效负载序列是有用的。NAK仅在攻击平台不提供其自身的数据包时发送。
•实验设置:将攻击平台配置为模拟LS模式下的HID鼠标,通过一个易受攻击的公共集线器将目标设备和攻击平台连接到主机,然后将协议分析器放置在集线器的上游连接上。
•结果:成功地对键盘目标设备执行了按键注入攻击。通过打开Windows命令提示符并使用协议分析器观察到注入的流量被识别为发送到目标键盘的分配地址。拔下键盘并在连接的攻击平台上按下相同的按钮导致没有按键响应,进一步确认注入已经发生,并且它没有以某种方式错误地将按键识别为鼠标输入。
B. 劫持文件传输
在第二个示例中,USB 2.0攻击平台被调整以破坏HS闪存驱动器目标的通信,并劫持设备与主机之间的文件传输。该平台监听发送给闪存驱动器目标的数据请求,从而进行数据注入,最终改变存储在主机上的文件的内容。在示例中,Kali Linux操作系统映像在USB启动时被破坏。
通常,端点1是MSD(大容量存储设备)的主要数据输入端点。这意味着攻击者可以保留对原始HS攻击平台的修改。然而,在这个示例中,注入增加了复杂性,因为MSD使用了跨多个USB事务和多个端点的命令/数据/状态传输协议。它的操作方式在很大程度上类似于USB事务协议,并使用了小型计算机系统接口(SCSI)命令格式。在建立连接后,主机会定期发送SCSI测试单元就绪(TUR)命令,该命令实际上充当保活消息。随后,设备向主机发送一条状态消息,表明它已准备好接收另一条命令。
当主机希望启动设备到主机的文件传输时,它会发送SCSI read(10)命令,该命令通过OUT端点2进行传输,如上图所示。SCSI read(10)命令消息中包含以下字段:read(10)操作码[0x28 0x0a]、请求的数据地址偏移量、传输大小和唯一标记。随后,通过一个或多个(取决于传输大小)IN端点1事务,在后续数据块中提供文件内容。设备通过后续的IN端点1事务指示传输完成状态。Status消息必须包含与Command消息中发布的相同的唯一标记。在HS(高速)模式下,数据块的最大传输大小为512字节。当请求的数据量超过此大小时,它会通过多个连续的IN事务进行完全传输。这里提到的IN或OUT通信分别指的是端点1和端点2上的通信。
•进一步修改:在了解了MSD目标的额外通信协议层后,需要在平台硬件中配置一个ad hoc微控制器应用程序功能。该功能用于监视发送到目标设备的下游OUT消息,并在检测到SCSI read(10)命令时触发内部信号。同时,该功能还需要存储请求的传输大小和唯一的消息标记。
编程平台以构建注入数据包,该数据包由g字符(0x67,可以任意选择)组成,并且需要将数据包零填充到512字节长度。编程决定在触发read(10)命令数据包的大小字段中放置多少个字符。
发送数据后,需要进行额外的注入操作来完成文件传输的交换。可以让平台注入一个状态传输(带有已注册的消息标记),以响应最后一次数据传输后的IN令牌。对平台进行编程,以确认发送给目标设备的后续OUT TUR消息(初始ACK响应PING令牌,然后是OUT消息)。
•实验设置:将该攻击平台配置为在高速(HS)模式下运行的串行通信设备。它监视与其他连接设备之间的HS OUT通信,并在被触发时注入响应IN令牌发送给目标设备。攻击平台和目标闪存驱动器都连接到一个已知易受攻击的公共集线器上,并通过协议分析器连接到Windows主机。在目标文件系统中准备了一个包含几个不同字符的文本文件。
•结果:由于攻击平台不断干扰MSD响应,主机最终终止了传输并将注入的数据包内容留在主机上,因此攻击始终是成功的。下图显示了在文件传输劫持过程中的总线通信。在对TUR命令注入ACK后,驱动程序终止了文件传输。值得注意的是,恶意行为者可能需要对目标主机系统驱动程序的行为进行深入了解,以对与更高级别协议通信的目标设备进行成功的攻击。
鉴于USB的默认信任特性,具有攻击能力的设备只需连接到常规的、未受保护的计算机系统,即可执行击键命令或传输恶意文件。这种攻击通常不需要注入操作。然而,注入操作对于那些管理与连接设备进行通信授权的保护机制是有用的,因为这些策略是在比注入操作更高级别的通信层上实施的。测试中使用的授权策略方案包括:
•USBFILTER:USBFILTER是一个可以与Linux内核集成的数据包级访问控制系统。通过使用USBFILTER,可以应用数据包过滤规则来允许或阻止特定设备接口级别的访问,并限制设备接口与主机上运行的特定应用程序/进程之间的交互。在测试中,允许受信任的设备接口,并阻止与攻击平台之间的所有交互。
•GoodUSB:GoodUSB可以监测USB堆栈,并根据用户的预期功能,为设备加载适当的驱动程序。它通过弹出菜单在设备插入时让用户选择。GoodUSB只允许目标设备使用其预期的测试驱动程序。当攻击平台被允许作为其他受信任设备类型使用,或者未经授权时,注入操作就可以利用这些目标接口。
•USBGuard:USBGuard是一个设备访问控制软件包。它为用户提供了允许、阻止和拒绝与特定设备通信的选项。
•Oracle VirtualBox:甲骨文的VM VirtualBox扩展包支持在虚拟机的客户操作系统中使用USB设备。该扩展允许用户维护在虚拟机中允许或阻止使用的设备列表。
•USB-Lock-RP:USB-Lock-RP允许用户有选择地只允许某些设备在主机上工作,测试了Advanced Systems International 提供的免费版本和许可版本。
•实验结果:攻击者成功绕过了所有经过测试的策略。研究人员认为本文中的注入攻击可以绕过USB软件堆栈中实施的任何授权策略。
•设备指纹:此外,研究者还指出,设备指纹识别机制也可以被绕过。设备指纹识别通常基于设备在枚举过程中提供的供应商ID(VID)和产品ID(PID)标识符,但有些机制利用其他信息,如数据包计时或设备的电磁辐射。然而,注入攻击仍然可以绕过这些设备指纹识别机制。
在本文中,研究人员提出了一种针对 USB 通信完整性的路径外传输注入攻击,大多数 USB 2.0 Hub 都容易受到攻击,因为它们支持注入;此外,一小部分 USB 3.x Hub 也容易受到攻击。通过注入攻击,攻击者可以绕过计算机软件堆栈中强制执行的设备授权策略,并利用被用户配置为受信任的通信通道进行攻击。
研究进一步展示了两个攻击场景:击键命令注入和劫持文件传输。前者允许注入恶意命令,后者允许在从受信任的USB闪存驱动器启动时破坏操作系统映像。虽然路径外注入攻击需要将恶意设备连接到目标系统,但在某些情况下这些攻击构成一定的威胁,尤其是对于高安全性的USB应用程序。
研究由澳大利亚国防部的国防科技集团完成。
原文始发于微信公众号(FreeBuf):针对 USB 外设的新型注入攻击