
CVE-2018-15473 - Opensshenum es un enumerador de usuarios que explota un bug de OpenSsh.
Opensshenum es un enumerador de usuarios de OpenSSH que permite verificar una lista arbitraria de nombres de usuario contra un servidor OpenSSH, para conocer aquellos realmente presentes en esa máquina remota. Este programa explota un bug (corregido en julio de 2018) que ha demostrado ser efectivo al menos desde OpenSSH 2.3.0 (publicado en noviembre de 2000).
Escribí el exploit a partir de Tssh, un cliente SSH 2 que escribí en C++11 desde cero basándome en los RFCs.
Para más información, lea aquí:
http://seclists.org/oss-sec/2018/q3/124
Este problema recibió CVE-2018-15473.
Este código se ha publicado con fines informativos y educativos. La intrusión en sistemas y servicios sin la autorización del propietario es ilegal. El mal uso de la información y el software en este repositorio puede dar lugar a cargos penales contra el perpetrador del delito. Cualquier acción o actividad relacionada con el material contenido en este Repositorio de Git es únicamente responsabilidad suya. El autor no será considerado responsable en caso de que se presenten cargos penales contra cualquier persona que haga un uso indebido de la información o del software de este sitio web para infringir la ley.
El programa está diseñado para usarse en un entorno *nix y se ha probado en varias distribuciones de Linux y OS X:
usando, como compilador, uno de la siguiente lista:
y, como servidor ssh, uno de los siguientes:
La única dependencia externa es la librería OpenSSL, utilizada para las funciones criptográficas. Podría introducir alternativas a OpenSSL en las próximas versiones. Este programa está diseñado para usarse con una versión de OpenSSL igual o superior a:
(Esto significa que en OS X es obligatoria una actualización).
Para compilar el programa, se necesitan estas herramientas/librerías:
Procesa la lista de usuarios pasada por tubería, ejemplo:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
donde user.txt es un archivo que contiene una lista de usuarios, uno por línea, y dummy_cert es una clave generada con el comando ssh-keygen de OpenSSH ( el directorio de las claves es ~/.ssh por defecto).
Se puede usar un programa para generar la lista:
printf "xxx\ngabriel" | ./src/opensshenum -i dummy_rsa localhost
xxx:NOK
gabriel:OK
Consulte la página man incluida en esta versión.
Se ha añadido la capacidad de escaneo de puertos SSH: ahora opensshenum puede escanear todos los puertos asociados a una dirección para encontrar instancias de SSH escuchando en puertos diferentes del 22 y realizar el exploit solo en esos puertos verificados. Esta funcionalidad se puede usar de forma independiente, permitiendo obtener solo una lista de los puertos asociados a SSH, sin ejecutar ningún ataque.
Ejemplo:
opensshenum -s -n -t2 -m22221 -M22225 -r'.*OpenSSH' -idummy_rsa my_imaginary_website.com
escaneará los puertos (-s) entre 22221 y 22225 (ambos incluidos), realizando solo el escaneo (-n), con tiempo de espera de 2 segundos (-t), esperando una cadena de saludo que contenga la cadena OpenSSH, usando una clave pública llamada idummy_rsa (recomiendo generar una clave solo para este tipo de operaciones) y usando como destino my_imaginary_website.com. Más información en la página man.
Se incluye un script alfa que usa GNU Parallel (parallenum.sh) como prueba de concepto de la reducción del tiempo de escaneo alcanzable dividiendo el rango de puertos a escanear en subrangos, cada uno de pertinencia de un proceso específico. Esto obviamente produce mucho ruido. Para reducir el ruido se puede usar el parámetro -t con ese fin.
Función de huella digital, útil para identificar automáticamente el tipo de SO (por ejemplo, si se omite la cadena de saludo) y los servicios con una base de datos de usuarios/combinaciones de usuarios. La base de datos se crea a partir de archivos *.lst recopilados en un directorio. Cada archivo *.lst tiene el nombre <os_name_or_service>.lst, ejemplos:
ubuntu_17_10.lst aix.lst proprietary_ftp.lst
La base de datos, un archivo csv, tiene el formato:
user_1;os_or_service_1; ... ;os_or_service_n ... user_m;os_or_service_1; ... ;os_or_service_n
La base de datos se puede crear a partir de los archivos *.lst usando la utilidad createdb, presente en el directorio ./utils, especificando el directorio de los *.lst, ejemplo:
cd utils make ./createdb ../lists/
Para solicitar la huella digital, use la opción -F con el archivo de la base de datos, ejemplo:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost