Massenspeichergeräte nur an einem ausgewählten USB-Port nutzen – wie?

Massenspeichergeräte nur an einem ausgewählten USB-Port nutzen – wie?

An einem bestimmten USB-Port möchte ich nur USB-Massenspeicherfunktionen akzeptieren und sonst nichts. Keine HID-Geräte, keine Bluetooth-Adapter, keine RS232-Konverter, nichts. Gibt es eine Möglichkeit, dies beispielsweise mit udev zu tun? Ich weiß, dass ich eine benutzerdefinierte udev-Regel füreinschließlicheinen Treiber für ein bestimmtes Gerät oder einen bestimmten Port, aber kann ich irgendwieausschließenalle anderen Fahrer? Ich versuche, nur einen zuzulassenKlassevon Geräten, nämlich USB-Massenspeicher; es gibt unzählige unterschiedliche Gerätemodelle in dieser Klasse und ich weiß nicht, welche an den Port angeschlossen werden (die Kunden bringen ihre eigenen mit, ich habe darauf keinen Einfluss).

Gefahren durch neu programmierte USB-Firmwarewerden in absehbarer Zukunft nur noch schlimmer werden. Ich versuche, sie für diesen Anwendungsfall zu mildern: Ich habe einen Computer mit intern angeschlossenen USB-Peripheriegeräten (Netzwerkkarte, spezielle Peripheriegeräte, Tastatur) und einen öffentlich zugänglichen USB-Anschluss, der nur für die Dateiübertragung verwendet werden soll. Ich kann die anderen USB-Module also nicht gänzlich auf die schwarze Liste setzen; aber ich möchte diesen bestimmten Anschluss „bereinigen“, sodass das Anschließen eines anderen Gerätetyps nichts bewirkt.

Das Gehäuse ist physisch verschlossen, sodass nur dieser eine spezielle USB-Anschluss von außen zugänglich ist. Manipulationen am Gehäuse oder das Anschließen des Tastaturkabels sollten verdächtig genug sein, um eine physische Sicherheitsreaktion auszulösen. Außerdem gehe ich nicht davon aus, dass die meisten Benutzer aktiv böswillig handeln, aber ich gehe davon aus, dass die Zahl der unwissenden Träger von neu geflashten USB-Laufwerken zunehmen wird (wie es bei den Infektionen des Bootsektors von Disketten früher der Fall war). Was die Sicherheit betrifft, spielt es keine Rolle, ob der Benutzer die „waffenfähige“ USB-Festplatte mit böswilliger Absicht mitbringt oder einfach nicht weiß, dass sie „infiziert“ ist.

Ich bin mir bewusst, dass perfekte Sicherheit hier nicht möglich ist und dass die Interaktion des Benutzers mit dem System inbeliebigDer Weg ist riskant - aber leider muss ich Sicherheit und Benutzerfreundlichkeit gegeneinander abwägen: Der Computer muss vom Client verwendet werden können. Außerdem versuche ich damit nicht, mich gegen einen gezielten, entschlossenen Angreifer zu verteidigen; ich verwende dies vielmehr als eine der Abwehrtechniken, damit das System kein leichtes Unterfangen ist.

Antwort1

Bei mir scheint es unter Ubuntu 14.04 mit 2 Flash-Schlüsseln und einem Android-Telefon als Speicher und einem USB-Netzwerkadapter und einer Webcam als anderem Typ zu funktionieren.(Ich konnte das Platzieren eines USB-Hubs nicht testen)

  1. Überprüfen Sie den USB-Anschluss (der ein übergeordnetes Gerät für das angeschlossene Gerät ist).

    $ udevadm info --name=/dev/sdc --attribute-walk
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0':
        KERNELS=="2-1.2:1.0"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb-storage"
        ATTRS{bInterfaceClass}=="08"
        ATTRS{bInterfaceSubClass}=="06"
        ATTRS{bInterfaceProtocol}=="50"
        ATTRS{bNumEndpoints}=="02"
        ATTRS{supports_autosuspend}=="1"
        ATTRS{bAlternateSetting}==" 0"
        ATTRS{bInterfaceNumber}=="00"
    
  2. Erstellen Sie eine Udev-Regel, die dem Kernelnamen des USB-Ports ohne usb-storageTreiber entspricht.

    /etc/udev/rules.d/90-remove-non-storage.rules

    Erlauben Sie jedes Gerät, das über einen Speicher als erste Schnittstelle verfügt(Zusammengesetzte Geräte erlaubt)

    KERNELS=="2-1.2:1.0", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
    

    Blockieren Sie alle Geräte, die über eine andere Schnittstelle als einen Speicher verfügen. (Verbundgeräte abgelehnt)

    Tatsächlich wird das Telefon als Modem mit /dev/ttyACM0KERNELS=="2-1.2:1.1" gemountet. Dadurch können keine Telefone (zusammengesetzte Geräte) gemountet werden, sondern nur einfache Speichergeräte.

    KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo 1 > /sys/bus/usb/drivers/hub/2-1\:1.0/port2/device/remove'"
    

    Blockieren Sie nur Schnittstellen, die keine Speicherschnittstellen sind. (Verbundgeräte sind nur als Speicher zulässig)

    Nach einiger Suche nach einer Möglichkeit, nur nicht erlaubte Schnittstellen zu deaktivieren, scheint die Trennung der Treiber zu funktionieren. Mein Telefon konnte nur als Speicher verwendet werden, es erstellt keine /dev/ttyACM0.

    KERNELS=="2-1.2:1.[0-9]*", DRIVERS!="usb-storage", RUN+="/bin/sh -c 'echo -n %k >/sys%p/driver/unbind'"
    
  3. Udev-Regeln neu laden

    udevadm control --reload-rules
    

Verweise:

verwandte Informationen