Recupera todo el historial de comandos con Get-ShellContent

Ya lo hemos hablado más veces y es que el malware basado en lenguajes de scripting como PowerShell o Python está aumentando exponencialmente debido fundamentalmente a que:
- el intérprete está instalado por defecto en el sistema operativo
- son difíciles de detectar porque se basan en herramientas legítimas para realizar actividad maliciosa
- pueden existir sólo en memoria

En el caso de M$, desde Windows 7 y posteriores el proceso conhost.exe es el responsable de abrir cada instancia de una consola de comandos. Es decir, por cada consola se abrirá un nuevo proceso conhost, así que dumpeando esos procesos podremos obtener la entrada y la salida de cada aplicación que es llamada desde la línea de comandos con PowerShell, CMD, Python, Wscript, etc.


Hasta ahora, la forma más común de investigar el historial de comandos ejecutado en las shells durante un forense era utilizar los módulos CMDSCAN y CONSOLES en los frameworks rekall y Volatility, pero no siempre extraen todos los datos disponibles dentro de la sección de memoria del proceso de conhost. Adicionalmente, ejecutar el análisis de memoria utilizando estas herramientas suele ser lento ya que necesita un volcado de memoria completo.
Y otra cosa más: investigar los comandos ejecutados en una consola es más eficaz cuando se lleva a cabo inmediatamente después de que se abrió la consola porque la mayoría de los datos volátiles todavía residen en la memoria.

Es por eso que una herramienta fácil y rápida basada en Powershell será la
mejor opción para nuestro arsenal: por eso nace Get-ShellContent.


Eyal Neemany (@Zwiitzer) de Javelin Networks ha creado este script en PowerShell, Get-ShellContent, aprovechando la herramienta Strings2 modificada y cargándola en memoria para extraer todas las cadenas de cualquier proceso en ejecución o descargado.

Este script analiza y parsea la entrada y salida de la shell investigada e incluso obtendrá una visibilidad completa en el búfer de pantalla que usó el atacante, los comandos que escribió y los resultados que recibió, lo ideal para un forense ante un caso y/o incidente!


Get-ShellContent se ejecuta en la memoria, por lo que no son necesarios archivos adicionales para ejecutar la herramienta. Ofrece un método rápido, preciso y escalable para investigar las shells remotas y locales sin ningún problema: la metodología más limpia posible. (Nota: para funcionar remotamente se requiere WinRM).

Extrae el contenido de las siguientes shells de línea de comandos: PowerShell, CMD, Python, Wscript, MySQL Client y algunos shells personalizados, como la consola Mimikatz. En algunos casos, puede ser útil para extraer shells cifrados como el que se utiliza en PowerShell Empire Agent. Se puede apuntar el script directamente al proceso shell en lugar del proceso conhost, o usar el parámetro -Deep.

Uso de Get-ShellContent v1.0, compatible con PowerShell v2.0 y superior, con capacidades remotas con WinRM.

    * Usa -ComputerName [TARGET] para analizar los shells en el punto final de destino remoto.
    * Usa -ProcDump [DumpPath] para analizar el archivo de volcado de proceso (Conhost o Shell).
    * Usa -Deep para escanear el proceso real de la shell para cualquier resto de datos (obtendrás FP).
    * Usa -ProcessID [PID] para analizar procesos específicos (Conhost o Shell); No hay que utilizar el indicador si se desea analizar todos los procesos automáticamente.

Github: https://github.com/JavelinNetworks/IR-Tools/blob/master/Get-ShellContent.ps1

Fuente: http://jblog.javelin-networks.com/blog/cli-powershell/

Comentarios

  1. En Windows 7 64bit hace un dump que no tengo muy claro, pero no es en absoluto el contenido de la shell.
    En Windows 10 funciona perfectamente.

    ResponderEliminar

Publicar un comentario