
Gerador polimórfico de perfil C2 para Cobalt Strike que automatiza a criação de configurações evasivas de beacon com opções aleatórias para HTTP, DNS e injeção de processo para reduzir a detecção.
SourcePoint é um gerador polimórfico de perfis C2 para servidores Cobalt Strike C2, escrito em Go. O SourcePoint permite gerar perfis C2 únicos em tempo real, ajudando a reduzir nossos Indicadores de Comprometimento ("IoCs") e permitindo que o operador crie perfis complexos com esforço mínimo. Isso foi feito revisando extensivamente Artigos e Notas de Lançamento para identificar funções-chave e recursos modificáveis. O SourcePoint foi projetado com a intenção de abordar o problema de como tornar nossa atividade C2 mais difícil de detectar, focando em afastar-se de IoCs maliciosos para suspeitos. O objetivo aqui é que seja mais difícil detectar nosso C2 se nossos IoCs não forem de natureza maliciosa e exigirem pesquisa adicional para descobrir a natureza suspeita. O SourcePoint contém inúmeras opções configuráveis para modificar seu perfil (na maioria dos casos, se deixado em branco, o SourcePoint as escolherá aleatoriamente para você). Os perfis gerados modificam todos os aspectos do seu C2. O objetivo deste projeto não é apenas ajudar a contornar controles baseados em detecção, mas também ajudar a camuflar o tráfego e a atividade C2 no ambiente, tornando essa atividade 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
Quantidade mínima de memória a solicitar para conteúdo injetado (deve ser maior que 4096)
-BeaconGate string
Especificar opções de gate do beacon (All, Comms, Core, Cleanup) ou APIs específicas
-CDN string
Nome do cookie CDN (normalmente usado em perfis AzureEdge)
-CDN-Value string
Valor do cookie CDN (normalmente usado em perfis AzureEdge)
-Customuri string
A URI base para perfil HTTP GET/POST personalizado - Não pode ser usado com CustomuriGET ou CustomuriPOST
-CustomuriGET string
A URI base para perfil HTTP GET personalizado - Deve ser usado com CustomuriPOST
-CustomuriPOST string
A URI base para perfil HTTP POST personalizado - Deve ser usado com CustomuriGET
-Datajitter string
Acrescenta um valor à saída do servidor HTTP-Get e HTTP-Post (padrão "50")
-Forwarder
Ativa o cabeçalho X-forwarded-For (bom quando seu C2 está atrás de um redirecionador)
-Host string
Nome de domínio do servidor da equipe
-Httplib string
Selecionar a biblioteca HTTP Beacon padrão:
[*] wininet
[*] winhttp' (padrão "winhttp")
-Injector string
Selecionar o método preferido para alocar memória no processo remoto:
[*] VirtualAllocEx (Ótimo para arquitetura cruzada, ou seja, x86 -> x64 e x64->x86)
[*] NtMapViewOfSection (Uma opção mais furtiva, porém falha e recorre ao VirtualAllocEx, gerando mais eventos quando isso acontece)
-Jitter string
Percentual de jitter para chamada de retorno do beacon
-Keylogger string
Selecionar o método preferido que o beacon usará para registrar teclas:
[*] GetAsyncKeyState (Usa a API GetAsyncKeyState (DLL separada para processo x86/x64))
[*] SetWindowsHookEx (Usa a API SetWindowsHookEx)
-Keystore string
Nome do keystore SSL
-Metadata string
Especifica como transformar e incorporar metadados na requisição HTTP:
[*] base64
[*] base64url
[*] netbios
[*] netbiosu (padrão "base64url")
-Outfile string
Nome do arquivo de saída
-PE_Clone string
Arquivo PE que o beacon irá imitar (Use o 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 do Carbon Black)
[28] InProcessClient.dll (DLL do SentinelOne)
[29] umppc.dll (DLL do CrowdStrike)
[30] CyMemDef64.dll (DLL do Cylance)
-Password string
Senha do certificado SSL
-PostEX_Name string
Arquivo em que as atividades pós-ex irão gerar e injetar (Use o 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 (Use o número):
[1] Windowsupdate
[2] Slack
[3] Gotomeeting
[4] Outlook.Live
[5] Safebrowsing [Compatível com Cloudfront]
[6] AzureEdge [Compatível com AzureEdge]
[7] Field-Keyword [Compatível com Cloudfront]
[8] Custom (Usado com ProfilePath)
-ProfilePath string
Caminho do perfil HTTP GET/POST personalizado...
-Sleep string
Tempo inicial de sono do beacon
-Stage string
Desabilitar staging do host (Padrão: False) (padrão "false")
-Syscall string
Define a capacidade de usar chamadas de sistema diretas/indiretas em vez das chamadas de função padrão da API Windows:
[*] None
[*] Direct
[*] Indirect (padrão "None")
-TasksDnsProxyMaxSize string
O tamanho máximo (em bytes) de dados de proxy a transferir via canal de comunicação DNS durante um check-in
-TasksMaxSize string
O tamanho máximo (em bytes) de tarefa(s) e dados de proxy que podem ser transferidos através de um canal de comunicação durante um check-in
-TasksProxyMaxSize string
O tamanho máximo (em bytes) de dados de proxy a transferir via canal de comunicação durante um check-in
-ThreadSpoof
Define DLLs pós-ex para criar threads com um endereço inicial falsificado. Eles são gerados aleatoriamente (padrão true)
-Uri string
O número de URIs que um perfil para beacons pode escolher
-Useragent string
String de UserAgent que o beacon usará (Deixe em branco para selecionar aleatoriamente):
[*] Win10Chrome
[*] Win10Edge
[*] Win10IE
[*] Win10
[*] Win6.3
[*] Linux
[*] Mac
-Yaml string
Caminho para o arquivo de configuração YAML
O SourcePoint automatiza principalmente o processo de construção de um perfil. É muito importante conhecer todos os recursos modificados nesses perfis. Conhecer esses recursos pode realmente ajudar a aumentar seu sucesso.
Embora haja muitas configurações e recursos descritos na função de ajuda do SourcePoint, existem vários recursos importantes embutidos em cada perfil que é essencial conhecer. Esses recursos são:
Esta parte do seu perfil modifica a forma como o beacon opera. Alguns dos recursos usados para modificar o comportamento são:
/9ZXq pode obter o shellcode tambémEsta parte do seu perfil controla como o beacon é carregado na memória e edita o conteúdo da DLL do beacon. Alguns dos recursos usados para modificar o comportamento são:
Esta parte do seu perfil controla como o beacon molda o conteúdo injetado e controla o comportamento da injeção de processo. Alguns dos recursos usados para modificar o comportamento são:
Esta parte do seu perfil controla como o beacon lida com módulos e comandos de pós-exploração. Alguns dos recursos usados para modificar o comportamento são:
Atualmente, o SourcePoint oferece 7 opções embutidas para perfis de tráfego HTTP/HTTPS, baseadas em perfis existentes. Destes 6, 4 são influenciados e baseados em:
3 das opções de perfil (5, 6 e 7) são projetadas especificamente para:
A última opção (8) é projetada para inserir um perfil personalizado. Esta opção foi projetada para permitir que um operador utilize um perfil de tráfego completamente personalizado. Há muitos casos em que um perfil de tráfego totalmente único terá alto sucesso em vez de um destes. Isso também permite que operadores ainda utilizem os recursos de maleabilidade do SourcePoint com seu perfil de tráfego preferido ou de uso frequente. Como isso permite perfis únicos, é importante garantir que você ajuste e modifique o perfil para o SourcePoint funcionar. No mínimo:
header "Host" "acme.com"; por header "Host" "{{.Variables.Host}}";/pathtolegitpage/ no campo GET por {{.Variables.HTTP_GET_URI}}/pathtolegitpage/ no campo POST por {{.Variables.HTTP_POST_URI}}Para fazer isso, use as seguintes opções -Customuri e -ProfilePath juntamente com -Profile 8. Para usar uma base de URI diferente para GET e POST, -CustomuriGET e -CustomuriPOST devem ser usados em vez de -Customuri. Ao desenvolver um perfil, é altamente recomendável usar o ./c2lint nativo para verificar se tudo está funcionando.
Ao combinar essas opções em um único perfil, você pode criar um beacon altamente eficaz que pode contornar controles preventivos e de detecção. Embora isso continue sendo um jogo de gato e rato em evolução, combinar as opções certas contra uma pilha de segurança específica pode ser bastante eficaz.
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:
Os modos de perfil 1-4 podem ser usados sem um SSL válido; o SourcePoint gerará um certificado autoassinado relacionado ao tipo de perfil. No entanto, certificados SSL válidos são extremamente importantes para o sucesso de qualquer tipo de C2. Por muitas razões, mas obviamente, nenhum certificado significa que o tráfego será não criptografado (ou seja, HTTP, QUE NUNCA DEVE SER USADO), mas usar um certificado autoassinado tem suas limitações óbvias. Existem muitas maneiras de obter um certificado SSL válido para criar um keystore; minha maneira preferida é usar uma versão modificada do HTTPsC2DoneRight.sh, criado por Cham423.
Atualmente, a personalização de DNS não é oferecida diretamente pelo SourcePoint. Para ainda permitir beacons baseados em DNS, há uma seção comentada para dns-beacon em cada perfil gerado.