Raspberry Pi es sin duda el mini-ordenador más conocido y utilizado en todo el mundo. Este mini-ordenador de tan solo 35 dólares está pensado para funcionar como un pequeño servidor local, pudiendo delegar en él todo tipo de tareas y configuraciones (servidor de archivos, NAS, reproductor multimedia, servidor de páginas web, router Tor, etc) lo que implica que, para evitar que usuarios no autorizados puedan acceder a ellos, debemos proteger correctamente el mini-servidor, aunque no siempre la seguridad depende directamente de nosotros.
Raspbian es el sistema operativo desarrollado y mantenido por los fabricantes de Raspberry Pi que permite utilizar un sistema potente y robusto como Debian optimizado para el hardware del Raspberry Pi. Aunque por lo general el sistema operativo es seguro, un fallo en el núcleo del propio sistema hace que Raspbian genera claves SSH predecibles en lugar de seguras.
Raspberry Pi genera las claves SSH antes de que haya información aleatoria suficiente
Cuando el sistema operativo de Raspberry Pi, generalmente Raspbian, arranca, el propio controlador de demonios de arranque (systemd en este caso) hace una llamada a /dev/urandom, fichero de información preudo-aleatoria con la que generar las claves únicas. Sin embargo, cuando el script /etc/rc2.d/S01regenerate_ssh_host_keys hace la llamada a este fichero, este aún no ha sido creado completamente por el sistema, por lo que no se puede cifrar la clave con una clave única aleatoria real, lo que da lugar a la creación de una clave SSH predecible.
El problema de seguridad se debe a que cuando se hace la llamada de la función, ni el fichero random ni el urandom tienen información suficiente para generar la clave aleatoria, por lo que se utilizan algoritmos y claves predecibles, comprometiendo así las claves SSH.
Los responsables de Raspbian ya son conscientes de este fallo de seguridad y actualmente se encuentran trabajando en lanzar un parche (que llegará a través de apt-get update) que lo solucione y permita generar el fichero de información aleatoria antes de la regeneración de claves aleatorias, sin embargo, este problema aún dará mucho de qué hablar en otros sistemas Linux.
La generación de claves aleatorias son la asignatura pendiente de Linux
En Linux generalmente se utilizan dos ficheros de información aleatoria: /dev/urandom y /dev/random. Por lo general se recomienda hacer uso del segundo fichero ya que la información de este es mucho más aleatoria que la del primero que, en cierto modo, puede ser predecible debido al algoritmo que utiliza para la generación de las claves. Sin embargo, este fichero necesita cierta información del usuario (uso del ratón, teclado, señales E/S del hardware, etc) para generar el fichero, por lo que hasta pasado un tiempo, el fichero no se encuentra disponible ni puede ser utilizado.
Para reducir los tiempos de espera, muchos programadores hacen uso del fichero urandom, un fichero que se encuentra disponible mucho antes que random, ya que su información se basa en el algoritmo PRNG (Generador de números pseudoaleatorios), lo que puede hacer que su información sea predecible y calculada de nuevo.
¿Qué opinas sobre el fallo de seguridad en la generación de claves SSH? ¿Linux debería reforzar su sistema de generación de información totalmente aleatoria?
Quizá te interese:
- Cómo crear contraseñas aleatorias desde un terminal
- LibreSSL no es tan seguro como OpenSSL en Linux
- Sección de tutoriales de Raspberry Pi