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.
Respuestas:
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)
Verifique el puerto USB (que es un dispositivo principal para el dispositivo conectado)
Cree una regla udev, que coincida con el nombre del kernel del puerto usb sin
usb-storage
controlador/etc/udev/rules.d/90-remove-non-storage.rules
Permitir cualquier dispositivo que tenga almacenamiento como primera interfaz (dispositivos compuestos permitidos)
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/ttyACM0
como 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.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
.Recargar las reglas de udev
Referencias
fuente
authorized
también funciona, peroremove
es una forma más limpia ya que el usuario lo desconectará de todos modos. He comprobado las unidades desmontadas, todavía tienenusb-storage
como controlador para un nodo principal. Estoy de acuerdo, hay algunos casos en losusb-storage
que no se pueden usar. Por cierto, :) consumes demasiados comentarios (2min, 1min), puedes editar el primero (en <5min)