Además, el binario eventvwr.exe auto eleva debido a su manifest. Se sabe que algunos binarios de Microsoft están firmados por ellos de tal forma que el sistema operativo los auto eleva. Se puede encontrar más información sobre este tema en Microsoft. Volviendo al tema de los hives de registro, el proceso eventvwr.exe interactúa con HKCU\Software\Classes\mscfile\shell\open\command, aunque dicha consulta acaba en un “Nombre no encontrado”. Esto puede ser ojeado con Process Monitor de Sysinternals.
Por otro lado, eventvwr.exe también realiza una consulta a HKCR\mscfile\shell\open\command, y el valor predeterminado es mmc.exe.
Aunque la consulta a HKCU devolvió un error, se realizó antes que a HKCR, por lo que deja la puerta abierta a que el proceso eventvwr.exe pueda invocar o interactuar con lo que en HKCU se ponga, haciendo que haya una potencial elevación de privilegio mediante un bypass al UAC.
La PoC de Matt
Viendo dónde radica el fallo Matt propone un nuevo escenario. Se decide crear la estructura de registro necesaria para que eventvwr.exe consulte correctamente la ubicación HKCU, en lugar de la ubicación HKCR. En la prueba de concepto que se puede encontrar en el Github de Enigma0x3 se puede ver cómo en la ubicación HKCU\Software\Classes\mscfile\shell\open\command se incluye como valor el ejecutable de powershell.
Esta acción sustituye al valor esperado, que sería mmc.exe, por el valor de powershell.exe. A medida que el proceso continúa, se consigue ejecutar una powershell, en lugar del mmc.exe, que sería el valor esperado. Si se echa un ojo con Process Explorer se podría ver cómo la Powershell se está ejecutando con integridad alta, por lo que aquí tendríamos ya la elevación del privilegio.
Si se puede ejecutar una Powershell, se podría ejecutar un script malicioso, sin lugar a la duda. En resumen, Matt consigue ejecutar código en un proceso de alta integridad, bypass del UAC, sin necesidad de secuestrar una DLL u otro archivo y sin copiar archivos a disco. Esto reduce de forma muy significativa el riesgo de detección para el atacante.
¿Podemos ver un ejemplo? Matt Graeber y Enigma0x3 han publicado un script que implementa una función denominada Invoke-EventVwrBypass, la cual lleva a cabo la modificación del hive de HKCU y la invocación del proceso eventvwr.exe. El resultado final, si todo funciona correctamente, es que se genera un archivo denominado UACBypassTest.txt en la ruta c:\, la cual solo puede ser escrita cuando se tiene privilegio máximo en el sistema.
Una vez descargado el script de Powershell que tiene el exploit para realizar el Bypass de UAC se puede abrir una Powershell y ejecutar import-module [nombreScript.ps1].
Como se puede ver en la imagen anterior, se ejecuta la función Invoke-EventVwrBypass junto al parámetro Command. En el parámetro Command se le indica que queremos ejecutar con privilegio, y se realiza una llamada al binario powershell.exe y el código encodeado. Ese código encodeado generará un archivo en una ruta privilegiada, como es C:\, tal y como se puede ver en la siguiente imagen.
La PoC nuestra
La PoC de Matt y Enigma0x3 ha demostrado que existe un Bypass de UAC, pero nosotros hemos querido un paso más allá y hacer la ejecución de código más práctica. El escenario propuesto es el siguiente:
- Acceso físico o remoto al equipo. En este caso se hará una demostración con acceso físico, pero como se pudo ver en el artículo Tater & Hot Potato: Ownear sistemas Microsoft Windows, se podría tener acceso remoto mediante la explotación de alguna vulnerabilidad y llevar a cabo el bypass a través del payload de Powershell para Metasploit.
- Haremos que Powershell se descargue una función dinámicamente y la ejecute. Esta función será Invoke-Shellcode del framework de post-explotación Powersploit.
- La función descarga dinámicamente y su ejecución será encodeada para que la función Invoke-EventVwrBypass la pueda ejecutar.
- Una vez conseguido el bypass recibiremos un Meterpreter en nuestra consola remota de Metasploit.
- Demostraremos que tenemos un Meterpreter que se ejecuta en el contexto de System.
- Payload: windows/meterpreter/reverse_http.
- LHOST: [IP nuestra]
- LPORT: 8000
Conclusiones
Esta técnica no requiere copiar archivos en disco, y directamente todo ocurre en memoria, lo cual ayuda, y mucho, a evadir sistemas de seguridad. Esta técnica no requiere ningún proceso de inyección. Esta técnica permite lograr un bypass de UAC, es decir, no es una escalada de privilegios total, ya que se necesita que el usuario pertenezca al grupo administradores. El fallo de seguridad puede ser remediada estableciendo el nivel de UAC en “Siempre notificar”, aunque a muchos usuarios les pese encontrar ese mensaje, o incluso en “Siempre solicitar credenciales”. En definitiva, nueva técnica que deberemos llevar en la mochila del pentester.
0 comentarios:
Publicar un comentario