Muy buenas a todos!

Esta semana os traigo una pequeña herramienta llamada AzureGraph, que nos permitirá obtener información sobre usuarios, dispositivos y servicios de Azure AD a través de la API de Microsoft Graph. Todo ello, de forma totalmente interactiva a través de nuestra querida consola de PowerShell.


Una de las tendencias más evidentes del mundo IT, es la cantidad de empresas y corporaciones que actualmente trabajan con servicios en la nube. Desde una pequeña pyme hasta empresas del Ibex 35, hoy en día es muy fácil encontrar todo tipo de información en diferentes «entornos cloud».

Seguramente, tanto si te dedicas a la parte ofensiva, como a la parte defensiva, te habrás encontrado en algún momento con este tipo de entornos. Independientemente del proveedor, cada uno de ellos tiene sus características especiales, sus pros y sus contras.

En estas líneas, hablaremos únicamente de la tecnología cloud de Microsoft: Azure. Básicamente, necesitaríamos mucho más que un solo artículo, para poder hablar de todos los proveedores y como abusar de cada uno de ellos.

Una de las peculiaridades que tiene este servicio, es la capacidad de replicar un directorio activo con uno on-premise o crear uno desde cero de forma totalmente funcional en la nube. Conocido para los amigos como Azure Active Directory.

Como podréis imaginar, existe todo tipo de información interesante en estos servicios, como podrían ser: usuarios, grupos, dominios, aplicaciones y mucho más. Así que, probablemente, es un buen sitio donde buscar información para nuestra auditoría o ejercicio de Red Team.

Además, algunos de estos usuarios, nos permitirán acceder a otros servicios en la nube que también podrían ser interesantes o proporcionarnos acceso privilegiado a servidores y todo tipo de activos críticos de una compañía.

Por ello, es más que necesario poder automatizar este proceso de una forma fácil, rápida y sencilla. Para llevar a cabo este propósito, existen multitud de herramientas como AzureHound, PowerZure o AADInternals entre otras muchas.

Llegados a este punto, toca añadir otro ingrediente más a la receta antes de poder continuar 😜

Hace ya un tiempo, Microsoft creó una tecnología de inteligencia llamada Microsoft Graph, que básicamente nos permite consultar cualquier tipo de dato dentro de todo el ecosistema cloud.

No importa si se trata de información del dominio de Azure AD, la foto corporativa de un usuario en su perfil de Teams o el correo que envió la semana pasada a través de Outlook. Todos estos (y muchos más) datos pueden ser consultados desde la API de Microsoft Graph.

Os imagináis todo lo que podríamos encontrar teniendo acceso a esa información?

Así que una vez más, me dispuse a crear mi propia prueba de concepto, a la que llamaría AzureGraph. A continuación, os dejo el enlace del proyecto en GitHub: https://github.com/JoelGMSec/AzureGraph

Ahora que ya conocemos la teoría, pasemos a la parte práctica 😋

Para poder consumir la API de MS Graph, necesitaremos un token de autenticación. Para conseguirlo, podemos hacerlo de tres formas diferentes:

• A través de la página web de MS Graph, usando el navegador o curl
• A través de la herramienta, introduciendo nuestras credenciales de Azure
• A través de un refresh token obtenido previamente por algún otro medio

En el primer caso, se trata de algo muy sencillo. Simplemente, visitaremos el siguiente enlace e iniciaremos sesión de la forma habitual: https://developer.microsoft.com/en-us/graph/graph-explorer

Una vez iniciada la sesión nos aparecerá un token en la pestaña «Access Token», que posteriormente introduciremos en la herramienta para poder interactuar con este servicio.

El único problema que tiene este sistema, es que la vida del token no es muy larga, por lo que se recomienda aprovechar esa ventana de tiempo para descargar toda la información y trabajar con la misma de forma totalmente offline.

Para el segundo caso, necesitaremos el Tenant ID, permisos de acceso al mismo a través de Azure y las credenciales del usuario en cuestión.

En el último, se trata de algo aún más complejo, ya que necesitaremos interceptar las peticiones que se realizan entre el cliente y el servidor con un token válido para obtener el ansiado «Refresh Token». Lo bueno de este sistema, es que nunca caduca, puesto que su función es crear tokens nuevos de forma periódica.

En cualquiera de los tres casos, una vez obtengamos cualquiera de ellos, estaremos listos para obtener acceso a toda esta información a través de AzureGraph de forma totalmente automática.

Para utilizarla, lo primero que haremos será clonar el proyecto como de costumbre:

git clone https://github.com/JoelGMSec/AzureGraph

Una vez descargado, consultaremos la ayuda de la siguiente forma:

.\AzureGraph.ps1 -h

Como podéis ver, el uso de la herramienta es completamente trivial. Simplemente, es necesario hacer botón derecho sobre la herramienta, ejecutar con PowerShell y listo. El uso de la misma es totalmente interactivo a través de un menú con el que nos moveremos utilizando las flechas del teclado y la tecla Intro.

Una vez abierto, nos encontraremos con el menú principal:

Si entramos en la primera opción, veremos las tres formas de autenticarnos:

En cualquier método de autenticación, la herramienta nos dirá tras introducir el token si es válido o no. Adicionalmente, si utilizamos credenciales o un «Refresh Token», el token primario se irá actualizando de forma totalmente automática cuando sea necesario.

Una vez completada esta parte, ya podremos consultar la información sin ningún tipo de problema. Por ejemplo, podemos consultar cualquier dato utilizando un filtro específico o «*» para mostrar todos los registros:

Si seleccionamos cualquier valor, la herramienta nos mostrará toda la información disponible de forma detallada:

En cualquier momento de la ejecución, podemos pulsar «GO BACK» para volver al menú principal.

A continuación, se listan todas las consultas que pueden hacerse a través de la herramienta:

• Usuarios
• Grupos de usuario
• Dispositivos
• Servicios
• Aplicaciones
• Organización
• Dominios

Todas las consultas que se realizan a través de estos menús, se realizan directamente contra la API, solicitando únicamente las que se muestran en pantalla para que la aplicación responda de forma rápida y no hacer demasiado ruido descargando todos los datos de golpe.

Por último, si quisiéramos, podríamos descargar toda la información anterior de forma totalmente automática, utilizando la última opción del menú. Una de las ventajas de hacer esto, es que una vez descargada toda la información, la aplicación funcionará de forma totalmente offline:

Actualmente, existen muchísimas consultas que no están incluidas en la herramienta que podrían ser muy útiles (especialmente las que están relacionadas con Office 365), por lo que no descarto en un futuro actualizar la herramienta incluyendo las mismas.

Antes de terminar este artículo, me gustaría recordar que la herramienta funciona tanto en Windows como en Linux, siempre que PowerShell esté instalado. Además, no es necesario tener permisos de administrador para ejecutarla.

Por último, la herramienta se encuentra en fase «beta» y es probable que se produzcan fallos en algunos escenarios. Si encuentras alguno, no dudes en hacérmelo saber 🙂

Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.

Nos vemos en la próxima!