Verwenden Sie Massenspeichergeräte nur an einem ausgewählten USB-Anschluss - wie?

14

An einem bestimmten USB-Anschluss möchte ich nur USB-Massenspeicherfunktionen akzeptieren und ansonsten nichts. Keine HID-Geräte, keine Bluetooth-Adapter, keine RS232-Konverter, nichts. Gibt es eine Möglichkeit, dies zB mit udev zu tun? Ich bin mir bewusst , dass ich eine benutzerdefinierte udev - Regel für schreiben , einschließlich einem Treiber für ein bestimmtes Gerät oder einem bestimmten Port, aber kann ich irgendwie ausschließen alle anderen Fahrer? Ich versuche, nur eine Klasse von Geräten zuzulassen , nämlich USB-Massenspeicher; Es gibt unzählige verschiedene Gerätemodelle in dieser Klasse, und ich weiß nicht, welche mit dem Port verbunden werden sollen (Clients bringen ihre eigenen mit, ich kann dies nicht beeinflussen).

Bedrohungen durch neu programmierte USB-Firmware werden sich in absehbarer Zeit noch verschlimmern. Ich versuche, sie für diesen Anwendungsfall zu entschärfen: 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. Daher kann ich die anderen USB-Module nicht auf eine schwarze Liste setzen. Aber ich möchte diesen bestimmten Port "bereinigen", damit das Anschließen eines anderen Gerätetyps nichts bewirkt.

Das Gehäuse ist physisch verriegelt, sodass nur auf diesen einen bestimmten USB-Anschluss von außen zugegriffen werden kann. Ein Eingriff in das Gehäuse oder ein Spleißen in das Tastaturkabel sollte verdächtig genug sein, um eine physische Sicherheitsreaktion auszulösen. Darüber hinaus erwarte ich nicht, dass die meisten Benutzer aktiv böswillig sind, aber ich erwarte, dass die Anzahl der unwissenden Datenträger für neu geflashte USB-Laufwerke zunimmt (wie es früher bei Infektionen des Disketten-Bootsektors der Fall war). Was die Sicherheit anbelangt, spielt es keine Rolle, ob der Benutzer die "bewaffnete" USB-Festplatte mit böswilliger Absicht mitbringt oder einfach nicht weiß, dass sie "infiziert" ist.

Mir ist bewusst, dass perfekte Sicherheit hier nicht möglich ist und dass es riskant ist , dem Benutzer auf irgendeine Weise die Interaktion mit dem System zu ermöglichen. Leider muss ich die Sicherheit mit der Benutzerfreundlichkeit in Einklang bringen: Der Computer muss vom Client aus bedienbar sein. Außerdem versuche ich damit nicht, mich gegen einen gezielten, entschlossenen Angreifer zu verteidigen. Vielmehr verwende ich dies als eine der Abschwächungstechniken, damit das System keine niedrig hängenden Früchte trägt.

Piskvor
quelle
2
Äh. Ich lerne gerade etwas, bin mir also nicht sicher, ob dies hilfreich sein kann, aber prüfen Sie, ob dies relevant ist: " linux-usb.org/FAQ.html " Scrollen Sie insbesondere zu "Warum sehe ich nur ein Gerät von meinem Mehrzweckspeichergerät? "Frage, und es gibt eine Zeile" Wenn Sie dies nicht für alle SCSI-Geräte tun möchten, können Sie den Kernel anweisen, mit; echo> / proc / scsi / scsi "scsi add-single-device 0 0 nach einem bestimmten Gerät zu suchen 0 1 ""
Sergiy Kolodyazhnyy
1
Sie möchten nur, dass ein bestimmter Port für den USB-Massenspeicher gesperrt wird?
Kaz Wolfe
3
"Mit physischem Zugriff ist der Kampf um die Sicherheit verloren." ~ Jeder Security.SE-Benutzer.
Kaz Wolfe
1
@Piskvor Ich bin mir nicht sicher, aber Sie haben vielleicht mehr Glück, wenn Sie eine Antwort auf security.stackexchange.com oder einer der fortgeschritteneren / professionelleren Websites finden.
Brian Z
2
Vielleicht kann dies helfen: irongeek.com/… , insbesondere der Abschnitt 3.2 Linux mithilfe von UDEV sperren.
alci

Antworten:

16

Es scheint für mich in Ubuntu 14.04 mit 2 Flash-Tasten und Android-Handy als Speicher und USB-Netzwerkadapter und Webcam als andere Art zu arbeiten. (Ich konnte nicht testen, einen USB-Hub zu platzieren)

  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 Namen des USB-Port-Kernels ohne usb-storageTreiber entspricht

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

    Alle Geräte zulassen, die über Speicher als erste Schnittstelle verfügen (Verbundgeräte zulässig)

    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 keine Speicherschnittstelle haben (Verbundgeräte abgelehnt)

    Eigentlich wird Phone als Modem /dev/ttyACM0als KERNELS == "2-1.2: 1.1" gemountet. Dadurch können keine Telefone (Verbundgeräte) bereitgestellt 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'"
    

    Nur Schnittstellen sperren, die kein Speicher sind (Verbundgeräte sind nur als Speicher zulässig)

    Nach einiger Suche nach einer Möglichkeit, nur nicht erlaubte Schnittstellen zu deaktivieren. Das Entbinden des Treibers scheint 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:

user.dz
quelle
Schlagen Sie mich zu ...
Kaz Wolfe
@Whaaaaaat, yep authorizedfunktioniert auch, ist aber removeeine sauberere Methode, da der Benutzer es trotzdem ausstecken wird. Ich habe nicht gemountete Laufwerke überprüft, sie haben immer noch einen usb-storageTreiber für einen übergeordneten Knoten. Ich stimme zu, es gibt einige Fälle, in denen usb-storagemöglicherweise nicht verwendet werden. Übrigens :) Du verbrauchst zu viele Kommentare (2min, 1min), du könntest den ersten (in <5min) bearbeiten
user.dz
@Whaaaaaat: Als ich das getestet habe, wurde der USB-Speichertreiber geladen, bevor die Blockgeräte erstellt wurden. Eine Montage war nicht erforderlich.
Piskvor
@Piskvor Hat dies Ihre Frage beantwortet? Wenn ja, sollten Sie dies als die richtige Antwort markieren und Ihr Kopfgeld gewähren.
John Scott