
Générateur de profil C2 polymorphe pour Cobalt Strike qui automatise la création de configurations de beacon d'évasion avec des options aléatoires pour HTTP, DNS et l'injection de processus afin de réduire la détection.
SourcePoint est un générateur de profils C2 polymorphes pour les C2 de Cobalt Strike, écrit en Go. SourcePoint permet de générer à la volée des profils C2 uniques, ce qui aide à réduire nos Indicateurs de Compromission ("IoCs") et permet à l'opérateur de déployer des profils complexes avec un minimum d'effort. Cela a été réalisé en examinant en profondeur les Articles ainsi que les Notes de version afin d'identifier les fonctions clés et les fonctionnalités modifiables. SourcePoint a été conçu dans le but de résoudre le problème de la détection de nos activités C2, en se concentrant sur le passage d'IoC malveillants à des IoC suspects. L'objectif ici est qu'il soit plus difficile de détecter notre C2 si nos IoC ne sont pas de nature malveillante et nécessitent des recherches supplémentaires pour découvrir leur nature suspecte. SourcePoint contient de nombreuses options configurables pour modifier votre profil (dans la plupart des cas, si laissé vide, SourcePoint les choisira aléatoirement pour vous). Les profils générés modifient tous les aspects de votre C2. Le but de ce projet est non seulement d'aider à contourner les contrôles basés sur la détection, mais aussi d'aider à fondre le trafic et l'activité C2 dans l'environnement, rendant cette activité difficile à détecter.
go install github.com/Tylous/SourcePoint
$go get gopkg.in/yaml.v2
$go build SourcePoint.go
#./SourcePoint -h
_____ ____ _ __
/ ___/____ __ _______________ / __ \____ (_)___ / /_
\__ \/ __ \/ / / / ___/ ___/ _ \/ /_/ / __ \/ / __ \/ __/
___/ / /_/ / /_/ / / / /__/ __/ ____/ /_/ / / / / / /_
/____/\____/\__,_/_/ \___/\___/_/ \____/_/_/ /_/\__/
(@Tyl0us)
Utilisation de ./SourcePoint :
-Allocation string
Quantité minimale de mémoire à demander pour le contenu injecté (doit être supérieure à 4096)
-BeaconGate string
Spécifie les options de la porte du beacon (All, Comms, Core, Cleanup) ou des API spécifiques
-CDN string
Nom du cookie CDN (généralement utilisé pour les profils AzureEdge)
-CDN-Value string
Valeur du cookie CDN (généralement utilisé pour les profils AzureEdge)
-Customuri string
L'URI de base pour le profil HTTP GET/POST personnalisé - Ne peut pas être utilisé avec CustomuriGET ou CustomuriPOST
-CustomuriGET string
L'URI de base pour le profil HTTP GET personnalisé - Doit être utilisé avec CustomuriPOST
-CustomuriPOST string
L'URI de base pour le profil HTTP POST personnalisé - Doit être utilisé avec CustomuriGET
-Datajitter string
Ajoute une valeur à la sortie serveur HTTP-Get et HTTP-Post (par défaut "50")
-Forwarder
Active l'en-tête X-forwarded-For (utile lorsque votre C2 est derrière un redirecteur)
-Host string
Nom de domaine du serveur d'équipe
-Httplib string
Sélectionne la bibliothèque HTTP Beacon par défaut :
[*] wininet
[*] winhttp' (par défaut "winhttp")
-Injector string
Sélectionne la méthode préférée pour allouer de la mémoire dans le processus distant :
[*] VirtualAllocEx (idéal pour les architectures croisées, i.e. x86 -> x64 et x64->x86)
[*] NtMapViewOfSection (option plus discrète, mais bascule vers VirtualAllocEx, générant plus d'événements)
-Jitter string
Pourcentage de gigue pour le rappel du beacon
-Keylogger string
Sélectionne la méthode préférée que le beacon utilisera pour enregistrer les frappes :
[*] GetAsyncKeyState (utilise l'API GetAsyncKeyState (DLL séparée pour les processus x86/x64))
[*] SetWindowsHookEx (utilise l'API SetWindowsHookEx)
-Keystore string
Nom du magasin de clés SSL
-Metadata string
Spécifie comment transformer et intégrer les métadonnées dans la requête HTTP :
[*] base64
[*] base64url
[*] netbios
[*] netbiosu (par défaut "base64url")
-Outfile string
Nom du fichier de sortie
-PE_Clone string
Fichier PE que le beacon imitera (Utilisez le numéro) :
[1] ActivationManager.dll
[2] audioeng.dll
[3] AzureSettingSyncProvider.dll
[4] BingMaps.dll
[5] DIAGCPL.dll
[6] EDGEHTML.dll
[7] FILEMGMT.dll
[8] FIREWALLCONTROLPANEL.dll
[9] GPSVC.dll
[10] gpupvdev.dll
[11] libcrypto.dll
[12] srvcli.dll
[13] srvsvc.dll
[14] Windows.Storage.Search.dll
[15] Windows.System.Diagnostics.dll
[16] Windows.System.Launcher.dll
[17] Windows.System.SystemManagement.dll
[18] Windows.UI.BioFeedback.dll
[19] Windows.UI.BlockedShutdown.dll
[20] Windows.UI.Core.TextInput.DLL
[21] winsqlite3.dll
[22] WMNetMgr.DLL
[23] wwanapi.dll
[24] WWANSVC.DLL
[25] wow64win.dll
[26] wow64.dll
[27] ctiuser.dll (DLL de Carbon Black)
[28] InProcessClient.dll (DLL de SentinelOne)
[29] umppc.dll (DLL de CrowdStrike)
[30] CyMemDef64.dll (DLL de Cylance)
-Password string
Mot de passe du certificat SSL
-PostEX_Name string
Fichier dans lequel les activités post-exploitation seront lancées et injectées (Utilisez le numéro) :
[1] WerFault.exe
[2] WWAHost.exe
[3] choice.exe
[4] bootcfg.exe
[5] dtdump.exe
[6] expand.exe
[7] fsutil.exe
[8] gpupdate.exe
[9] gpresult.exe
[10] logman.exe
[11] mcbuilder.exe
[12] mtstocom.exe
[13] pcaui.exe
[14] powercfg.exe
[15] svchost.exe
-Profile string
Profil HTTP GET/POST (Utilisez le numéro) :
[1] Windowsupdate
[2] Slack
[3] Gotomeeting
[4] Outlook.Live
[5] Safebrowsing [Compatible Cloudfront]
[6] AzureEdge [Compatible AzureEdge]
[7] Field-Keyword [Compatible Cloudfront]
[8] Personnalisé (utilisé avec ProfilePath)
-ProfilePath string
Chemin du profil HTTP GET/POST personnalisé...
-Sleep string
Temps de sommeil initial du beacon
-Stage string
Désactiver l'hébergement de la phase (Par défaut : False) (par défaut "false")
-Syscall string
Définit la capacité à utiliser des appels système directs/indirects au lieu des appels de fonction API Windows standard :
[*] None
[*] Direct
[*] Indirect (par défaut "None")
-TasksDnsProxyMaxSize string
Taille maximale (en octets) des données proxy à transférer via le canal de communication DNS lors d'un check-in
-TasksMaxSize string
Taille maximale (en octets) des tâches et des données proxy pouvant être transférées via un canal de communication lors d'un check-in
-TasksProxyMaxSize string
Taille maximale (en octets) des données proxy à transférer via le canal de communication lors d'un check-in
-ThreadSpoof
Configure les DLL post-ex pour créer des threads avec une adresse de début falsifiée. Celles-ci sont générées aléatoirement (par défaut true)
-Uri string
Le nombre d'URI qu'un profil doit avoir pour que les beacons choisissent
-Useragent string
Chaîne UserAgent que le beacon doit utiliser (Laissez vide pour en sélectionner une aléatoirement) :
[*] Win10Chrome
[*] Win10Edge
[*] Win10IE
[*] Win10
[*] Win6.3
[*] Linux
[*] Mac
-Yaml string
Chemin vers le fichier de configuration YAML
SourcePoint automatise principalement le processus de construction d'un profil. Il est très important de connaître toutes les fonctionnalités modifiées dans ces profils. Connaître ces fonctionnalités peut vraiment aider à augmenter votre taux de réussite.
Bien qu'il y ait beaucoup de paramètres et de fonctionnalités décrits dans la fonction d'aide de SourcePoint, il existe de nombreuses fonctionnalités importantes intégrées dans chaque profil qu'il est important de connaître. Ces fonctionnalités sont :
Cette partie de votre profil modifie le fonctionnement du beacon. Certaines des fonctionnalités utilisées pour modifier le comportement sont :
/9ZXq peut également récupérer le shellcode.Cette partie de votre profil contrôle comment le beacon est chargé en mémoire et modifie le contenu de la DLL du beacon. Certaines des fonctionnalités utilisées pour modifier le comportement sont :
Cette partie de votre profil contrôle comment le beacon façonne le contenu injecté et contrôle le comportement d'injection de processus. Certaines des fonctionnalités utilisées pour modifier le comportement sont :
Cette partie de votre profil contrôle comment le beacon gère les modules et commandes de post-exploitation. Certaines des fonctionnalités utilisées pour modifier le comportement sont :
Actuellement, SourcePoint vous propose 7 options intégrées pour les profils de trafic HTTP/HTTPS, basées sur des profils existants. Parmi ces 6 (note: incohérence dans le texte original: "6" alors qu'il y a 7 profils listés), 4 sont influencés par et basés sur :
3 des options de profil (5, 6 et 7) sont conçues spécifiquement pour :
La dernière option (8) est conçue pour importer un profil personnalisé. Cette option permet à un opérateur d'utiliser un profil de trafic complètement personnalisé. Il existe de nombreux cas où un profil de trafic totalement unique apportera un succès élevé plutôt qu'un de ceux-ci. Cela permet également aux opérateurs de toujours utiliser les fonctionnalités de malléabilité de SourcePoint avec leur profil de trafic préféré ou habituel. Comme cela permet des profils uniques, il est important de s'assurer de peaufiner et d'ajuster le profil pour que SourcePoint fonctionne. Au minimum :
header "Host" "acme.com"; par header "Host" "{{.Variables.Host}}";/pathtolegitpage/ sous le champ GET par {{.Variables.HTTP_GET_URI}}/pathtolegitpage/ sous le champ POST par {{.Variables.HTTP_POST_URI}}Pour ce faire, utilisez les options suivantes -Customuri et -ProfilePath avec -Profile 8. Pour utiliser une base URI différente pour GET et POST, utilisez -CustomuriGET et -CustomuriPOST à la place de -Customuri. Lors du développement d'un profil, il est fortement recommandé d'utiliser le ./c2lint natif pour vérifier que tout fonctionne.
En combinant ces options en un seul profil, vous pouvez créer un beacon hautement efficace capable de contourner les contrôles préventifs et de détection. Bien que cela reste un jeu du chat et de la souris en évolution, combiner les bonnes options contre une pile de sécurité spécifique peut être très efficace.
Stage: "False"
Host: "acme-email.com"
Keystore: "acme-email.com.store"
Password: "Password"
Metadata: "netbios"
Injector: "VirtualAllocEx"
Outfile: "acme.profile"
PE_Clone: 20
Profile: 4
Allocation: 5312
Jitter: 30
Debug: true
Sleep: 35
Uri: 3
Useragent: "Mac"
Post-EX Processname: 11
Datajitter: 40
Keylogger: "SetWindowsHookEx"
Customuri:
CDN:
CDN_Value:
ProfilePath:
Syscall_method:
Httplib:
ThreadSpoof: true
Customuri:
CustomuriGET:
CustomuriPOST:
Forwarder: False
TasksMaxSize:
TasksProxyMaxSize:
TasksDnsProxyMaxSize:
Les profils de mode 1 à 4 peuvent être utilisés sans SSL valide, SourcePoint générera un certificat auto-signé lié au type de profil. Cependant, des certificats SSL valides sont extrêmement importants pour le succès de tout type de C2. Pour de nombreuses raisons, mais évidemment, aucun certificat signifie que le trafic ne sera pas chiffré (c'est-à-dire HTTP, QUI NE DEVRAIT JAMAIS ÊTRE UTILISÉ), mais l'utilisation d'un certificat auto-signé comporte ses limites évidentes. Il existe de nombreuses façons d'obtenir un certificat SSL valide pour créer un magasin de clés ; ma méthode préférée consiste à utiliser une version modifiée de HTTPsC2DoneRight.sh, créée par Cham423.
Actuellement, la personnalisation DNS n'est pas proposée directement via SourcePoint. Pour permettre tout de même les beacons basés sur DNS, une section commentée pour le dns-beacon se trouve dans chaque profil généré.