SourcePoint 是一个用 Go 编写的 Cobalt Strike C2 多态 C2 配置文件生成器。SourcePoint 可以动态生成独特的 C2 配置文件,有助于减少我们的入侵指标(IoCs),并允许操作员以最小的投入快速搭建复杂配置文件。这是通过广泛审查文章以及补丁说明来识别关键功能和可修改特性而实现的。SourcePoint 的设计初衷是解决如何使我们的 C2 活动更难被检测的问题,重点是从恶意 IoCs 转向可疑 IoCs。目标是如果我们的 IoCs 本质上不是恶意的,并且需要额外的研究才能发现其可疑性质,那么我们的 C2 就更难被检测到。SourcePoint 包含大量不同的可配置选项,用于修改您的配置文件(在大多数情况下,如果留空,SourcePoint 将随机为您选择)。生成的配置文件会修改 C2 的所有方面。该项目的目标不仅是帮助规避基于检测的控制措施,而且还帮助将 C2 流量和活动融入环境中,使所述活动难以被检测。
go install github.com/Tylous/SourcePoint
$go get gopkg.in/yaml.v2
$go build SourcePoint.go
#./SourcePoint -h
_____ ____ _ __
/ ___/____ __ _______________ / __ \____ (_)___ / /_
\__ \/ __ \/ / / / ___/ ___/ _ \/ /_/ / __ \/ / __ \/ __/
___/ / /_/ / /_/ / / / /__/ __/ ____/ /_/ / / / / / /_
/____/\____/\__,_/_/ \___/\___/_/ \____/_/_/ /_/\__/
(@Tyl0us)
./SourcePoint 的使用方法:
-Allocation string
为注入内容请求的最小内存量(必须高于 4096)
-BeaconGate string
指定 Beacon 门控选项(All、Comms、Core、Cleanup)或特定 API
-CDN string
CDN cookie 名称(通常用于 AzureEdge 配置文件)
-CDN-Value string
CDN cookie 值(通常用于 AzureEdge 配置文件)
-Customuri string
自定义 HTTP GET/POST 配置文件的基础 URI - 不能与 CustomuriGET 或 CustomuriPOST 同时使用
-CustomuriGET string
自定义 HTTP GET 配置文件的基础 URI - 必须与 CustomuriPOST 同时使用
-CustomuriPOST string
自定义 HTTP POST 配置文件的基础 URI - 必须与 CustomuriGET 同时使用
-Datajitter string
在 HTTP-Get 和 HTTP-Post 服务器输出上附加一个值(默认 "50")
-Forwarder
启用 X-forwarded-For 头部(当您的 C2 位于重定向器后面时很有用)
-Host string
团队服务器域名
-Httplib string
选择默认的 HTTP Beacon 库:
[*] wininet
[*] winhttp'(默认 "winhttp")
-Injector string
选择在远程进程中分配内存的首选方法:
[*] VirtualAllocEx(非常适合跨架构,例如 x86 -> x64 和 x64->x86)
[*] NtMapViewOfSection(更隐蔽的选项,但会在失败时回退到 VirtualAllocEx,从而生成更多事件)
-Jitter string
Beacon 回连主机的抖动百分比
-Keylogger string
选择 Beacon 用于记录按键的首选方法:
[*] GetAsyncKeyState(使用 GetAsyncKeyState API(为 x86/x64 进程分别提供 DLL))
[*] SetWindowsHookEx(使用 SetWindowsHookEx API)
-Keystore string
SSL 密钥库名称
-Metadata string
指定如何转换和嵌入元数据到 HTTP 请求中:
[*] base64
[*] base64url
[*] netbios
[*] netbiosu(默认 "base64url")
-Outfile string
输出文件名
-PE_Clone string
Beacon 将模仿的 PE 文件(使用数字):
[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 的 DLL)
[28] InProcessClient.dll (SentinelOne 的 DLL)
[29] umppc.dll (CrowdStrike 的 DLL)
[30] CyMemDef64.dll (Cylance 的 DLL)
-Password string
SSL 证书密码
-PostEX_Name string
后利用活动将生成并注入的文件(使用数字):
[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 配置文件(使用数字):
[1] Windowsupdate
[2] Slack
[3] Gotomeeting
[4] Outlook.Live
[5] Safebrowsing [兼容 Cloudfront]
[6] AzureEdge [兼容 AzureEdge]
[7] Field-Keyword [兼容 Cloudfront]
[8] 自定义(与 ProfilePath 一起使用)
-ProfilePath string
自定义 HTTP GET/POST 配置文件的路径...
-Sleep string
初始 Beacon 休眠时间
-Stage string
禁用主机阶段加载(默认:False)(默认 "false")
-Syscall string
定义使用直接/间接系统调用替代标准 Windows API 函数调用的能力:
[*] None
[*] Direct
[*] Indirect(默认 "None")
-TasksDnsProxyMaxSize string
在一次回连中通过 DNS 通信通道传输的最大代理数据大小(字节)
-TasksMaxSize string
在一次回连中可以通过通信通道传输的最大任务及代理数据大小(字节)
-TasksProxyMaxSize string
在一次回连中通过通信通道传输的最大代理数据大小(字节)
-ThreadSpoof
设置后利用 DLL 以伪造的起始地址生成线程。这些地址是随机生成的(默认 true)
-Uri string
配置文件为 Beacon 提供的 URI 数量
-Useragent string
Beacon 使用的 UserAgent 字符串(留空将随机选择一个):
[*] Win10Chrome
[*] Win10Edge
[*] Win10IE
[*] Win10
[*] Win6.3
[*] Linux
[*] Mac
-Yaml string
Yaml 配置文件的路径
SourcePoint 主要自动化配置文件的构建过程。了解这些配置文件中修改的所有特性非常重要。了解这些特性可以极大地帮助提高您的成功率。
尽管 SourcePoint 的帮助功能中描述了许多设置和特性,但每个配置文件中都内置了许多重要特性,熟悉它们至关重要。这些特性包括:
配置文件的这一部分修改 Beacon 的操作方式。用于修改行为的一些特性包括:
/9ZXq)的 GET 请求的人也可以获取 shellcode配置文件的这一部分控制 Beacon 如何加载到内存中以及编辑 Beacon DLL 的内容。用于修改行为的一些特性包括:
配置文件的这一部分控制 Beacon 如何塑造注入内容以及控制进程注入行为。用于修改行为的一些特性包括:
配置文件的这一部分控制 Beacon 如何处理后利用模块和命令。用于修改行为的一些特性包括:
目前 SourcePoint 为您提供 7 个内置的 HTTP/HTTPS 流量配置文件选项,基于现有的配置文件。其中 6 个受到以下内容的影响并基于:
其中三个配置文件选项(5、6 和 7)专门设计用于:
最后一个选项(8)用于输入自定义配置文件。此选项旨在允许操作员使用完全自定义的流量配置文件。在许多情况下,完全独特的流量配置文件将比这些内置选项获得更高的成功率。这也允许操作员在使用自己常用或首选的流量配置文件的同时,仍然利用 SourcePoint 的可塑性特性。由于这允许使用独特的配置文件,因此确保调整配置文件以使其与 SourcePoint 配合使用非常重要。至少需要:
header "Host" "acme.com"; 替换为 header "Host" "{{.Variables.Host}}";/pathtolegitpage/ 替换为 {{.Variables.HTTP_GET_URI}}/pathtolegitpage/ 替换为 {{.Variables.HTTP_POST_URI}}为此,请使用选项 -Customuri 和 -ProfilePath 以及 -Profile 8。要为 GET 和 POST 使用不同的基础 URI,应使用 -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 创建。
目前 SourcePoint 不直接提供 DNS 自定义。为了仍然允许基于 DNS 的 Beacon,每个生成的配置文件中都有一个注释掉的 dns-beacon 部分。