코발트 스트라이크 비콘 구성 추출하기

파트 2 - 코발트 스트라이크 임플란트 비콘에서 구성 추출하기.

7분 읽기
코발트 스트라이크 비콘 구성 추출하기

코발트 스트라이크 비콘 임플란트 수집 방법에 대한 이전 포스팅을 확인해 주세요. 이 정보를 기반으로 비콘에서 구성을 추출할 것입니다.

이 포스팅에서는 우수한 코발트 스트라이크 구성 추출기(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 명령 및 제어 설명서를 보면 구성 변수에 대한 설명을 확인할 수 있습니다.

예를 들어 sleeptime450000 밀리초로 기본 비콘 체크인을 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.stubpublickey 필드와 함께 인프라 및 활동 그룹을 클러스터링하는 데 사용할 수 있습니다.

다음은 코발트 스트라이크 비콘에서 추출한 구성을 사용하여 활동을 식별하고 클러스터링하는 데 사용할 수 있는 몇 가지 필드에 불과합니다. 구성에 대한 심층적인 분석에 관심이 있으시다면 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 형식으로도 다운로드할 수 있습니다.