Solo use dispositivos de almacenamiento masivo en un puerto USB seleccionado, ¿cómo?

14

En un puerto USB dado, solo quiero aceptar las capacidades de almacenamiento masivo USB, y nada más. Sin dispositivos HID, sin adaptadores Bluetooth, sin convertidores RS232, nada. ¿Hay alguna manera de hacer esto, por ejemplo, usando udev? Soy consciente de que puedo escribir una regla udev personalizada para incluir un controlador para un dispositivo determinado o un puerto determinado, pero ¿puedo excluir de alguna manera todos los demás controladores? Estoy tratando de permitir solo una clase de dispositivos, a saber, el almacenamiento masivo USB; Hay una miríada de modelos de dispositivos diferentes en esta clase, y no sé cuáles se conectarán al puerto (los clientes traerán los suyos, no hay forma de que esto afecte).

Las amenazas del firmware USB reprogramado solo empeorarán en el futuro previsible. Estoy tratando de mitigarlos para este caso de uso: tengo una computadora con periféricos USB conectados internamente (tarjeta de red, periféricos especializados, teclado) y un puerto USB público, que se supone que solo se usará para la transferencia de archivos. Por lo tanto, no puedo incluir en la lista negra los otros módulos USB por completo; pero me gustaría "desinfectar" ese puerto en particular, de modo que enchufar un tipo de dispositivo diferente no haría nada.

El estuche está bloqueado físicamente, por lo que solo se puede acceder a este puerto USB específico desde el exterior, y entrometerse con el estuche o empalmarlo en el cable del teclado debería ser lo suficientemente sospechoso como para desencadenar una respuesta de seguridad física; Además, no espero que la mayoría de los usuarios sean activamente maliciosos, pero sí espero que aumente el número de portadores involuntarios de unidades USB re-flasheadas (como sucedió con las infecciones del sector de arranque flexible de antaño). En cuanto a la seguridad, en realidad no importa si el usuario trae el disco USB "armado" con intención maliciosa, o simplemente no sabe que está "infectado".

Soy consciente de que la seguridad perfecta no es factible aquí, y permitir que el usuario interactúe con el sistema de cualquier manera es arriesgado, pero, por desgracia, necesito equilibrar la seguridad con la usabilidad: la computadora debe ser utilizable por el cliente. Además, no estoy tratando de defenderme de un atacante determinado y objetivo con esto; más bien, estoy usando esto como una de las técnicas de mitigación, para que el sistema no sea fácil de entender.

Piskvor salió del edificio
fuente
2
Um. Solo estoy aprendiendo cosas, así que no estoy seguro de si esto puede ayudar, pero vea si esto es relevante: " linux-usb.org/FAQ.html " Específicamente, vaya a "¿Por qué solo veo un dispositivo desde mi dispositivo de almacenamiento multipropósito? "pregunta, y hay línea" Si no desea hacer esto para todos los dispositivos SCSI, puede decirle al núcleo que busque un dispositivo específico usando; echo> / proc / scsi / scsi "scsi add-single-device 0 0 0 1 ""
Sergiy Kolodyazhnyy
1
¿Solo desea que un puerto específico se bloquee al almacenamiento masivo USB?
Kaz Wolfe
3
"Con el acceso físico, la batalla por la seguridad se pierde". ~ Todos los usuarios de Security.SE.
Kaz Wolfe el
1
@Piskvor No estoy seguro, pero es posible que tenga más suerte para encontrar una respuesta en security.stackexchange.com o en uno de los otros sitios más avanzados / orientados a profesionales.
Brian Z
2
Quizás esto pueda ayudar: irongeek.com/… , especialmente la sección 3.2 Bloqueo de Linux usando UDEV.
alci

Respuestas:

16

Parece que me funciona en Ubuntu 14.04 con 2 teclas flash y teléfono Android como almacenamiento y adaptador de red usb y cámara web como otro tipo. (No pude probar colocando un hub usb)

  1. Verifique el puerto USB (que es un dispositivo principal para el dispositivo conectado)

    $ 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. Cree una regla udev, que coincida con el nombre del kernel del puerto usb sin usb-storagecontrolador

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

    Permitir cualquier dispositivo que tenga almacenamiento como primera interfaz (dispositivos compuestos permitidos)

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

    Bloquee cualquier dispositivo que tenga una interfaz que no sea de almacenamiento (dispositivos compuestos denegados)

    En realidad, el teléfono se monta como módem /dev/ttyACM0como KERNELS == "2-1.2: 1.1". Esto no permitirá que los teléfonos (dispositivos compuestos) se monten, solo los dispositivos de almacenamiento simples lo harán.

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

    Bloquee solo las interfaces que no sean de almacenamiento (los dispositivos compuestos se permiten solo como almacenamiento)

    Después de alguna búsqueda sobre una forma de desactivar solo las interfaces no permitidas La desconexión del controlador parece funcionar. Mi teléfono solo se puede usar como almacenamiento, no se 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. Recargar las reglas de udev

    udevadm control --reload-rules
    

Referencias

user.dz
fuente
Golpeame ...
Kaz Wolfe
@Whaaaaaat, sí authorizedtambién funciona, pero removees una forma más limpia ya que el usuario lo desconectará de todos modos. He comprobado las unidades desmontadas, todavía tienen usb-storagecomo controlador para un nodo principal. Estoy de acuerdo, hay algunos casos en los usb-storageque no se pueden usar. Por cierto, :) consumes demasiados comentarios (2min, 1min), puedes editar el primero (en <5min)
user.dz
@Whaaaaaat: Cuando estaba probando esto, el controlador de almacenamiento usb se cargó justo antes de que se crearan los dispositivos de bloque; montarlos no fue necesario.
Piskvor salió del edificio el
@Piskvor ¿Respondió esto tu pregunta? Si es así, debe marcar esto como la respuesta correcta y otorgar su recompensa.
John Scott