
Polymorpher C2-Profilgenerator für Cobalt Strike, der die Erstellung von ausweichenden Beacon-Konfigurationen mit randomisierten Optionen für HTTP, DNS und Prozessinjektion automatisiert, um die Erkennung zu reduzieren.
SourcePoint ist ein polymorpher C2-Profilgenerator für Cobalt Strike C2s, geschrieben in Go. SourcePoint ermöglicht die Erstellung einzigartiger C2-Profile im laufenden Betrieb, was dazu beiträgt, unsere Indicators of Compromise („IoCs“) zu reduzieren und dem Operator das Aufsetzen komplexer Profile mit minimalem Aufwand ermöglicht. Dies wurde durch umfassende Überprüfung von Artikeln sowie Patch Notes erreicht, um Schlüsselfunktionen und modifizierbare Merkmale zu identifizieren. SourcePoint wurde mit der Absicht entwickelt, das Problem anzugehen, wie unsere C2-Aktivitäten schwerer zu erkennen sind, wobei der Fokus darauf liegt, sich von bösartigen IoCs zu verdächtigen zu bewegen. Das Ziel ist, dass es schwieriger ist, unser C2 zu erkennen, wenn unsere IoCs nicht von Natur aus bösartig sind und zusätzliche Recherche erfordern, um die verdächtige Natur zu entdecken. SourcePoint enthält zahlreiche verschiedene konfigurierbare Optionen zur Auswahl, um Ihr Profil zu modifizieren (in den meisten Fällen wählt SourcePoint zufällig für Sie aus, falls Felder leer gelassen werden). Die generierten Profile modifizieren alle Aspekte Ihres C2. Das Ziel dieses Projekts ist es, nicht nur bei der Umgehung erkennungsbasierter Kontrollen zu helfen, sondern auch C2-Datenverkehr und -Aktivitäten in die Umgebung einzufügen, um diese Aktivitäten schwer erkennbar zu machen.
go install github.com/Tylous/SourcePoint
$go get gopkg.in/yaml.v2
$go build SourcePoint.go
#./SourcePoint -h
_____ ____ _ __
/ ___/____ __ _______________ / __ \____ (_)___ / /_
\__ \/ __ \/ / / / ___/ ___/ _ \/ /_/ / __ \/ / __ \/ __/
___/ / /_/ / /_/ / / / /__/ __/ ____/ /_/ / / / / / /_
/____/\____/\__,_/_/ \___/\___/_/ \____/_/_/ /_/\__/
(@Tyl0us)
Usage of ./SourcePoint:
-Allocation string
Minimum amount of memory to request for injected content (must be higher than 4096)
-BeaconGate string
Specify beacon gate options (All, Comms, Core, Cleanup) or specific APIs
-CDN string
CDN cookie name (typically used for AzureEdge profiles)
-CDN-Value string
CDN cookie value (typically used for AzureEdge profiles)
-Customuri string
The base URI for custom HTTP GET/POST profile - Cannot be used with CustomuriGET or CustomuriPOST
-CustomuriGET string
The base URI for custom HTTP GET profile - Must be used with CustomuriPOST
-CustomuriPOST string
The base URI for custom HTTP POST profile - Must be used with CustomuriGET
-Datajitter string
Appends a value to HTTP-Get and HTTP-Post server output (default "50")
-Forwarder
Enabled the X-forwarded-For header (Good for when your C2 is behind a redirector)
-Host string
Team server domain name
-Httplib string
Select the default HTTP Beacon library:
[*] wininet
[*] winhttp' (default "winhttp")
-Injector string
Select the preferred method to allocate memory in the remote process:
[*] VirtualAllocEx (Great for cross architecture i.e x86 -> x64 and x64->x86)
[*] NtMapViewOfSection (A more stealthly option, however fails over to VirtualAllocEx, generating more events when it does)
-Jitter string
Jitter percentage for beacon call home
-Keylogger string
Select the preferred method the beacon will use to log keystrokes:
[*] GetAsyncKeyState (Uses GetAsyncKeyState API (Separate DLL for x86/x64 process))
[*] SetWindowsHookEx (Uses SetWindowsHookEx API)
-Keystore string
SSL keystore name
-Metadata string
Specifies how to transform and embed metadata into the HTTP request:
[*] base64
[*] base64url
[*] netbios
[*] netbiosu (default "base64url")
-Outfile string
Name of output file
-PE_Clone string
PE file beacon will mimic (Use the number):
[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 (Carbon Black's DLL)
[28] InProcessClient.dll (SentinelOne's DLL)
[29] umppc.dll (CrowdStrike's DLL)
[30] CyMemDef64.dll (Cylance's DLL)
-Password string
SSL certificate password
-PostEX_Name string
File Post-Ex activities will spawn and inject into (Use the number):
[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
HTTP GET/POST profile (Use the number):
[1] Windowsupdate
[2] Slack
[3] Gotomeeting
[4] Outlook.Live
[5] Safebrowsing [Cloudfront Compatible]
[6] AzureEdge [AzureEdge Compatible]
[7] Field-Keyword [Cloudfront Compatible]
[8] Custom (Used with ProfilePath)
-ProfilePath string
Path of custom HTTP GET/POST profile...
-Sleep string
Initial beacon sleep time
-Stage string
Disable host staging (Default: False) (default "false")
-Syscall string
Defines the ability to use direct/indirect system calls instead of the standard Windows API functions calls:
[*] None
[*] Direct
[*] Indirect (default "None")
-TasksDnsProxyMaxSize string
The maximum size (in bytes) of proxy data to transfer via the DNS communication channel at a check in
-TasksMaxSize string
The maximum size (in bytes) of task(s) and proxy data that can be transferred through a communication channel at a check in
-TasksProxyMaxSize string
The maximum size (in bytes) of proxy data to transfer via the communication channel at a check in
-ThreadSpoof
Sets post-ex DLLs to spawn threads with a spoofed start address. These are generated randomly (default true)
-Uri string
The number URIs a profile for beacons to choose from
-Useragent string
UserAgent string for the beacon to use (Leave blank to randomly select one):
[*] Win10Chrome
[*] Win10Edge
[*] Win10IE
[*] Win10
[*] Win6.3
[*] Linux
[*] Mac
-Yaml string
Path to the Yaml config file
SourcePoint automatisiert hauptsächlich den Build-Prozess eines Profils. Es ist sehr wichtig, alle in diesen Profilen modifizierten Funktionen zu kennen. Die Kenntnis dieser Funktionen kann Ihren Erfolg erheblich steigern.
Während es viele Einstellungen und Funktionen gibt, die in der Hilfefunktion von SourcePoint beschrieben werden, enthalten die Profile zahlreiche wichtige Funktionen, die man kennen sollte. Diese Funktionen sind:
Dieser Teil Ihres Profils modifiziert, wie der Beacon arbeitet. Einige der zur Verhaltensänderung verwendeten Funktionen sind:
/9ZXq sendet, ebenfalls die Shellcode abrufen.Dieser Teil Ihres Profils steuert, wie der Beacon in den Speicher geladen wird und den Inhalt der Beacon-DLL bearbeitet. Einige der zur Verhaltensänderung verwendeten Funktionen sind:
Dieser Teil Ihres Profils steuert, wie der Beacon injizierten Inhalt formt und das Verhalten der Prozessinjektion kontrolliert. Einige der zur Verhaltensänderung verwendeten Funktionen sind:
Dieser Teil Ihres Profils steuert, wie der Beacon Post-Exploitation-Module und -Befehle behandelt. Einige der zur Verhaltensänderung verwendeten Funktionen sind:
Derzeit bietet SourcePoint 7 integrierte Optionen für HTTP/HTTPS-Datenverkehrsprofile, basierend auf vorhandenen Profilen. Von diesen 7 sind 4 beeinflusst durch und basieren auf:
3 der Profiloptionen (5, 6 und 7) sind speziell entworfen für:
Die letzte Option (8) ist für die Eingabe eines benutzerdefinierten Profils gedacht. Diese Option ermöglicht es einem Operator, ein vollständig benutzerdefiniertes Datenverkehrsprofil zu verwenden. Es gibt viele Fälle, in denen ein völlig einzigartiges Datenverkehrsprofil mehr Erfolg bringt als eines der vordefinierten. Dies erlaubt es Operatoren auch, die Anpassungsfähigkeiten von SourcePoint mit ihrem bevorzugten oder häufig genutzten Datenverkehrsprofil zu nutzen. Da dies einzigartige Profile ermöglicht, ist es wichtig, das Profil anzupassen und anzupassen, damit SourcePoint funktioniert. Mindestens:
header "Host" "acme.com"; durch header "Host" "{{.Variables.Host}}";/pathtolegitpage/ im GET-Feld durch {{.Variables.HTTP_GET_URI}}/pathtolegitpage/ im POST-Feld durch {{.Variables.HTTP_POST_URI}}Verwenden Sie dazu die Optionen -Customuri und -ProfilePath zusammen mit -Profile 8. Um eine andere URI-Basis für GET und POST zu verwenden, sollten -CustomuriGET und -CustomuriPOST anstelle von -Customuri verwendet werden. Bei der Entwicklung eines Profils wird dringend empfohlen, das native ./c2lint zu verwenden, um zu überprüfen, ob alles funktioniert.
Durch die Kombination dieser Optionen in einem Profil können Sie einen hochwirksamen Beacon erstellen, der präventive und detektive Kontrollen umgehen kann. Auch wenn dies ein sich ständig weiterentwickelndes Katz-und-Maus-Spiel bleibt, kann die Kombination der richtigen Optionen gegen einen bestimmten Sicherheitsstack sehr effektiv sein.
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:
Profile der Modi 1–4 können ohne gültiges SSL-Zertifikat verwendet werden; SourcePoint generiert ein selbstsigniertes Zertifikat, das zum Profiltyp passt. Dennoch sind gültige SSL-Zertifikate für den Erfolg jeder Art von C2 äußerst wichtig. Aus vielen Gründen – offensichtlich bedeutet kein Zertifikat, dass der Datenverkehr unverschlüsselt ist (d. h. HTTP, DAS NIEMALS VERWENDET WERDEN SOLLTE) –, aber die Verwendung eines selbstsignierten Zertifikats hat seine offensichtlichen Einschränkungen. Es gibt viele Möglichkeiten, ein gültiges SSL-Zertifikat zu erhalten, um einen Keystore zu erstellen. Mein bevorzugter Weg ist die Verwendung einer modifizierten Version von HTTPsC2DoneRight.sh, erstellt von Cham423.
Derzeit wird die DNS-Anpassung nicht direkt über SourcePoint angeboten. Um dennoch DNS-basierte Beacons zu ermöglichen, gibt es in jedem generierten Profil einen auskommentierten Abschnitt für den DNS-Beacon.