使用Wireshark捕捉USB通信数据
USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能,是应用在PC领域的接口技术。
现在,越来越多的人喜欢使用USB设备了。很多的设备都会选择使用USB接口来作为设备的通信端口,而这也是一种流行的趋势,这有助于不同设备之间标准的统一。那么,你对USB设备的工作方式和运行机制真的了解吗?无论你是一个硬件黑客,还是一名对外围设备感兴趣的技术爱好者,USB设备都是一个非常具有挑战性的领域。在Wireshark的帮助下,我们不仅可以嗅探并截获到USB设备所发送的数据流信息,而且我们还可以将这些捕获到的数据存储至我们的主机中。我们实验所使用的主机安装的操作系统为Windows或者Linux。
在这篇文章中,我们将会讨论如何使用Wireshark来捕捉USB设备的通信数据。在我撰写这篇文章的过程中,我使用到了下列材料:
Wireshark 2.0.1 (SVN) Linux kernel 4.1.6
在实际操作过程中,你可以选择使用版本号高于1.2.0的任意版本Wireshark来进行操作。在此,我并没有在本文中提供Windows系统的操作步骤,我会在实验操作完成之后的第一时间给大家提供这部分的信息。
一些背景知识
在我们开始操作之前,我觉得还是得给大家介绍一些有关USB设备的基础知识。USB有其自己的标准和规范。基本而言,我们可以通过以下三种方式来使用USB:
USB UART接口
USB HID(交互设备)
USB存储设备
UART,即通用异步接收/发送器。这类设备只能够利用USB来进行数据的接收和发送操作。实际上,这类设备与普通的通信设备并没有本质上的区别。
HID,即人机交互设备。这也是USB作为接口来使用的一种典型应用。这类设备包括键盘,鼠标,游戏控制器,以及很多简单的显示设备等等。
最后就是USB存储设备,这也是最常见的一种USB使用形式。比如说外接硬盘,U盘和闪存驱动器等等,这些都属于USB存储设备这一类。
正如你所了解的那样,USB交互设备和USB存储器这两大类USB设备是目前我们使用最为广泛的。
现在,每一种USB设备,尤其是人机交互设备和存储设备,都有一串特殊的数字,这串数字被称为厂商ID和产品ID。这两个数字一般是成对出现的。厂商ID用于标明该产品是由哪一个制造商所生产的,而产品ID是产品的标识符。需要注意的是,产品ID并不是序列号。具体情况如下图所示:
上图所显示的是连接至我这台计算机的USB设备信息。我们可以调用lsusb命令来查看系统中的USB设备信息。
首先,我们要选择一个设备来进行实验。我有一个罗技无线鼠标,这是一种人机交互设备。而这个鼠标中也配备有一个数据接收装置,所以我决定将这个无线鼠标作为我的实验对象。你能从上图所示的信息中找到这个鼠标吗?没错,就是第四个。该设备的具体信息如下:
Bus 003 Device 010: ID 046d:c52f Logitech, Inc. Unifying Receiver
ID部分所显示的数据为046d:c52f,这是厂商ID和产品ID(厂商ID: 产品ID)。很明显,厂商ID为046d,产品ID为c52f。
除此之外,我们可以看到开头的“Bus 003 Device 010”。这段信息告诉我们这一USB设备所连接的是哪一条总线。这是一条非常重要的信息。
准备工作
现在,我们需要使用root权限来运行Wireshark,并利用Wireshark来嗅探USB通信数据。当然了,我们并不建议大家利用root权限来进行操作。我们可以使用Linux提供的usbmon来为我们获取和导出数据信息的操作赋予足够的权限。具体请参考Linux-udev。我们所要做的就是创建一个usbmon group,然后将我们的账号加入这个组,最后生成相应的udev规则。相关操作命令如下:
addgroup usbmon gpasswd -a $USER usbmon echo 'SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640"' > /etc/udev/rules.d/99-usbmon.rules
接下来,我们需要使用usbmon的内核模块。如果系统还未加载该模块,我们可以使用root权限并运行下列命令来进行加载。
modprobe usbmon
数据捕捉
打开Wireshark之后,我们可以看到如下图所示的接口列表。你应该能看到形如usbmonX的信息,其中X为数字。下图显示的是我的信息(没错,我使用了root权限):
如果Wireshark检测到了接口中有数据流信息,它会以波形图的形式将信息显示给我们。那么,我们该选择哪一个呢?还记得我之前说过的吗?没错,数字“X”所对应的就是设备所连接的USB总线。在我的操作过程中,目标设备为usbmon3。我们打开它之后,就可以看到其中的数据流信息了。点击usbmon接口,然后点击那个蓝色的鱼鳍图标。
然后呢?
我们在成功捕获了数据流信息之后,我们能做什么呢?这一切都将取决于我们自己。通常情况下,我们可以通过这些信息来了解设备与主机的通信机制。而且在某些情况下,我们还可以利用这些信息并结合我们自己的知识来对其进行逆向工程分析。