martes, julio 17, 2018

ibombshell 0.0.1b en GitHub con bypass UAC incorporado: Environment Injection en Windows 10

Recientemente se ha liberado ibombShell 0.0.1 beta en el Github de ElevenPaths, una prueba de concepto que hemos trabajado en "Ideas Locas", en colaboración con mi compañero Álvaro Nuñez. En el propio repositorio de Github se puede encontrar un fichero de Docker con el que se puede automatizar el despliegue de lo necesario para el modo Silentlty. El modo Everywhere es el más sencillo, ya que solo requiere de una Powershell y de un Copy and Paste de una línea a ejecutar.

Figura 1: ibombshell 0.0.1b en GitHub con bypass UAC incorporado
"Environment Injection en Windows 10"

Ya hemos hablado del uso básico de la herramienta, pero ahora podéis probarla, hacer un pull request con vuestras mejoras, proponernos mejoras y darnos feedback a través del propio repositorio o utilizando la comunidad de ElevenPaths. Incluso, os hemos enseñado cómo se puede hacer un módulo de manera sencilla para el modo Silently, escrito en Python. En el último artículo de ibombshell en ell blog de ElevenPaths tienes una recopilación de estos trabajos.

Figura 2: iBombShell en GitHub

Hoy quería hablar de que la prueba de concepto está disponible y que iremos añadiendo nuevas funcionalidades, nuevas funciones y nuevos módulos con el paso del tiempo. Uno de los objetivos de ibombshell es que dispongas de un gran número de posibilidades en un Ethical Hacking sin necesidad de descargar nada, por lo que iremos añadiendo funciones al repositorio con el objetivo de que el día de mañana las tengáis. Cuando ejecutéis un showcommands irán apareciendo nuevas funciones o cuando arranquéis el c2 de ibombshell en Python veréis nuevos módulos.

Figura 3: Módulo de bypass UAC en ibombshell

Por supuesto, iremos documentando las nuevas cosas que vayamos incluyendo o, al menos, la gran mayoría, dentro del poco tiempo del que se suele disponer. El proyecto acaba de nacer y queremos dotarle de lo más básico para que la prueba de concepto se convierta en una herramienta útil en el día a día del pentester.

Integrando el bypass UAC en ibombshell

Hace ya un tiempo hablé sobre un bypass de UAC basado en la inyección en las variables de entorno. Hoy tenemos disponible una función en ibombshell everywhere que implementa este bypass proporcionando una ibombshell ejecutada en un contexto de integridad alto. Además, hemos implementado el módulo para ibombshell en modo Silently. Lo interesante de este bypass es que afectaba a los sistemas Windows 10, por lo que es un bypass muy interesante.

En este artículo se habló sobre el funcionamiento del bypass, el cual es bastante sencillo. Se genera en la rama del registro HKCU:\Environment un valor llamado windir y cuando las tareas, que se ejecutan en un contexto de integridad alto, son lanzadas éstas sustituyen el valor de %windir% por el valor creado en el registro. Es decir, hay una inyección. Esto se aprovechaba para lograr ejecutar código en un contexto alto. En otras palabras, podemos hacer que una ibombshell se ejecute en el contexto que mejor nos viene. Éste es el vídeo del bypass tal y como lo explotamos en el artículo citado y ahora vamos a ver cómo hacer el bypass de UAC con ibombshell.


Figura 4: Bypass de UAC en Windows 10 con Environment Variables in Scheduled Tasks

Lo primero es comprobar cómo podemos ejecutar y lograr el bypass. Si analizamos en qué consiste el bypass vemos que son dos pasos. El primero es crear la entrada de registro, o modificar, que nos conviene para lograr la inyección. En este caso el valor windir. Para ello, podemos utilizar el cmdlet New-ItemProperty de Powershell con el que indicando el parámetro name, path y value lograríamos esto. En la imagen se puede ver.

Figura 5: Parámetros en Powershell para el bypass UAC

Después del cmdlet New-ItemProperty se debe lanzar la tarea que es ejecutada en un contexto de integridad alto y que utilizará el %windir%. Hay que notar que la inyección acaba con un “&& REM” para concatenar un comentario a todo lo que está a la derecha de la inyección y que no se rompa la ejecución.

En la imagen de la Figura 5, podemos que la función console, el prompt de ibombshell, es ejecutado con el modo Silentlty, pero si en vez de eso, invocamos solamente console veríamos algo similar a esto que hay en la imagen siguiente.

Figura 6: Ejecución sin modo Silently

Como se puede ver obtenemos una cmd dónde se ejecuta una Powershell y dentro nuestra ibombshell en un contexto de integridad algo, gracias al bypass de UAC. Con el programa ProcessExplorer se puede observar el nivel de integridad en el que se ejecuta un proceso y aquí se puede ver de forma sencilla. En este instante si se quisiera hacer una acción privilegiada se podría.

Figura 7: Nivel de integridad alto en Process Explorer

Si queremos ejecutarlo en modo Silently dejaríamos la función console como venía en una de las imágenes anteriores, es decir, console –silently –uriConsole [URI]. Antes de nada, hay que configurar el listener para que se quede a la escucha. Para ello, se accede a la carpeta ibombshell c2 del repositorio y se ejecuta el fichero ibombshell.py. Una vez hecho esto, cargamos el listener y ejecutamos con run.

Debemos recordar que para hacer el bypass de UAC tenemos que tener un warrior previo conectado en un nivel de integridad medio, que el usuario propietario del proceso sea del grupo administradores y que la política de UAC esté por defecto.

Figura 8: Warrior conectado al listener

Cuando se ejecuta el módulo del bypass UAC del tipo environment injection se obtiene un nuevo warrior. Este warrior se ejecuta en un contexto de integridad alto, por lo que tenemos privilegio y podemos realizar cualquier acción. En el siguiente video se puede ver un ejemplo de lo que hemos ido comentando.


Figura 9: iBombShell Windows 10 UAC Bypass

En esta imagen se puede ver la ejecución del warrior, si estuviera visible y cómo se conecta con el listener. Por pantalla no sale nada, pero se puede ver en el título de la ventana como se está realizando la ejecución de ibombshell. Si se pudiera ver el resto de la instrucción en el título de la ventana se vería la ejecución de console –silentlty –uriConsole [URI].

Figura 10: ibombshell en ejecución

Por último, dejamos un vídeo sobre el uso de la nueva función en el modo ibombshell everywhere. En el video se puede ver como se descarga directamente a memoria el prompt de ibombshell y después se descarga la función del bypass directamente a memoria.

Figura 11: ibombshell en modo everywhere

Seguiremos trabajando en añadir funcionalidades y módulos a este proyecto que acabamos de arrancar. Recuerda probarlo, darnos feedback y hacer tus pull request. Este es solo ‘the first boom’.

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 ElevenPaths

No hay comentarios:

Publicar un comentario