El script proporcionado es un exploit para la vulnerabilidad CVE-2024-6387 en OpenSSH 9.2p1, identificado como regreSSHion. Esta vulnerabilidad se aprovecha de una condición de carrera en el manejador de señales SIGALRM
de OpenSSH en sistemas basados en glibc. A continuación, te explico en detalle cómo funciona este exploit.
Descripción del exploit
- Configuración inicial: El script comienza definiendo varios parámetros importantes como direcciones base potenciales de glibc (para evitar la aleatorización del espacio de direcciones – ASLR) y un payload de shellcode para obtener una shell (
/bin/sh
). - Conexión y Handshake: Se establece una conexión con el servidor SSH en el IP y puerto proporcionados, se envía la versión SSH, se recibe la versión del servidor y se envía y recibe el paquete de inicialización de intercambio de claves (KEX_INIT).
- Preparación del Heap:
- Tcache Chunks: Se envían paquetes para alocar y liberar varios chunks en la
tcache
del servidor. - Grandes y Pequeños Holes: Se crean varios pares de grandes (~8KB) y pequeños (320B) agujeros en la memoria.
- Estructuras Falsas: Se envían datos que simulan estructuras de archivos falsos para manipular el heap del servidor.
- Cadena Grande: Se envía una cadena grande (~256KB) para asegurarse de que los agujeros estén en los bins de malloc correctos.
- Tiempo de Paquete Final:
- Se mide el tiempo de respuesta del servidor antes y después de una función crítica para estimar el tiempo de parsing.
- Se ajusta este tiempo para cronometrar el envío del paquete final en el momento justo.
- Intento de Condición de Carrera:
- Se crea y envía un paquete de clave pública SSH manipulado que incluye el shellcode.
- Se intenta sincronizar el envío del último byte del paquete justo antes de que el manejador de
SIGALRM
del servidor dispare, explotando la condición de carrera.
Detalles de Implementación
- Direcciones Base de Glibc:
uint64_t GLIBC_BASES[] = { 0xb7200000, 0xb7400000 };
Estas direcciones deben ajustarse según el sistema objetivo.
- Shellcode:
unsigned char shellcode[] = "\x31\xc0" "\x50" "\x68\x2f\x2f\x73\x68" "\x68\x2f\x62\x69\x6e" "\x89\xe3" "\x50" "\x53" "\x89\xe1" "\x99" "\xb0\x0b" "\xcd\x80";
Este shellcode abre una shell (/bin/sh
).
- Conexión y Handshake:
int sock = setup_connection(ip, port);
perform_ssh_handshake(sock);
Estas funciones configuran la conexión TCP y completan el proceso de handshake SSH.
- Preparación del Heap:
prepare_heap(sock);
Se envían varios paquetes para manipular el heap del servidor SSH.
- Tiempo de Paquete Final:
time_final_packet(sock, &parsing_time);
Se mide el tiempo de parsing del servidor para cronometrar el envío del paquete final.
- Intento de Condición de Carrera:
attempt_race_condition(sock, parsing_time, glibc_base);
Se intenta explotar la condición de carrera enviando un paquete de clave pública manipulado.
Protección Contra esta Vulnerabilidad
Para protegerse contra esta vulnerabilidad, se pueden tomar las siguientes medidas:
- Actualización de Software: Asegúrate de estar utilizando la última versión de OpenSSH, ya que los desarrolladores pueden haber lanzado un parche para esta vulnerabilidad.
- Configuración Segura de SSH:
- Limitar el acceso SSH a usuarios específicos.
- Usar autenticación basada en clave pública y deshabilitar la autenticación por contraseña.
- Monitoreo y Detección:
- Implementar sistemas de detección de intrusos (IDS) para monitorear actividades sospechosas.
- Analizar logs de SSH para detectar intentos de explotación.
- Endurecimiento del Sistema:
- Utilizar técnicas de endurecimiento como ASLR, NX (No-eXecute) y stack canaries.
- Configurar límites de recursos y tiempo de conexión en el servidor SSH para mitigar condiciones de carrera.
Este exploit es un ejemplo complejo que requiere un conocimiento profundo de la seguridad y programación en C. La explotación de este tipo de vulnerabilidades puede tener consecuencias legales serias, por lo que debe ser realizada únicamente en entornos controlados y con permisos adecuados.
Para protegerte de la vulnerabilidad CVE-2024-6387 en OpenSSH, puedes seguir estos pasos:
Actualización y Parches
- Actualiza OpenSSH: Asegúrate de que tu servidor esté ejecutando la última versión de OpenSSH, ya que los desarrolladores suelen lanzar parches para corregir vulnerabilidades conocidas.
- Actualiza glibc: Mantén la biblioteca glibc actualizada, ya que las vulnerabilidades en esta biblioteca también pueden ser explotadas.
Configuración de Seguridad en OpenSSH
- Limita los Usuarios Permitidos: Modifica el archivo de configuración
/etc/ssh/sshd_config
para restringir el acceso solo a usuarios específicos usandoAllowUsers
oAllowGroups
. - Desactiva el Acceso Root: Asegúrate de que
PermitRootLogin
esté configurado comono
en/etc/ssh/sshd_config
para evitar que el usuario root se conecte directamente. - Usa Autenticación de Clave Pública: Deshabilita la autenticación basada en contraseña configurando
PasswordAuthentication no
y usando únicamente claves públicas para la autenticación. - Configura Timeouts Cortos: Reduce el tiempo de gracia para la autenticación configurando
LoginGraceTime
en un valor bajo, como30s
.
Fortalecimiento del Sistema
- Implementa SELinux o AppArmor: Usa SELinux o AppArmor para restringir las acciones que los procesos pueden realizar, añadiendo una capa adicional de seguridad.
- Usa firewalls: Configura
iptables
,ufw
o cualquier firewall disponible para restringir el acceso al puerto SSH (22) solo desde direcciones IP confiables.
Monitoreo y Respuesta
- Monitorea los Registros: Revisa regularmente los registros de SSH ubicados en
/var/log/auth.log
para detectar intentos de acceso sospechosos. - Implementa IDS/IPS: Usa sistemas de detección y prevención de intrusiones como Fail2ban, que puede bloquear automáticamente direcciones IP sospechosas después de varios intentos fallidos.
Buenas Prácticas Adicionales
- Usa Autenticación de Dos Factores (2FA): Implementa 2FA para añadir una capa adicional de seguridad en el acceso SSH.
- Auditoría de Seguridad Regular: Realiza auditorías de seguridad periódicas para identificar y corregir vulnerabilidades en el sistema.
Ejemplo de Configuración de sshd_config
A continuación, un ejemplo de algunas configuraciones en /etc/ssh/sshd_config
:
PermitRootLogin no
PasswordAuthentication no
AllowUsers usuario1 usuario2
LoginGraceTime 30s
Herramientas
- Fail2ban: Para instalar y configurar Fail2ban:
sudo apt-get install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Luego, configura las reglas en /etc/fail2ban/jail.local
.
Siguiendo estos pasos y manteniendo una buena práctica de seguridad, podrás reducir significativamente el riesgo de ser víctima de la explotación de la vulnerabilidad CVE-2024-6387.
Si un atacante logra explotar la vulnerabilidad CVE-2024-6387 en OpenSSH, podría realizar varias acciones peligrosas, especialmente si obtiene acceso con privilegios de root. Aquí tienes las cinco cosas más peligrosas que un atacante podría hacer:
1. Control Completo del Sistema
El atacante podría obtener acceso root, lo que le permitiría:
- Modificar o eliminar archivos críticos: Podría alterar configuraciones del sistema, eliminar archivos importantes o instalar malware.
- Crear usuarios y backdoors: Podría crear nuevos usuarios con permisos administrativos y configurar backdoors para mantener el acceso al sistema incluso después de que se intente bloquear el acceso inicial.
2. Acceso a Información Sensible
Con acceso root, el atacante puede leer y exfiltrar información sensible, incluyendo:
- Archivos de configuración y credenciales: Podría acceder a archivos de configuración que contienen credenciales de bases de datos, aplicaciones y otros servicios.
- Datos personales y corporativos: Podría leer y copiar documentos, correos electrónicos y otros datos confidenciales.
3. Movimiento Lateral y Ataques a Otros Sistemas
El acceso comprometido podría ser utilizado como punto de partida para atacar otros sistemas en la misma red:
- Escaneo y explotación de la red: Podría escanear la red en busca de otros sistemas vulnerables y comprometerlos.
- Pivotar a sistemas más sensibles: Utilizar el acceso comprometido para lanzar ataques contra sistemas más críticos, como servidores de bases de datos o controladores de dominio.
4. Instalación de Malware y Ransomware
El atacante podría instalar software malicioso en el sistema comprometido:
- Ransomware: Podría cifrar los archivos del sistema y exigir un rescate para devolver el acceso.
- Botnets y rootkits: Instalar botnets para realizar ataques distribuidos (DDoS) o rootkits para ocultar su presencia y mantener el control del sistema.
5. Deshabilitación de Servicios y Sabotaje
Con acceso root, el atacante puede interrumpir el funcionamiento normal del sistema:
- Deshabilitar servicios: Podría detener servicios críticos, como servidores web, bases de datos o servidores de correo, causando interrupciones significativas.
- Alterar datos: Podría modificar datos para causar mal funcionamiento en aplicaciones y servicios, lo que podría ser difícil de detectar y corregir.
Mitigación
Para mitigar estos riesgos, es crucial seguir las medidas de protección mencionadas anteriormente, mantener el software actualizado, y realizar auditorías y monitoreo de seguridad regularmente.