
Um Reflective Loader de prova de conceito do Cobalt Strike que visa recriar, integrar e melhorar os recursos de evasão do Cobalt Strike!

Uma prova de conceito de Carregador Reflexivo Definido pelo Usuário (UDRL) que visa recriar, integrar e aprimorar os recursos de evasão do Cobalt Strike!
| Contribuidor | Contribuições Notáveis | |
|---|---|---|
| Bobby Cooke | @0xBoku | Autor original e mantenedor do projeto |
| Santiago Pecin | @s4ntiago_p | Principais aprimoramentos do Carregador Reflexivo |
| Chris Spehn | @ConsciousHacker | Scripts do Aggressor |
| Joshua Magri | @passthehashbrwn | Hooking de IAT |
| Dylan Tran | @d_tranman | Spoofing de Pilha de Chamadas Reflexivo |
| James Yeung | @5cript1diot | Chamadas de Sistema Indiretas |
O carregador reflexivo embutido do Cobalt Strike é robusto, lidando com todos os recursos de evasão de PE Malleable que o Cobalt Strike oferece. A principal desvantagem de usar um UDRL personalizado é que os recursos de evasão Malleable PE podem ou não ser suportados imediatamente.
O objetivo do projeto público BokuLoader é auxiliar equipes vermelhas na criação de seu próprio UDRL interno do Cobalt Strike. O projeto visa suportar todos os recursos de evasão de PE Malleable do CS que valem a pena. Alguns recursos de evasão aproveitam a integração com o CS, outros foram recriados completamente e alguns não são suportados.
Antes de usar este projeto, de qualquer forma, você deve testar adequadamente se os recursos de evasão estão funcionando conforme esperado. Entre o código C e o script Aggressor, a compilação com diferentes versões de sistemas operacionais, compiladores e Java pode retornar resultados diferentes.
NtProtectVirtualMemoryobfuscate "true" com implementação de script Aggressor UDRL personalizado.0x1000 bytes serão nulos.XGetProcAddress para resolução de símbolos
Kernel32.GetProcAddressxLoadLibrary para resolver o endereço base da DLL e carregamento de DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaConsole de Scripts para garantir que o BokuLoader foi implementado na construção do beaconRAW funciona imediatamente. Ao usar o Artifact Kit para o carregador de beacon, a variável stagesize deve ser maior que o padrão.| String Original do Cobalt Strike | String do BokuLoader no Cobalt Strike |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA é chamada para mapear a DLL do discoKernel32.LoadLibraryExA é DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX ou RWX existirá no heap se o sleepmask kit não for usado.Kernel32.CreateFileMappingA e Kernel32.MapViewOfFile são chamadas para alocar memória para a DLL beacon virtual.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll não detectará essas system calls.mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 dentro de sua memória executável.0x1000 bytes da DLL beacon virtual são zeros.| Comando | Opção(ões) | Suportado |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Todos suportados via implementação do BokuLoader |
module_x64 | string (Nome da DLL) | Suportado via implementação do BokuLoader. Os mesmos requisitos de sobrescrita de DLL da implementação do CS se aplicam |
obfuscate | true/false | Beacons HTTP/S suportados via implementação do BokuLoader. SMB/TCP atualmente não é suportado para obfuscate true. Detalhes na issue. Aceitando ajuda se puder consertar :) |
entry_point | RVA como número decimal | Suportado via implementação do BokuLoader |
cleanup | true | Suportado via integração CS |
userwx | true/false | Suportado via implementação do BokuLoader |
sleep_mask | (true/false) ou (Sleepmask Kit+true) | Suportado. Ao usar o padrão "sleepmask true" (sem sleepmask kit) defina "userwx true". Ao usar o sleepmask kit que suporta memória RX beacon.text (src47/Ekko) defina "sleepmask true" && "userwx false". |
magic_mz_x64 | string de 4 caracteres | Suportado via integração CS |
magic_pe | string de 2 caracteres | Suportado via integração CS |
transform-x64 prepend | string hex escapada | Modificação do script Aggressor BokuLoader.cna |
transform-x64 strrep | string string | Modificação do script Aggressor BokuLoader.cna |
stomppe | true/false | Não suportado. O BokuLoader não copia os cabeçalhos da DLL beacon. Os primeiros 0x1000 bytes da DLL beacon virtual são 0x00 |
checksum | número | Experimental. Modificação do script Aggressor BokuLoader.cna |
compile_time | string data-hora | Experimental. Modificação do script Aggressor BokuLoader.cna |
image_size_x64 | valor decimal | Não suportado |
name | string | Experimental. Modificação do script Aggressor BokuLoader.cna |
rich_header | string hex escapada | Experimental. Modificação do script Aggressor BokuLoader.cna |
stringw | string | Não suportado |
string | string | Não suportado |