
Generador de perfiles C2 polimórficos para Cobalt Strike que automatiza la creación de configuraciones evasivas de beacon con opciones aleatorizadas para HTTP, DNS e inyección de procesos para reducir la detección.
SourcePoint es un generador polimórfico de perfiles C2 para Cobalt Strike C2s, escrito en Go. SourcePoint permite generar perfiles C2 únicos sobre la marcha, lo que ayuda a reducir nuestros Indicadores de Compromiso ("IoCs") y permite al operador desplegar perfiles complejos con un mínimo esfuerzo. Esto se logró revisando exhaustivamente Artículos así como Notas de Parche para identificar funciones clave y características modificables. SourcePoint fue diseñado con la intención de abordar el problema de cómo hacer que nuestra actividad C2 sea más difícil de detectar, centrándose en pasar de IoCs maliciosos a sospechosos. El objetivo aquí es que sea más difícil detectar nuestro C2 si nuestros IoCs no son de naturaleza maliciosa y requieren investigación adicional para descubrir la naturaleza sospechosa. SourcePoint contiene numerosas opciones configurables para elegir para modificar su perfil (en la mayoría de los casos, si se deja en blanco, SourcePoint las elegirá aleatoriamente). Los perfiles generados modifican todos los aspectos de su C2. El objetivo de este proyecto no solo es ayudar a eludir los controles basados en detección, sino también ayudar a mezclar el tráfico y la actividad C2 en el entorno, haciendo que dicha actividad sea difícil de detectar.
go install github.com/Tylous/SourcePoint
$go get gopkg.in/yaml.v2
$go build SourcePoint.go
#./SourcePoint -h
_____ ____ _ __
/ ___/____ __ _______________ / __ \____ (_)___ / /_
\__ \/ __ \/ / / / ___/ ___/ _ \/ /_/ / __ \/ / __ \/ __/
___/ / /_/ / /_/ / / / /__/ __/ ____/ /_/ / / / / / /_
/____/\____/\__,_/_/ \___/\___/_/ \____/_/_/ /_/\__/
(@Tyl0us)
Uso de ./SourcePoint:
-Allocation string
Cantidad mínima de memoria a solicitar para el contenido inyectado (debe ser mayor a 4096)
-BeaconGate string
Especificar opciones de puerta de beacon (All, Comms, Core, Cleanup) o APIs específicas
-CDN string
Nombre de cookie CDN (típicamente usado para perfiles AzureEdge)
-CDN-Value string
Valor de cookie CDN (típicamente usado para perfiles AzureEdge)
-Customuri string
La URI base para el perfil HTTP GET/POST personalizado - No puede usarse con CustomuriGET o CustomuriPOST
-CustomuriGET string
La URI base para el perfil HTTP GET personalizado - Debe usarse con CustomuriPOST
-CustomuriPOST string
La URI base para el perfil HTTP POST personalizado - Debe usarse con CustomuriGET
-Datajitter string
Añade un valor a la salida del servidor HTTP-Get y HTTP-Post (por defecto "50")
-Forwarder
Habilita el encabezado X-forwarded-For (Bueno cuando tu C2 está detrás de un redirector)
-Host string
Nombre de dominio del servidor de equipo
-Httplib string
Seleccionar la librería predeterminada de HTTP Beacon:
[*] wininet
[*] winhttp' (por defecto "winhttp")
-Injector string
Seleccionar el método preferido para asignar memoria en el proceso remoto:
[*] VirtualAllocEx (Excelente para arquitectura cruzada, ej. x86 -> x64 y x64->x86)
[*] NtMapViewOfSection (Una opción más sigilosa, sin embargo falla a VirtualAllocEx, generando más eventos cuando lo hace)
-Jitter string
Porcentaje de jitter para la llamada al beacon
-Keylogger string
Seleccionar el método preferido que usará el beacon para registrar teclas:
[*] GetAsyncKeyState (Usa la API GetAsyncKeyState (DLL separado para proceso x86/x64))
[*] SetWindowsHookEx (Usa la API SetWindowsHookEx)
-Keystore string
Nombre del almacén de claves SSL
-Metadata string
Especifica cómo transformar e incrustar metadatos en la solicitud HTTP:
[*] base64
[*] base64url
[*] netbios
[*] netbiosu (por defecto "base64url")
-Outfile string
Nombre del archivo de salida
-PE_Clone string
Archivo PE que el beacon imitará (Usar el número):
[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
Contraseña del certificado SSL
-PostEX_Name string
Archivo en el que las actividades Post-Ex se generarán e inyectarán (Usar el número):
[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
Perfil HTTP GET/POST (Usar el número):
[1] Windowsupdate
[2] Slack
[3] Gotomeeting
[4] Outlook.Live
[5] Safebrowsing [Compatible con Cloudfront]
[6] AzureEdge [Compatible con AzureEdge]
[7] Field-Keyword [Compatible con Cloudfront]
[8] Personalizado (Usado con ProfilePath)
-ProfilePath string
Ruta del perfil HTTP GET/POST personalizado...
-Sleep string
Tiempo de espera inicial del beacon
-Stage string
Deshabilitar host staging (Por defecto: False) (por defecto "false")
-Syscall string
Define la capacidad de usar llamadas al sistema directas/indirectas en lugar de las llamadas estándar de la API de Windows:
[*] None
[*] Direct
[*] Indirect (por defecto "None")
-TasksDnsProxyMaxSize string
El tamaño máximo (en bytes) de datos de proxy a transferir a través del canal de comunicación DNS en un check-in
-TasksMaxSize string
El tamaño máximo (en bytes) de tareas y datos de proxy que se pueden transferir a través de un canal de comunicación en un check-in
-TasksProxyMaxSize string
El tamaño máximo (en bytes) de datos de proxy a transferir a través del canal de comunicación en un check-in
-ThreadSpoof
Establece que los DLL post-ex generen hilos con una dirección de inicio falsificada. Se generan aleatoriamente (por defecto true)
-Uri string
El número de URIs que un perfil debe tener para que los beacons elijan
-Useragent string
Cadena UserAgent para que el beacon la use (Dejar en blanco para seleccionar una aleatoria):
[*] Win10Chrome
[*] Win10Edge
[*] Win10IE
[*] Win10
[*] Win6.3
[*] Linux
[*] Mac
-Yaml string
Ruta al archivo de configuración YAML
SourcePoint automatiza principalmente el proceso de construcción de un perfil. Es muy importante conocer todas las características modificadas en estos perfiles. Conocer estas características puede realmente ayudar a aumentar su éxito.
Si bien hay muchas configuraciones y características descritas en la función de ayuda de SourcePoint, hay numerosas características importantes integradas en cada perfil que es importante conocer. Estas características son:
Esta parte de su perfil modifica cómo opera el beacon. Algunas de las características utilizadas para modificar el comportamiento son:
/9ZXq también puede obtener el shellcodeEsta parte de su perfil controla cómo se carga el beacon en memoria y edita el contenido del DLL del beacon. Algunas de las características utilizadas para modificar el comportamiento son:
Esta parte de su perfil controla cómo el beacon da forma al contenido inyectado y controla el comportamiento de la inyección de procesos. Algunas de las características utilizadas para modificar el comportamiento son:
Esta parte de su perfil controla cómo el beacon maneja los módulos y comandos de post-explotación. Algunas de las características utilizadas para modificar el comportamiento son:
Actualmente SourcePoint le proporciona 7 opciones integradas para perfiles de tráfico HTTP/HTTPS, basadas en perfiles existentes. De estos 6, 4 están influenciados y basados en:
3 de las opciones de perfil (5, 6 y 7) están diseñadas específicamente para:
La última opción (8) está diseñada para introducir un perfil personalizado. Esta opción está diseñada para permitir que un operador utilice un perfil de tráfico completamente personalizado. Hay muchos casos en los que un perfil de tráfico completamente único proporcionará un alto éxito en lugar de uno de estos. Esto también permite a los operadores seguir utilizando las características de maleabilidad de SourcePoint con su perfil de tráfico preferido o de referencia. Dado que esto permite perfiles únicos, es importante asegurarse de ajustar y modificar el perfil para que SourcePoint funcione. Como mínimo:
header "Host" "acme.com"; con header "Host" "{{.Variables.Host}}";/pathtolegitpage/ en el campo GET con {{.Variables.HTTP_GET_URI}}/pathtolegitpage/ en el campo POST con {{.Variables.HTTP_POST_URI}}Para hacerlo, use las siguientes opciones -Customuri y -ProfilePath junto con -Profile 8. Para usar una URI base diferente para GET y POST, se deben usar -CustomuriGET y -CustomuriPOST en lugar de -Customuri. Al desarrollar un perfil, se recomienda encarecidamente usar el nativo ./c2lint para verificar que todo funcione correctamente.
Al combinar estas opciones en un solo perfil, puede crear un beacon altamente efectivo que pueda eludir controles preventivos y de detección. Si bien esto sigue siendo un juego del gato y el ratón en evolución, combinar las opciones correctas contra una pila de seguridad específica puede ser bastante efectivo.
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:
Los modos de perfil 1-4 se pueden usar sin un SSL válido, SourcePoint generará un certificado autofirmado relacionado con el tipo de perfil. Sin embargo, los certificados SSL válidos son extremadamente importantes para el éxito de cualquier tipo de C2. Por muchas razones, pero obviamente ningún certificado significa que el tráfico no estará cifrado (es decir, HTTP QUE NUNCA DEBERÍA USARSE), pero usar un certificado autofirmado tiene sus limitaciones obvias. Hay muchas formas de obtener un certificado SSL válido para hacer un almacén de claves, mi forma preferida es usar una versión modificada de HTTPsC2DoneRight.sh, creada por Cham423.
Actualmente, la personalización de DNS no se ofrece directamente a través de SourcePoint. Para seguir permitiendo beacons basados en DNS, hay una sección comentada para dns-beacon en cada perfil generado.