¿Cómo manejar las contraseñas de root para un número de cajas de Linux incrustadas?

3

Digamos que creo un dispositivo que tiene una caja Linux incorporada (por ejemplo, una Raspberry Pi). Después de iniciar, inicia la aplicación principal, que está diseñada para proporcionar la IU para el dispositivo.

La forma más sencilla de producir más, es simplemente configurar todo en un dispositivo específico, configurar los usuarios, privilegios, configurar el proceso de inicio, instalar mi software y luego crear una imagen de la tarjeta SD. La instalación de esa imagen en otras tarjetas SD me permite obtener clones idénticos del dispositivo original, que ahora puedo enviar.

Sin embargo, esto puede llevar a una vulnerabilidad grave. Como todos los usuarios tendrán exactamente la misma contraseña de root, todo lo que necesita es que un usuario la descubra (tener acceso a los dispositivos físicos cuenta, por lo que sé, para una seguridad completamente comprometida), y que un usuario podría usar esta conocimiento para comprometer los dispositivos de otros usuarios (se espera que el dispositivo se use mientras esté conectado a una red)

¿Cómo se puede mitigar este riesgo?

El software también necesita conocer la contraseña de root (ya que necesita configurar algunos registros de hardware para los periféricos), por lo que significa que tengo que compilar el archivo ejecutable para cada uno de los dispositivos físicos por separado con contraseñas de root independientes ¿Los usuarios en cada dispositivo por separado, luego logran copiar el software correcto en la máquina correcta? Esto parece una pesadilla de gestión.

    
pregunta vsz 14.04.2016 - 11:03
fuente

2 respuestas

2

Considera construir tu aplicación de manera que el acceso al hardware y otros las acciones de alto privilegio las realiza un servicio que se ejecuta como usuario privilegiado (trate de evitar el uso de root) y tiene una interfaz estable y bien definida, mientras que toda la otra lógica se realiza sin estos privilegios. Esto reducirá la superficie de ataque y no es necesario almacenar contraseñas sin hash en el dispositivo.

Otra forma simplificada podría ser crear un binario minimalista que maneje la interacción de hardware a la que podría llamar desde su aplicación. Este binario podría tener el permiso setuid para el conjunto raíz como @ paj28 ya sugerido. Sin embargo, esto tendrá algún impacto en el rendimiento de todo el proceso, ya que la llamada a un binario externo genera más sobrecarga.

Como @SmokeDispenser ya indicó que es una buena práctica fortalecer la cuenta de root deshabilitando el inicio de sesión local y remoto y generando al azar contraseñas individuales para cada dispositivo. Esto se puede hacer usando un script de configuración.

    
respondido por el Noir 14.04.2016 - 12:38
fuente
2

Hay dos enfoques principales:

Obliga al usuario a elegir una contraseña

El dispositivo se envía sin contraseña. El proceso de configuración obliga al usuario a elegir una contraseña. Esto puede significar que el dispositivo no está protegido hasta que el usuario lo haga, pero probablemente no sea un gran problema.

Enviar con una contraseña aleatoria

Después de clonar la imagen en una tarjeta SD, actualice la contraseña de root a un valor aleatorio. Debe comunicar la contraseña al usuario, que a menudo se realiza imprimiéndola en una etiqueta y adjuntándola dentro de la caja.

Usted menciona que el software necesita conocer la contraseña de root. Eso se puede evitar; por ejemplo, podría hacer que su software sea root-set.

    
respondido por el paj28 14.04.2016 - 13:26
fuente

Lea otras preguntas en las etiquetas