第一次做USB键盘与鼠标流量分析的题目,现在来好好做一个总结
1. 基础知识
USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。
在正式介绍 USB HID 协议之前,先解释一下上图,这是我们最初捕获到的几个流量包,其中包含了最常见的两种 USB 数据传输方式:
GET DESCRIPTOR
URB_INTERRUPT in
GET DESCRIPTOR 和 URB_INTERRUPT in 都属于 USB 数据传输方式,但它们的用途不同,GET DESCRIPTOR 用于获取设备信息,而 URB_INTERRUPT in 用于实时地获取设备数据。
GET DESCRIPTOR
GET DESCRIPTOR 是 USB 设备和主机之间进行控制传输的一种方式,用于获取设备信息(即各种描述符信息)。GET DESCRIPTOR 一般使用控制传输的 SETUP、DATA 和 STATUS 三个阶段来完成。
USB 描述符
USB 描述符是用于描述 USB 设备、接口、端点等属性的数据结构,主要包括以下几种类型:
设备描述符(Device Descriptor):用于描述 USB 设备的基本属性,如设备厂商 ID、设备产品 ID、设备类别等。
配置描述符(Configuration Descriptor):用于描述 USB 设备的配置信息,包括设备接口、端点数量、传输类型等信息。
接口描述符(Interface Descriptor):用于描述USB设备的接口信息,包括接口类别、子类别、协议等信息。
端点描述符(Endpoint Descriptor):用于描述USB设备的端点信息,包括端点地址、端点类型、端点方向、最大包大小等信息。
字符串描述符(String Descriptor):用于描述USB设备的字符串信息,如设备名称、制造商名称、产品名称等。
HID 描述符(HID Descriptor):仅用于 HID(Human Interface Device)设备,描述 HID 设备的属性和报告信息。
bDeviceClass/bDeviceSubClass:HID 设备在其设备描述符中的类/子类值均为 0。
idVendor:厂商 ID。
idProduct:产品 ID。
接口描述符(INTERFACE DESCRIPTOR)
bInterfaceClass:3,标识 HID 设备。
bInterfaceSubClass:1 表示设备支持引导协议, 0 表示设备只支持报告协议。
bInterfaceProtocol:1表示HID设备是键盘,2表示HID设备是鼠标。
请记住,接口描述符不能手动请求,必须与配置和端点描述符一起获取。
URB_INTERRUPT in
URB_INTERRUPT in 是一种 USB 中断传输方式,用于实时地从 USB 设备中读取数