Ein USB-Gerät kann sehr viel sein, so wie der Name Universal Serial Bus bereits andeutet: vom einfachen Speichermedium über ein Audiogerät bis hin zu einer Tastatur. Da aber viele Gerätetypen automatisch ins System eingebunden werden, was sehr oft gewünscht ist, lässt sich dieser Mechanismus auch missbrauchen. Im einfachsten Fall wird an einen nicht überwachten Rechner eine Tastatur angeschlossen und es werden blind Eingaben getätigt oder versierte Benutzer verwenden ein programmierbares USB-Gerät, das sich als ein beliebiges Gerät ausgeben und Aktionen starten kann.
So könnte zum Beispiel ein solches Gerät eine Tastatur simulieren, von der nach dem Anstecken in Windeseile die Eingaben kommen, um den Rechner auszuschalten oder Dateien ins Internet zu senden. Unter Umständen passiert das so schnell, dass man nur ein kurzes Aufblitzen sieht, aber nichts ernsthaft bemerkt. Das Gerät kann dann eine harmlose Funktion einnehmen, so dass es wie ein USB-Stick aussieht. Für den kreativen Umgang mit Technik sind so einige Spielereien möglich.
USB-Geräte nur noch manuell freigeben
Bei Rechnern, die man also nicht ständig im Blick hat – wie zum Beispiel Server oder Rechner an öffentlichen Plätzen für Präsentationen –, sollte man die automatische Einbindung von USB-Geräten unterbinden. Bei Linux kann man dies frühzeitig über die Kernel-Parameter tun, so dass das System von Beginn an, nicht bereitwillig alle USB-Geräte integriert. In der Datei /etc/default/grub trägt man hierfür unter GRUB_CMDLINE_LINUX die Option usbcore.authorized_default=0 ein.
Jedes Gerät, ob USB-Hub oder Maus, muss dann über authorized unterhalb von
/sys/bus/usb/devices freigegeben werden; einfach echo 1 >
/sys/bus/usb/devices/DEVICE/authorized
. Über udev kann man dies aber auch
automatisieren, so dass spezielle Geräte oder auch ganze Geräteklassen
zugelassen werden, denn udev bietet hier auch schöne Möglichkeiten der
Filterung. Ein Beispiel einer Regel zur Freigabe einer Apple-Tastatur für
/etc/udev/rules.d/99-apple-keyboard.rules:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="0250", ATTR{authorized}="1"
Die Filterkriterien kann man zum Beispiel mit udevadm info
/sys/bus/usb/devices/usb1
oder udevadm info --attribute-walk /dev/sdc
oder
mit lsusb bestimmen. Dabei sei auf einen wichtigen Unterschied zwischen
SUBSYSTEM und SUBSYSTEM__S__ bzw. DRIVER und DRIVER__S__ hingewiesen:
Mit S bezieht sich auf das Gerät und alle daran angeschlossen Geräte, ohne S
betrifft nur dieses eine Gerät. Den Unterschied kann man gut mit
--attribute-walk
erkennen.
Ob die Einstellungen wie gewünscht passen, kann man mit udevadm test
/sys/bus/usb/devices/1-1
prüfen.
Konfiguration für qemu:
# Qemu USB Tablet
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0627", ATTRS{idProduct}=="0001", ATTR{authorized}="1"