Blog

Hacking Intelligent Platform Management Interface (IPMI)

Buenas a todos! En este nuevo post de hoy vamos a ver cómo podemos realizar un pentest sobre una serie de servidores que utilicen IPMI, que son las siglas de “Intelligent Platform Management Interface”. De forma resumida podríamos decir que IPMI es un estándar que encontramos en el hardware de muchos servidores.

De forma algo más detallada, lo que nos permiten los servidores que utilicen IPMI es obtener cierta información sobre el estado de componentes, hardware, temperatura, voltaje, etc. Esto es algo muy común en los servidores dedicados de las empresas ya que es posible obtener mucha información y manejo de forma remota del servidor.

Entre los fabricantes que hacen uso de este estándar se encuentran Intel, Cisco, Dell, HP, SuperMicro, IBM, etc.

Si queréis información más detallada sobre IPMI aqui os dejo el enlace a la wikipedia.

Y a continuación os dejo un diagrama de la estructura que sigue dicho estándar.

IPMI-Block-Diagram

Una vez sabemos que es más o menos IPMI, entenderemos porque en muchos casos es importante a la hora de realizar un pentest a compañías grandes. Principalmente es porque este tipo de software tiene una serie de privilegios para ejecutar acciones en la maquina objetivo, además de poder obtener de él mucha información, pero vamos a ver que aún hay más.

Y el principal problema con esto… ¿Cuál es? Pues las credenciales por defecto, que para no variar son muy abundantes.

Los principales productos que podemos encontrarnos en un pentest podrían ser PiLO, Dell DRAC, Sun ILOM, Fujitsu iRMC, IBM IMM, o Supermicro IPMI, aunque hay más, estos son los más usados.

Para hacernos una idea de la cantidad de ellos que están públicos en Internet no tenemos más que hacer alguna búsqueda en Shodan que nos permita identificarlos. A continuación vemos búsquedas de algunos de los servidores.

IMM de IBM

ipmi_1

 

DRAC de Dell

ipmi_02

 

Una de las primeras cosas que podríamos hacer al encontrarnos con un servidor de estas características seria comprobar que servicios de red tiene activos. Esto podríamos hacerlo de forma pasiva (y no completa) utilizando por ejemplo Shodan o de forma activa mediante nmap por ejemplo.

Al hacerlo veríamos que tiene puertos típicos abiertos como podrían ser el FTP, SSH, etc. y normalmente tienen una serie de puertos dedicados a IPMI, que serían los encargados de obtener información del servidor. Con esto únicamente se podría obtener información como hemos dicho, por lo que lo vamos a omitir ya que vamos a ver otra forma de obtener eso mismo y aún más.

¿Y cuál es? Pues accediendo a través de la interfaz de administración web. Aquí es donde entra en juego que algunos administradores, por tiempo, por desconocimiento o simplemente porque piensan que nadie va a encontrar eso ahí, dejan las credenciales por defecto. Esto no va a permitir no solo obtener información del servidor sino llegar a controlar esto y encima pudiendo para ello conseguir permisos de root.

A continuación os dejo las credenciales por defecto de los distintos fabricantes y productos:

ipmi_03

 

Nosotros nos vamos a centrar como hemos dicho en un IMM de IBM, donde cuando accedemos a través del navegador nos encontramos algo como esto:

ipmi_05

 

En este caso las credenciales por defecto serian USERID/PASSW0RD, las introducimos y si el sistema se encuentra por defecto nos encontraremos con un panel similar al siguiente:

ipmi_06

 

Aunque parezca simple, desde este menú somos capaces de acceder a todo tipo de información del sistema, la posibilidad de realizar acciones sobre el mismo como apagarlo, reiniciarlo, etc. y la opción de  “Remote Control”, que como vamos a ver ahora nos permite tomar control del sistema como si estuviéramos físicamente delante o estuviéramos utilizando una VNC.

Cuando nos vamos al panel de control remoto vemos una pantalla como la siguiente:

ipmi_07

 

En este caso se nos permite tomar el control del sistema a través e un cliente ActiveX (IE) o Java, en mi caso las veces que lo he probado me ha funcionado mucho mejor el de java asi que lo seleccionamos y utilizamos “Start remote control in mult-user mode”. Esto último nos permite tomar control del sistema en modo multiusuario, es decir que si había algún otro usuario con una sesión abierta no vamos a tener ningún problema.

Una vez se ejecutar Java vemos como que nos aparece un login para poder iniciar sesión como un usuario valido en el sistema. Lo que podemos hacer aquí es de forma remota reiniciar el equipo pulsando “CTRL+ALT+SUPR”, y una vez se reinicie nos saldrá el menú de GRUB.

ipmi_08

 

Una vez hecho esto ya lo tenemos fácil, solo tendríamos que modificar el arranque de GRUB como explique en este post hace tiempo para poder acceder al sistema con permisos de root.

Aunque la opción de reiniciar es muy práctica debido a los privilegios que nos otorga después al modificar el GRUB, es poco discreto ya que la empresa auditada puede darse cuenta de que alguno de sus servidores se ha reiniciado. Lo mejor es realizar un único reinicio (Que no levanta demasiadas sospechas), modificar el GRUB  y crear algún usuario o capturar las password de los usuarios validos en el sistema para poder entrar más adelante mediante la web, mediante Java como ya hemos visto o mediante otras formas como TELNET, SSH, etc.

Como habéis visto el post es simple ya que se podría profundizar mucho más en algunas técnicas mas que pueden ser utilizadas para atacar ciertos puertos, vectores de post-explotacion, que más información sobre la red interna podemos sacar, etc. Pero bueno espero que os incite a profundizar más en ello porque es interesante. Aquí os dejo un enlace muy interesante que me sirvió de ayuda cuando me toco pegarme con esto 😉

Y hasta aquí llega el post de hoy, espero que os haya gustado!

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos

Leave a Reply

*

    No Twitter Messages