USB流量取证分析

栏目: IT技术 · 发布时间: 4年前

内容简介:USB是 UniversalSerial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,例如键盘、鼠标、打印机、磁盘或网络适配器等等。通过对该接口流量的监听,我们可以得到键盘的击键记录、鼠标的移动轨迹、磁盘的传输内容等一系列信息。在Linux中,可以使用lsusb命令,如图所示:

USB是 UniversalSerial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,例如键盘、鼠标、打印机、磁盘或网络适配器等等。通过对该接口流量的监听,我们可以得到键盘的击键记录、鼠标的移动轨迹、磁盘的传输内容等一系列信息。

Linux 中,可以使用lsusb命令,如图所示:

USB流量取证分析

我们这里主要演示USB的鼠标流量和键盘流量。Linux下的分析已经比较多了,下面的环境均在Windows下进行。

一、鼠标流量

1.1 特点分析

USB鼠标流量的规则如下所示:

USB流量取证分析

1.2 使用Wireshark捕获和分析

要想使用Wireshark进行捕获,需要在安装时勾选上usbpcap工具选项,这样你的Wireshark中会有一个usb接口的选项,点击就可以进行抓包了。

USB流量取证分析

下图是我点击鼠标左键在屏幕上画圆圈的流量:

USB流量取证分析

有的鼠标可能协议不是很标准,会导致分析不了。

Wireshark中捕获的USB流量集中在Leftover Capture Data模块,我们可以使用tshark工具来进行提取。在Windows中安装tshark.exe的目录中输入:

tshark.exe -r b.pcap -T fields -e usb.capdata >b.txt //这里b.pcap是我抓捕的数据包名字,b.txt是把提取的数据输入到b.txt中

USB流量取证分析

查看b.txt的内容会发现,因为有的数据包无用所以出现了很多空行,在进行下一步之前,我们需要把空行去掉。

USB流量取证分析

把空行去掉之后,根据鼠标流量的规则绘制像素坐标,最后通过画图工具(如matlab或者 python 的matplotlib进行绘制图像即可)

了解原理之后,为了方便,可以直接使用王一航大佬的 工具 进行提取,输入:

python UsbMiceDataHacker.py b.pcap LEFT //其中b.pcap是我抓捕的数据包的名字

运行之后就可以看到画面:

USB流量取证分析

需要注意的是这个工具必须在python2环境下,同时保证安装了matplotlib和numpy。

二、键盘流量

2.1 特点分析

键盘数据包的数据长度为8个字节,击键信息集中在第3个字节,每次击键都会产生一个数据包。所以如果看到给出的数据包中的信息都是8个字节,并且只有第3个字节不为0000,那么几乎可以肯定是一个键盘流量了。

在USB协议的 文档中搜索 keyboard。就可以找到击键信息和数据包中16进制数据的对照表:

USB流量取证分析

2.2 使用Wireshark捕获和分析

捕获的步骤与上面相似。下面以XCTF的高校战疫比赛中的一道例题(ez_mem&usb)来说明。

最后一步我们得到一个压缩包,通过密码进行解压后,得到一个键盘流量的文本文件:

USB流量取证分析

根据键盘流量的特点,我们可以很容易判断出。

对照解码表使用代码进行提取即可,这里贴出代码:

# coding:utf-8
import sys
import os

usb_codes = {
    0x04: "aA", 0x05: "bB", 0x06: "cC", 0x07: "dD", 0x08: "eE", 0x09: "fF",
    0x0A: "gG", 0x0B: "hH", 0x0C: "iI", 0x0D: "jJ", 0x0E: "kK", 0x0F: "lL",
    0x10: "mM", 0x11: "nN", 0x12: "oO", 0x13: "pP", 0x14: "qQ", 0x15: "rR",
    0x16: "sS", 0x17: "tT", 0x18: "uU", 0x19: "vV", 0x1A: "wW", 0x1B: "xX",
    0x1C: "yY", 0x1D: "zZ", 0x1E: "1!", 0x1F: "2@", 0x20: "3#", 0x21: "4$",
    0x22: "5%", 0x23: "6^", 0x24: "7&", 0x25: "8*", 0x26: "9(", 0x27: "0)",
    0x2C: "  ", 0x2D: "-_", 0x2E: "=+", 0x2F: "[{", 0x30: "]}", 0x32: "#~",
    0x33: ";:", 0x34: "'\"", 0x36: ",<", 0x37: ".>", 0x4f: ">", 0x50: "<"
}


def code2chr(filepath):
    lines = []
    pos = 0
    for x in open(filepath, "r").readlines():
        code = int(x[6:8], 16)  # 即第三个字节
        if code == 0:
            continue
        # newline or down arrow - move down
        if code == 0x51 or code == 0x28:
            pos += 1
            continue
        # up arrow - move up
        if code == 0x52:
            pos -= 1
            continue

        # select the character based on the Shift key
        while len(lines) <= pos:
            lines.append("")
        if code in range(4, 81):
            if int(x[0:2], 16) == 2:
                lines[pos] += usb_codes[code][1]
            else:
                lines[pos] += usb_codes[code][0]

    for x in lines:
        print(x)


if __name__ == "__main__":
    code2chr('E://CTF练习/杂项/18e4c103d4de4f07b33a42cb1f0eaa1d/00000122/usbdata.txt')

当然也可以直接使用王一航大佬的代码,直接从pcap包提取出文件,省去了中间很多步骤,代码也很通用。

*本文作者:polemo,转载请注明来自FreeBuf.COM


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

浪潮之巅(第2版)(套装上下册)

浪潮之巅(第2版)(套装上下册)

吴军 / 人民邮电出版社 / 2013-7 / 80.00元

一个企业的发展与崛起,绝非只是空有领导强人即可达成。任何的决策、同期的商业环境,都在都影响着企业的兴衰。《浪潮之巅》不只是一本历史书,除了讲述科技顶尖企业的发展规律,对于华尔街如何左右科技公司,以及金融风暴对科技产业的冲击,也多有着墨。此外,这本书也着力讲述很多尚在普及或将要发生的,比如微博和云计算,以及对下一代互联网科技产业浪潮的判断和预测。因为在极度商业化的今天,科技的进步和商机是分不开的。 ......一起来看看 《浪潮之巅(第2版)(套装上下册)》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具