보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

침투 테스팅 도구 Cobalt Strike Part.1 기능편

2022.05.31

74,224


 

 

 

 

01. Cobalt Strike 개요

 

코발트 스트라이크(Cobalt Strike)는 기업 및 기관의 네트워크와 시스템에 대한 보안 취약점을 점검하는 레드팀(Red Team)을 위한 Java 기반 상용 침투 테스팅 도구로 2022년 4월 기준 최신버전은 4.5버전으로 확인된다.

 

침투 테스트 단계별로 다양한 기능들을 지원하는 것이 가장 큰 특징이나 2020년 11월 크랙된 Cobalt Strike 4 버전이 GitHub를 통해 공개된 이후 다수의 공격자가 악성코드 동작 중간에 내부 시스템 장악을 목적으로 사용되기 시작되었다. 또한, 국내 기업들을 대상으로 하는 랜섬웨어 공격 시도에서 공격자들이 내부 시스템 장악을 위한 중간 단계로 Cobalt Strike를 악용하는 사례가 다수 발견되고 있다.

 

바이러스토탈(Virustotal)에서 발간한 “2021 Malware Trends Report”에 따르면 인기 있는 침투 테스트 도구 중 하나로 2020년 11월 크랙된 Cobalt Strike가 공개된 이후 2021년 1분기에 최초로 업로드된 샘플의 양이 2020년 1분기에 비해 155% 증가한 것으로 확인되었다. 또한, 2021년 1분기 최초 샘플 업로드 이후 Cobalt Strike가 사용된 샘플의 2021년도 검색량 확인 결과 1년간 일정한 양으로 검색되고 있어 다른 공격에 지속적으로 재사용되고 있는 것으로 보여진다.

 

레드팀을 포함하여 악성 행위를 하는 공격자가 어떤 이유로 Cobalt Strike를 사용하게 되었는지에 대해 기능적인 부분을 파고들어 알아보고자 한다.

 

 

 

[그림 1] Cobalt Strike가 포함된 샘플의 최초 분석 요청 그래프 (출처: Virustotal 2021 Malware Trends Report)

 

 

02. Cobalt Strike 상세 기능설명

 

Cobalt Strike의 기능 소개 이전에 위에서 언급한 레드팀의 용어가 생소할 수 있어 레드팀에 대한 내용을 간단히 정리 후 기능 소개로 넘어가려 한다.

 

레드팀은 같은 조직 안에서 모의 적군의 입장을 갖고 현 조직 내의 보안 측면 문제점이 무엇인지 살펴보는 팀이다. 레드팀에서 세운 전략에 따라 공격 시나리오를 사용하기 위해서는 보안장비 우회를 포함한 다양한 공격 기법을 사용해야 하며 시나리오를 활용한 침투를 편리하게 하기 위한 기능이 집약된 상용 침투 테스트용 도구가 Cobalt Strike이다.

 

[그림 2]는 Cobalt Strike가 동작하는 구성도 및 도구 테스트 환경을 설명한 그림이다. Client가 Teamserver에 접속하여 Beacon에 내린 명령을 Listener가 전달하며 Beacon은 전달받은 명령을 실행 후 결과값을 Listener로 전달하는 방식으로 구성되어 있다. 

 

 

[그림 2] Cobalt Strike 동작 구성도

 

 

목록

기능

Client

• Teamserver에 접속하여 명령을 내리는 주체

Teamserver

• Listener가 설치된 서버
• Beacon 관리
• Malleable C2 Profile을 이용한 Beacon 커스터마이징
• Webserver 내장

Listener

• Beacon과 연결되며 C2서버 역할을 수행하는 모듈

Beacon

• 공격 기능을 제공하는 Cobalt StrikePayload (Agent)
• Teamserver에 설치된 Listener 와 통신 및 명령 수행

 

[표 1] Cobalt Strike 동작에 사용되는 기능

 

 

[그림 3]는 Cobalt Strike에서 사용할 수 있는 모든 회피 기술(코드 우회 실행, C2를 정상적인 페이지로 위장등)을 나열하고 있다. 이를 토대로 초기에 침투를 시도하는 부분부터 침투 완료 후 다른 장비로의 이동, 최종 목표에 도달하는 과정을 5단계로 나눠 Cobalt Strike의 기능과 연결하여 설명하려 한다.

 

 

[그림 3] Cobalt Strike에서 사용 가능한 모든 회피 기술 (출처: https://www.aldeid.com/wiki/Cobalt-Strike)

 

 

 

[표 2] MITRE ATT&CK 기반 Cobalt Strike 공격기법

 

 

1) 초기 침투 (Initial Compromise) 및 거점 확보 (Establish Foothold)

 

Cobalt Strike의 동작은 Beacon에서 발생하며 일반적으로 실행 파일 형태를 가질 필요는 없기 때문에 패키지(Packages)기능을 통해 exe, dll, Service exe, hta, VBA 매크로, PowerShell 코드 및 다양한 종류로 제작할 수 있는 특징이 존재한다. [그림 5-4]와 같이 HTML, Macro, Windows 실행파일, 미리 생성된 페이로드를 웹으로 전달하는 방식(Web Drive-by), 스피어 피싱(Spear Phish)까지 다양한 방식으로 Beacon을 생성, 전달이 가능하다. 이에 따라 초기 침투(Initial Compromise)의 경로를 사용자가 여러 방향으로 정하는 것이 가능해진다.

 

 

[그림 4] Cobalt Strike에서 이용 가능한 Beacon 생성 및 유포 기능

 

 

 

 

[그림 5] Listener 메뉴 및 사용 가능한 Beacon 통신 방식 리스트

 

 

Beacon은 생성 시에 Listener를 생성하며 설정에 따라 HTTP, HTTPS, DNS 프로토콜을 이용한 통신이 가능하다. 또한, Beacon 데이터 포함 여부에 따라 스테이저(Stager), 스테이지리스(Stageless)로 구분되며 스테이저(Stager)의 경우 외부 C2에서 Beacon 데이터를 다운로드 받아 메모리상에서 실행하는 방식이며 스테이지리스(Stageless)는 Beacon 데이터가 포함되어 실행되는 방식이다.​ 

 

 

 

[그림 6] 현재 설정된 Malleable C2 Profile의 일부 (출처 : GitHub, threatexpress/malleable-c2)

 

 

Beacon 생성을 위해 Cobalt Strike의 기능 중 Malleable C2 profile을 이용하여 통신 및 실행 관련 설정을 사용자 입맛에 맞게 설정이 가능하다. 실제 GitHub 및 외부에 공유 중인 프로파일이 상당히 많이 존재하며, 레드팀에 소속되어 있는 사용자나 공격자가 손쉽게 다운로드받아 사용할 수 있으며, Cobalt Strike User Guide 내 Malleable Command and Control 내용을 확인하여  작성 및 수정이 가능하다.

 

스크립트에서 사용 가능한 기능 중 스폰(Spawn) 기능을 사용할 경우 Beacon 실행 시 인젝션할 정상 프로세스의 경로명과 인자를 지정하여 사용할 수 있어 보안장비를 우회할 수 있는 기능이 존재한다.

 

 

 

[그림 7] Malleable C2 Profile에서 Spawn 기능 관련 코드(출처 : GitHub, threatexpress/malleable-c2)

 

 

Beacon 통신 방식 설정, HTTP 등 외부 통신 시 위장에 사용될 설정 관련 코드 역시 다수 존재하는 것으로 확인된다. 

 

 

[그림 8] Malleable C2 Profile에서 HTTP 요청 관련 코드(출처 : GitHub, threatexpress/malleable-c2)

 

 

실제 Beacon이 생성된 PC의 트래픽 확인 시 GET, Referer 요청이 jquery 관련 요청으로 되어 있으며 Profile에서 설정한 위장방식을 이용하여 C2와 통신을 시도하는 것으로 확인된다.

 

 

 

[그림 9] Beacon 통신 일부

 

 

2) 권한 상승 (Privilege Escalation)

 

PC 접근에 성공한 경우 [그림 10]과 같은 다양한 메뉴를 확인할 수 있다. 기본적으로 원격 제어가 가능하다는 것을 이용하여 Explore 메뉴 하위에 원격 접속 기능인 Desktop을 비롯하여 File Browser, Net View와 같은 PC 제어 기능을 포함하며 SOCKS Server 생성, Session 관리를 통해 비활성화된 Session의 제거나 현재 Session의 재부팅, 종료 명령 또한 가능하다.

 

계정 정보 획득을 위해서는 권한 상승이 필요하며 elevate 명령어 또는 Access-Elevate 메뉴를 이용하여 권한 상승이 가능하다. 

 

 

[그림 10] Cobalt Strike에서 사용 가능한 PC 제어 메뉴

 

 

[그림 10]의 PC 제어 메뉴 중 Interact의 경우 명령 프롬프트 형태의 창을 생성하며 UID 확인, Powershell 명령 실행, Beacon 제어 및 권한 상승(elevate), 파일 다운로드(download)등 Cobalt Strike 사용 전반에 관련된 명령어가 다수 확인된다.

 

 

[그림 11] Cobalt Strike의 Interact 화면 및 사용 가능한 명령어 리스트

 

 

권한상승에 사용되는 Exploit도구는 기본적으로 2가지(svc-exe : 서비스를 이용한 관리자권한 획득, uac-token-duplication : 인증에 이미 사용된 토큰을 사용하여 UAC를 우회하는 방식)를 제공하고 있으며 사용자가 제작한 스크립트(.cna)를 추가하여 다양한 권한상승 공격시도가 가능하다는 장점이 존재한다. Exploit 도구 제작방법은 Cobalt Strike User Guide 내 Aggressor Script 부분을 참조하면 제작 가능하다.

 

 

 

[그림 12] 권한 상승에 사용 가능한 Exploit 목록

 

 

[그림 12]은 권한 상승 테스트를 위해 권한 상승 관련 스크립트 모음인 ElevateKit   (https://github.com/rsmudge/ElevateKit) 를 추가하였으며 SMBGhost를 비롯한 UAC 우회 관련 취약점을 사용할 수 있다.

 

 

[그림 13] svc-exe Exploit을 이용하여 피해자 PC (100.100.100.133) 권한 상승

 

 

[그림 13]과 같이 권한 상승이 완료되면 SYSTEM 사용자로 바뀐 PC의 정보가 새로 추가되며 피해자 PC에서 SYSTEM 권한을 이용한 다양한 작업이 가능하게 된다. [그림 15]와 같이 실제 100.100.100.133 PC의 이벤트 로그 확인 시 서비스 설치 관련 로그 확인이 가능하다.

 

 

 

[그림 14] 권한 상승 완료된 피해자 PC (100.100.100.133) 정보

 

 

 

[그림 15] 피해자 PC (100.100.100.133) 이벤트 로그에서 확인되는 서비스 설치 관련 로그 

 

 

권한 상승이 진행된 이후 자격 증명 정보 탈취를 진행하기 위해서는 가장 유명한 도구인 미미카츠(Mimikatz)를 사용하고자 할 것이다. Cobalt Strike의 경우 Mimikatz가 내장되어 있으며 logonpasswords 명령어를 통한 ID/PW 획득이 가능하다.

 

 

 

[그림 16] 피해자 PC (100.100.100.133)의 Mimikatz 실행 결과

 

 

추가적으로 기본 내장되어 있는 hashdump를 이용한 패스워드 해시값 획득 또한 가능하다.

 

 

 

[그림 17] 피해자 PC (100.100.100.133) 의 Hashdump 실행 결과

 

 

3) 내부 정찰 (Internal Reconnaissance)

 

권한 상승 및 자격 증명 정보 탈취를 진행하여 최초 접근한 장비 장악이 끝난 이후 공격자는 내부 정찰을 진행하여 다른 PC에 접근하려는 단계에 접어든다. Cobalt Strike의 경우 최초 접근한 장비에서 포트 스캔이 가능하며 포트스캔 결과는 Interact 화면에서 확인할 수 있으며 [그림 19]와 같이 결과값은 따로 저장되어 Table View에서 확인할 수 있다.

 

  

 

[그림 18] 피해자 PC 대역인 100.100.100.0/24 대역 포트스캔 결과

 

 

  

 

[그림 19] Teamserver내 Table View에서 확인 가능한 포트스캔 결과

 

 

내장된 스캐너가 아닌 fscan과 같은 외부 오픈소스 스캐너를 이용하는 방법을 이용할 수 있다.  침입 성공한 PC에 원하는 스캐너를 업로드 한 이후 원격 데스크톱 (VNC)를 이용하여 실행 후 결과를 출력하는 방식으로 사용 할 수 있다.

 

 

 

[그림 20] 원격 접속으로 확인되는 외부 오픈소스 스캐너 (fscan)을 이용한 스캔 결과 (100.100.100.133)

 

 

4) 측면 이동 (Lateral Movement)

 

내부 정찰 과정 및 자격 증명 정보 탈취 과정이 완료되면 내부 전파 과정을 위한 측면 이동을 진행한다. Cobalt Strike에서 제공하는 psexec(psexec64), psexec_psh, winrm(winrm64), ssh(ssh-key)와 같은 도구를 이용하여 Beacon을 이동시키는 방식을 이용한다. 이후, 사용자가 요청한 명령을 실행함과 동시에 Beacon 설치를 통한 PC 장악이 가능한 방식으로 확인된다. 측면 이동 이후 외부 통신 가능 여부에 따라 C2 서버와의 통신 방식이 달라진다.

 

 

목록

내용

외부와 통신이 가능한 경우

다른 장비에 Beacon을 설치, 외부 C&C 서버로부터 명령받음

외부와 통신이 불가능한 경우

SMB Beacon을 설치, HTTP Beacon을 거쳐서 C2 서버로부터 직접적으로 명령을 전달받음

 

[표 3] Beacon이 설치된 PC의 외부통신 가능 여부에 따른 C2와 통신 방식

 

 

최초 접근 성공한 100.100.100.133에서 확보한 정보를 가지고 100.100.100.141 PC로 Beacon을 전달하며 전달에 성공하여 실행이 완료된 경우 SYSTEM 권한을 이용한 정보 획득이 가능해진다. [그림 22]와 같이 100.100.100.141 PC의 이벤트 로그 확인 결과 서비스 설치 이벤트를 확인 할 수 있다.

 

  

 

[그림 21] psexec를 이용하여 측면 이동된 PC(100.100.100.141)의 Mimikatz 실행 결과

 

 

  

 

[그림 22] 측면 이동된 PC(100.100.100.141)에서 확인되는 서비스 설치 관련 이벤트 로그

 

 

5) 지속성 (Persistence) 및 목적 완료 (Complete Mission)

 

Cobalt Strike Beacon의 기본 설정은 일회성 실행으로 생성되어 지속적인 시스템 접근에 어려움이 생긴다. 이를 해결하고자 [그림 23]과 같이 Beacon 생성 시 해당 코드를 추가하여 Beacon이 실행될 때 특정 서비스에 등록하여 지속적인 실행이 가능하게 하는 방법이 있다.

 

  

[그림 23] Cobalt Strike에서 제공하는 지속성 유지를 위한 코드

 

 

또한, GitHub에 공개된 Cobalt Strike 스크립트를 이용하여 서비스, 레지스트리, WMI, 시작 프로그램 등록 등 다양한 방식으로 지속성 유지가 가능하다.

 

 

 

[그림 24] Cobalt Strike 스크립트를 통한 지속성 관련 메뉴 활성화

 

 

[그림 25]과 같이 드라이브 정보 및 경로가 확인될 경우 Upload 기능을 이용한 악성코드 업로드가 가능하며 실행, 파일 다운로드 등의 기능을 포함하고 있어 RAT이 설치되었을 때와 동일한 환경으로 사용할 수 있다.

 

 

[그림 25] Beacon이 설치된 PC의 드라이브 및 경로

 

 

6) 보고서 생성

 

마지막으로 레드팀 도구답게 보고서를 생성하는 기능이 포함되어 있다. 현재까지 레드팀이 진행한 내용 중 목적에 맞게 보고서 출력이 가능하여 추후 공격정보 전달, 보고서 내용을 이용한 취약점 대응 방안에 사용할 수 있는 것으로 보인다.

 

 

 

[그림 26] Reporting 메뉴

 

 

Activity Report의 경우 Beacon이 최초 접근한 시간부터 사용자가 진행한 행위에 대해 시간, 대상, 계정, PID, 행위로 나열된 보고서를 제공한다.

 

 

 

[그림 27] Activity Report의 일부

 

 

특이한 보고서로는 MITRE ATT&CK Matrix의 TTP를 기준으로 정리한 보고서를 생성 가능하다. 레드팀이 진행한 방식 중 TTP에 일치하는 내용의 설명과 ([그림 5-28]내 Credential Dumping), 사용되는 도구로 인해 실제 발생한 이벤트(Related Events), 완화 방안(Mitigation)을 제시하는 것으로 확인된다.

 

 

 

[그림 28] MITRE ATT&CK Matrix의 TTP를 기준으로 한 보고서 내용의 일부

 

 

03. 결론

 

지금까지 침투 테스팅 도구인 Cobalt Strike의 설명, 기능에 대해서 알아보았다. 초기 침투에서 사용되는 스피어 피싱 및 다수의 유포 경로를 시작으로 네트워크 탐지 우회를 위한 도메인 위장, Beacon을 이용한 C2와의 통신, 권한 상승을 통한 SYSTEM 권한 확보 및 계정정보 탈취를 진행한다. 

 

또한, 내장된 스캐너를 이용한 내부 네트워크 파악 후 측면 이동을 통해 목표에 도달한 이후 지속성 작업 및 추가적인 악성코드 실행을 가능하게 만드는 도구로 확인되었다. 레드팀이 사용하는 도구로서 지금까지 진행한 모든 행위에 대한 보고서 작성을 가능하게 하여 블루팀과의 공유 및 추후 공격 대응 및 취약한 부분에 대한 확인할 수 있는 부분 또한 확인되었다.

 

악성코드에서 악용되는 부분은 보고서 부분은 제외한 채 진행되며 GitHub 및 다양한 경로로 사용자들이 제작한 스크립트가 다수 존재하기 때문에 실제로 공격에 사용된 샘플 확보 시 Part.1에서 내용보다 더욱 다양한 내용이 나올 것으로 예상된다. Beacon의 상세 분석 및 수집된 악성코드에서 Cobalt Strike가 어떻게 악용되는지에 대해서는 Part.2에서 다뤄볼 예정이다.

 

 

04. 참고자료

 

[1] Cobalt Strike User Guide – Welcome to Cobalt Strike

https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/welcome_main.htm

[2] Cobalt Strike User Guide – Malleable Command and Control

https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_profile-language.htm

[3] Cobalt Strike User Guide – Aggressor Script

https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/agressor_script.htm

[4] threatexpress/malleable-c2 

https://github.com/threatexpress/malleable-c2/blob/master/jquery-c2.4.4.profile

[5] rsmudge/ElevateKit

https://github.com/rsmudge/ElevateKit

[6] harleyQu1nn/AggressorScripts

https://github.com/harleyQu1nn/AggressorScripts/tree/master/Persistence