Utilizzare i dispositivi di archiviazione di massa solo su una porta USB selezionata - come?


14

Su una determinata porta USB, voglio solo accettare le funzionalità di archiviazione di massa USB e nient'altro. Nessun dispositivo HID, nessun adattatore Bluetooth, nessun convertitore RS232, niente. C'è un modo per farlo, ad esempio usando udev? Sono consapevole di poter scrivere una regola udev personalizzata per includere un driver per un determinato dispositivo o una determinata porta, ma posso in qualche modo escludere tutti gli altri driver? Sto cercando di consentire solo una classe di dispositivi, ovvero USB Mass Storage; ci sono una miriade di diversi modelli di dispositivi in ​​questa classe, e non so quale sarà la connessione alla porta (i client porteranno i propri, non c'è modo per me di influire su questo).

Le minacce del firmware USB riprogrammato peggioreranno solo nel prossimo futuro. Sto cercando di mitigarli per questo caso d'uso: ho un computer con periferiche USB collegate internamente (scheda di rete, periferiche specializzate, tastiera) e una porta USB rivolta al pubblico, che dovrebbe essere utilizzata solo per il trasferimento di file. Quindi, non posso inserire nella lista nera gli altri moduli USB del tutto; ma mi piacerebbe "disinfettare" quella particolare porta, in modo che collegare un diverso tipo di dispositivo non farebbe nulla.

Il case è fisicamente bloccato, in modo che solo questa specifica porta USB sia accessibile dall'esterno, e immischiarsi nella custodia o collegare il cavo della tastiera dovrebbe essere abbastanza sospetto da innescare una risposta di sicurezza fisica; inoltre, non mi aspetto che la maggior parte degli utenti sia attivamente maliziosa, ma mi aspetto che aumenti il ​​numero di portatori inconsapevoli di unità USB re-flash (com'era con le infezioni del settore di floppy boot di un tempo). Per quanto riguarda la sicurezza, non importa se l'utente porta il disco USB "armato" con intenzioni dannose, o semplicemente non sa che è "infetto".

Sono consapevole che qui la sicurezza perfetta non è fattibile e consentire agli utenti di interagire con il sistema in qualsiasi modo è rischioso, ma purtroppo devo bilanciare la sicurezza con l'usabilità: il computer deve essere utilizzabile dal cliente. Inoltre, con questo non sto cercando di difendermi da un attaccante mirato e determinato; piuttosto, lo sto usando come una delle tecniche di mitigazione, in modo che il sistema non sia a basso consumo.


2
Um. Sto solo imparando cose, quindi non sono sicuro che ciò possa aiutare, ma vedi se questo è rilevante: " linux-usb.org/FAQ.html " In particolare, scorri fino a "Perché vedo solo un dispositivo dal mio dispositivo di archiviazione multiuso "domanda e c'è una riga" Se non si desidera eseguire questa operazione per tutti i dispositivi SCSI, è possibile indicare al kernel di cercare un dispositivo specifico utilizzando; echo> / proc / scsi / scsi "scsi add-single-device 0 0 0 1 ""
Sergiy Kolodyazhnyy,

1
Vuoi solo che una porta specifica sia bloccata su USB Mass Storage?
Kaz Wolfe,

3
"Con l'accesso fisico, la battaglia per la sicurezza è persa." ~ Ogni utente Security.SE di sempre.
Kaz Wolfe,

1
@Piskvor Non ne sono sicuro, ma potresti avere più fortuna a trovare una risposta su security.stackexchange.com o su uno degli altri siti più avanzati / professionali.
Brian Z,

2
Forse questo può aiutare: irongeek.com/… , in particolare il 3.2 Blocco di Linux usando la sezione UDEV.
alci,

Risposte:


16

Sembra funzionare per me in Ubuntu 14.04 con 2 chiavi flash e telefono Android come memoria e adattatore di rete USB e webcam come altro tipo. (Non ho potuto provare a posizionare un hub USB)

  1. Controlla la porta USB (che è un dispositivo genitore per il dispositivo collegato)

    $ 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. Crea la regola udev, abbinando il nome del kernel della porta usb senza usb-storagedriver

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

    Consenti a tutti i dispositivi che hanno spazio di archiviazione come prima interfaccia (dispositivi compositi consentiti)

    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'"
    

    Blocca qualsiasi dispositivo che abbia un'interfaccia non di archiviazione (dispositivi compositi negati)

    In realtà, il telefono viene montato come modem /dev/ttyACM0 come KERNELS == "2-1.2: 1.1". Ciò non consentirà ai telefoni (dispositivi compositi) di essere montati solo i dispositivi di archiviazione semplici.

    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'"
    

    Blocca solo interfacce che non sono di archiviazione (dispositivi compositi consentiti solo come memoria)

    Dopo qualche ricerca su un modo per disabilitare solo le interfacce non consentite. Il disassamento del conducente sembra funzionare. Il mio telefono potrebbe essere utilizzato solo come memoria, non crea /dev/ttyACM0.

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

    udevadm control --reload-rules
    

Riferimenti:


Sconfiggimi ...
Kaz Wolfe,

@Whaaaaaat, sì authorizedfunziona anche, ma removeè un modo più pulito in quanto l'utente lo scollegherà comunque. Ho controllato le unità non montate, hanno ancora usb-storagecome driver per un nodo padre. Sono d'accordo, ci sono alcuni casi in cui usb-storagenon possono essere utilizzati. A proposito, :) si consumano troppi commenti (2min, 1min), è possibile modificare il primo (in <5min)
user.dz

@Whaaaaaat: quando stavo testando questo, il driver di archiviazione USB è stato caricato subito prima della creazione dei dispositivi a blocchi; il loro montaggio non era necessario.
Piskvor lasciò l'edificio il

@Piskvor Hai risposto alla tua domanda? In tal caso, dovresti contrassegnarlo come la risposta corretta e assegnare la tua ricompensa.
John Scott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.