Cómo Comprometer un Dominio Microsoft: El Eslabón más Débil

news and informations automotive,business,crime,health,life,politics,science,technology,travelautomotive,business,crime,health,life,politics,science,technology,travel

A principios de esta semana leí una noticia en la que afirma que en marzo de 2019 aún hay muchos servicios e infraestructuras que utilizan Windows XP. Entre ellos nos encontramos los PCs que utilizan los Diputados en el Congreso (foto del 28-02-2019):

Seguramente estos equipos no sean usados para navegar por Internet y tengan implementadas todas las medidas de seguridad perimetral. Hay que tener en cuenta que Windows XP no tiene soporte desde 2014.

No voy a hablar en este post de vulnerabilidades de Windows XP, que cualquiera con Kali Linux y viendo un vídeo de Youtube puede explotar, ni tampoco pretendo decir que la red del Congreso sea poco segura, aunque tampoco me atrevo a afirmar lo contrario 😊. El tema es que hace tiempo que quería empezar una serie de posts sobre métodos de comprometer un dominio Windows y este me ha parecido un ejemplo muy ilustrativo.

Como suele ocurrir, la cadena de seguridad se rompe por el eslabón más débil, que suele ser las personas, pero si los sistemas no están actualizados y correctamente protegidos también pueden convertirse en una puerta de acceso a un dominio.

Como decía, no voy a hablar de Windows XP, sino de un sistema más “nuevo” y que seguro que está instalado también en muchos ordenadores, Windows 7.

Voy a partir de un entorno muy sencillo en el que he implementado un dominio de Windows, adatum.com, con un controlador de dominio Windows Server 2016. El nivel funcional tanto del bosque como del dominio es Windows Server 2016, lo que lo hace relativamente seguro, pero unida al dominio hay una máquina Windows 7.

Para hacer el papel de atacante usaré una máquina Kali Linux 2019.1, aunque podríamos usar cualquier versión anterior que incluya la herramienta Responder de SpiderLabs:

https://github.com/SpiderLabs/Responder

El objetivo de este post es obtener las credenciales de algún usuario del dominio (si puede ser el administrador, mejor). Para esto hay muchos métodos que iremos viendo en otros posts pero, por su sencillez, aquí vamos a aprovechar el protocolo WPAD (Web Proxy Auto-Discovery).

WPAD se desarrolló en 1999 para simplificar el proceso de configuración de proxy para los clientes en una red. Está habilitado por defecto en los sistemas operativos de Microsoft desde Windows Vista (no así en Linux o Mac) y permite a los clientes descargar un archivo PAC (proxy auto-config) con la configuración del proxy.

Esto podría dar lugar a ataques MITM (Man in the Middle) si creamos un archivo PAC con un proxy malicioso, pero en este caso queremos hacer algo aún más sencillo y es obtener las credenciales (usuario y hash) del usuario que solicita el archivo. Si conseguimos el hash podríamos usar programas como John the Ripper o Hashcat para obtener la contraseña en plano del usuario.

¿Cómo vamos a obtener las credenciales? Aprovechando el funcionamiento del protocolo WPAD:

  1. El cliente (víctima) trata de acceder a Internet con su navegador.
  2. El cliente envía en difusión una petición de WPAD para obtener el archivo PAC. Recordemos que esto está habilitado por defecto en los sistemas Windows desde Vista.
  3. El atacante (Kali Linux) responde indicando que tiene el archivo PAC.
  4. El cliente solicita el archivo PAC, para lo que el protocolo WPAD especifica que debe autenticarse.
  5. Al autenticarse el cliente con el atacante, el cliente envía sus credenciales.
  6. Si el cliente utiliza NTLMv2 para el envío de las credenciales, Kali Linux lo tendrá muy fácil para obtenerlas. En el caso de usar Kerberos sería bastante más complicado.

En este caso tenemos un cliente Windows 7 que precisamente usa NTLMv2 por lo que, aunque el resto de las máquinas del dominio utilicen protocolos más robustos, la máquina Windows 7 se ha convertido en el eslabón más débil y puede entregar las credenciales de un usuario del dominio a Kali Linux. Si el usuario que inicia sesión en Windows 7 y abre el navegador es el administrador del dominio, Kali Linux recibiría el hash de la contraseña del administrador.

Plantear el ataque es tan sencillo como iniciar Kali Linux, abrir una shell y utilizar la herramienta Responder:

Y lo dejamos a al escucha. Esta herramienta tiene más opciones de las que hablaremos en otro post.

Con Responder a la escucha un usuario inicia sesión en Windows 7 (vamos a suponer que es el administrador de dominio) y abre el navegador. No es necesario que visite ninguna URL en particular:

Mientras tanto, Kali Linux recibe la petición WPAD de Windows 7 y responde:

Le dice a Windows 7 que tiene el archivo PAC y que si lo quiere tiene que autenticarse. Cuando Windows 7 envía las credenciales de autenticación vía NTLMv2:

Kali Linux las recibe y obtiene el hash de la contraseña del usuario, que en este caso resulta ser el administrador del dominio.

Tras esto los siguientes pasos pueden ser varios, pero uno de los más evidentes es tratar de obtener la contraseña en plano, que como decíamos puede conseguirse con John the Ripper o Hashcat y un buen diccionario.

Si en lugar de una máquina Windows 7 utilizamos una máquina Windows 10 no bastará con abrir el navegador y buscar cualquier página, ya que no será vulnerable. Sin embargo, si en la máquina Windows 10 el usuario trata de acceder a una carpeta compartida inexistente (simplemente porque se ha equivocado al escribir el nombre), Kali Linux estará a la escucha para responder como servidor SMB y también será posible obtener el hash:

En este caso vemos que se está usando SMBv2 y el proceso es similar:

  1. El usuario trata de acceder a una carpeta compartida y se equivoca al escribir la ruta.
  2. La petición irá en difusión y la máquina Kali Linux responde indicando que tiene a carpeta que busca el usuario (sea cual sea). Para acceder, el usuario tendrá que autenticarse.
  3. El usuario envía las credenciales para la autenticación.
  4. La maquina Kali obtiene el hash.
, , ,