Ein kleiner Desktop-Agent für USBGuard unter Linux Mint / Cinnamon.
Neue und noch nicht bekannte USB-Geräte werden zunächst durch USBGuard blockiert. Anschließend erscheint ein Desktop-Dialog, über den das Gerät blockiert, einmalig freigegeben oder dauerhaft angelernt werden kann.
Gedacht ist das insbesondere als zusätzliche Schutzmaßnahme gegen BadUSB-, HID-Injection- und O.MG-Cable-Angriffe.
USBGuard übernimmt die eigentliche Kontrolle der USB-Geräte.
Die Policy ist so konfiguriert, dass unbekannte Geräte standardmäßig blockiert werden:
ImplicitPolicyTarget=block
InsertedDevicePolicy=apply-policyusbguard-notify überwacht anschließend die IPC-Events von USBGuard:
usbguard watchWird ein neues Gerät mit
event=Insert
target=block
erkannt, erscheint ein Zenity-Dialog.
Der Benutzer kann zwischen drei Aktionen wählen:
| Aktion | Verhalten |
|---|---|
| Blockieren | Das Gerät bleibt blockiert |
| Einmal erlauben | Gerät wird für die aktuelle Verbindung freigegeben |
| Dauerhaft erlauben | Eine permanente USBGuard-Regel wird angelegt |
Enter, ESC oder das Schließen des Fensters lassen das Gerät
standardmäßig blockiert.
USBGuard Notify wertet die USB-Interface-Klassen des Gerätes aus.
Wird eine HID-Schnittstelle der USB-Klasse 03 erkannt, erscheint
zusätzlich eine Warnung:
⚠ WARNUNG: HID-Schnittstelle erkannt!
Dieses Gerät kann Tastatur- oder Mauseingaben erzeugen.
Beispiele:
03:01:01 HID-Tastatur
03:01:02 HID-Maus
03:00:00 HID-Gerät
08:06:50 Massenspeicher
09:xx:xx USB-Hub
01:xx:xx Audio
0e:xx:xx Video/Kamera
Damit ist beispielsweise ein vermeintlicher USB-Datenträger auffällig, wenn er zusätzlich ein HID-Keyboard anmeldet.
Getestet unter:
- Linux Mint Cinnamon
- USBGuard
- Zenity
Benötigte Pakete:
sudo apt install usbguard zenityflock wird ebenfalls verwendet und ist normalerweise Bestandteil von
util-linux.
Vor dem Aktivieren von USBGuard sollte zunächst eine Policy für die bereits angeschlossenen und vertrauenswürdigen Geräte erzeugt werden.
sudo usbguard generate-policy > /tmp/usbguard-rules.confPolicy kontrollieren:
cat /tmp/usbguard-rules.confAnschließend übernehmen:
sudo install \
-m 0600 \
-o root \
-g root \
/tmp/usbguard-rules.conf \
/etc/usbguard/rules.confWichtige Einstellungen in:
/etc/usbguard/usbguard-daemon.conf
sind beispielsweise:
RuleFile=/etc/usbguard/rules.conf
ImplicitPolicyTarget=block
PresentDevicePolicy=apply-policy
InsertedDevicePolicy=apply-policy
IPCAllowedUsers=root
IPCAllowedGroups=root plugdevUSBGuard danach aktivieren:
sudo systemctl enable --now usbguardDer Desktop-Benutzer muss auf die USBGuard-IPC-Schnittstelle zugreifen dürfen.
Bei einer Konfiguration über die Gruppe plugdev kann geprüft werden:
idDie Ausgabe sollte plugdev enthalten.
Falls nicht:
sudo usermod -aG plugdev "$USER"Danach einmal ab- und wieder anmelden.
Alternativ können die USBGuard-eigenen IPC-ACLs verwendet werden.
USBGuard muss sich ohne sudo abfragen lassen:
usbguard list-devicesDanach:
usbguard watchBeim Einstecken eines unbekannten Gerätes sollte beispielsweise erscheinen:
[device] PresenceChanged: id=50
event=Insert
target=block
device_rule=block id 04c5:2028 \
serial "..." \
name "iodd2531" \
via-port "4-3" \
with-interface 08:06:50
Repository klonen oder das Script nach
~/.local/bin/usbguard-notify
kopieren.
Anschließend ausführbar machen:
chmod 700 ~/.local/bin/usbguard-notifyManueller Test:
~/.local/bin/usbguard-notifyDas Script wartet anschließend auf USBGuard-Events.
Ein unbekanntes USB-Gerät einstecken.
USBGuard sollte das Gerät zunächst blockieren und der Dialog sollte automatisch erscheinen.
Autostart-Verzeichnis anlegen:
mkdir -p ~/.config/autostartDatei erstellen:
~/.config/autostart/usbguard-notify.desktop
Inhalt:
[Desktop Entry]
Type=Application
Name=USBGuard Notify
Comment=USBGuard Desktop-Abfrage für neue USB-Geräte
Exec=/home/USER/.local/bin/usbguard-notify
Terminal=false
X-GNOME-Autostart-enabled=trueUSER durch den jeweiligen Benutzernamen ersetzen.
Nach der nächsten Desktop-Anmeldung wird usbguard-notify
automatisch gestartet.
Das Script verwendet flock, damit immer nur eine Instanz läuft.
Dadurch führt beispielsweise
~/.local/bin/usbguard-notifynicht zu einer zweiten Instanz, wenn der Agent bereits über den Desktop-Autostart gestartet wurde.
Prüfen:
pgrep -af usbguard-notifyDie Aktion
Einmal erlauben
führt intern aus:
usbguard allow-device DEVICE_IDDie Entscheidung wird nicht dauerhaft in die USBGuard-Policy geschrieben.
Wird das Gerät später erneut eingesteckt, wird es wieder blockiert und erneut abgefragt.
Die Aktion
Dauerhaft erlauben
führt aus:
usbguard allow-device -p DEVICE_IDUSBGuard fügt dadurch eine permanente Allow-Regel zur Policy hinzu.
Die Regeln können angezeigt werden mit:
usbguard list-rulesBeispielsweise:
usbguard list-rules | grep -i ioddAlle bekannten Geräte:
usbguard list-devicesNur erlaubte Geräte:
usbguard list-devices --allowedNur blockierte Geräte:
usbguard list-devices --blockedUSBGuard kann über das systemd-Journal überwacht werden:
sudo journalctl -u usbguardLive:
sudo journalctl -u usbguard -fWenn der FileAudit-Backend aktiviert ist:
AuditBackend=FileAudit
AuditFilePath=/var/log/usbguard/usbguard-audit.logkann das Audit-Log beispielsweise mit
sudo tail -f /var/log/usbguard/usbguard-audit.logbeobachtet werden.
Dort werden unter anderem folgende Ereignisse protokolliert:
Device.Insert
Device.Remove
Policy.Device.Update
sowie der jeweilige Zustand:
target.new='allow'
target.new='block'
USBGuard Notify selbst blockiert keine USB-Geräte.
Die Sicherheitsentscheidung erfolgt bereits vorher durch USBGuard:
USB-Gerät
│
▼
Linux Kernel
│
▼
USBGuard
│
├── bekannte Policy → allow
│
└── unbekannt → block
│
▼
usbguard-notify
│
┌─────────┼─────────┐
▼ ▼ ▼
Block einmal dauerhaft
erlauben erlauben
Dadurch ist das neue Gerät bereits blockiert, bevor der Benutzer den Desktop-Dialog bestätigt.
Das ist insbesondere bei HID-Injection wichtig: Ein neu angeschlossenes Keyboard sollte nicht erst Tastatureingaben ausführen können und anschließend vom Desktop-Agenten blockiert werden.
Ein O.MG Cable oder anderes BadUSB-Gerät kann sich gegenüber dem Betriebssystem unter anderem als USB-HID-Gerät präsentieren.
Ein typisches HID-Keyboard besitzt beispielsweise:
03:01:01
USBGuard Notify markiert deshalb alle Schnittstellen mit USB-Klasse
03
besonders.
Dabei handelt es sich jedoch nicht um eine automatische Erkennung eines bestimmten Angriffswerkzeugs.
USBGuard kann lediglich die vom USB-Gerät präsentierten Eigenschaften und Interfaces kontrollieren.
Ein USB-Massenspeicher könnte beispielsweise erscheinen als:
Name: iodd2531
USB-ID: 04c5:2028
Seriennummer: XXXXXXXX
Port: 4-3
Schnittstellen:
Massenspeicher (08:06:50)
Ein Gerät mit zusätzlicher HID-Funktion könnte dagegen zeigen:
Schnittstellen:
Massenspeicher (08:06:50)
HID-Tastatur (03:01:01)
⚠ WARNUNG: HID-Schnittstelle erkannt!
Dieses Gerät kann Tastatur- oder Mauseingaben erzeugen.
Die initiale USBGuard-Policy sollte sorgfältig geprüft werden.
Insbesondere fest eingebaute Geräte wie
- interne Kamera
- Bluetooth-Controller
- Fingerprint-Reader
- Dockingstation
- interne USB-Hubs
sollten bereits vor Aktivierung der restriktiven Policy berücksichtigt werden.
Andernfalls können diese Geräte nach dem Start von USBGuard blockiert werden.
usbguard-notify/
├── README.md
├── usbguard-notify
└── docs/
└── usbguard-notify.png
Eine Lizenz kann je nach gewünschter Veröffentlichung ergänzt werden. Für ein kleines Open-Source-Projekt bietet sich beispielsweise die MIT-Lizenz an.