코발트 스트라이크 비콘 임플란트 수집 방법에 대한 이전 포스팅을 확인해 주세요. 이 정보를 기반으로 비콘에서 구성을 추출할 것입니다.
이 포스팅에서는 우수한 코발트 스트라이크 구성 추출기(CSCE)를 사용하여 바이너리 비콘 페이로드에서 코발트 스트라이크 C2 구성을 수동으로 분석하는 방법을 안내합니다. 또한 메모리에서 비콘을 추출하여 모니터링되는 모든 엔드포인트에서 대규모로 이 작업을 수행할 수 있는 Elastic Stack의 몇 가지 새로운 기능을 활성화하는 방법도 다뤄보겠습니다.
Blackberry 팀은 "어둠 속에서 비콘 찾기"(등록 필요)라는 훌륭한 핸드북을 통해 코발트 스트라이크 비콘 구성을 광범위하게 다루고 있습니다. 여기에서는 구성의 몇 가지 필드에 대해 설명하지만 비콘의 작동 방식에 대해 자세히 알고 싶다면 해당 리소스를 확인하는 것이 좋습니다.
코발트 스트라이크 구성 추출기
스트로즈 프리드버그의 Cobalt Strike 구성 추출기(CSCE) 는 코발트 스트라이크 비콘에서 구성을 추출하고 파싱하는 "파이썬 라이브러리 및 스크립트 세트입니다(").
CSCE를 사용하려면 Python 가상 환경을 생성하고 활성화한 다음 CSCE Python 패키지를 설치합니다.
코발트 스트라이크 구성 추출기 설정하기
$ python3 -m venv csce
$ source csce/bin/activate
(csce) $ pip3 install libcsce
...truncated...
Collecting libcsce
Using cached libcsce-0.1.0-py3-none-any.whl (24 kB)
Collecting pefile>=2019.4.18
...truncated...
다음으로 메모리에서 추출한 비콘 페이로드에서 CSCE를 실행하여 수집할 수 있는 흥미로운 정보가 저장되어 있는지 확인할 수 있습니다(출력을 JSON 문서로 읽기 쉽게 하기 위해 --pretty
플래그를 추가하겠습니다).
CS 비콘 구성의 원자 표시기 보기
(csce) $ csce --pretty beacon.exe
{
"beacontype": [
"HTTPS"
],
"sleeptime": 45000,
"jitter": 37,
"maxgetsize": 1403644,
"spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
"license_id": 334850267,
"cfg_caution": false,
"kill_date": "2021-12-24",
"server": {
"hostname": "clevelandclinic[.]cloud",
"port": 443,
"publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4G...
...truncated...
즉시 비콘이 HTTPS를 사용하여 통신하고 도메인이 clevelandclinic[.]cloud
인 것을 확인할 수 있습니다. 이를 통해 몇 가지 분석을 수행할 수 있는 원자 지표를 얻을 수 있습니다. Malleable 명령 및 제어 설명서를 보면 구성 변수에 대한 설명을 확인할 수 있습니다.
예를 들어 sleeptime
은 450000
밀리초로 기본 비콘 체크인을 60초마다에서 450초 또는 7 ½분으로 변경하는 것을 볼 수 있습니다. 또한 37
의 지터는 450000
밀리초(166,500
밀리초)의 37%에 해당하는 랜덤 지터가 있음을 의미하므로 비콘 체크인은 283,000
~ 450,000
밀리초(4.7 - 7.5분) 사이가 될 수 있습니다.
또한 publickey
필드는 코발트 스트라이크 팀 서버에서 서버와 비콘 간의 통신을 암호화하는 데 사용됩니다. 이는 브라우저 또는 데이터 전송 라이브러리(예: cURL
)로 C2 도메인에 액세스할 때 사용되는 일반 TLS 인증서와는 다릅니다. 이 필드가 중요한 이유는 팀 서버가 각 비콘에 동일한 퍼블리키를 사용하기 때문에 위협 행위자가 여러 캠페인에 동일한 팀 서버를 사용하는 경우가 많으므로 이 구성 데이터는 위협 행위자를 여러 캠페인 및 인프라에 연결하는 데 사용할 수 있으므로 이 필드는 비콘을 관점 팀 서버로 클러스터링하는 데 유용합니다.
구성 출력을 계속 살펴보면 process-inject
중첩 필드( stub
) 주변에서 또 다른 흥미로운 섹션을 볼 수 있습니다:
프로세스-inject.stub 필드 보기
(csce) $ csce --pretty beacon.exe
...truncated...
"process-inject": {
"allocator": "NtMapViewOfSection",
"execute": [
"CreateThread 'ntdll!RtlUserThreadStart'",
"CreateThread",
"NtQueueApcThread-s",
"CreateRemoteThread",
"RtlCreateUserThread"
],
"min_alloc": 17500,
"startrwx": false,
"stub": "IiuPJ9vfuo3dVZ7son6mSA==",
"transform-x86": [
"prepend '\\x90\\x90'"
],
...
stub
필드에는 코발트 스트라이크 자바 아카이브의 Base64 인코딩된 MD5 파일 해시가 포함되어 있습니다. 이를 변환하기 위해 CyberChef를 다시 사용하여 이번에는 "From Base64" 및 "To Hex" 레시피를 추가하고, "To Hex" 레시피에서 "구분 기호" 를 "None" 으로 변경해야 합니다.
이제 Java 아카이브의 MD5 값(222b8f27dbdfba8ddd559eeca27ea648
)을 얻었으므로 VirusTotal과 같은 온라인 데이터베이스에서 이를 확인하여 추가 정보, 특히 SHA256 해시(7af9c759ac78da920395debb443b9007fdf51fa66a48f0fbdaafb30b00a8a858
)를 얻을 수 있습니다.
마지막으로, https://verify.cobaltstrike.com 로 이동하여 해시를 검색하면 CobaltStrike로 SHA256 해시를 확인하여 Java 아카이브의 버전을 식별할 수 있습니다.
이제 이 비콘이 라이선스 버전의 Cobalt Strike 4.4를 사용하여 생성되었음을 알 수 있습니다.
클러스터링 활동에 도움이 되는 구성의 또 다른 필드는 license_id
필드입니다.
코발트 스트라이크 워터마크 보기
...truncated
"spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
"license_id": 334850267,
"cfg_caution": false,
...truncated...
일반적으로 워터마크라고 하며 라이선스마다 고유한 9자리 값입니다. 이 값은 수정할 수 있지만 위에서 설명한 process-inject.stub
및 publickey
필드와 함께 인프라 및 활동 그룹을 클러스터링하는 데 사용할 수 있습니다.
다음은 코발트 스트라이크 비콘에서 추출한 구성을 사용하여 활동을 식별하고 클러스터링하는 데 사용할 수 있는 몇 가지 필드에 불과합니다. 구성에 대한 심층적인 분석에 관심이 있으시다면 Blackberry 팀이 작성한 어둠 속에서 비콘 찾기 코발트 스트라이크 핸드북을 확인하시기 바랍니다.
분석 결과를 실행에 옮기기
코발트 스트라이크 비콘 페이로드와 그 구성, 그 안에 포함된 메타데이터를 수집하기 위한 분석가 플레이북을 테스트하고, 이를 더 많은 데이터에 적용하여 활동 클러스터를 식별할 수 있습니다.
위의 그림에서는 위에서 설명한 것처럼 팀 서버마다 고유한 비콘 페이로드 공개 키의 공유 사용을 기반으로 위협 행위자를 클러스터링할 수 있습니다. 이렇게 하면 여러 비콘 페이로드 해시, 인프라, 캠페인을 하나의 위협 액터로 그룹화할 수 있습니다.
항상 그렇듯이 비콘 페이로드 구성에서 추출한 원자 지표(예시에서는clevelandclinic[.]cloud
)를 사용하면 공유 인프라, 대상 업종 및 위협 행위자 기능을 추가로 식별할 수 있습니다.
이번에는 최고 속도로
이번 릴리즈에서 강조한 모든 단계와 이전 릴리즈에서 강조한 모든 단계는 코발트 스트라이크 비콘 추출 프로젝트를 사용하여 자동화하고 Elasticsearch에 작성할 수 있습니다.
요약
이 포스팅에서는 코발트 스트라이크 가변형 C2 비콘 페이로드를 수집하는 데 사용할 수 있는 Elastic Stack의 새로운 기능에 대해 설명해드렸습니다. 또한 메모리에서 비콘 페이로드를 추출하기 위한 Fleet 정책을 구축하는 프로세스와 그 구성에 대해서도 다루었습니다.
이러한 Fleet 정책과 프로세스를 통해 보안 분석가는 Cobalt Strike 비콘 페이로드와 그 구성을 수집하여 위협 행위자가 제어하는 인프라와 클러스터 활동을 식별할 수 있습니다.
아티팩트
관측 가능 | 유형 | 참고 -------------------------------------------------------------------|-------------|------------------------------------------ 697fddfc5195828777622236f2b133c0a24a6d0dc539ae7da41798c4456a3f89
| SHA256 | 코발트 스트라이크 가변 C2 비콘 페이로드 7475a6c08fa90e7af36fd7aa76be6e06b9e887bc0a6501914688a87a43ac7ac4
| SHA256 | 코발트 스트라이크 가변 C2 비콘 페이로드 f9b38c422a89d73ebdab7c142c8920690ee3a746fc4eea9175d745183c946fc5
| SHA256 | 코발트 스트라이크 가변 C2 비콘 페이로드 clevelandclinic[.]cloud
| domain-name | 코발트 스트라이크 가변 C2 도메인 104[.]197[.]142[.]19
| ipv4-addr | 코발트 스트라이크 가변 C2 IP 주소 192[.]64[.]119[.]19
| ipv4-addr | 코발트 스트라이크 가변 C2 IP 주소
아티팩트
아티팩트는 결합된 압축 번들로 ECS 및 STIX 형식으로도 다운로드할 수 있습니다.