¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!
BokuLoader — ¡Un cargador reflectante de Cobalt Strike como prueba de concepto que busca recrear, integrar y mejorar las características de evasión de Cobalt Strike! | Kitploit
¡Un cargador reflectante de Cobalt Strike como prueba de concepto que busca recrear, integrar y mejorar las características de evasión de Cobalt Strike!
El cargador reflexivo integrado de Cobalt Strike es robusto, manejando todas las características de evasión Malleable PE que Cobalt Strike tiene para ofrecer. La principal desventaja de usar un UDRL personalizado es que las características de evasión Malleable PE pueden o no ser compatibles de manera predeterminada.
El objetivo del proyecto público BokuLoader es ayudar a los equipos rojos a crear su propio UDRL de Cobalt Strike interno. El proyecto tiene como objetivo apoyar todas las características de evasión Malleable PE que valen la pena de CS. Algunas características de evasión aprovechan la integración con CS, otras han sido recreadas completamente, y algunas no son compatibles.
Antes de usar este proyecto, en cualquier forma, debe probar adecuadamente que las funciones de evasión funcionan como se espera. Entre el código C y el script Aggressor, la compilación con diferentes versiones de sistemas operativos, compiladores y Java puede dar resultados diferentes.
Funciones de Evasión
Funciones de Evasión Específicas de BokuLoader
Suplantación de pila de llamadas reflexiva mediante marcos sintéticos.
Código de cargador reflexivo personalizado en ASM/C
Llamadas al sistema NT indirectas mediante técnicas HellsGate y HalosGate
Todos los cambios de protección de memoria para todas las opciones de asignación se realizan mediante una llamada al sistema indirecta a NtProtectVirtualMemory
obfuscate "true" con implementación personalizada del script Aggressor UDRL.
NOHEADERCOPY
El cargador no copiará las cabeceras del beacon DLL sin procesar al beacon DLL virtual. Los primeros 0x1000 bytes serán nulos.
XGetProcAddress para resolver símbolos
No usa Kernel32.GetProcAddress
xLoadLibrary para resolver la dirección base de DLL y carga de DLL
Para las DLL cargadas, obtiene la dirección base de la DLL desde TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList
No usa Kernel32.LoadLibraryA
Cifrado César para ofuscación de cadenas
Tamaño UDRL de 100k
Los nombres de las DLL de importación y las cadenas de nombres de entrada de importación se sobrescriben en el beacon DLL virtual.
Funciones de evasión Malleable PE compatibles
Comando
Opción(es)
Compatible
allocator
HeapAlloc, MapViewOfFile, VirtualAlloc
Todos compatibles mediante implementación BokuLoader
Beacons HTTP/S compatibles mediante implementación BokuLoader. SMB/TCP actualmente no es compatible para obfuscate true. Detalles en el issue. Se acepta ayuda si puedes corregirlo :)
entry_point
RVA as decimal number
Compatible mediante implementación BokuLoader
cleanup
true
Compatible mediante integración CS
userwx
true/false
Compatible mediante implementación BokuLoader
sleep_mask
(true/false) or (Sleepmask Kit+true)
Compatible. Cuando se usa "sleepmask true" predeterminado (sin sleepmask kit) establezca "userwx true". Cuando se usa sleepmask kit que soporta memoria RX beacon.text (src47/Ekko) establezca "sleepmask true" && "userwx false".
magic_mz_x64
4 char string
Compatible mediante integración CS
magic_pe
2 char string
Compatible mediante integración CS
transform-x64 prepend
escaped hex string
Modificación del script Aggressor BokuLoader.cna
transform-x64 strrep
string string
Modificación del script Aggressor BokuLoader.cna
stomppe
true/false
No compatible. BokuLoader no copia las cabeceras del beacon DLL. Los primeros 0x1000 bytes del beacon DLL virtual son 0x00
Dentro de Cobalt Strike, importe el script Aggressor BokuLoader.cna
Genere el beacon x64 (Attacks -> Packages -> Windows Executable (S))
Use la Script Console para asegurarse de que BokuLoader se implementó en la compilación del beacon
No soporta la opción x86. El binario x86 es el archivo objeto original de Reflective Loader.
Generar beacons RAW funciona de inmediato. Cuando se usa el Artifact Kit para el cargador de beacons, la variable stagesize debe ser mayor que la predeterminada.
BokuLoader cambia algunas cadenas comúnmente detectadas a nuevos valores hardcodeados. Estas cadenas se pueden usar para firmar BokuLoader:
Cadena Original de Cobalt Strike
Cadena de BokuLoader de Cobalt Strike
ReflectiveLoader
BokuLoader
Microsoft Base Cryptographic Provider v1.0
12367321236742382543232341241261363163151d
(admin)
(tomin)
beacon
bacons
Asignadores de Memoria
Pisoteo de Módulo DLL
Se llama a Kernel32.LoadLibraryExA para mapear la DLL desde el disco
El tercer argumento de Kernel32.LoadLibraryExA es DONT_RESOLVE_DLL_REFERENCES (0x00000001)
el sistema no llama a DllMain
No resuelve direcciones en la entrada LDR del PEB como se detalla aquí por MDSec
Detectable escaneando la memoria del proceso con la herramienta pe-sieve
Asignación de Heap
La memoria ejecutable RX o RWX existirá en el heap si no se utiliza el sleepmask kit.
Asignador Mapeado
Se llama a Kernel32.CreateFileMappingA y Kernel32.MapViewOfFile para asignar memoria para el beacon DLL virtual.
Detección de Sleepmask
Si se usa el sleepmask kit, existen métodos de detección para esta asignación de memoria independiente como se detalla aquí por MDSec
Llamadas al Sistema Indirectas
BokuLoader llama a las siguientes llamadas al sistema NT para configurar la memoria del beacon ejecutable cargado: NtAllocateVirtualMemory, NtProtectVirtualMemory
Estas son llamadas indirectamente desde la memoria ejecutable de BokuLoader.
Establecer hooks en el espacio de usuario en ntdll.dll no detectará estas llamadas al sistema.
Puede ser posible registrar devoluciones de llamada del kernel usando un controlador del kernel para monitorear las llamadas al sistema anteriores y detectar su uso.
El propio BokuLoader contendrá las instrucciones de ensamblaje mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 dentro de su memoria ejecutable.
Cabecera del Beacon DLL Virtual
Los primeros 0x1000 bytes del beacon DLL virtual son ceros.
Código Fuente Disponible
El código fuente de BokuLoader se proporciona dentro del repositorio y se puede usar para crear firmas de memoria.
Si tiene orientación adicional de detección, no dude en contribuir enviando un pull request.