0x00:什么是USB?
USB是 UniversalSerial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,例如键盘、鼠标、打印机、磁盘或网络适配器等等。通过对该接口流量的监听,我们可以得到键盘的击键记录、鼠标的移动轨迹、磁盘的传输内容等一系列信息。
USB流量指的是USB设备接口的流量,攻击者能够通过监听usb接口流量获取键盘敲击键、鼠标移动与点击、存储设备的铭文传输通信、USB无线网卡网络传输内容等等。
0x01:USB使用的三种方式
USB协议版本有USB1.0, USB1.1, USB2.0, USB3.1等,目前USB2.0比较常用。
1. USB UART
UART,这种方式下,设备只是简单的将 USB 用于接受和发射数据,除此之外就再没有,其他通讯功能了。
2. USB HID
HID 是人性化的接口。这一类通讯适用于交互式,有这种功能的设备有:键盘,鼠标,游戏手柄和数字显示设备。
3. USB Memory
USB Memory是数据存储
每一个 USB 设备(尤其是 HID 或者 Memory )
都有一个供应商 ID(Vendor ID)
和产品识别码(Product Id)
。 Vendor ID 是用来标记哪个厂商生产了这个 USB 设备。 Product ID 则用来标记不同的产品.
0x02:lsusb命令
lsusb
命令用于显示本机的USB设备列表,以及USB设备的详细信息。
Bus 002
:指明设备连接到哪条总线Device 002
:表明这是连接到总线上的第二台设备ID
: 设备的IDVMware, Inc. Virtual Mouse
:生产商名字和设备名
0x03 tshark命令
网络抓包,分析工具。wireshark 的 Linux命令行工具
常用命令
tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt
如果提取出来的数据有空行,可以将命令改为如下形式:
tshark -r usb2.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt
如果提取出来的数据没有冒号,可以用脚本来加上冒号(因为一般的脚本都会按照有冒号的数据来识别,有冒号时提取数据的[6:8]
,无冒号时数据在[4:6]
)
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
a=f.readline().strip()
if a:
if len(a)==8: # 键盘流量的话len改为16
out=''
for i in range(0,len(a),2):
if i+2 != len(a):
out+=a[i]+a[i+1]+":"
else:
out+=a[i]+a[i+1<