
Un chargeur réflectif (Reflective Loader) de Cobalt Strike, preuve de concept, qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike !

Une preuve de concept de Chargeur Réflexif Défini par l'Utilisateur (UDRL) qui vise à recréer, intégrer et améliorer les fonctionnalités d'évasion de Cobalt Strike !
| Contributeur | Contributions notables | |
|---|---|---|
| Bobby Cooke | @0xBoku | Auteur original et mainteneur du projet |
| Santiago Pecin | @s4ntiago_p | Améliorations majeures du chargeur réflexif |
| Chris Spehn | @ConsciousHacker | Scripting Aggressor |
| Joshua Magri | @passthehashbrwn | Accrochage IAT |
| Dylan Tran | @d_tranman | Usurpation de la pile d'appels réflexive |
| James Yeung | @5cript1diot | Appels système indirects |
Le chargeur réflexif intégré de Cobalt Strike est robuste, gérant toutes les fonctionnalités d'évasion PE Malleable que Cobalt Strike a à offrir. Le principal inconvénient de l'utilisation d'un UDRL personnalisé est que les fonctionnalités d'évasion PE Malleable peuvent ou non être prises en charge directement.
L'objectif du projet public BokuLoader est d'aider les équipes rouges à créer leur propre UDRL Cobalt Strike interne. Le projet vise à prendre en charge toutes les fonctionnalités d'évasion PE Malleable de CS qui en valent la peine. Certaines fonctionnalités d'évasion tirent parti de l'intégration 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 de script Aggressor UDRL personnalisé.0x1000 octets seront des zéros.XGetProcAddress pour résoudre les symboles
Kernel32.GetProcAddressxLoadLibrary pour résoudre l'adresse de base de la DLL et le chargement de la DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaScript Console pour vous assurer que BokuLoader a été implémenté dans la construction du beaconRAW fonctionne directement. Lors de l'utilisation du kit Artifact 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ée 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ées pour allouer la mémoire pour la DLL beacon 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 DLL beacon virtuelle sont des zéros.| Commande | Option(s) | Pris en charge |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Tous pris en charge via l'implémentation BokuLoader |
module_x64 | chaîne (Nom de la DLL) | Pris en charge via l'implémentation BokuLoader. Mêmes exigences d'écrasement de DLL que l'implémentation CS |
obfuscate | true/false | Les beacons HTTP/S sont pris en charge via l'implémentation BokuLoader. Les SMB/TCP ne sont actuellement pas pris en charge pour obfuscate true. Détails dans le problème. Acceptez l'aide si vous pouvez corriger :) |
entry_point | RVA en nombre décimal | 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) ou (Sleepmask Kit+true) | Pris en charge. Lors de l'utilisation de "sleepmask true" par défaut (sans kit sleepmask), définir "userwx true". Lors de l'utilisation du kit sleepmask qui prend en charge la mémoire RX beacon.text (src47/Ekko), définir "sleepmask true" && "userwx false". |
magic_mz_x64 | chaîne de 4 caractères | Pris en charge via l'intégration CS |
magic_pe | chaîne de 2 caractères | Pris en charge via l'intégration CS |
transform-x64 prepend | chaîne hexadécimale échappée | Modification du script Aggressor BokuLoader.cna |
transform-x64 strrep | chaîne chaîne | Modification du script Aggressor BokuLoader.cna |
stomppe | true/false | Non pris en charge. BokuLoader ne copie pas les en-têtes de la DLL beacon. Les premiers 0x1000 octets de la DLL beacon virtuelle sont 0x00 |
checksum | nombre | Expérimental. Modification du script Aggressor BokuLoader.cna |
compile_time | chaîne date-heure | Expérimental. Modification du script Aggressor BokuLoader.cna |
image_size_x64 | valeur décimale | Non pris en charge |
name | chaîne | Expérimental. Modification du script Aggressor BokuLoader.cna |
rich_header | chaîne hexadécimale échappée | Expérimental. Modification du script Aggressor BokuLoader.cna |
stringw | chaîne | Non pris en charge |
string | chaîne | Non pris en charge |