
Verfolgung der Historie von USB-Ereignissen unter GNU/Linux
usbrip (abgeleitet von „USB Ripper“, nicht „USB R.I.P.“) ist ein einfaches Forensik-Tool mit einer Befehlszeilenschnittstelle, mit dem Sie USB-Geräte-Artefakte (d. h. den USB-Ereignisverlauf) auf Linux-Maschinen verfolgen können.
Inhaltsverzeichnis:
usbrip ist ein kleines Software-Werkzeug, das Linux-Protokolldaten analysiert: journalctl-Ausgabe oder Inhalte von /var/log/syslog* (bzw. /var/log/messages*). Basierend auf den gesammelten Daten kann usbrip Tabellen mit USB-Ereignisverläufen erstellen, die folgende Spalten enthalten:
Darüber hinaus kann es auch:
-s* Geschützte Speicher (7-Zip-Archive) erstellen, um USB-Ereignisse automatisch zu sichern und mit Hilfe des Cron-Schedulers zu sammeln.Weg 1. Installation mit pip:
~$ sudo -H python3 -m pip install -U usbrip
~$ usbrip -h
Weg 2. Installation der aktuellsten Version mit install.sh (empfohlen, zusätzliche Funktionen verfügbar):
~$ sudo apt install python3-venv p7zip-full -y
~$ git clone https://github.com/snovvcrash/usbrip && cd usbrip
~/usbrip$ sudo -H installers/install.sh
~/usbrip$ cd
~$ usbrip -h

Docker (*NUR DEMO!*)
~$ docker run --rm -it snovvcrash/usbrip
usbrip unterstützt zwei Arten von Zeitstempeln zum Parsen von Systemprotokolldateien:
"%b %d %H:%M:%S", z.B. "Jan 1 00:00:00"). Diese Art von Zeitstempel liefert keine Information über das Jahr."%Y-%m-%dT%H:%M:%S.%f%z", z.B. "1970-01-01T00:00:00.000000-00:00").Wenn journalctl installiert ist, brauchen Sie sich keine Sorgen zu machen, da es Zeitstempel automatisch umwandeln kann. Andernfalls kann die gewünschte Syslog-Struktur erreicht werden, indem das Format RSYSLOG_FileFormat in der rsyslog-Konfiguration festgelegt wird.
/etc/rsyslog.conf aus:$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
.conf-Datei für usbrip hinzu:~$ echo '$ActionFileDefaultTemplate RSYSLOG_FileFormat' | sudo tee /etc/rsyslog.d/usbrip.conf
~$ sudo rm -f /var/log/syslog* /var/log/messages*
~$ sudo systemctl restart rsyslog
Zunächst prüft usbrip, ob eine Möglichkeit besteht, Systemereignisse mit journalctl als der portabelsten Option auszugeben. Wenn nicht, sucht es nach und parst die Systemprotokolldateien /var/log/syslog* oder /var/log/messages*.
storage-Modul verwendet)Der Einfachheit halber nehmen wir an, dass alle Befehle, bei denen das Präfix ~/usbrip$ erscheint, im Verzeichnis ~/usbrip ausgeführt werden, das durch das Klonen des Git-Repositorys entsteht:
~$ git clone https://github.com/snovvcrash/usbrip
~$ cd usbrip
~/usbrip$ pwd
install.shNeben der Installation mit pip kann usbrip auch mit dem benutzerdefinierten Skript installers/install.sh installiert werden.
Bei Verwendung von install.sh werden einige zusätzliche Funktionen verfügbar:
storage-Modul verwenden – einen Cron-Job einrichten, um USB-Ereignisse nach einem Zeitplan zu sichern (ein Beispiel für einen Cron-Job finden Sie in usbrip/cron/usbrip.cron).⚠️ Warnung: Wenn Sie die Cron-Planung verwenden, sollten Sie die Crontab mit sudo crontab -e konfigurieren, um die Ausführung des storage update-Untermoduls als root zu erzwingen. Die Speicher-Passwörter werden in /var/opt/usbrip/usbrip.ini aufbewahrt und sind standardmäßig nur für root zugänglich.
Um usbrip mit install.sh zu installieren, verwenden Sie:
~/usbrip$ sudo -H installers/install.sh [-l/--local] [-s/--storages]
~/usbrip$ cd
~$ usbrip -h
-l aktiviert ist, werden Python-Abhängigkeiten aus lokalen .tar-Paketen (Verzeichnis 3rdPartyTools) anstelle von PyPI gelöst.-s aktiviert ist, wird nicht nur das usbrip-Projekt installiert, sondern es werden auch die Liste der vertrauenswürdigen USB-Geräte, die Verlaufs- und die Verstoß-Speicher erstellt.Nach Abschluss der Installation können Sie das Verzeichnis ~/usbrip löschen.
Bei Installation mit install.sh verwendet usbrip die folgenden Pfade:
/opt/usbrip/ – Hauptverzeichnis des Projekts./var/opt/usbrip/log/ – usbrip Cron-Protokolle./var/opt/usbrip/storage/ – USB-Ereignisspeicher (history.7z und violations.7z, während des Installationsprozesses erstellt)./var/opt/usbrip/trusted/ – Listen vertrauenswürdiger USB-Geräte (auth.json, während des Installationsprozesses erstellt)./var/opt/usbrip/usbrip.ini – usbrip-Konfigurationsdatei (enthält Passwörter für 7-Zip-Speicher)./usr/local/bin/usbrip – Symlink zum Skript /opt/usbrip/venv/bin/usbrip.Cron-Jobs können wie folgt eingerichtet werden:
~/usbrip$ sudo crontab -l > tmpcron && echo "" >> tmpcron
~/usbrip$ cat usbrip/cron/usbrip.cron | tee -a tmpcron
~/usbrip$ sudo crontab tmpcron
~/usbrip$ rm tmpcron
uninstall.shDas Skript installers/uninstall.sh entfernt usbrip und alle Installationsartefakte von Ihrem System.
Um usbrip zu deinstallieren, verwenden Sie:
~/usbrip$ sudo installers/uninstall.sh [-a/--all]
-a aktiviert ist, werden nicht nur das usbrip-Projektverzeichnis gelöscht, sondern auch alle Speicher und usbrip-Protokolle.Vergessen Sie nicht, den Cron-Job zu entfernen, falls Sie einen eingerichtet haben.
# ---------- BANNER ----------
~$ usbrip banner
usbrip-Banner anzeigen.
# ---------- EVENTS ----------
~$ usbrip events history [-t | -l] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [-c <SPALTE> [<SPALTE> ...]] [-f <DATEI> [<DATEI> ...]] [-q] [--debug]
USB-Ereignisverlauf anzeigen.
~$ usbrip events open <DUMP.JSON> [-t | -l] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [-c <SPALTE> [<SPALTE> ...]] [-q] [--debug]
USB-Ereignis-Dump öffnen.
~$ sudo usbrip events genauth <AUSGABE_AUTH.JSON> [-a <ATTRIBUT> [<ATTRIBUT> ...]] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [-f <DATEI> [<DATEI> ...]] [-q] [--debug]
Eine Liste vertrauenswürdiger (autorisierter) USB-Geräte erstellen.
~$ sudo usbrip events violations <EINGABE_AUTH.JSON> [-a <ATTRIBUT> [<ATTRIBUT> ...]] [-t | -l] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [-c <SPALTE> [<SPALTE> ...]] [-f <DATEI> [<DATEI> ...]] [-q] [--debug]
USB-Verstoßereignisse basierend auf der Liste vertrauenswürdiger Geräte anzeigen.
# ---------- STORAGE ----------
~$ sudo usbrip storage list <SPEICHER_TYP> [-q] [--debug]
Inhalt des ausgewählten Speichers auflisten. SPEICHER_TYP ist entweder "history" oder "violations".
~$ sudo usbrip storage open <SPEICHER_TYP> [-t | -l] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [-c <SPALTE> [<SPALTE> ...]] [-q] [--debug]
Ausgewählten Speicher öffnen. Verhält sich ähnlich wie das Untermodul EVENTS OPEN.
~$ sudo usbrip storage update <SPEICHER_TYP> [EINGABE_AUTH.JSON] [-a <ATTRIBUT> [<ATTRIBUT> ...]] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [--lvl <KOMPRIMIERUNGSSTUFE>] [-q] [--debug]
Speicher aktualisieren – USB-Ereignisse zum bestehenden Speicher hinzufügen. KOMPRIMIERUNGSSTUFE ist eine Zahl in [0..9].
~$ sudo usbrip storage create <SPEICHER_TYP> [EINGABE_AUTH.JSON] [-a <ATTRIBUT> [<ATTRIBUT> ...]] [-e] [-n <ANZAHL_EREIGNISSE>] [-d <DATUM> [<DATUM> ...]] [--host <HOST> [<HOST> ...]] [--vid <VID> [<VID> ...]] [--pid <PID> [<PID> ...]] [--prod <PROD> [<PROD> ...]] [--manufact <HERSTELLER> [<HERSTELLER> ...]] [--serial <SERIENNR> [<SERIENNR> ...]] [--port <PORT> [<PORT> ...]] [--lvl <KOMPRIMIERUNGSSTUFE>] [-q] [--debug]
Speicher erstellen – 7-Zip-Archiv erstellen und USB-Ereignisse gemäß den ausgewählten Optionen hinzufügen.
~$ sudo usbrip storage passwd <SPEICHER_TYP> [--lvl <KOMPRIMIERUNGSSTUFE>] [-q] [--debug]
Passwort des bestehenden Speichers ändern.
# ---------- IDs ----------
~$ usbrip ids search [--vid <VID>] [--pid <PID>] [--offline] [-q] [--debug]
Zusätzliche Details zu einem bestimmten USB-Gerät anhand seiner <VID> und/oder <PID> aus der USB-ID-Datenbank abrufen.
~$ usbrip ids download [-q] [--debug]
Die USB-ID-Datenbank aktualisieren (herunterladen).
Um eine Liste der Modulnamen zu erhalten, verwenden Sie:
~$ usbrip -h
Um eine Liste der Untermodulnamen für ein bestimmtes Modul zu erhalten, verwenden Sie:
~$ usbrip <MODUL> -h
Um eine Liste aller Schalter für ein bestimmtes Untermodul zu erhalten, verwenden Sie:
~$ usbrip <MODUL> <UNTERMODUL> -h
Zeige den Ereignisverlauf aller USB-Geräte an, unterdrücke Bannerausgabe, Informationsmeldungen und Benutzerinteraktion (-q, --quiet), dargestellt als Liste (-l, --list) mit den letzten 100 Einträgen (-n ANZAHL, --number ANZAHL):
~$ usbrip events history -ql -n 100
Zeige den Ereignisverlauf der externen USB-Geräte (-e, --external, die tatsächlich getrennt wurden) an, dargestellt als Tabelle (-t, --table) mit den Spalten Verbunden, VID, PID, Getrennt und Seriennummer (-c SPALTE [SPALTE ...], --column SPALTE [SPALTE ...]), gefiltert nach Datum (, ) und PID (), wobei die Protokolle aus externen Dateien stammen (, ):
-d DATUM [DATUM ...]--date DATUM [DATUM ...]--pid <PID> [<PID> ...]-f DATEI [DATEI ...]--file DATEI [DATEI ...]~$ usbrip events history -et -c conn vid pid disconn serial -d '1995-09-15' '2018-07-01' --pid 1337 -f /var/log/syslog.1 /var/log/syslog.2.gz
👽 Hinweis: Es gibt etwas zu beachten, wenn Sie mit Filtern arbeiten. Es stehen 4 Arten der Filterung zur Verfügung: nur externe USB-Ereignisse (Geräte, die leicht herausgezogen werden können, -e), nach Datum (-d), nach Feldern (--host, --vid, --pid, --product, --manufact, --serial, --port) und nach Anzahl der Einträge, die Sie als Ausgabe erhalten (-n). Wenn Sie verschiedene Filter gleichzeitig anwenden, erhalten Sie das folgende Verhalten: Zuerst werden die Filter extern und nach Datum angewendet, dann sucht usbrip nach den angegebenen Feldwerten in der Schnittmenge der letzten beiden Filter, und am Ende wird die Ausgabe auf die Anzahl gekürzt, die Sie mit der Option -n festgelegt haben. Betrachten Sie es also als Schnittmenge für die Filterung extern und nach Datum und als Vereinigung für die Filterung nach Feldern. Hoffentlich ergibt das Sinn.
Erstelle den Ereignisverlauf aller USB-Geräte und leite die Ausgabe zur weiteren Analyse in eine Datei um. Wenn der Ausgabestrom KEIN Terminal-Stdout ist (| oder > z. B.), gibt es keine ANSI-Escape-Zeichen (Farbe) in der Ausgabe. Sie können es also auf diese Weise verwenden. Beachten Sie auch, dass usbrip einige UNICODE-Symbole verwendet. Daher ist es sinnvoll, die resultierende Datei in die UTF-8-Kodierung zu konvertieren (z. B. mit enconv) sowie die Zeilenumbrüche aus Portabilitätsgründen in den Windows-Stil zu ändern (z. B. mit awk):
~$ usbrip events history -t | awk '{ sub("$", "\r"); print }' > usbrip.out && enconv -x UTF8 usbrip.out
👽 Hinweis: Sie können die Escape-Zeichen jederzeit selbst entfernen, auch wenn Sie die Ausgabe bereits auf stdout erhalten haben. Kopieren Sie dazu die Ausgabedaten in usbrip.out und wenden Sie eine weitere awk-Anweisung an:
~$ awk '{ sub("$", "\r"); gsub("\\x1B\\[[0-?]*[ -/]*[@-~]", ""); print }' usbrip.out && enconv -x UTF8 usbrip.out
Erstelle eine Liste vertrauenswürdiger USB-Geräte als JSON-Datei (trusted/auth.json) mit den Attributen VID und PID, die die ersten drei Geräte enthält, die am 30. November 1984 verbunden waren:
~$ sudo usbrip events genauth trusted/auth.json -a vid pid -n 3 -d '1984-11-30'
⚠️ Warnung: Es gibt Fälle, in denen verschiedene USB-Sticks identische Seriennummern haben können. Dies kann auf einen Herstellungsfehler zurückzuführen sein, oder schwarze Hacker konnten den Speicherchip des Laufwerks neu beschreiben, der sich als nicht einmalig programmierbar herausstellte und so weiter... Jedenfalls: „Kein System ist sicher“. usbrip behandelt solche Fälle bisher nicht intelligent, d. h. es behandelt ein Paar von Geräten mit identischen Seriennummern (falls vorhanden) in Bezug auf die Liste vertrauenswürdiger Geräte und das genauth-Modul als dasselbe Gerät.
Suche im Ereignisverlauf der externen USB-Geräte nach Verstößen basierend auf der Liste vertrauenswürdiger USB-Geräte (trusted/auth.json) nach PID-Attribut, beschränke die resultierenden Ereignisse auf solche, die Bob-PC als Hostnamen, EvilUSBManufacturer als Hersteller und 0123456789 als Seriennummer haben, und stelle die Ausgabe als Tabelle mit den Spalten Verbunden, VID und PID dar:
~$ sudo usbrip events violations trusted/auth.json -a pid -et --host Bob-PC --manufact EvilUSBManufacturer --serial 0123456789 -c conn vid pid
Suche nach Details zu einem bestimmten USB-Gerät anhand seiner VID (--vid VID) und PID (--pid PID):
~$ usbrip ids search --vid 0781 --pid 5580
Lade die neueste Version der usb.ids Datenbank herunter:
~$ usbrip ids download