
Une preuve de concept de Reflective Loader Cobalt Strike qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike !

Un chargeur réflectif défini par l'utilisateur (UDRL) proof-of-concept qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike !
| Contributeur | Contributions notables | |
|---|---|---|
| Bobby Cooke | @0xBoku | Auteur et mainteneur d'origine du projet |
| Santiago Pecin | @s4ntiago_p | Améliorations majeures du chargeur réflectif |
| Chris Spehn | @ConsciousHacker | Scripting Aggressor |
| Joshua Magri | @passthehashbrwn | Hooking IAT |
| Dylan Tran | @d_tranman | Spoofing de pile d'appels réflectif |
| James Yeung | @5cript1diot | Appels système indirects |
Le chargeur réflectif intégré de Cobalt Strike est robuste et prend en charge toutes les fonctionnalités d'évasion Malleable PE que Cobalt Strike offre. Le principal inconvénient de l'utilisation d'un UDRL personnalisé est que les fonctionnalités d'évasion Malleable PE peuvent ou non être prises en charge immédiatement.
L'objectif du projet public BokuLoader est d'aider les red teams à créer leur propre UDRL Cobalt Strike interne. Le projet vise à prendre en charge toutes les fonctionnalités d'évasion Malleable PE de CS qui en valent la peine. Certaines fonctionnalités d'évasion s'appuient sur l'intégration de CS, d'autres ont été entièrement recréées, et certaines ne sont pas prises en charge.
Avant d'utiliser ce projet, sous quelque forme que ce soit, vous devez tester correctement que les fonctionnalités d'évasion fonctionnent comme prévu. Entre le code C et le script Aggressor, la compilation avec différentes versions de systèmes d'exploitation, de compilateurs et de Java peut donner des résultats différents.
NtProtectVirtualMemoryobfuscate "true" avec implémentation personnalisée du script Aggressor UDRL.0x1000 octets seront des zéros.XGetProcAddress pour résoudre les symboles
Kernel32.GetProcAddressxLoadLibrary pour résoudre l'adresse de base des DLL et le chargement des DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaScript Console pour vous assurer que BokuLoader a été implémenté dans la build de la beaconRAW fonctionne immédiatement. Lorsque vous utilisez l'Artifact Kit pour le chargeur de beacon, la variable stagesize doit être plus grande que la valeur par défaut.
| Chaîne Cobalt Strike d'origine | Chaîne Cobalt Strike BokuLoader |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA est appelé pour mapper la DLL depuis le disqueKernel32.LoadLibraryExA est DONT_RESOLVE_DLL_REFERENCES (0x00000001)
RX ou RWX existera dans le tas si le kit sleepmask n'est pas utilisé.Kernel32.CreateFileMappingA et Kernel32.MapViewOfFile sont appelés pour allouer la mémoire de la beacon DLL virtuelle.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll ne détectera pas ces appels système.mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 dans sa mémoire exécutable.0x1000 octets de la beacon DLL virtuelle sont des zéros.| Commande | Option(s) | Prise en charge |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Toutes prises en charge via l'implémentation BokuLoader |
module_x64 | string (DLL Name) | Pris en charge via l'implémentation BokuLoader. Les mêmes exigences de DLL stomping que l'implémentation CS s'appliquent |
obfuscate | true/false | Beacons HTTP/S pris en charge via l'implémentation BokuLoader. SMB/TCP n'est actuellement pas pris en charge pour obfuscate true. Détails dans le ticket. Aide acceptée si vous pouvez corriger :) |
entry_point | RVA as decimal number | Pris en charge via l'implémentation BokuLoader |
cleanup | true | Pris en charge via l'intégration CS |
userwx | true/false | Pris en charge via l'implémentation BokuLoader |
sleep_mask | (true/false) or (Sleepmask Kit+true) | Pris en charge. Lorsque vous utilisez le « sleepmask true » par défaut (sans kit sleepmask), définissez « userwx true ». Lorsque vous utilisez le kit sleepmask qui prend en charge la mémoire RX beacon.text (src47/Ekko), définissez « sleepmask true » et « userwx false ». |
magic_mz_x64 | 4 char string | Pris en charge via l'intégration CS |
magic_pe | 2 char string | Pris en charge via l'intégration CS |
transform-x64 prepend | escaped hex string | Modification du script Aggressor BokuLoader.cna |
transform-x64 strrep | string string | Modification du script Aggressor BokuLoader.cna |
stomppe | true/false | Non pris en charge. BokuLoader ne copie pas les en-têtes de la beacon DLL. Les premiers 0x1000 octets de la beacon DLL virtuelle sont 0x00 |
checksum | number | Expérimental. Modification du script Aggressor BokuLoader.cna |
compile_time | date-time string | Expérimental. Modification du script Aggressor BokuLoader.cna |
image_size_x64 | decimal value | Non pris en charge |
name | string | Expérimental. Modification du script Aggressor BokuLoader.cna |
rich_header | escaped hex string | Expérimental. Modification du script Aggressor BokuLoader.cna |
stringw | string | Non pris en charge |
string | string | Non pris en charge |