
CobaltWhispers es un script de agresor que utiliza una colección de archivos de objetos Beacon (BOF) para Cobalt Strike para realizar inyección de procesos, persistencia y más, aprovechando syscalls directos (SysWhispers2) para evadir EDR/AV
Author: @Cerbersec
CobaltWhispers es un script Aggressor que utiliza una colección de Beacon Object Files para Cobalt Strike para realizar inyección de procesos, persistencia y más, aprovechando syscalls directas para evadir EDR/AV.
CobaltWhispers está impulsado por SysWhispers2 y InlineWhispers2
CobaltWhispers está basado en StayKit y en el trabajo de Hasherezade y Forrest Orr.
CobaltWhispers fue creado como parte de unas prácticas en el Red Team de NVISO Security. Las publicaciones de blog asociadas se pueden encontrar aquí (inyección de procesos) y aquí (kernel karnage).
CobaltWhispers requiere varias herramientas para compilar:
apt install mingw-w64apt install makeCada proyecto requiere 3 archivos generados por SysWhispers2 / InlineWhispers2 para funcionar:
Estos archivos se pueden generar según la documentación de InlineWhispers2, sin embargo, este no es el método óptimo porque se incluirá mucho código no utilizado:
git clone https://github.com/Sh0ckFR/InlineWhispers2 && cd InlineWhispers2
cd SysWhispers2/ && python3 syswhispers.py --preset all -o syscalls_all && cd ..
python3 InlineWhispers2.py
En su lugar, use SysWhispers2 para generar los archivos de salida solo para las API necesarias, luego suminístrelos manualmente (o mediante un script) a InlineWhispers2, que los convertirá al formato adecuado. Consulte el makefile incluido para obtener información adicional o use los archivos incluidos bajo su propio riesgo.
| Tipo de payload | Objetivo | Fiabilidad (0-5) | Elevado | Observaciones |
|---|---|---|---|---|
| - | - | 5 | No | Hereda los permisos del proceso padre |
Crea un nuevo proceso suspendido con Code Integrity Guard (CIG) habilitado para bloquear binarios firmados que no son de Microsoft. Suplanta el proceso padre especificado. Se devuelve el PID.
Proceso padre: El nombre del proceso a establecer como padre
Ubicación del ejecutable: Ruta completa al ejecutable en disco utilizado para crear el nuevo proceso
| Tipo de payload | Objetivo | Fiabilidad (0-5) | Elevado | Observaciones |
|---|---|---|---|---|
| Shellcode/Raw | PID | 5 | No | - |
Inyecta un payload en un proceso remoto usando NtCreateThreadEx
PID del proceso: El ID de proceso del proceso remoto
Ubicación del payload: Ubicación del payload en formato binario en disco (Condicional | Opcional)
Payload b64: Shellcode crudo en formato de cadena codificada en base64 (Condicional | Opcional)
Listener: Listener para generar el payload (Condicional)
Se debe especificar un listener para generar un payload de Beacon. Si se desea un payload manual, debe proporcionarse mediante una ruta al binario crudo en disco o shellcode codificado en Base64.
| Tipo de payload | Objetivo | Fiabilidad (0-5) | Elevado | Observaciones |
|---|---|---|---|---|
| Shellcode/Raw | PID | 2 | No | Puede potencialmente bloquear el proceso objetivo |
Inyecta un payload en un proceso remoto usando NtQueueApcThread
PID del proceso: El ID de proceso del proceso remoto
Hilos: Número de hilos a los que añadir una llamada APC
Ubicación del payload: Ubicación del payload en formato binario en disco (Condicional | Opcional)
Payload b64: Shellcode crudo en formato de cadena codificada en base64 (Condicional | Opcional)
Listener: Listener para generar el payload (Condicional)
Se debe especificar un listener para generar un payload de Beacon. Si se desea un payload manual, debe proporcionarse mediante una ruta al binario crudo en disco o shellcode codificado en Base64.
| Tipo de payload | Objetivo | Fiabilidad (0-5) | Elevado | Observaciones |
|---|---|---|---|---|
| Shellcode/Raw | Proceso sustituto | 5 | No | - |
Inyecta un payload en un proceso sustituto usando NtMapViewOfSection
Proceso padre: El nombre del proceso a establecer como padre
Ubicación del ejecutable: La ubicación del ejecutable en disco que se usará para crear un nuevo proceso
Ubicación del payload: Ubicación del payload en formato binario en disco (Condicional | Opcional)
Payload b64: Shellcode crudo en formato de cadena codificada en base64 (Condicional | Opcional)
Listener: Listener para generar el payload (Condicional)
Se debe especificar un listener para generar un payload de Beacon. Si se desea un payload manual, debe proporcionarse mediante una ruta al binario crudo en disco o shellcode codificado en Base64.
| Tipo de payload | Objetivo | Fiabilidad (0-5) | Elevado | Observaciones |
|---|---|---|---|---|
| PE | Proceso sustituto | 5 | No | Requiere payload PE x64 |
Inyecta un payload en un proceso sustituto usando secciones transaccionadas y vistas asignadas. Se actualizan el punto de entrada remoto y el PEB; no hay secciones de memoria anómalas ni permisos de memoria anómalos. Consulte aquí para más información.
Proceso padre: El nombre del proceso a establecer como padre
Ubicación del ejecutable: La ubicación del ejecutable en disco que se usará para crear un nuevo proceso
Ubicación del payload: Ubicación del payload PE x64 en disco (Condicional | Opcional)
Payload b64: Payload PE x64 en formato de cadena codificada en base64 (Condicional | Opcional)
Listener: Listener para generar el payload (Condicional)
Se debe especificar un listener para generar un payload de Beacon. Si se desea un payload manual, debe proporcionarse mediante una ruta al PE x64 en disco o un PE x64 codificado en Base64.
ACTUALMENTE NO IMPLEMENTADO
| Tipo de payload | Objetivo | Fiabilidad (0-5) | Elevado | Observaciones |
|---|---|---|---|---|
| Shellcode de posición independiente (PIC) | Proceso sustituto | 5 | Sí | Se requieren permisos elevados para abrir DLL del sistema con permisos de escritura |
Inyecta un payload en un proceso sustituto usando secciones transaccionadas en combinación con DLL hollowing. Consulte aquí para más información.
Proceso padre: El nombre del proceso a establecer como padre
Ubicación del ejecutable: La ubicación del ejecutable en disco que se usará para crear un nuevo proceso
Ubicación del payload: Ubicación del payload en formato binario en disco (Condicional | Opcional)
Payload b64: Shellcode crudo en formato de cadena codificada en base64 (Condicional | Opcional)
Listener: Listener para generar el payload (Condicional)
Se debe especificar un listener para generar un payload de Beacon. Si se desea un payload manual, debe proporcionarse mediante una ruta al binario crudo en disco o shellcode codificado en Base64.