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.
BadUSB - Begriffsdefinition
Unter BadUSB versteht man Angriffe durch mit Schadsoftware präparierten USB-Geräten.
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 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-policyDer 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 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.confUSBGuard-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 usbguardDamit der Service auch automatisch beim Start des Rechners gestartet wird, ist noch folgender Befehl notwendig:
sudo systemctl enable usbguard.serviceUSB-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:50Jedes 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 -pSolltet 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 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.
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.