
Cobalt Strike용 다형성 C2 프로필 생성기로, HTTP, DNS 및 프로세스 인젝션을 위한 무작위 옵션으로 탐지를 회피하는 비콘 구성을 자동으로 생성합니다.
SourcePoint은 Cobalt Strike C2를 위한 다형성 C2 프로필 생성기로, Go로 작성되었습니다. SourcePoint를 사용하면 고유한 C2 프로필을 즉석에서 생성할 수 있어 손상 지표(IoC)를 줄이고 운영자가 최소한의 노력으로 복잡한 프로필을 구축할 수 있습니다. 이는 문서 및 패치 노트를 광범위하게 검토하여 핵심 기능과 수정 가능한 특징을 식별함으로써 이루어졌습니다. SourcePoint는 C2 활동을 탐지하기 어렵게 만드는 문제를 해결하기 위해 설계되었으며, 악성 IoC에서 의심스러운 IoC로 초점을 이동하는 데 중점을 두고 있습니다. 목표는 IoC가 본질적으로 악성이 아니고 의심스러운 성격을 발견하기 위해 추가 조사가 필요하다면 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
비콘 게이트 옵션 지정 (All, Comms, Core, Cleanup) 또는 특정 API
-CDN string
CDN 쿠키 이름 (일반적으로 AzureEdge 프로필에 사용)
-CDN-Value string
CDN 쿠키 값 (일반적으로 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 비콘 라이브러리 선택:
[*] wininet
[*] winhttp (기본값 "winhttp")
-Injector string
원격 프로세스에서 메모리를 할당하는 방법 선택:
[*] VirtualAllocEx (크로스 아키텍처, 즉 x86 -> x64 및 x64->x86에 적합)
[*] NtMapViewOfSection (더 은밀한 옵션이지만 VirtualAllocEx로 대체되며, 그렇게 되면 더 많은 이벤트가 발생)
-Jitter string
비콘 홈 콜백에 대한 지터 비율
-Keylogger string
비콘이 키 입력을 기록하는 방법 선택:
[*] 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
비콘이 모방할 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
Post-Exploitation 활동이 생성되고 주입될 파일 (숫자 사용):
[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
초기 비콘 절전 시간
-Stage string
호스트 스테이징 비활성화 (기본값: False) (기본값 "false")
-Syscall string
표준 Windows API 함수 호출 대신 직접/간접 시스템 호출 사용 기능 정의:
[*] None
[*] Direct
[*] Indirect (기본값 "None")
-TasksDnsProxyMaxSize string
DNS 통신 채널을 통해 체크인 시 전송할 프록시 데이터의 최대 크기 (바이트)
-TasksMaxSize string
통신 채널을 통해 체크인 시 전송할 작업 및 프록시 데이터의 최대 크기 (바이트)
-TasksProxyMaxSize string
통신 채널을 통해 체크인 시 전송할 프록시 데이터의 최대 크기 (바이트)
-ThreadSpoof
Post-Exploitation DLL이 스푸핑된 시작 주소로 스레드를 생성하도록 설정 (무작위로 생성됨) (기본값 true)
-Uri string
비콘이 선택할 URI의 개수
-Useragent string
비콘이 사용할 UserAgent 문자열 (비워두면 무작위 선택):
[*] Win10Chrome
[*] Win10Edge
[*] Win10IE
[*] Win10
[*] Win6.3
[*] Linux
[*] Mac
-Yaml string
Yaml 구성 파일 경로
SourcePoint는 주로 프로필의 빌드 과정을 자동화합니다. 이러한 프로필에서 수정된 모든 기능을 아는 것이 매우 중요합니다. 이러한 기능을 알면 성공 가능성을 크게 높일 수 있습니다.
SourcePoint의 도움말 기능에 설명된 많은 설정과 기능 외에도, 각 프로필에 내장된 몇 가지 중요한 기능이 있으므로 숙지하는 것이 중요합니다. 이러한 기능은 다음과 같습니다.
프로필의 이 부분은 비콘이 작동하는 방식을 수정합니다. 동작을 수정하는 데 사용되는 일부 기능은 다음과 같습니다.
/9ZXq와 같은 특정 값을 가진 GET 요청을 보내는 누구나 셸코드를 가져올 수 있습니다.프로필의 이 부분은 비콘이 메모리에 로드되는 방식과 비콘 DLL의 콘텐츠를 편집하는 방법을 제어합니다. 동작을 수정하는 데 사용되는 일부 기능은 다음과 같습니다.
프로필의 이 부분은 비콘이 주입된 콘텐츠의 형태를 결정하고 프로세스 인젝션 동작을 제어합니다. 동작을 수정하는 데 사용되는 일부 기능은 다음과 같습니다.
프로필의 이 부분은 비콘이 포스트 익스플로잇 모듈과 명령을 처리하는 방법을 제어합니다. 동작을 수정하는 데 사용되는 일부 기능은 다음과 같습니다.
현재 SourcePoint는 기존 프로필을 기반으로 HTTP/HTTPS 트래픽 프로필에 대해 7가지 내장 옵션을 제공합니다. 이 중 6개는 다음에 영향을 받고 기반을 둡니다.
프로필 옵션 중 3개(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 기준을 사용하려면 -Customuri 대신 -CustomuriGET 및 -CustomuriPOST를 사용해야 합니다. 프로필을 개발하는 동안 기본 ./c2lint를 사용하여 모든 것이 작동하는지 확인하는 것이 좋습니다.
이러한 옵션을 하나의 프로필에 결합하면 예방 및 탐지 제어를 우회할 수 있는 매우 효과적인 비콘을 만들 수 있습니다. 이는 진화하는 고양이와 쥐 게임이지만, 특정 보안 스택에 대해 올바른 옵션을 결합하면 상당히 효과적일 수 있습니다.
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 인증서를 얻어 키스토어를 만드는 방법은 여러 가지가 있으며, 제가 주로 사용하는 방법은 Cham423이 만든 HTTPsC2DoneRight.sh의 수정된 버전을 사용하는 것입니다.
현재 DNS 사용자 정의는 SourcePoint를 통해 직접 제공되지 않습니다. DNS 기반 비콘을 계속 허용하기 위해 생성된 모든 프로필에는 dns-beacon에 대한 주석 처리된 섹션이 있습니다.