🔥Adquiere tu membresía:  acceso a todos los cursos, videos eliminados, contenidos protegidos, manuales y más. >> Ver Más

Usbrip: herramienta forense de línea de comandos para rastrear dispositivos USB en Linux

Usbrip (derivado de “USB Ripper”, no “USB R.I.P”) es una herramienta forense de código abierto con interfaz CLI que te permite realizar un seguimiento de los artefactos del dispositivo USB (también conocido como historial de eventos USB, eventos “conectados” y “desconectados”) en máquinas Linux.

Descripción

usbrip es un pequeño software escrito en Python 3 puro (sin embargo, utilizando algunos módulos externos, puedes consultar Dependencias/PIP) que analiza los archivos de registro de Linux (/var/log/syslog* o/var/log/messages* dependiendo de la distribución) para construir tablas de historial de eventos USB.

Dichas tablas pueden contener las siguientes columnas: “Conectado” (fecha y hora), “Usuario”, “VID” (ID de proveedor), “PID” (ID de producto), “Producto”, “Fabricante”, “Número de serie”, “Puerto” y “Desconectado” (fecha y hora).
Además, también te permite:

  • Exportar información recopilada como un registro JSON (y abrir dichos registros, por supuesto);
  • Generar una lista de dispositivos USB autorizados (de confianza) como JSON (llamados auth.json);
  • Buscar “eventos de violación” en función de auth.json: mostrar (o generar otro JSON con) dispositivos USB que aparecen en el historial y NO aparecen en el auth.json;
  • *cuando se instala con el indicador –s* crea almacenamientos cifrados (archivos 7zip) para hacer copias de seguridad y acumular eventos USB automáticamente con la ayuda del programador crontab;
  • Buscar detalles adicionales sobre un dispositivo USB específico en función de su VID y/o PID.

Inicio rápido

usbrip está disponible para descargar e instalar en PyPI:

$ pip3 install usbrip

Capturas de pantalla

Git Clone

Para simplificar, aceptemos que todos los comandos donde ~/usbrip$ aparece el prefijo se ejecutan en el directorio ~/usbrip que se crea como resultado de git clone:

~$ git clone https://github.com/snovvcrash/usbrip.git usbrip && cd usbrip
~/usbrip$

Dependencias

usbrip funciona solo con la estructura no modificada de los archivos de registro del sistema, por lo que, desafortunadamente, no podrás analizar el historial de USB si cambias el formato de syslogs (con syslog-ng o rsyslog, por ejemplo). Es por eso que las marcas de tiempo de los campos “Conectado” y “Desconectado” no tienen el año, por cierto. Mantén esto en mente.

Paquetes DEB

  • Intérprete de python3.6 (o más reciente)
  • python3-venv
  • p7zip-full (usado por el módulo storages)
~$ sudo apt install -y python3-venv p7zip-full

Paquetes PIP

usbrip utiliza los siguientes módulos externos:

  • terminaltables
  • termcolor

Portable
Para resolver las dependencias de Python manualmente (en realidad no es necesario porque pip o setup.py puede automatizar el proceso, consulta Instalación) crea un entorno virtual (opcional) y ejecuta pip desde dentro:

~/usbrip$ python3 -m venv venv && source venv/bin/activate
(venv) ~/usbrip$ pip install -r requirements.txt

O deja que  pipenv en una línea haga todo el trabajo sucio por ti:

~/usbrip$ pipenv install && pipenv shell

Después de eso, puedes ejecutar usbrip de forma portable:

(venv) ~/usbrip$ python -m usbrip -h
Or
(venv) ~/usbrip$ python __main__.py -h

Instalación

Hay dos formas de instalar usbrip en el sistema: pip o setup.py.

pip o setup.py

Antes que nada, usbrip es pip instalable. Esto significa que después de clonar el repositorio git, simplemente puedes iniciar el proceso de instalación de pip y luego ejecutar usbrip desde cualquier lugar de tu terminal de la siguiente manera:

~/usbrip$ python3 -m venv venv && source venv/bin/activate
(venv) ~/usbrip$ pip install .

(venv) ~/usbrip$ usbrip -h

O si deseas resolver las dependencias de Python localmente (sin molestar a PyPI), usa setup.py:

~/usbrip$ python3 -m venv venv && source venv/bin/activate
(venv) ~/usbrip$ python setup.py install

(venv) ~/usbrip$ usbrip -h

Nota: es probable que desees ejecutar el proceso de instalación mientras el entorno virtual de Python está activo (como se muestra arriba).

install.sh

En segundo lugar, usbrip también se puede instalar en el sistema con el script ./installers/install.sh. Cuando se utilizan ./installers/install.sh algunas funciones adicionales están disponibles:

  • El entorno virtual se crea automáticamente;
  • El módulo storage estará disponible: puedes configurar un crontab job para hacer una copia de seguridad de los eventos USB en un horario (el ejemplo de los crontab jobs se puede encontrar en usbrip/cron/usbrip.cron).

Advertencia: si estás utilizando la programación crontab, debes configurar el cron job con sudo crontab –e con el fin de forzar la ejecución de storage update del submódulo como root y proteger las contraseñas de los almacenamientos de eventos USB. Las contraseñas de almacenamiento se guardan /var/opt/usbrip/usbrip.ini.

El script ./installers/uninstall.sh elimina todos los artefactos de instalación de tu sistema.

Para instalar usbrip usa:

~/usbrip$ chmod +x ./installers/install.sh
~/usbrip$ sudo -H ./installers/install.sh [-l/--local] [-s/--storages]
~/usbrip$ cd

~$ usbrip -h
  • Cuando el conmutador –l está habilitado, las dependencias de Python se resuelven desde paquetes locales .tar (./3rdPartyTools/) en lugar de PyPI.
  • Cuando el interruptor –s está habilitado, no solo se instala el proyecto usbrip, sino que también se crea la lista de dispositivos USB confiables, el historial y el almacenamiento de incidentes.

Nota: cuando uses la opción –s durante la instalación, asegúrate de que los registros del sistema contengan al menos una entrada de dispositivo USB externo. Es una condición necesaria para que usbrip cree con éxito la lista de dispositivos confiables (y como resultado, cree con éxito el almacenamiento de incidentes).

Una vez completada la instalación, no dudes en eliminar la carpeta usbrip.

Rutas

Cuando los instalas, usbrip usa las siguientes rutas:

  • /opt/usbrip/ – directorio principal del proyecto;
  • /var/opt/usbrip/usbrip.ini – archivo de configuración usbrip: mantiene contraseñas para almacenamientos 7zip;
  • /var/opt/usbrip/storage/– Almacenamiento de eventos USB: history.7zviolations.7z (creado durante el proceso de instalación);
  • /var/opt/usbrip/log/– registros de usbrip (se recomienda registrar la actividad de usbrip cuando se usa crontab, ver usbrip/cron/usbrip.cron);
  • /var/opt/usbrip/trusted/ – lista de dispositivos USB confiables (creados durante el proceso de instalación);
  • /usr/local/bin/usbrip– enlace simbólico al scritp /opt/usbrip/venv/bin/usbrip.

Cron

Cron Jobs se pueden configurar de la siguiente manera:

~/usbrip$ sudo crontab -l > tmpcron && echo "" >> tmpcron
~/usbrip$ cat usbrip/cron/usbrip.cron | tee -a tmpcron
~/usbrip$ sudo crontab tmpcron
~/usbrip$ rm tmpcron

uninstall.sh
Para desinstalar usbrip usa:

~/usbrip$ chmod +x ./installers/uninstall.sh
~/usbrip$ sudo ./installers/uninstall.sh [-a/--all]
  • Cuando el interruptor –a está habilitado, no solo se elimina el directorio del proyecto usbrip, sino que también se eliminan todos los almacenamientos y registros de usbrip.

Y no olvides eliminar el cron job.

Uso

Sinopsis 

# ---------- BANNER ----------

$ usbrip banner
Get usbrip banner.

# ---------- EVENTS ----------

$ usbrip events history [-t | -l] [-e] [-n <NUMBER_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USER> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT> ...]] [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [-c <COLUMN> [<COLUMN> ...]] [-f <FILE> [<FILE> ...]] [-q] [--debug]
Get USB event history.

$ usbrip events open <DUMP.JSON> [-t | -l] [-e] [-n <NUMBER_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USER> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT>    ...]] [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [-c <COLUMN> [<COLUMN> ...]] [-f <FILE> [<FILE> ...]] [-q] [--debug]
Open USB event dump.

$ usbrip events gen_auth <OUT_AUTH.JSON> [-a <ATTRIBUTE> [<ATTRIBUTE> ...]] [-e] [-n <NUMBER_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USER> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT> ...]] [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [-f <FILE> [<FILE> ...]] [-q] [--debug]
Generate a list of trusted (authorized) USB devices.

$ usbrip events violations <IN_AUTH.JSON> [-a <ATTRIBUTE> [<ATTRIBUTE> ...]] [-t | -l] [-e] [-n <NUMBER_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USE   R> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT> ...]] [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [-c <COLUMN> [<COLUMN> ...]] [-f <FILE> [<FILE> ...]] [-q] [--debug]
Get USB violation events based on the list of trusted devices.

# ---------- STORAGE ----------

$ usbrip storage list <STORAGE_TYPE> [-q] [--debug]
List contents of the selected storage (7zip archive). STORAGE_TYPE is "history" or "violations".

$ usbrip storage open <STORAGE_TYPE> [-t | -l] [-e] [-n <NUMBER_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USER> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT> ...]]    [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [-c <COLUMN> [<COLUMN> ...]] [-q] [--debug]
Open selected storage (7zip archive). Behaves similary to the EVENTS OPEN submodule.

$ usbrip storage update <STORAGE_TYPE> [-a <ATTRIBUTE> [<ATTRIBUTE> ...]] [-e] [-n <NUMBER_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USER> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT> ...]] [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [--lvl <COMPRESSION_LEVEL>] [-q] [--debug]
Update storage — add USB events to the existing storage (7zip archive). COMPRESSION_LEVEL is a number in [0..9].

$ usbrip storage create <STORAGE_TYPE> [-a <ATTRIBUTE> [<ATTRIBUTE> ...]] [-e] [-n <NUMBE   R_OF_EVENTS>] [-d <DATE> [<DATE> ...]] [--user <USER> [<USER> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <MANUFACT> [<MANUFACT> ...]] [--serial <SERIAL> [<SERIAL> ...]] [--port <PORT> [<PORT> ...]] [--lvl <COMPRESSION_LEVEL>] [-q] [--debug]
Create storage — create 7zip archive and add USB events to it according to the selected options.

$ usbrip storage passwd <STORAGE_TYPE> [--lvl <COMPRESSION_LEVEL>] [-q] [--debug]
Change password of the existing storage.

# ---------- IDs ----------

$ usbrip ids search [--vid <VID>] [--pid <PID>] [--offline] [-q] [--debug]
Get extra details about a specific USB device by its <VID> and/or <PID> from the USB ID database.

$ usbrip ids download [-q] [--debug]
Update (download) the USB ID database.

Ayuda

Para obtener una lista de nombres de módulos, debes utilizar:

$ usbrip -h

Puedes obtener una lista de nombres de submódulos para un módulo específico, usando:

$ usbrip <module> -h

Para obtener una lista de todos los modificadores para un submódulo específico, utiliza:

$ usbrip <module> <submodule> -h

Ejemplos

  •  Mostrar el historial de eventos de todos los dispositivos USB, suprimiendo la salida del banner, los mensajes de información y la interacción del usuario (-q, –quiet), representados como una lista (-l, –list) con las últimas 100 entradas ( -n NUMBER, –number NUMBER):
$ usbrip events history -ql -n 100
  •  Mostrar el historial de eventos de los dispositivos USB externos ( -e, -external que en realidad estaban desconectados) representados como una tabla ( -t, –table) que contiene las columnas “Conectado”, “VID”, “PID”, “Desconectado” y “Número de serie” (-c COLUMN [COLUMN], –column COLUMN [COLUMN]) por fecha ( -d DATE [DATE …], –date DATE [DATE …]) con registros tomados de los archivos externos ( -f FILE [FILE …], –file FILE [FILE …]):
$ usbrip events history -et -c conn vid pid disconn serial -d "Dec  9" "Dec 10" -f /var/log/syslog.1 
/var/log/syslog.2.gz
  • Crear el historial de eventos de todos los dispositivos USB y redirigir la salida a un archivo para su posterior análisis. Cuando el flujo de salida es NOT es stdout terminal (| o > por ejemplo) no habría caracteres de escape ANSI (color) en la salida, así que siéntete libre de usarlo de esa manera. También ten en cuenta que usbrip usa algunos símbolos UNICODE, por lo que sería bueno convertir el archivo resultante a la codificación UTF-8 (con, encov  por ejemplo), así como cambiar los caracteres de nueva línea al estilo de Windows para la portabilidad (con, awk por ejemplo):
usbrip history events -t | awk '{ sub("$", "\r"); print }' > usbrip.out && enconv -x UTF8 usbrip.out

Observación:

Siempre puedes deshacerte de los caracteres de escape por sí mismo, incluso si ya tienes la salida en stdout. Para hacer eso, simplemente copia los datos de salida usbrip.out y agrega una instrucción awk más :

awk '{ sub("$", "\r"); gsub("\\x1B\\[[0-?]*[ -/]*[@-~]", ""); print }' usbrip.out && enconv -x
 UTF8 usbrip.out
  • Generar una lista de dispositivos USB confiables como un archivo JSON (trusted/auth.json) con los atributos “VID” y “PID” que contienen los primeros tres dispositivos conectados el 26 de septiembre:
$ usbrip events gen_auth trusted/auth.json -a vid pid -n 3 -d "Sep 26"
  • Buscar incidentes en el historial de eventos de los dispositivos USB externos en función de la lista de dispositivos USB confiables (trusted/auth.json) mediante el atributo “PID”, restringir los eventos resultantes a aquellos que tienen “Bob” como usuario, “EvilUSBManufacturador” como fabricante, “1234567890 “como número de serie y representar la salida como una tabla con las columnas “Conectado”, “VID” y “PID”:
$ usbrip events violations trusted/auth.json -a pid -et --user Bob --manufact EvilUSBManufacturer 
--serial 1234567890 -c conn vid pid
  • Buscar detalles sobre un dispositivo USB específico por su VID (–vid VID) y PID (–pid PID):
$ usbrip ids search --vid 0781 --pid 5580
  • Descargar la última versión de la base de datos usb_ids/usb.ids (la fuente está aquí):
$ usbrip ids download
Deja un comentario

Adquiere tu Membresía Anual Wiser

Adquiere tu Membresía Anual Wiser y adquiere grandes beneficios

Más información