Muy buenas a todos!
Esta semana vuelvo con un nuevo proyecto entre manos. Se trata de una pequeña herramienta llamada Invoke-Stealth, que nos permitirá ofuscar scripts de PowerShell de una forma rápida, sencilla y automática. Además, podremos utilizarla tanto desde Windows como desde Linux.
Durante el transcurso de una auditoría o ejercicio de red team, es muy habitual encontrarnos en la situación en la que, necesitamos lanzar un mimikatz, obtener una shell reversa, o simplemente queremos enumerar las debilidades del sistema operativo para escalar privilegios.
Si esto te ha sucedido alguna vez (en entornos Windows), seguramente habrás utilizado alguna herramienta en formato ejecutable (.exe) o habrás lanzado algún script en PowerShell (.ps1) descargado de GitHub.
Lo habitual, en la mayoría de los casos, es que estas herramientas hagan saltar las alarmas de cualquier solución antivirus o EDR. Para evitar esto, existen multitud de soluciones: ofuscadores, packers, joiners, loaders y un larguísimo etcétera.
Por ello, hoy no vengo a reinventar la rueda, ni mucho menos. La herramienta que veréis a continuación, pretende solucionar un problema muy habitual en el proceso de evasión de scripts escritos en lenguaje PowerShell.
Básicamente, lo que suele suceder en estos casos, es que necesitamos combinar varias herramientas de ofuscación para aumentar las probabilidades de éxito (aunque esto no siempre es así, a veces menos, es más) y cada una de ellas, tiene sus diferentes requisitos, diferentes formas de uso, diferentes parámetros y diferentes funcionalidades.
Es decir, que al final tienes cuatro o cinco herramientas, cada vez que quieres utilizar alguna tienes que consultar la ayuda, acabas instalando muchas dependencias e incluso, algunas funcionan únicamente en Windows y otras únicamente en Linux.
De esta forma, Invoke-Stealth ha sido creada para funcionar siempre con los mismos parámetros, con las mínimas dependencias posibles, siendo compatible tanto en Windows como en Linux, y además, utilizando los mejores scripts de evasión y ofuscación disponibles.
Estos scripts de terceros, han sido ligeramente modificados para poder trabajar correctamente de forma individual, secuencial o como el usuario prefiera, sin crear conflictos ni ningún otro tipo de problema en el resultado final.
Para más información, a continuación os dejo el enlace de la herramienta en GitHub: https://github.com/JoelGMSec/Invoke-Stealth
Ahora que ya sabemos en qué consiste el Invoke-Stealth, vamos a poner a prueba la herramienta en cuestión 😜
Ya que la herramienta permite ser ejecutada tanto en Windows como en Linux, en este artículo se mostrarán ambas formas de ejecución y las pequeñas diferencias que existen entre ellas.
Instalación, uso y ejecución en Linux
Antes de comenzar, es necesario instalar PowerShell en Linux. A continuación, os dejo la guía oficial de Microsoft: Instalación de PowerShell en Linux
En primer lugar, clonaremos el proyecto como de costumbre:
git clone https://github.com/JoelGMSec/Invoke-Stealth.git
Una vez descargado, accederemos a la carpeta del proyecto, donde nos encontraremos con el script principal de Invoke-Stealth. A continuación, consultaremos la ayuda de la herramienta y os explicaré un poco en que consiste el funcionamiento de la misma.
Para consultar la ayuda, ejecutaremos el siguiente comando:
pwsh Invoke-Stealth.ps1 -help (también funciona con -h)
Como podéis ver en la imagen anterior, el uso de la herramienta no es ningún misterio. Para usarla, solo necesitaremos realizar tres pasos:
1 – Primero, introducimos el script de origen como primer parámetro
2 – Seguidamente, utilizamos el parámetro «-technique» o sencillamente «-t»
3 – Por último, indicamos con que script vamos a ofuscar el original*
*Esto puede hacerse utilizando uno, varios o todos ellos. Si usamos varios, los separaremos por comas dentro de comillas simples o dobles. Si los usamos todos, solo tendremos que escribir «all» y la herramienta realizará su magia automáticamente.
En el siguiente ejemplo, utilizaré todas las técnicas posibles. Para ello, usaré un simple script que devuelve un «pwned» para comprobar que el código resultante, funciona correctamente:
Finalmente, si comprobamos el contenido del script, podremos ver que el contenido no tiene nada que ver con el código original:
Es muy importante tener en cuenta que, en función del nivel de ofuscación que apliquemos en el fichero original, éste multiplicará su tamaño de forma exponencial. Si utilizamos todas las técnicas posibles, el fichero podría aumentar su tamaño más de cuatro veces el tamaño original.
Otro punto a tener en cuenta, es que actualmente, PSObfuscation no funciona correctamente cuando la entrada de datos es muy grande. Ya que el uso combinado de todas las técnicas genera mucho ruido, eso podría ocasionar una corrupción del código final. Debido a ello, siempre se desactivará cuando no se esté utilizando de forma individual.
Por último, es importante tener en cuenta que algunas de las técnicas utilizadas anteriormente, tienen dependencias que deberán ser instaladas previamente al uso de la herramienta. Tenéis toda la información necesaria en la página del proyecto en Github.
Instalación, uso y ejecución en Windows
Una de las formas más fáciles de utilizar la herramienta, es simplemente descargando el script principal. Esto, podremos hacerlo indistintamente tanto en Windows como en Linux.
Para ello, ejecutaremos el siguiente comando:
powershell iwr -useb https://darkbyte.net/invoke-stealth.php -outfile Invoke-Stealth.ps1 ; .\Invoke-Stealth -help
Una vez descargado, el funcionamiento es exactamente el mismo que el descrito anteriormente (consultar la sección de uso en Linux). La única peculiaridad que tenemos que tener presente es, que no dispondremos de todos los módulos.
Esto se debe, a que, dos scripts (Chimera y PyFuscation) necesitan dependencias para funcionar correctamente. Concretamente, hablamos de Bash y Python3.
La instalación de ambas en Windows puede llevar algo de tiempo, por lo que es recomendable utilizar la versión limitada en Windows y la versión completa en Linux. Básicamente, si vas a utilizarla en tu distro preferida, probablemente ya tendrás todo lo necesario instalado y listo para funcionar out of the box.
Por lo tanto, en Windows (sin instalar nada) podrás utilizar:
• BetterXencrypt
• PSObfuscation
• ReverseB64
Al igual que en Linux, PSObfuscation está deshabilitado cuando se utiliza de forma conjunta con otros módulos, para evitar problemas de corrupción de código y funcionalidad.
Para ejecutar todas las técnicas disponibles, ejecutaremos el siguiente comando:
.\Invoke-Stealth script.ps1 -technique all
Una vez finalizado el proceso, podremos comprobar que el script resultante funciona correctamente, aunque en la mayoría de los casos, la ejecución del mismo suele ser más lenta de lo habitual.
Por último, si analizamos el nuevo código, podremos observar que está ofuscado de diferentes formas y con múltiples iteraciones aleatorias, siendo así, bastante complejo de reversear para cualquier solución antivirus o EDR.
Como conclusión final, esta herramienta no sería posible sin el gran trabajo que han realizado los autores de los scripts incorporados en la misma.
Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.
Nos vemos en la próxima!