USB fuzzing

简介

最近看一些USB fuzzing方面的东西,总结一下。主要是软件方面的工作。

vUSBf

文章在这里:https://www.blackhat.com/docs/eu-14/materials/eu-14-Schumilo-Dont-Trust-Your-USB-How-To-Find-Bugs-In-USB-Device-Drivers-wp.pdf

qemu支持USB重定向协议,用来远程连接USB设备,vUSBf使用这个来实现不同USB设备的虚拟化。

在USB重定向协议中,USB的数据通过网络而不是直接的硬件接触,QEMU中运行系统,而外部设备的虚拟通过重定向协议连接QEMU来实现,也就是redirserver,整个架构如下:

在redirserver端实现USB设备的虚拟和fuzzing,在QEMU中运行OS,两者通过USB重定向协议连接。同时还需要两个部件

  • QEMU控制器:用来管理QEMU的启动信息
  • 监视模块:监视系统的异常状态

 Lowering the USB Fuzzing Barrier by Transparent Two-Way Emulation

文章地址:https://www.usenix.org/system/files/conference/woot14/woot14-vantonder.pdf

提出了一个USB测试框架,文章用到了Facedancer,一种用来测试USB的硬件设备,产生USB数据。然后经过中间层MC,最后通过一个Facedancer连到被测试主机上,可以在MC处做fuzzing

USB Device Drivers: A Stepping Stone into your Kernel

文章在这里:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5663316

这个直接改了QEMU,QEMU可以通过主机的设备文件访问主机上的USB设备,文章拦截QEMU与主机的设备交互信息加入fuzzing模块

按照这个说法是不是必须要有相应的硬件设备才能进行fuzzing了?

POTUS: Probing Off-The-Shelf USB Drivers with Symbolic Fault Injection

该文章使用S2E进行错误注入。

S2E是选择符号执行,可以将符号执行应用于大型程序,比如像内核。它本身就支持使用SystemTap脚本将外部设备的输入符号化,然后进行符号执行,官方介绍看这里https://github.com/S2E/s2e-old/blob/master/docs/SystemTap.rst

根据这篇文章的内容,贡献是两点:

1、做了提出了一种将故障注入与并发模糊和符号执行相结合的设备驱动程序缺陷检测方法

2、我们介绍了模拟虚拟USB设备的方法,该设备允许测试任意客户机驱动程序

按照我现在的理解,他虚拟USB设备的方式好像和vUSBf并没有太多的区别,在USB枚举阶段,由于USB协议已经定好了数据交换的格式,所以只需要个更改那5中描述符就可以了,但是在真实的数据卷换场景下面,vUSBf需要根据不同的设备来模拟。每太明白它的这部分模拟是怎么做的,USB数据交换的4种模式,感觉它就是抽象了一下这4中交换数据方式,然后就说可以通用模拟了。

故障注入这一点,它就使用了符号执行,在相应USB的回调函数中,通过systemTap脚本的控制,用符号执行让该函数以错误的值返回。好像是这个意思,S2E的这几个函数的含义也还不是太清楚。

Syzkaller

谷歌开发的基于覆盖的系统调用fuzzing,也发现了很多的USB漏洞

具体漏洞信息看这里:https://github.com/google/syzkaller/blob/master/docs/linux/found_bugs_usb.md

使用Syzkaller挖USB漏洞:https://data.hackinn.com/ppt/OffensiveCon2019/Coverage-Guided%20USB%20Fuzzing%20with%20Syzkaller.pdf

Facedancer

硬件设备,该板的目的是允许USB设备在主机端Python中编写,这样一个工作站就可以对其他主机的USB设备驱动程序进行模糊测试

PeriScope: An Effective Probing and Fuzzing Framework for the Hardware-OS Boundary

不是专门fuzzingUSB的,但是可以对内存映射IO和MDA的数据进行fuzzing。需要对内核源码进行修改。

 

转载于:https://www.cnblogs.com/likaiming/p/10872349.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者:k0shl ####一些环境说明: 编译环境:Windows 10 x64 build 1607 项目IDE:VS2013 测试环境:Windows 7 x86、Windows 10 x86 build 1607 参数介绍: "-l" :开启日志记录模式(不会影响主日志记录模块) "-s" :驱动枚举模块 "-d" :打开设备驱动的名称 "-i" :待Fuzz的ioctl code,默认从0xnnnn0000-0xnnnnffff "-n" :在探测阶段采用null pointer模式,该模式下极易fuzz 到空指针引用漏洞,不加则常规探测模式 "-r" :指定明确的ioctl code范围 "-u" :只fuzz -i参数给定的ioctl code "-f" :在探测阶段采用0x00填充缓冲区 "-q" :在Fuzz阶段不显示填充input buffer的数据内容 "-e" :在探测和fuzz阶段打印错误信息(如getlasterror()) "-h" :帮助信息 ####常用Fuzz命令实例: kDriver Fuzz.exe -s 进行驱动枚举,将CreateFile成功的驱动设备名称,以及部分受限的驱动设备名称打印并写入Enum Driver.txt文件中 kDriver Fuzz.exe -d X -i 0xaabb0000 -f -l 对X驱动的ioctl code 0xaabb0000-0xaabbffff范围进行探测及对可用的ioctl code进行fuzz,探测时除了正常探测外增加0x00填充缓冲区探测,开启数据日志记录(如增加-u参数,则只对ioctl code 0xaabb0000探测,若是有效ioctl code则进入fuzz阶段) kDriver Fuzz.exe -d X -r 0xaabb1122-0xaabb3344 -n -l 对X驱动的ioctl code 0xaabb1122-0xaabb3344范围内进行探测,探测时采用null pointer模式,并数据日志记录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值