USBGuard zum Schutz vor (Bad-)USB-Angriffen einsetzen

Mit dem Linux-Tool USBGuard könnt ihr euren Rechner vor Angriffen mit präparierten USB-Geräten, sogenannten BadUSB-Angriffen, schützen. Hierfür nutzt USBGuard das im Linux-Kernel integrierte USB-Authorization-Feature. Durch White- & Blacklisting kann reglementiert werden, welche USB-Geräte freigegeben bzw. blockiert werden.

Wie ihr USBGuard installiert und verwendet, erfahrt ihr in diesem Beitrag.

Verwendete Software für diesen Beitrag
  • Ubuntu v19.10
  • USBGuard v0.7.4

BadUSB - Begriffsdefinition

Unter BadUSB versteht man Angriffe durch mit Schadsoftware präparierten USB-Geräten.

BadUSB ist ein Begriff, der von dem deutschen Forscher Team (Nohl, Krißler und Lell, SRLabs) geprägt wurde und bezeichnet USB-Geräte, deren Firmware verändert wurde, um einen Schadcode (Virus, Trojaner etc.) zu injizieren.

Ein präpariertes USB-Gerät kann im schlimmsten Fall alleine durch Einstecken in den Rechner, ohne jegliches Zutun des Benutzers und ohne, dass dieser etwas mitbekommt, Schadcode ausführen. Hierdurch könnte ein Angreifer das System gezielt manipulieren und z.B. in den DNS-Einstellungen einen kompromitierten DNS-Server hinterlegen.

USBGuard installieren & konfigurieren

Zum Installieren von USBGuard unter Ubuntu reicht folgender Befehl:

sudo apt install usbguard
Terminal / Konsole

Nach der Installation ist es empfehlenswert die Standardkonfiguration des USBGuard-Services etwas anzupassen. Hierzu öffnet ihr die Konfigurationsdatei usbguard-daemon.conf, die sich im Verzeichnis /etc/usbguard/ befindet. Damit die von euch festgelegten USBGuard-Regeln auch für USB-Geräte angewendet werden, die bereits vor dem Start des USBGuard-Service eingesteckt sind, müssen folgende zwei Einstellungen den Wert apply-policy gesetzt haben:

PresentDevicePolicy=apply-policy
PresentControllerPolicy=apply-policy
Datei: /etc/usbguard/usbguard-daemon.conf

Der nächste Schritt ist die Generierung eines initialen Regelsatzes (Policy). Dieser Regelsatz legt fest, dass alle aktuell am Rechner eingesteckten USB-Geräte vertrauenswürdig sind. Es ist wichtig das jetzt und somit vor dem Aktivieren von USBGuard zu tun, da ihr sonst ggf. das Problem habt, dass eure USB-Tastatur und USB-Maus blockiert werden.

Um nun den initialen Regelsatz zu erzeugen, wird folgender Befehl ausgeführt:

sudo usbguard generate-policy > rules.conf
Terminal / Konsole

Die generierte rules.conf ist anschließend ins Konfigurationsverzeichnis von USBGuard zu verschieben und die Dateirechte sind anzupassen:

sudo mv rules.conf /etc/usbguard/
sudo chmod 600 /etc/usbguard/rules.conf
sudo chown root:root /etc/usbguard/rules.conf
Terminal / Konsole

USBGuard-Service starten

USBGuard ist nun zwar installiert und konfiguriert, aber noch nicht aktiv. Um das zu ändern, wird mit folgendem Befehl der entsprechende Service gestartet:

sudo systemctl start usbguard
Terminal / Konsole

Damit der Service auch automatisch beim Start des Rechners gestartet wird, ist noch folgender Befehl notwendig:

sudo systemctl enable usbguard.service
Terminal / Konsole

USB-Geräte auflisten

Um sich alle aktuell eingesteckten und erkannten USB-Geräte anzeigen zu lassen, wird der Befehl usbguard mit dem Argument list-devices augerufen:

sudo usbguard list-devices
10: allow id 1d6b:0001 serial "0000:00:1d.2" name "UHCI Host Controller" hash "BKvEUUpIAivwthZQbvlpoMynYY8ZgHaR3v2nUupxuIE=" parent-hash "nKOQytSaVkGSK63fd4ahzmPpgWm2LNkuHaRNyk+xbkg=" via-port "usb4" with-interface 09:00:00
11: allow id 0627:0001 serial "28754-0000:00:1d.7-1" name "QEMU USB Tablet" hash "EtlU2vgBl90g+ZOGtuCehx0/K7P0dvr+L/XunuXLNXA=" parent-hash "9JszuPWESBEur6P34acG7ZtBUqRa6fRgdsma6hSNpOk=" via-port "1-1" with-interface 03:00:00
19: block id 18a5:0302 serial "07BB0435827F15C7" name "STORE N GO" hash "I+R8VhR9xpXJrFGGzpujShjbfOleum9EUcrGsKXCgRA=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-2" with-interface 08:06:50
Terminal / Konsole

Jedes USB-Gerät erhält eine eindeutige ID, über die es referenziert werden kann. Im vorliegenden Beispiel ist erkennbar, dass von den aktuell drei eingesteckten USB-Geräten zwei freigegeben und eines blockiert ist.

Dem Argument kann optional noch der Parameter -a mitgegeben werden, um nur die freigegebenen USB-Geräte anzuzeigen. Analog dazu gibt es den Parameter -b zur Auflistung aller blockierten USB-Geräte.

USB-Geräte freigeben & blockieren

Im vorherigen Listing ist ersichtlich, dass das USB-Speichergerät mit der ID 19 blockiert ist. Um es freizugeben, wird der Befehl allow-device verwendet. Standardmäßig ist die Freigabe nur temporär gültig. Temporär bedeutet, dass nach Abziehen und erneutem Einstecken des USB-Geräts dieses wieder blockiert ist. Um die Freigabe dauerhaft zu speichern, muss der Parameter -p gesetzt sein:

sudo usbguard allow-device 19 -p
Terminal / Konsole

Solltet ihr euch entschließen eine Freigabe rückgängig machen zu wollen, so könnt ihr das mihilfe des folgenden Befehls machen:

sudo usbguard block-device 19 -p
Terminal / Konsole

Alternativ besteht auch die Möglicheit reject-device zu verwenden, so dass das USB-Gerät auch direkt vom System entfernt wird.

GUI zum Verwalten verwenden

Ich selbst verwende kein GUI zum Verwalten, aber auch das ist (wohl irgendwie) möglich. Es gab wohl mal ein extra Paket namens usbguard-applet-qt. Der entsprechende Code scheint nun aber direkt in USBGuard integriert worden zu sein. Wobei ich da nicht ganz fündig geworden bin. Alternativ gibt es usbguard-notifier.

Weiterführende Informationen

Nähere Informationen zu USBGuard, z.B. wie ihr eigene feingranularere Regeln schreibt, findet ihr in der RedHat-Dokumentation.

Neben USBGuard gibt es z.B. auch noch usbauth. Hiermit lassen sich Regeln für die Freigabe und Blockierung von USB-Geräten noch differenzierter festlegen. So kann z.B. für ein USB-Gerät, dass sowohl als Tastatur als auch Speichergerät dient, festgelegt werden, dass nur die Tastatur-Funktionalität freigegeben ist.

Empfehlung Sicherheitsaspekte beim Anschluss von USB-Geräten

Im Rahmen einer wissenschaftlichen Arbeit unter dem Titel Sicherheitsaspekte beim Anschluss von USB-Geräten hat Stefan Koch usbauth entwickelt. Neben einer ausführlichen Beschreibung von usbauth, enthält die Arbeit auch einen Vergleich mit dem hier vorgestellten USBGuard.

Fazit

Mit USBGuard gibt es für Linux ein einfaches Tool zum Absichern des Rechners vor Angriffen mit "bösen" USB-Geräten. Auch wenn die Wahrscheinlichkeit eines solchen Angriffs im Alltag vielleicht eher gering ist, so schadet es meiner Meinung nach nicht. Eventuell ist es auch für Administratoren in Unternehmen interessant, so dass Mitarbeiter nicht einfach so private USB-Geräte an ihren Arbeitsrechnern anschließen können.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).