
RedPeanut es un pequeño RAT desarrollado en .Net Core 2 y su agente en .Net 3.5 / 4.0.
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
Actualmente en pruebas.
Problemas conocidos de módulos:
process -> spawnasagent
process -> spawnasshellcode
RedPeanut es un pequeño RAT desarrollado en .Net Core 2 y su agente en .Net 3.5 / 4.0. La ejecución de código de RedPeanut se basa en shellcode generado con DonutCS. Por lo tanto, es un híbrido, aunque desarrollado en .Net no depende únicamente de Assembly.Load. Esto aumenta la superficie de detección, pero nos permite practicar y experimentar con diversas técnicas de evasión relacionadas con el entorno dotnet, la gestión de procesos y la inyección. Este comportamiento se puede cambiar en tiempo de ejecución con los comandos "managed" y "unmanaged". Si estás interesado en un framework C2 .Net que sea consistente y se pueda usar en un compromiso, sugiero Covenant.
RedPeanut está armado con:
El agente de RedPeanut se puede compilar en .Net 3.5 y 4.0 y tiene capacidades de pivoteo a través de NamedPipe. El agente, cuando se ejecuta en modo no administrado, realiza sus propias tareas críticas en un proceso separado para evitar que la respuesta del AV ante una detección o error durante la ejecución te haga perder todo el agente.
El flujo de ejecución es el siguiente:
El agente actualmente solo soporta el canal https.
El protocolo de checkin del agente es muy simple:
Alternativamente, se puede activar la función de canal cubierto (por ahora es solo una PoC). La idea es imitar el tráfico web realizado por un usuario real. Normalmente, una página web está compuesta por la página html y todos los objetos necesarios para su visualización como css, imágenes, etc. Al solicitar una nueva tarea, la respuesta del servidor no será directamente la tarea cifrada, sino una página html de la cual extraer el enlace a la imagen que tendrá incrustada la tarea cifrada. La solicitud http de la imagen contendrá la cabecera Referer.
La entrega de contenido se organiza en 4 canales:
RedPeanut tiene capacidad de personalización de la huella de red tanto del lado del servidor como del cliente. Las propiedades que se pueden establecer son:
Domain Fronting
Para habilitar el soporte de domain fronting es necesario valorar la cabecera "Host" en la sección del cliente, tanto post como get (ejemplificado en el perfil predeterminado 2).
El módulo PowerShellExecuter te permite ejecutar comandos oneliner o archivos en un runspace con AMSI bypass, Logging bypass y PowerView ya cargados.
A partir de la versión 0.3.0, RedPeanutAgent soporta el comando blockdlls. Con esta opción habilitada, los procesos hijos que se crean para realizar tareas en modo no administrado se crean con el atributo PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON. Este atributo evita que el proceso cargue dlls que no estén firmadas por Microsoft, lo que podría proteger nuestras tareas de técnicas de hooking de AV y EDR.
RedPeanutAgent utiliza la carga dinámica de Dlls para evitar el uso de importaciones de Dlls sospechosas. Los créditos por la carga dinámica de Dlls van para @TheRealWover, @cobbr_io y @FuzzySec por su trabajo en SharpSploit.
Algunos proveedores de AV y EDR utilizan técnicas de hooking para realizar un seguimiento de las actividades. Para evitar el uso de syscalls hookeadas, RedPeanutAgent utiliza llamada directa al sistema (direct syscall), autoinyectando el código necesario. Los créditos por la llamada directa al sistema van para @Cneelis
Para ejecutar RedPeanut necesitas tener dotnet instalado. Para instalar dotnet en Kali:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/9/prod.list
mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
chown root:root /etc/apt/sources.list.d/microsoft-prod.list
apt-get install apt-transport-https
apt-get update
apt-get install dotnet-sdk-2.1
git clone --recursive https://github.com/b4rtik/RedPeanut.git
Para la funcionalidad de canal cubierto es necesario instalar la librería libgdiplus, por lo tanto:
Para usuarios de Linux:
apt-get install -y libgdiplus
Para OSx
brew install mono-libgdiplus
Generación de clave de firma de ensamblados
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
Luego copia key.snk en Workspace/KeyFile
root@kali:~# cd RedPanut
root@kali:~/RedPeanut# dotnet run
Using launch settings from /root/Projects/RedPeanut/Properties/launchSettings.json...
Enter password to encrypt serverkey:
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
[*] No profile available, creating new one...
[RP] >
DonutCS es una herramienta de generación de shellcode que crea payloads de shellcode independientes de la posición a partir de ensamblados .NET. Este shellcode puede usarse para inyectar el ensamblado en procesos de Windows arbitrarios. Dado un ensamblado .NET arbitrario, parámetros y un punto de entrada (como Program.Main), produce shellcode independiente de la posición que lo carga desde la memoria. El ensamblado .NET puede ser obtenido desde una URL (staged) o integrado directamente en el shellcode (stageless).
La técnica de persistencia CLR fue presentada por primera vez en este post por @Am0nsec. La técnica consiste en realizar el hooking del administrador de dominio de la aplicación. Como se describe en el post, es necesario el ensamblado para realizar el hooking, el cual está disponible en el GAC. Un ensamblado para ser usado desde el GAC debe tener un nombre seguro (strong-named) y luego firmarse con una clave. El módulo de persistencia CLR necesita una clave para poder firmar los ensamblados, que se puede generar con la herramienta sn.exe de la siguiente manera:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
Copia el archivo key.snk a la carpeta Workspace/KeyFile. Este archivo se usará para firmar el ensamblado para la persistencia.
Algunas de las herramientas conocidas presentes en RedPeanut, como las herramientas GhostPack, están completamente envueltas y se ejecutan en el lado del cliente. Para actualizar las herramientas, por ejemplo SeatBelt, sin actualizar todo el repositorio, es necesario: Clonar el repositorio de Seatbelt, renombrar el método "Main" a "Execute", insertar el modificador public y recompilar como dll. El dll debe ser comprimido y codificado en Base64 con el script ps de RastaMouse Get-CompressedShellcode.ps1