Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
debian-ssh — PRNG Predecible de Debian OpenSSL (CVE-2008-0166) | Kitploit
Herramientas/GitHubGitHub/g0tmi1k/debian-ssh
ReconocimientoAtaques de ContraseñasAnálisis de VulnerabilidadesExplotaciónRecopilación de InformaciónCriptografíaPruebas de Penetración
GitHubg0tmi1k/debian-ssh

debian-ssh

PRNG Predecible de Debian OpenSSL (CVE-2008-0166)

Ver Repositorio
410109hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

PRNG predecible de OpenSSL de Debian


Enlaces

URL original: http://metasploit.com/users/hdm/tools/debian-openssl/ (Espejo)

Exploit:

  • https://www.exploit-db.com/exploits/5622/ (Perl)
  • https://www.exploit-db.com/exploits/5720/ (Python)
  • https://www.exploit-db.com/exploits/5632/ (Ruby)

Herramienta recomendada: Crowbar (capaz de realizar fuerza bruta sobre claves SSH)

Método de prueba: ssh-vulnkey y dowkd.pl

CVE (CVE-2008-0166):

  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0166
  • https://security-tracker.debian.org/tracker/CVE-2008-0166
  • https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-0166
  • https://www.cvedetails.com/cve/CVE-2008-0166

Información

El fallo

El 13 de mayo de 2008, el proyecto Debian anunció que Luciano Bello había encontrado una interesante vulnerabilidad en el paquete OpenSSL que distribuían. El fallo en cuestión fue causado por la eliminación de la siguiente línea de código de md_rand.c

root@kitploit:~
	MD_Update(&m,buf,j);
	[ .. ]
	MD_Update(&m,buf,j); /* purify complains */

Estas líneas fueron eliminadas porque hacían que las herramientas Valgrind y Purify generaran advertencias sobre el uso de datos no inicializados en cualquier código que estuviera enlazado con OpenSSL. Puede ver uno de esos informes enviados al equipo de OpenSSL aquí. Eliminar este código tuvo el efecto secundario de paralizar el proceso de generación de la semilla del PRNG de OpenSSL. En lugar de mezclar datos aleatorios para la semilla inicial, el único valor "aleatorio" que se utilizaba era el ID del proceso actual. En la plataforma Linux, el ID de proceso máximo predeterminado es 32.768, lo que da como resultado un número muy pequeño de valores de semilla utilizados para todas las operaciones del PRNG.

El impacto

Todas las claves SSL y SSH generadas en sistemas basados en Debian (Ubuntu, Kubuntu, etc.) entre septiembre de 2006 y el 13 de mayo de 2008 pueden verse afectadas. En el caso de las claves SSL, todos los certificados generados deberán recrearse y enviarse a la autoridad de certificación para que los firme. Cualquier clave de autoridad de certificación generada en un sistema basado en Debian deberá regenerarse y revocarse. Todos los administradores de sistemas que permitan a los usuarios acceder a sus servidores mediante SSH y autenticación con clave pública deben auditar esas claves para comprobar si alguna de ellas fue creada en un sistema vulnerable. Cualquier herramienta que dependiera del PRNG de OpenSSL para proteger los datos que transfería puede ser vulnerable a un ataque fuera de línea. Cualquier servidor SSH que utilice una clave de host generada por un sistema con fallos puede tener su tráfico descifrado, y un ataque de intermediario sería invisible para los usuarios. Esta falla es problemática porque incluso los sistemas que no utilizan el software de Debian deben ser auditados por si se está utilizando alguna clave creada en un sistema Debian. Los proyectos Debian y Ubuntu han publicado un conjunto de herramientas para identificar claves vulnerables. Puede encontrarlas enumeradas en la sección de referencias más abajo.

Los juguetes

Las listas negras publicadas por Debian y Ubuntu demuestran lo pequeño que es el espacio de claves. Al crear una nueva clave OpenSSH, solo hay 32.767 resultados posibles para una arquitectura, tamaño de clave y tipo de clave determinados. La razón es que el único dato "aleatorio" que utiliza el PRNG es el ID del proceso. Para generar las claves reales que coinciden con estas listas negras, necesitamos un sistema que contenga los binarios correctos para la plataforma objetivo y una forma de generar claves con un ID de proceso específico. Para resolver el problema del ID de proceso, escribí una biblioteca compartida que se puede precargar y que devuelve un valor especificado por el usuario para la llamada getpid() de libc.

El siguiente paso fue construir un entorno chroot que contuviera los binarios y las bibliotecas reales de un sistema vulnerable. Tomé una instantánea de un sistema Ubuntu en la red local. Puede encontrar el entorno chroot completo aquí. Para generar una clave OpenSSH con un tipo, tamaño de bits e ID de proceso específicos, escribí un script de shell que podía ejecutarse dentro del entorno chroot. Puede encontrar este script de shell aquí. Este script se coloca en el directorio raíz del sistema de archivos de Ubuntu extraído. Para generar una clave, este script se invoca con la siguiente línea de comandos:

root@kitploit:~
# chroot ubunturoot /dokeygen.sh 1 -t dsa -b 1024 -f /tmp/dsa_1024_1

Esto generará una nueva clave DSA de OpenSSH de 1024 bits con el valor de getpid() devolviendo siempre el número "1". Ahora tenemos nuestra primera clave SSH pregenerada. Si continuamos este proceso para todos los PIDs hasta 32.767 y luego lo repetimos para claves RSA de 2048 bits, habremos cubierto los rangos de claves válidos para sistemas x86 que ejecutan la versión con errores de la biblioteca OpenSSL. Con este conjunto de claves, podemos comprometer cualquier cuenta de usuario que tenga una clave vulnerable listada en el archivo authorized_keys. Este conjunto de claves también es útil para descifrar una sesión SSH capturada previamente, si el servidor SSH estaba utilizando una clave de host vulnerable. Los enlaces a los conjuntos de claves pregeneradas para claves DSA de 1024 bits y RSA de 2048 bits (x86) se proporcionan en la sección de descargas más abajo.

Lo interesante de estas claves es cómo están vinculadas al ID de proceso. Dado que la mayoría de los sistemas basados en Debian utilizan valores de ID de proceso secuenciales (que se incrementan desde el arranque del sistema y se reinician cuando es necesario), el ID de proceso de una clave determinada también puede indicar cuánto tiempo después del arranque del sistema se generó esa clave. Si observamos el inverso de eso, podemos determinar qué claves usar durante un ataque de fuerza bruta según el objetivo que estemos atacando. Al intentar adivinar una clave generada en el arranque (como una clave de host SSH), las claves con valores de PID inferiores a 200 serían las mejores opciones para un ataque de fuerza bruta. Al atacar una clave generada por un usuario, podemos asumir que la mayoría de las claves de usuario válidas se crearon con un ID de proceso mayor que 500 y menor que 10.000. Esta optimización puede acelerar significativamente un ataque de fuerza bruta a una cuenta de usuario remota a través del protocolo SSH.

En un futuro cercano, este sitio se actualizará para incluir una herramienta de fuerza bruta que pueda usarse para acceder rápidamente a cualquier cuenta SSH que permita la autenticación con clave pública mediante una clave vulnerable. Las claves en los archivos de datos a continuación utilizan la siguiente convención de nombres:

root@kitploit:~
 / Algorithm / Bits / Fingerprint-ProcessID
   and
 / Algorithm / Bits / Fingerprint-ProcessID.pub

Para obtener el archivo de clave privada de cualquier clave pública determinada, necesita conocer la huella digital de la clave. La forma más sencilla de obtener esta huella digital es mediante el siguiente comando:

root@kitploit:~
 $ ssh-keygen -l -f targetkey.pub
 2048 c6:7b:14:fa:ae:b6:89:e6:67:17:ee:04:17:b0:ec:4e targetkey.pub

Si observamos la clave pública en un editor, también podemos deducir que el tipo de clave es RSA. Para localizar la clave privada de esta clave pública, necesitamos extraer los archivos de datos y buscar un archivo llamado:

root@kitploit:~
 rsa/2048/**c67b14faaeb689e66717ee0417b0ec4e-26670**

En el ejemplo anterior, la huella digital se representa en hexadecimal sin los dos puntos, y el ID de proceso se indica como "26670". Si queremos autenticarnos en un sistema vulnerable que utiliza esta clave pública para la autenticación, ejecutaríamos el siguiente comando:

root@kitploit:~
 $ ssh -i rsa/2048/c67b14faaeb689e66717ee0417b0ec4e-26670 root@targetmachine

Preguntas frecuentes

P: ¿Cuánto tiempo tomó generar estas claves?

R: Usé 31 núcleos Xeon a 2,33 GHz. Tomó dos horas generar las claves DSA de 1024 bits y RSA de 2048 bits para x86. Las claves RSA de 4096 bits tardaron unas 6 horas en generarse. La generación de claves RSA de 8192 bits tomaría unas 100 horas al ritmo actual y probablemente se detendrá antes de completarse.


P: ¿Compartirá su código para distribuir la generación de claves entre múltiples procesadores?

R: No. El código está escrito específicamente para este clúster y está demasiado mal escrito como para que valga la pena limpiarlo.


P: ¿Cuánto tiempo se tarda en vulnerar una cuenta de usuario SSH con estas claves?

R: Esto depende de la velocidad de la red y de la configuración del servidor SSH. Debería ser posible probar las 32.767 claves de DSA-1024 y RSA-2048 en un par de horas, pero tenga cuidado con los scripts anti-fuerza-bruta en el servidor objetivo.


P: Uso claves RSA de 16384 bits, ¿se pueden romper?

R: Sí, solo es cuestión de tiempo y potencia de procesamiento. El conjunto de claves RSA de 8192 bits tomaría unas 3.100 horas de tiempo de CPU para generar las 32.767 claves (100 horas en los 31 núcleos que estoy usando ahora). Imagino que el conjunto de claves RSA de 16384 bits se acercaría a las 100.000 horas de tiempo de CPU. Una cosa a tener en cuenta es que la mayoría de las claves se encuentran dentro de un rango mucho más pequeño, basado en la semilla del ID de proceso, y no sería necesario generar el conjunto completo para cubrir la mayoría de las claves de usuario (la mayoría de las claves están dentro de los primeros 3.000 IDs de proceso).

Copyright © 2008 H D Moore


Descargar herramienta