
Полиморфный генератор профилей C2 для Cobalt Strike, который автоматизирует создание уклончивых конфигураций beacon со случайными параметрами для HTTP, DNS и внедрения процессов для снижения обнаружения.
SourcePoint — это полиморфный генератор C2-профилей для Cobalt Strike C2, написанный на Go. SourcePoint позволяет на лету создавать уникальные C2-профили, что помогает уменьшить наши индикаторы компрометации («IoC») и даёт оператору возможность разворачивать сложные профили с минимальными усилиями. Это было достигнуто путём тщательного изучения статей, а также примечаний к патчам для выявления ключевых функций и изменяемых особенностей. SourcePoint был разработан с целью решения проблемы того, как сделать нашу C2-активность менее обнаруживаемой, переходя от вредоносных IoCs к подозрительным. Цель состоит в том, чтобы нашу C2 было сложнее обнаружить, если наши IoC не являются вредоносными по своей природе и требуют дополнительного исследования для выявления подозрительного характера. SourcePoint содержит множество различных настраиваемых параметров для изменения вашего профиля (в большинстве случаев, если оставить поле пустым, SourcePoint выберет их случайным образом за вас). Сгенерированные профили изменяют все аспекты вашего C2. Цель этого проекта — не только помочь обойти средства защиты, основанные на обнаружении, но и помочь вписать C2-трафик и активность в среду, сделав эту активность труднообнаруживаемой.
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 в первую очередь автоматизирует процесс сборки профиля. Очень важно знать все функции, модифицированные в этих профилях. Знание этих функций может действительно помочь повысить ваш успех.
Хотя в справке SourcePoint описано множество настроек и функций, в каждом профиле есть много важных встроенных возможностей, с которыми необходимо ознакомиться. Эти возможности включают:
Эта часть профиля изменяет то, как работает beacon. Некоторые из используемых для изменения поведения функций:
/9ZXq, может также получить шеллкод.Эта часть профиля управляет тем, как beacon загружается в память, и редактирует содержимое DLL beacon. Некоторые из используемых для изменения поведения функций:
Эта часть профиля управляет тем, как beacon формирует внедрённое содержимое и контролирует поведение внедрения процессов. Некоторые из используемых для изменения поведения функций:
Эта часть профиля управляет тем, как beacon обрабатывает модули пост-эксплуатации и команды. Некоторые из используемых для изменения поведения функций:
В настоящее время SourcePoint предоставляет 7 встроенных опций для профилей HTTP/HTTPS трафика, основанных на существующих профилях. Из этих 6, 4 основаны на:
3 опции профиля (5, 6 и 7) специально разработаны для:
Последняя опция (8) предназначена для ввода пользовательского профиля. Эта опция позволяет оператору использовать полностью собственный профиль трафика. Во многих случаях совершенно уникальный профиль трафика обеспечит более высокий успех, чем любой из перечисленных. Это также позволяет операторам по-прежнему использовать изменяемые функции SourcePoint со своим любимым профилем трафика. Поскольку это позволяет создавать уникальные профили, важно убедиться, что вы настроили и адаптировали профиль для работы с SourcePoint. Как минимум:
header "Host" "acme.com"; на header "Host" "{{.Variables.Host}}";/pathtolegitpage/ в поле GET на {{.Variables.HTTP_GET_URI}}/pathtolegitpage/ в поле POST на {{.Variables.HTTP_POST_URI}}Для этого используйте опции -Customuri и -ProfilePath вместе с -Profile 8. Чтобы использовать разные базовые URI для GET и POST, следует использовать -CustomuriGET и -CustomuriPOST вместо -Customuri. При разработке профиля настоятельно рекомендуется использовать нативный ./c2lint для проверки работоспособности.
Комбинируя эти опции в одном профиле, вы можете создать высокоэффективный beacon, способный обходить превентивные и детективные средства контроля. Хотя это остаётся развивающейся игрой в кошки-мышки, комбинация правильных опций против конкретного стека безопасности может быть весьма эффективной.
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:
Профили 1–4 можно использовать без валидного SSL; SourcePoint сгенерирует самоподписанный сертификат, соответствующий типу профиля. Однако действительные SSL-сертификаты крайне важны для успеха любого типа C2. По многим причинам, но очевидно, что отсутствие сертификата означает, что трафик будет незашифрованным (т.е. HTTP, КОТОРЫЙ НИКОГДА НЕ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ), но использование самоподписанного сертификата имеет свои очевидные ограничения. Существует много способов получить действительный SSL-сертификат для создания хранилища ключей; мой предпочтительный способ — использование модифицированной версии HTTPsC2DoneRight.sh, созданной Cham423.
В настоящее время настройка DNS напрямую через SourcePoint не предлагается. Чтобы по-прежнему использовать beacons на основе DNS, в каждом сгенерированном профиле есть закомментированный раздел для dns-beacon.