USB流量取证分析

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

深入解析Spring MVC与Web Flow

深入解析Spring MVC与Web Flow

Seth Ladd、Darren Davison、Steven Devijver、Colin Yates / 徐哲、沈艳 / 人民邮电出版社 / 2008-11 / 49.00元

《深入解析Spring MVCgn Web Flow》是Spring MVC 和Web Flow 两个框架的权威指南,书中包括的技巧和提示可以让你从这个灵活的框架中汲取尽可能多的信息。书中包含了一些开发良好设计和解耦的Web 应用程序的最佳实践,介绍了Spring 框架中的Spring MVC 和Spring Web Flow,以及着重介绍利用Spring 框架和Spring MVC 编写Web ......一起来看看 《深入解析Spring MVC与Web Flow》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具