Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !
BokuLoader — 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 ! | Kitploit
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 !
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.
Fonctionnalités d'évasion
Fonctionnalités d'évasion spécifiques à BokuLoader
Usurpation de la pile d'appels réflexive via des trames synthétiques.
Code de chargeur réflexif personnalisé en ASM/C
Appels système NT indirects via les techniques HellsGate et HalosGate
Toutes les modifications de protection mémoire pour toutes les options d'allocation sont effectuées via un appel système indirect à NtProtectVirtualMemory
obfuscate "true" avec implémentation de script Aggressor UDRL personnalisé.
NOHEADERCOPY
Le chargeur ne copiera pas les en-têtes de la DLL beacon brute vers la DLL beacon virtuelle. Les premiers 0x1000 octets seront des zéros.
XGetProcAddress pour résoudre les symboles
N'utilise pas Kernel32.GetProcAddress
xLoadLibrary pour résoudre l'adresse de base de la DLL et le chargement de la DLL
Pour les DLL chargées, obtient l'adresse de base de la DLL depuis TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList
N'utilise pas Kernel32.LoadLibraryA
Chiffrement César pour l'obfuscation des chaînes
Taille UDRL de 100k
Les noms de DLL importées et les chaînes de noms d'entrée d'importation sont écrasés dans la DLL beacon virtuelle.
Fonctionnalités d'évasion PE Malleable prises en charge
Commande
Option(s)
Pris en charge
allocator
HeapAlloc, MapViewOfFile, VirtualAlloc
Tous pris en charge via l'implémentation BokuLoader
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
Dans Cobalt Strike, importez le script Aggressor BokuLoader.cna
Générez le beacon x64 (Attacks -> Packages -> Windows Executable (S))
Utilisez la Script Console pour vous assurer que BokuLoader a été implémenté dans la construction du beacon
Ne prend pas en charge l'option x86. Le binaire x86 est le fichier objet du chargeur réflexif original.
La génération de beacons RAW 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.
BokuLoader modifie certaines chaînes couramment détectées en de nouvelles valeurs codées en dur. Ces chaînes peuvent être utilisées pour signer BokuLoader :
Chaîne Cobalt Strike d'origine
Chaîne Cobalt Strike BokuLoader
ReflectiveLoader
BokuLoader
Microsoft Base Cryptographic Provider v1.0
12367321236742382543232341241261363163151d
(admin)
(tomin)
beacon
bacons
Allocateurs mémoire
Écrasement de module DLL
Kernel32.LoadLibraryExA est appelée pour mapper la DLL depuis le disque
Le 3ème argument de Kernel32.LoadLibraryExA est DONT_RESOLVE_DLL_REFERENCES (0x00000001)
le système n'appelle pas DllMain
Ne résout pas les adresses dans l'entrée LDR PEB comme détaillé par MDSec ici
Détectable en analysant la mémoire du processus avec l'outil pe-sieve
Allocation de tas
Une mémoire exécutable RX ou RWX existera dans le tas si le kit sleepmask n'est pas utilisé.
Allocateur mappé
Kernel32.CreateFileMappingA et Kernel32.MapViewOfFile sont appelées pour allouer la mémoire pour la DLL beacon virtuelle.
Détection Sleepmask
Si le kit sleepmask est utilisé, il existe des méthodes de détection pour cette allocation mémoire indépendante comme détaillé par MDSec ici
Appels système indirects
BokuLoader appelle les appels système NT suivants pour configurer la mémoire du beacon exécutable chargé : NtAllocateVirtualMemory, NtProtectVirtualMemory
Ceux-ci sont appelés indirectement depuis la mémoire exécutable de BokuLoader.
La définition de hooks en mode utilisateur dans ntdll.dll ne détectera pas ces appels système.
Il peut être possible d'enregistrer des callbacks noyau en utilisant un pilote noyau pour surveiller les appels système ci-dessus et détecter leur utilisation.
BokuLoader lui-même contiendra les instructions assembleur mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 dans sa mémoire exécutable.
En-tête de la DLL beacon virtuelle
Les premiers 0x1000 octets de la DLL beacon virtuelle sont des zéros.
Code source disponible
Le code source de BokuLoader est fourni dans le dépôt et peut être utilisé pour créer des signatures mémoire.
Si vous avez des conseils de détection supplémentaires, n'hésitez pas à contribuer en soumettant une demande de tirage.