简介

最近看一些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。需要对内核源码进行修改。

USB fuzzing的更多相关文章

  1. Umap2:开源USB host安全评估工具

    Umap2是一款由NCC Group和Cisco SAS小组开发的.基于python的USB host安全评估工具. 它拥有第一版所支持的所有功能: umap2emulate:USB设备枚举 umap ...

  2. Linux自动共享USB设备:udev+Samba

    一.概述 公司最近要我实现USB设备插入Ubuntu后,自动共享到网络上,能像Windows共享一样(如\\192.168.1.10)访问里面的内容,不需要写入权限.当时听完这需求,我这新人表示惊呆了 ...

  3. OpenWrt中开启usb存储和samba服务

    在从官网安装的WNDR3800 15.05.1版本OpenWrt中, 不带usb存储支持以及samba, 需要另外安装 1. 启用usb支持 USB Basic Support https://wik ...

  4. USB设备(移动硬盘、鼠标)掉电掉驱动的两种解决方案

    症状: 当你发现"移动硬盘图标"经常无故消失,又自己出现时. 你可以把这个现象称之为"掉电" or "掉驱动". 遇到这种情况,相当不爽. ...

  5. 【.NET MF】.NET Micro Framework USB移植

    1.开发环境 windows 7  32位 MDK 4.54 .Net Micro Framework Porting Kit 4.2(RTM QFE2) .Net Micro Framework   ...

  6. USB Host的上拉下拉电阻

      关于USB的上下拉电阻,不是随便接个任意阻值的电阻就ok了. 当你的USB为主设备的时候,D+.D-上分别接一个15K的下拉电阻,这样可以使得在没有设备插入的时候,D+.D-上始终保持低电平:当为 ...

  7. stm32 usb error : identifier "bool" is undefined

    .\usb\USB\usb_pwr.h(54): error:  #20: identifier "bool" is undefinedusb\USB\usb_pwr.h(54): ...

  8. 如果mac电脑的usb转接器连接wlan时不显示,也就是不识别usb此时的网络连接没有,解决办法就是如下

    1.接上电源   关机 先按下shift +ctrl + opt + 开机键    ,等待10秒,这10秒是没有反应的,屏幕不会亮,系统不会跑起来,  10秒之后松开所有键,再按下opt + cmd ...

  9. UP Board USB无线网卡一贴通

    前言 原创文章,转载引用务必注明链接,水平有限,欢迎指正. 本文环境:ubilinux 3.0 kernel 4.4.0 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我 ...

随机推荐

  1. 树状数组(BIT)

    树状数组 树状数组是在线段树的结构上改造而来数据结构,主要用于完成: 给定一个初始值全为0的数列 ①给定i,计算返回a1+a2+--+ai的值 ②给定i和x,执行ai+=x BIT的求和 ll sum ...

  2. struct streaming中的监听器StreamingQueryListener

    在struct streaming提供了一个类,用来监听流的启动.停止.状态更新 StreamingQueryListener 实例化:StreamingQueryListener 后需要实现3个函数 ...

  3. CodeForces 714E Sonya and Problem Wihtout a Legend(单调数列和DP的小研究)

    题意:给你n个数字,每个数字可以加减任何数字,付出变化差值的代价,求最后整个序列是严格单调递增的最小的代价. 首先我们要将这个题目进行转化,因为严格单调下是无法用下面这个dp的方法的,因此我们转化成非 ...

  4. IDEA项目里Maven 的Plugins出现红线的解决方法

    1.删除项目里的libraries(快捷键ctrl+shift+alt+s):Project Settings->Libraries,全选删除 2.删除之前项目产生的target 3.然后再in ...

  5. Java程序如何限速(控制下载和上传速度)

    转自 http://www.blogjava.net/canvas/articles/bandwidthlimiter.html 这里简单的讨论一下java设计网络程序中如何控制上传和下载速度,我们常 ...

  6. OpenCV学习笔记(13)——轮廓特征

    查找轮廓的不同特征,例如面积,周长,重心,边界等 1.矩 图像的矩可以帮助我们计算图像的质心,面积等. 函数cv2.momen()会将计算得到的矩以一个字典的形式返回, 我们的测试图像如下: 例程如下 ...

  7. 最长公共子子串 java

    package maxCommon; /** * 找到最长公共子串 * @author root */ public class MaxCommonUnSeries { public static v ...

  8. maven 打jar包和war包

     (       最简单的:修改pom.xml文件:                        <packaging>war</packaging>(如果是jar,则是&l ...

  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战

    笔记 1.SpringBoot多环境配置介绍和项目实战(核心知识)     简介:SpringBoot介绍多环境配置和使用场景 1.不同环境使用不同配置         例如数据库配置,在开发的时候, ...

  10. 为什么能抓到网站https传输的明文密码?------顺便说说“知乎”和“支付宝”的安全性对比

    在多数人看来, https是安全的, 因为https和secure http嘛, 真的是这样吗? 一些人认为, https是加密传输, 所以抓到包也没有用, 是密文的. 真是的这样吗? 我今天无意抓到 ...