Esteganografía con PowerShell

La esteganografía es una de esas prácticas espectaculares de película que cuesta creer que puedan existir o tener algún tipo de utilidad en la vida real. Pero lo cierto es que se usa. Piensa que es una forma muy sutil de compartir algún mensaje con un receptor y pasar de forma desapercibida.

Formalmente se define como una técnica para ocultar información dentro de «algo» que es público. Esta práctica puede llegar a convertirse en todo un arte, puesto que las posibilidades de ocultar un mensaje en cualquier objeto ya sea tangible o no son ilimitadas: un sudoku, un artículo de un periódico, una imagen, etc.

Dentro de la informática, hay quién ve en esta práctica una oportunidad para explotar vulnerabilidades, infiltrando código en archivos que aparentemente no pueden hacer nada, como por ejemplo en un pdf, pero que en realidad contienen un código malicioso en su interior.

Invoke-psimage

Aunque el uso de malware usando esteganografía no es nada nuevo, es raro su uso en lenguajes orientados a la gestión de infraestructura como PowerShell. A modo de curiosidad te traigo este proyecto de GitHub que me llamó bastante la atención y es muy fácil de usar.

Se trata de un módulo de PowerShell llamado Invoke-PSImage del usuaio peewpw (Barrett Adams).

Este sencillo módulo de PowerShell puede encapsular en un archivo de imagen PNG, código en PowerShell que se «ejecutaría» al abrir la imagen. Esto se realiza al introducir el código en PowerShell, en los bytes de una imagen PNG que corresponderían a las diferentes capas de colores que definen la imagen.

El módulo tienes dos mecanismos de funcionamiento, uno en el que te genera el código para ejecutar el script de la imagen desde disco y otro que genera el mismo código, pero para ejecutarlo desde la web. A decir verdad, lo que deberías de ejecutar sería el código ofuscado que abre la imagen y el código malicioso.

Para usarlo, descarga primero el módulo desde el enlace anterior y sitúate con una ventana de PowerShell en la carpeta donde hayas descomprimido el módulo.

El siguiente paso que tenemos que hacer es importarlo y después, usarlo con un script y una imagen de ejemplo de la siguiente forma:

PS>Import-Module .\Invoke-PSImage.ps1
PS> Invoke-PSImage -Script .\script-de-ejemplo.ps1 -Out evil-owl.png -Image .\owl.png

Con esto ya os debe de haber creado la imagen con el script. En el ejemplo anterior el resultado sería el archivo evil-owl.png. Además de la imagen con el script, el resultado en la terminal de PowerShell es el código necesario para ejecutar el script que hay oculto en la imagen.

Si queremos el mismo resultado, pero en remoto, habría que subir la imagen con el script a una plataforma de subida de images como, por ejemplo, imgur.

Ahora ejecuta el siguiente fragmento para obtener el código para ejecutar el script desde la web:

PS>Import-Module .\Invoke-PSImage.ps1
PS> Invoke-PSImage -Script .\script-de-ejemplo.ps1 -Out evil-owl.png -Image .\owl.png -WebClient

Una vez que tengas la imagen subida a la plataforma, copia el enlace que lleva a tu png en imgur.

Cuando tengas el resultado del anterior comando, sustituye el enlace de la imagen que has subido a imgur por el example.com que has obtenido en el código para ejecutar el script oculto, tal cual te muestro en la siguiente imagen:

Ejemplo de funcionamiento del script Invoke-PSImgae

Si todo ha ido bien, al ejecutar el código ofuscado debería de ejecutar el script que has ocultado en la imagen.

NOTA: Si tienes errores al ejecutarlo, asegúrate de que las rutas desde donde ejecutas el script no contengan espacio en blanco o caracteres no anglosajones.