USB Fuzzing基础知识:DDoS防御从漏洞挖掘到漏洞报告-墨者安全-墨者盾
DDOS防御_CC防护_高防CDN服务器_【墨者安全】—墨者盾墨者盾—你的网站贴身保镖!
QQ:800185041
高防免费接入:400-0797-119

渠道合作:156 2527 6999

主页 > CC防护 > USB Fuzzing基础知识:DDoS防御从漏洞挖掘到漏洞报告

USB Fuzzing基础知识:DDoS防御从漏洞挖掘到漏洞报告

小墨安全管家 2020-09-29 12:38 CC防护 89 ℃
DDoS防御

[5] Universal Serial Bus Specification 2.0 page 260 

如今,将_USBD_INTERFACE_INFORMATION结构复制到RCX,我将此指针放回RAX中。

0x01 Fuzzing 想法

我模拟了USB大容量存储设备,并丢弃了交换的流量,接着,我决定Fuzzing配置描述符,尤其是bNumEndpoints字段。

}; 

[2] https://github.com/nccgroup/umap 

本文的目的不是要详细描述USB的工作原理,但仍需要一些知识才干更好地理解USB Fuzzing。连接设备后,主机遇向该设备发出标准请求,以检索有关该设备的信息(供应商ID,产品ID,可用功能等),如此做是为了对其举行配置并将适当的驱动程序加载到OS中,此信息称为 描述符。这些请求/描述符在特殊端点上交换:每个连接的新标准设备都必须响应发送给它的请求。端点是设备接口之间的逻辑链接和USB主机堆栈,接口由一具或多个端点组成,并提供类功能(HID,大容量存储等)或特定功能。

  PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; 

memset(@dest, 0x0, EAX)                 memset(@dest, 0x0, 0x24) 

下载完USBSTOR.sys的符号后,我将其加载到IDA Pro中,幸运的是,这些符号特别容易理解,我特别快找到了有味的函数: USBSTOR_SelectConfiguration()

ECX <- ECX-1                            ECX <- 0-1 = 0xffffffff 

如今,在调用USBD_CreateConfigurationRequestEx()之后,我回到USBSTOR.sys ,RDI指向:

· 从已记录的PCAP重放流量;

第一具差不多块显示了对usbd.sys导出的调用: USBD_CreateConfigurationRequestEx(),该输出返回指向URB_FUNCTION_SELECT_CONFIGURATION结构的指针 。依照MSDN [6],此“例程分配并格式化URB以挑选USB设备的配置”。URB是客户端驱动程序用来描述其要发送到设备的请求的结构[7]。

0x04 逆向大容量存储驱动程序

Windows 8.1 32位

  UCHAR                 Class; 

驱动程序名称是显式的:它是大容量存储驱动程序。

此处,由于结构中的指针大小不同,所以大小计算也不同。因为EAX惟独32位长,于是结果0x1400000024不适合它,所以存储了0x00000024。_URB_SELECT_CONFIGURATION的大小为0x38字节,所以未初始化分配结构的20个字节,假如分配的空间紧随其后没有正确地用memcpy()填充,则在特定条件下能够利用该漏洞

} USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;[object Object] 

我的Fuzzing结构基于Facedancer和Umap工具,并向其中添加了一些功能:

USBD_CreateConfigurationRequestEx()函数中,我看到它复制 bNumEndpoints(我设置为0的Fuzzing 空间)从USB_INTERFACE_DESCRIPTOR结构的 NumberOfPipes基于USBD_INTERFACE_INFORMATION结构。该USB_INTERFACE_DESCRIPTOR枚举过程结构初始化,同时不大概在本文中举行研究。

  USHORT                Length; 

[6]  

崩溃转储分析几乎没实用,因为内核池内存已被损坏:每次崩溃都在另一具位置。我然后注入数据包,同时在某个时候Windows BSOD给了我以下咨询题的位置:USBSTOR.sys。

  USBD_CONFIGURATION_HANDLE     ConfigurationHandle; 

USB Fuzzing基础知识:DDoS谨防从漏洞挖掘到漏洞报告

第二个差不多块调用USBSTOR_SyncSendUsbRequest(),并将先前创建的URB作为第一具参数。调用此函数后,请求将经过USB堆栈发送,接着从主机操纵器物理发送到设备。假如我中断USBSTOR_SyncSendUsbRequest()调用,则会观看到不是此调用导致系统崩溃。

  UCHAR                 Reserved; 

memset(@dest, 0x0, R8)                  memset(@dest, 0x0, 0x1800000038) 

ECX <- endpoint number                  If the number of endpoint is zero 

0x03 Fuzzing的实例示例

在伪代码中,memset()的大小如下:

[3] https://code.google.com/p/ouspg/wiki/Radamsa 

最近,我开始使用基于Facedancer的一种工具来挖掘USB主机堆栈中的漏洞。本文首先介绍我的Fuzzing测试想法,接着给出完整更新的Windows 8.1 x64中的漏洞的实际示例。本文的目的不是重新定义USB Fuzzing测试,也不是对我的Fuzzing测试架构举行完整描述,而是要叙述从Fuzzing测试到漏洞报告的完整步骤。

0x02 USB基础

R8 (0xffffffff*3*8)+80 

· 基于Radamsa的数据包变异。

  struct URB_HEADER  Hdr; 

  UCHAR                 InterfaceNumber; 

USB Fuzzing基础知识:DDoS谨防从漏洞挖掘到漏洞报告

这些指令的伪代码为:

  USBD_INTERFACE_HANDLE InterfaceHandle; 

我看到了在64位模式下发生的事情,但没有看到32位模式下发生的事情。我将不再详细讲明指令流,因为是彻底相同的。

  UCHAR                 SubClass; 

  USBD_INTERFACE_INFORMATION    Interface; 

以下代码段对应于先前代码段的32位等效:

· 在PCAP中为仿真设备捕获流量;

EAX <- EAX-1                            EAX <- 0-1 = 0xffffffff 

  UCHAR                 Protocol; 

USB Fuzzing基础知识:DDoS谨防从漏洞挖掘到漏洞报告


DDoS防御

当前位置:主页 > CC防护 > USB Fuzzing基础知识:DDoS防御从漏洞挖掘到漏洞报告

标签列表
DDoS防御
网站分类
X
 

QQ客服

400-0797-119