코발트 스트라이크와 보안 솔루션의 추격전
코발트 스트라이크(Cobalt Strike)를 쉽게 표현하면, 상용 침투 테스트 도구라 할 수 있다. 최근에는 랜섬웨어 등 각종 고도화된 공격 수행을 위한 도구로 활용되고 있다. 보안 기업들 역시 코발트 스트라이크 활용 공격 대응을 위해 탐지 기법을 고도화하고 있으며, 공격자들은 이를 우회하기 위한 새로운 공격 방식을 적용하고 있다.
이번 글에서는 여러가지 코발트 스트라이크 공격 사례 중, 보안 솔루션의 메모리 기반 진단을 우회하는 형태로 유포된 사례를 소개한다.
코발트 스트라이크는 기업과 기관의 네트워크 및 시스템에 대한 보안 취약점을 점검하기 위한 목적으로 사용 가능하며, 침투 테스트 단계별로 다양한 기능들을 지원한다. 하지만 크랙 버전이 공개되면서 다양한 공격자들에 의해 악성코드로 사용되고 있는 상황이다. 특히 최근에는 지능형지속위협(Advanced Persistent Threats: APT) 및 랜섬웨어를 포함한 대다수의 공격에서 코발트 스트라이크가 내부 시스템 장악을 위한 중간 단계로 활용되고 있다.
[그림 1] 코발트 스트라이크를 활용한 공격 구조도
여러 공격자들이 코발트 스트라이크 해킹 툴을 활용하면서, 보안 솔루션들도 이에 대응하기 위해 파일 진단 뿐만 아니라 코발트 스트라이크의 행위나 메모리를 탐지 대상으로 하고 있다. 다만, 보안 솔루션의 대응이 발전할수록 공격자들도 탐지를 우회하기 위한 공격 기법들을 개발해 활용하고 있다.
안랩 ASEC에서는 코발트 스트라이크 해킹 툴에 의한 공격을 지속적으로 모니터링해오고 있으며, 다수의 공격 사례들을 ASEC블로그와 TI보고서를 통해 다룬 바 있다.
공격 방식
최초 유포 방식은 확인되지 않았지만, 공격자는 윈도우에서 제공하는 유틸리티 프로그램인certutil.exe를 이용하여 코발트 스트라이크를 다운로드했다. 이후, cmd.exe 및 powershell.exe를 이용해 다운로드된 코발트 스트라이크를 실행하였다.
공격 과정에서 코발트 스트라이크가 다운로드된 경로들은 [표 1]과 같다.
%USERPROFILE%\aert.exe
%USERPROFILE%\eees.exe
%USERPROFILE%\eeee.exe
%USERPROFILE%\libraries\abcd.exe
%USERPROFILE%\libraries\abcd.jpg
%ALLUSERSPROFILE%\microsoft\windows\gameexplorer\erer.exe
%ALLUSERSPROFILE%\microsoft\windows\gameexplorer\taskhost.exe
%SystemRoot%\temp\eees.exe
[표 1] 코발트 스트라이크가 다운로드된 경로
다운로드 및 실행된 코발트 스트라이크는 ‘스테이지리스(Stageless)’ 형태로, 실제 백도어 기능을 담당하는 비컨(Beacon)이 파일 상에 포함된 형태를 의미한다. 스테이지리스와 반대되는 형태는 스테이지드(Staged) 방식이며 비컨을 다운로드하는 쉘코드 형태, 즉 스테이저(Stager)로 유포되기 때문에 C&C 서버에 연결하여 백도어 비컨을 다운로드하는 과정이 추가적으로 필요하다.
공격자는 메모리 기반 진단 우회를 위한 PoC 코드를 이용해 exe 실행 파일 형태의 스테이지리스 코발트 스트라이크 페이로드(payload)를 패킹했다. 데이터 섹션에 인코딩되어 존재하는 비컨은 디코딩 과정을 거쳐 RWX 권한의 메모리에 할당되어 실행된다.
►참고: R=읽기, W=쓰기, X: 실행
메모리 진단 우회 기법
공격자는 코발트 스트라이크 해킹 툴을 통해 생성된 비컨을 PoC 코드(Shellcode Fluctuation: advanced in-memory evasion technique)를 이용해 패킹했다. 이 코드는 보안 제품의 메모리 기반 진단을 우회하기 위한 목적으로 개발되었으며, 사용자가 진단을 우회하고 싶은 쉘코드를 지정하여 페이로드를 생성할 수 있다.
해당 PoC가 이용하는 방식은 다음과 같다.
먼저 Sleep() API를 [그림 2]와 같이 후킹하여 추후 Sleep()이 호출될 때, 초기 루틴에서 생성한 이벤트를 발생시킨다.
[그림 2] 이벤트를 발생시키는 Sleep() 후킹 함수
이후 데이터 섹션에 인코딩되어 존재하던 비컨을 디코딩한 후 RWX 권한을 갖는 메모리를 할당하고 해당 메모리에 비컨 페이로드를 복사 및 실행시킨다. 비컨은 C&C 서버와의 통신 과정에서 주기적으로 Sleep() 함수를 호출한다. Sleep()이 호출되면 후킹 함수에 의해 앞서 지정한 이벤트가 발생한다.
해당 이벤트를 모니터링하던 쓰레드(Thread)에서는 이벤트 발생 시 비컨이 동작하던 RWX 권한의 메모리를 RW 권한으로 변경한다. 그리고 메모리 영역을 0x4E로 Xor 디코딩 후 다시 Sleep()을 호출한다.
[그림 3] 이벤트 발생 시 수행되는 루틴
비컨의 코드는 Sleep() 중이기 때문에 동작하지 않는다. 비컨이 있던 메모리 영역은 실행 권한이 없는 RW이고 추가적으로 인코딩되어 있기 때문에, 메모리 영역을 기반으로 코발트 스트라이크를 탐지하는 보안 솔루션에서는 탐지가 불가능하다.
Sleep()이 끝나면 비컨이 동작하는데, 현재 실행 권한이 없기 때문에 예외가 발생한다. 예외가 발생하면 기존에 등록했던 VEH 예외 핸들러가 호출된다. 핸들러에서는 인코딩된 데이터를 다시 Xor 디코딩한 후 메모리 권한을 RWX로 변경한다. 이후 다시 제어가 비컨의 코드로 넘어오기 때문에 비컨은 정상적으로 동작한다.
[그림 4] 디코딩 및 메모리 속성을 변경하는 VEH 핸들러
[그림 5] 비컨의 설정 데이터
공격에 사용된 코발트 스트라이크는 HTTPS 비컨이며 [그림 5]와 같은 설정 데이터를 갖는다. C&C 서버의 경우 국내 기업의 이름을 위장하고 있어, 국내 사용자를 타겟으로 하는 것으로 추정된다.
결론
최근 기업을 대상으로 하는 공격이 증가하는 가운데, 초기 침투 후 기업 내부망을 장악하는 과정에서 코발트 스트라이크와 같은 침투 테스트 도구들이 자주 사용되고 있다. 공격자들은 이러한 도구들을 이용해 최종적으로 기업의 시스템을 장악하여 기밀 정보를 탈취하거나 코인 마이너, 랜섬웨어를 설치하여 기업들에게 금전적인 손해를 가하고 있다.
안랩은 코발트 스트라이크를 활용한 첫 번째 초기 침투 단계부터, 공격자의 명령을 받아 악성 행위를 수행할 수 있는 비컨 백도어에 대한 행위 및 프로세스 메모리 기반 탐지 기술을 보유하고 있다.
안랩 제품군의 진단명과 엔진 버전 정보는 [표 2]와 같다.
Trojan/Win.CobaltStrike.C4897688 (2022.01.07.00)
[표 2] 안랩 제품군 진단명과 엔진 버전 정보
해당 위협은 최근 공개되었지만, 일부 악성코드는 안랩 제품에서 진단되고 있었다. ASEC에서 이 그룹의 활동을 추적하며 악성코드를 대응했지만, 아직 확인되지 않아 미진단된 변형이 존재할 수 있다.
사용자들은 운영체제(OS)와 인터넷 브라우저 등 프로그램과 V3를 포함한 보안 솔루션들을 최신 버전으로 업데이트하여 공격을 사전에 차단할 수 있도록 신경 써야 한다.
출처 : AhnLab