Una serie de catastróficas desdichas: Hot Potato

El pasado día 16 de Enero, @breenmachine hizo público un POC para realizar una elevación de privilegios en sistemas y servidores Windows 7 y Server 2008 respectivamente en adelante. El ataque está basado en otra idea original del equipo Google Project Zero. Esta escalada de privilegios se consigue aprovechando varios errores de diseño anteriormente conocidos de los protocolos NTLM, NBNS, SMB y WPAD.

Básicamente, el ataque se divide en las siguientes fases:

Spoofing local de NBNS

El primer paso consiste en redirigir el tráfico de la máquina a localhost para las solicitudes DNS de WAP (Web Proxy Auto-Discovery).

A continuación se detalla el proceso para resolver una petición DNS y cómo el ataque consigue reconducir el flujo:

  1. Comprobar si existe una entrada en el fichero hosts de Windows para el dominio a resolver (http://wpad/wpad.dat). Generalmente no existe una entrada para WPAD en las configuraciones por defecto.
  2. Realizar la petición DNS a los servidores de nombres de la red. Para conseguir que no se puedan realizar peticiones DNS, el POC realiza una negación de servicio agotando todos los puertos UDP disponibles en la máquina. De esta forma, no se puede realizar la consulta DNS y el proceso se ve obligado a utilizar la resolución a través del protocolo NBNS.
  3. Realizar la consulta DNS mediante NBNS. El POC falsifica la respuesta a la petición DNS hecha con NBNS, resolviendo todo a localhost (127.0.0.1), pero existe un inconveniente. Las solicitudes incluyen un campo numérico de 2 bytes llamado TXID, cuyo valor debe coincidir con el devuelto en la respuesta del servidor para ser válida. Para conseguirlo, el POC floodea con todos los posibles valores (65536) iterando rápidamente, consiguiendo que una de estas respuestas sea la coincidente.

Este proceso modifica las resoluciones DNS para todas las consultas, no solo para WPAD, pero es el que nos interesa controlar como veremos en la siguiente fase.

Fake de WPAD

Una vez que se ha conseguido falsificar las resoluciones de nombres a través de NBNS a localhost, necesita crear un servicio WPAD falso que devuelva el fichero wpad.dat cuando el sistema lo solicite. Este fichero contiene la configuración proxy para el sistema Windows. La configuración del fichero falsificado establece el proxy del sistema en localhost, por lo que todos los servicios del sistema enviarán el tráfico a 127.0.0.1:80, donde todo el tráfico puede ser capturado por el binario Potato.exe del POC.

Reenvío de la autenticación NTLM de HTTP hacia SMB

Cuando un servicio con privilegios se intenta autenticar con NTLM en un servicio HTTP, estos credenciales son capturados y se redirigen al servicio SMB del sistema junto con los comandos que se desean ejecutar. Estos comandos son ejecutados en el sistema con los privilegios de “NT AUTHORITY\ SYSTEM”. El POC intenta forzar estas peticiones http mediante los servicios de Windows Update o Windows Defender, en lugar de esperar a que el sistema los realice automáticamente siguiendo su programación.

Ejecución del POC en Windows 7

Hemos realizado un prueba del POC de Hot Potato en un Windows 7 para ver los resultados del mismo. En nuestro caso, vamos a ejecutar la calculadora de Windows y vamos a utilizar el servicio de Windows Update de forma manual para forzar las peticiones HTTP.

El comando ejecutado en el sistema es el siguiente:

Potato.exe -ip 172.16.66.66 -cmd "C:\\Windows\System32\calc.exe" -disable_defender true -disable_exhaust false
Ilustración 1: Ejecución del POC

Ilustración 1: Ejecución del POC

En la imagen anterior se puede ver cómo se realiza todo el proceso de resolución DNS descrito anteriormente y comó se levanta el servidor WPAD falso. En estos momentos, se queda a la espera de que un servicio con privilegios se autentique con NTLM.

En este instante procedemos a forzar las actualizaciones de Windows manualmente:

Ilustración 2: Forzar actualizaciones

Ilustración 2: Forzar actualizaciones

Tras forzar la búsqueda de actualizaciones, en la siguiente imagen se observa cómo se solicita el fichero wpad.dat al servicio WPAD falso, reconfigurando el proxy del sistema a localhost y capturando posteriormente los credenciales NTLM de la petición HTTP, que después son reenviados al servicio SMB para ejecutar la calculadora de Windows.

Ilustración 3: Petición de Windows Update

Ilustración 3: Petición de Windows Update

En las siguientes imágenes podemos ver cómo el sistema muestra una advertencia de que un programa quiere mostrarse, en nuestro caso la calculadora, ejecutada como usuario SYSTEM.

Ilustración 4: Aviso de ejecución de la calculadora

Ilustración 4: Aviso de ejecución de la calculadora

Ilustración 5: Calculadora ejecutada con el usuario SYSTEM

Ilustración 5: Calculadora ejecutada con el usuario SYSTEM

En el Administrador de Tareas podemos ver que efectivamente se está ejecutando con el usuario SYSTEM:

Ilustración 6: Calculadora con usuario SYSTEM

Ilustración 6: Calculadora con usuario SYSTEM

Nosotros hemos ejecutado la calculadora, pero podríamos haber ejecutado cualquier otra acción más intrusiva y dañina para el sistema, por ejemplo, en los vídeos de @breenmachine se añade un usuario al grupo de Administradores del sistema.

Podéis encontrar un análisis más detallado en el blog de @breenmachine y en un post muy bien detallado de ElevenPaths:

El POC lo podéis descargar de:

A divertirse!!

Twitter de José Manuel: @reverc0de