[Euskalhack V]: Pentest Active Directory Rocks! Part II

Hola a todos!

Continuamos con el segundo post del taller, en esta ocasión con el tunning de herramientas para evadir los AV.

En primer lugar, existen varios frameworks para modificar el binario original, aplicando técnicas de ofuscación, renombrar variables, comprimir el payload,…. A continuación, se indican algunos de ellos:

Veil – https://github.com/Veil-Framework/Veil

SharpShooter – https://github.com/mdsecactivebreach/SharpShooter

Pezor – https://github.com/phra/PEzor

Shelter – https://www.shellterproject.com/download/

Donut – https://github.com/TheWover/donut

Vulcan – https://github.com/praetorian-inc/vulcan

Darkamour – https://github.com/bats3c/darkarmour  

Sin embargo, la mayoría de ellos están muy trillados por los AV, especialmente y curiosamente desde que Microsoft compró Github (guiño guiño…). Al final los payloads o keywords de estas tools están bastante controladas y es lógico también que chillé el AV cuando encuentre una tool que ha pasado por allí tras descargado previamente de github.

Más orientado a scripts de powershell, se usarán las siguientes herramientas:

Respecto a Invoke-Obfuscation cuenta con un menú para seleccionar las diferentes opciones para cambiar, así como un tutorial de ayuda.

  • Selección de la ofuscación del token
  • Selección de la ofuscación de los nodos AST.
  • Selección de los strings: Cambiar las líneas de código, orden de las funciones, invertir el texto,…
  • Selección del encoding.
  • Selección para compromir el código.
  • Selección del launcher.

Mientras que Invoke-Stealth (aquí podéis encontrar un tutorial) cuenta con las siguientes técnicas/scripts de ofuscación:

  • Chimera
  • BetterXencrypt
  • PyFuscation
  • PsObfuscation

Bien es cierto que a pesar de la ofuscación de estas tools el AV en varias ocasiones ha detectado el .ps1 como malicioso.

Finalmente, tenemos la última opción que consiste en realizar los cambios manualmente, sin hacer uso de las herramientas anteriormente citadas. Seguidamente, se explica el «how to do» tomando como binario Rubeus.

Para ello, se necesita lo siguiente.

  • Máquina virtual con Windows 7 o 10 instalado.
  • Visual Studio para compilar e ir editando el código.
  • Threatcheck. Es una tool que permite comprobar si el binario es detectado por Windows Defender.

Para evitar confundir binarios, se ha renombrado Rubeus a Morenius. Tras importarlo a Visual Studio y compilarlo, se pasa por ThreatCheck (se tiene que compilar previamente también):

ThreatCheck.exe -f morenius.exe

Como se observa ya ha detectado cositas (lógico). Entonces aquí es dónde empieza el trabajo para lavar de cara al amigo morenius.

Reemplazar en todo el código la palabra rubeus por morenus. CRTL+SHITF+H

Editar el fichero rubeus.sln y reemplazar de nuevo rubeus por morenus:

Seguidamente, se cambia el nombre de todas las carpetas así como el Rubeus.csproj:

Se vuelve a compilar y a pasar por ThreatCheck:

Nuevamente vuelve a pitar (no podía ser tan sencillo 😉 ). Observando los keywords que aparecen en el fragmento de código se identifican en numerosas ocasiones la palabra ticket. Por lo tanto, se va a reemplazar esta palabra por otra no tan común como es cromos por ejemplo. Se recomienda ir apuntando las palabras que se van cambiando pues luego se puede olvidar las funciones del propio programa xd

Ahora bien hay que tener cabeza y saber qué implican los cambios que hacemos pues directamente podemos afectar a funciones y hacer que salgan errores o se pierdan dependencias. No es lo mismo cambiar el nombre de variables a que cambiar el nombre de keywords de funciones. A continuación, se muestra un ejemplo de como cambiar el keyword BruteForce puede implicar:

Si se cambia Brute por suave por ejemplo, podríamos afectar a la función iBruteForceReporter, por lo que hay que fijarse en estos detalles y aplicar el sentido común para identificar cómo afectan estos cambios y en tal caso, adaptar los cambios o ampliarlos a las funciones también.

Se compila y se pasa por Threatcheck de nuevo y salta en el siguiente fragmento de código:

De nuevo aparece algún keyword de ticket, pero lo más destacable es la palabra «silver» o «golden» referidos a ataques a kerberos (golden y silver ticket). Por ello, se van a reemplazar también estos keywords por los siguientes:

  • Goldenticket – > cromodorado
  • silverticket -> cromoplatino

Parece que ya se ha superado esta parte! Analizando el fragmento de código en el que ha pitado, destacan palabras como impersonate o abuse, por lo que invita a reemplazarlas:

  • abuse- pedir
  • impersonate – cambiar

Sin embargo, de nuevo se queda en la misma posición:

Esto viene a ser por lo que se comentó anteriormente, tras analizar bien las ocurrencias de estas keywords, se ve que es necesario ampliar los cambios a lo siguiente:

  • impersonateuser-> cambiaruser

Ahora sí! En esta ocasión destaca «kirbi». Se reemplaza por kevin y se compila y pasa de nuevo:

Se elimina el Copyright pero nos quedamos en las mismas, ¿Dónde puede estar este fragmento de código?

Pues se encuentra aquí:

Así mismo durante este proceso se han tenido que ir cambiando los siguientes keywords que se han omitido para no alargar más allá el post y sea muy tedioso de leer:

  • nowrap – noindex
  • asreproast – noauth
  • .ASReproast ->.noauth
  • Kerberoast – > machineaccount

Finalmente, se compila y pasa de nuevo:

Y ya parece que no lo detecta como malicioso 😀

Obviamente esto se puede llegar a automatizar mediante un script que reemplace las keywords y optimizar el tiempo invertido, sin embargo, la idea durante el taller era demostrar el cómo hacerlo y entender los motivos de su realización paso a paso.

Referencias:

https://mrd0x.com/bypass-static-detection-windows-defender/

https://stmxcsr.com/micro/antivirus-evasion.html

https://s3cur3th1ssh1t.github.io/Playing-with-OffensiveNim/

https://ppn.snovvcrash.rocks/pentest/infrastructure/ad/av-edr-evasion

https://www.flu-project.com/2020/06/ofuscando-ficheros-con-powershell.html

Nos vemos en el siguiente post!

La mejor defensa es un buen ataque

N4xh4ck5