2018년 2월 12일 월요일
평창올림픽을
노린 파괴형 악성코드 올림픽 디스트로이어
(Olympic
Destroyer)
이 블로그 게시물은 Warren Mercer와
Paul Rascagneres가 공동으로 작성했습니다.
2월 12일
12시 업데이트: 맵핑된 파일 공유에 대한 파괴형 악성코드 행위 및 관련 섹션 업데이트
요약
대한민국 평창에서 2018 동계올림픽이 열리고 있습니다. 영국의 가디언지는 개막식이 열리는 동안 올림픽 컴퓨터 시스템에 기술적 문제가 발생했다는 기사를 보도했습니다. 관계자들에 의하면 개막식 진행에 있어 중요치 않은 시스템에 약간의 기술적 문제가 있었지만 12시간만에 완벽하게 복구되었다고 합니다. 2월 11일 일요일, 올림픽 조직위 관계자들은 사이버 공격이 발생했음을 인정했지만 구체적인 입장 표명은 없었습니다.
Talos는 이번 공격에 사용된 것으로 판단할 만한 충분한 근거가 있는 샘플을 확인, 이에 대한 분석을 진행하였습니다. 계속 조사중이기는 하지만, 현재까지는 감염 벡터를 밝혀내지 못한 상태입니다. 그러나 확인된 악성코드 샘플들은 올림픽에 대한 정보 탈취가 아니라 올림픽을 방해하는 것에 목적을 둔 것으로 보입니다. 오직 파괴적인 목적으로만 공격이 이루어졌으며, 데이터를 훔치려는 시도는 보이지 않았습니다. 악성코드 샘플을 분석한 결과, 공격자들은 PsExec 같이 정상적인 소프트웨어를 사용하여 은밀히 침투하고자 했음을 확인할 수 있었습니다. 이러한 파괴형 악성코드는 쉐도우 복사본(shadow copy)과 이벤트 로그를 삭제하고 PsExec 및 WMI 같은 정상 툴을 사용해 네트워크 안에서 이동함으로써 컴퓨터를 사용 불능 상태로 만드는 것을 목적으로 합니다. 이는 과거 BadRabbit과Nyetya 랜섬웨어에서 확인했던 방식들과 유사합니다.
올림픽
디스트로이어의 동작 방식
초기
단계
초기단계의 edb1ff2521fb4bf748111f92786d260d40407a2e8463dcd24bb09f908ee13eb9 샘플은 실행 시 피해 시스템에 여러 개의 파일을 주입하는 바이너리입니다. 이들 파일은 리소스(난독화된) 형태로 시스템에 주입됩니다. 이들 파일에는 무작위로 생성된 이름이 붙여지지만, 디스크 기록 시의 파일 해시는 여러 인스턴스를 분석하는 동안에도 동일합니다. 현재로서는 초기에 사용된 감염 벡터가 무엇인지 파악하지 못한 상태입니다. 단, 바이너리 파일인 것으로 보아 여러 경로를 통해 침투했을 것으로 보입니다.
드롭된 2개의 파일(탈취 모듈)은 123과 명명된 파이프(named pipe) 등 두 가지 인자값들을 통해 실행됩니다. 명명된 파이프는 초기 단계와 침투된 실행 파일 간에 통신 채널 역할을 하는데, 이러한 침투 기법은 BadRabbit과 Nyetya 랜섬웨어에서 봤던 것입니다.
초기 단계에서는 네트워크를 통한 확산을 수행하게 됩니다. 네트워크 확산을 위해 아래와 같이 두 가지 기법을 사용하여 네트워크 탐색을 수행합니다.
Windows API GetIPNetTable에서 ARP 테이블 확인
“SELECT ds_cn FROM ds_computer”라는 요청을 통해 WMI(WQL 사용)로 확인 (이 요청을 실행하면 현재 환경/디렉토리 내의 모든 시스템이 나열)
PsExec 및 WMI(Win32_Process 클래스를 통해)를 사용하여 네트워크를 통한 확산이 진행됩니다. 아래 코드가 원격으로 실행됩니다.
초기단계에서와 동일한 작업을 %ProgramData%%COMPUTERNAME%.exe의 원격 시스템에 복사하여 VBScript를 통해 실행하는 것이 목적입니다.
Lateral movement를 진행하려면 자격 증명(credentials)이 필요하기 때문에 이 악성코드는 2개의 스틸러들(다음 섹션에 설명)를 사용하고 바이너리 내에서 하드코딩된 자격 증명을 사용합니다.
위와 같이 공격을 시도한 도메인은 이번 평창올림픽과 관련이 있습니다. 악성코드 작성자는 사용자 이름, 도메인 이름, 서버 이름, 비밀번호 같이 평창올림픽 인프라에 대한 지식이 풍부한 것으로 보입니다. 바이너리 내에 하드코딩된 계정 정보만 44건이었습니다.
파일
주입
브라우저 자격 증명 스틸러:
올림픽 디스트로이어는 브라우저 자격 증명 스틸러를 주입시킵니다. 최종 페이로드는 난독화된 리소스로 주입이 됩니다. 앞서 설명했듯이 이 샘플을 실행하기 위해서는 2개의 인자값들이 필요합니다. 정보 스틸러는 Internet Explorer, Firefox 및 Chrome과 모두 호환됩니다. 이 악성코드는 레지스트리 파일을 파싱한 후 SQLite 파일에 대한 쿼리를 통해 저장되어 있는 자격 증명 정보들을 획득합니다. SQLite는 해당 악성코드 샘플에 임베디드되어 있습니다.
시스템 자격 증명 스틸러
올림픽 디스트로이어는 브라우저 자격 증명 스틸러 외에도 시스템 스틸러를 드롭하여 실행합니다. 이 스틸러는 Mimikatz에서 사용된 것과 비슷한 기법을 통해 LSASS에서 자격 증명을 탈취하려고 시도합니다. 초기 단계에서 파싱된 출력 형식은 다음과 같습니다.
파괴형 악성코드
이 악성코드의 시스템 파괴 기능은 감염 시스템에서의 초기 실행과정에서부터 시작됩니다. 앞서 설명했듯이 악성코드의 초기 실행이 되는 과정에서 디스크에 여러 개의 파일이 기록됩니다. 그 뒤를 이어 악성 파괴 요소를 시작으로 악성코드의 파괴 행위는 계속됩니다. 이 악성코드는 피해 시스템에서 탈취한 cmd.exe를 이용하여 가장 먼저 vssadmin을 통해 시스템에서 가능한 모든 쉐도우 복사본을 삭제합니다.
C:Windowssystem32cmd.exe /c
c:Windowssystem32vssadmin.exe delete shadows /all /quiet
다음 단계로, 피해 시스템에서 다시 한 번 cmd.exe를 실행합니다. 여기서는 wbadmin.exe를 사용하고 있지만, wbadmin을 잘 모르는 분들은 최신 운영 체제의 ntbackup라고 생각하면 됩니다.
C:Windowssystem32cmd.exe /c
wbadmin.exe delete catalog –quiet
이 단계는 파일 복구 과정을 어렵게 만들기 위한 것입니다. WBAdmin은 개별 파일과 폴더, 전체 드라이브를 복구하는 데 활용할 수 있다는 점에서 시스템 관리자의 복구 작업을 도와주는 편리한 도구입니다.
공격자는 다시 한번 아래와 같이 cmd.exe 를 사용해 시스템 파괴를 위한 작업을 진행하게 됩니다. 단, 이번에는 부트 구성 데이터 정보에 사용되는 bcdedit를 이용하여 Windows 복구 콘솔이 피해 컴퓨터에 대해 어떤 복구 작업도 시도하지 못하도록 합니다.
C:Windowssystem32cmd.exe /c
bcdedit.exe /set {default} bootstatuspolicy ignoreallfailures & bcdedit
/set {default} recoveryenabled no
피해 컴퓨터에서 복구 작업이 매우 어렵게 된 것이 확인되면, 공격자는 이제 시스템 및 보안 창의 이벤트 로그를 삭제하여 공격 범위를 넓혀 나갑니다. 이는 분석을 어렵게 만들기 위한 것입니다.
C:Windowssystem32cmd.exe /c
wevtutil.exe cl System
C:Windowssystem32cmd.exe /c
wevtutil.exe cl Security
이렇듯 어떤 복구도 불가능하게 만드는 철저한 파괴 행위로 확인할 수 있듯이, 공격자는 시스템 자체를 완전히 고장 내고 싶어 한다는 것을 알 수 있습니다. 이 악성코드의 목적은 피해 시스템을 파괴하고 컴퓨터 시스템을 먹통으로 만들며 원격 데이터를 삭제하는 것입니다.
뿐만 아니라, 올림픽 디스트로이어는 시스템에서 모든 서비스를 불능 상태로 만듭니다.
올림픽 디스트로이어는 ChangeServiceConfigW API를 사용해 시작 유형(Start type)을 4로 변경시키는데, 이는 “특정 서비스가 시작되지 못하게 막겠다”는 뜻입니다.
뿐만 아니라 맵핑된 파일 공유를 파악해서 각 공유마다 쓰기 가능한 파일을 완전 삭제합니다(파일 크기에 따라 비초기화 데이터나 0x00 사용).
마지막으로, 모든 시스템 구성을 수정한 후에는 피해 시스템을 완전히 작동하지 못하게 합니다.
정상적 파일
추가적으로 올림픽 디스트로이어는 레터럴 무브먼트 (Lateral Movement)를 위해 디지털 서명이 되어 있는 Microsoft사의 정상적인 PsExec 파일을 드롭하여 사용하고 있습니다. 이는 정상 툴을 활용하여 공격을 감행하는 또 하나의 예입니다. PsExec 같은 정상 툴을 사용하면 공격자가 자체적으로 공격 툴을 개발할 필요가 없습니다. 이와 같이 무료로 사용할 수 있는 툴을 사용하여 공격을 수행할 수 있으므로 공격자 입장에서 훨씬 손쉬운 방법이라 하겠습니다.
결론
올림픽 디스트로이어와 같은 시스템 파괴형 악성코드를 활용한 공격들은 공격자체의 본질을 생각해 볼 필요가 있습니다. 이번 공격의 목적은 분명합니다. 바로 원활한 올림픽 진행을 막고자 한 것이며 개막식 동안 올림픽 조직위를 당황하게 만드는 것이 이번 공격의 동기라고 생각합니다.
웹사이트를 마비시켜 티켓을 구매할 수 없게 한다던가, WiFi 시스템을 작동 불가로 만들어 개회식에 대한 현장 소식이 전달되는 데에 어려움을 줘서 행사를 망치려는 것입니다. 여기에서 생각해봐야 할 또 다른 요소는 바로 악성코드 내에서 하드코딩된 자격 증명이 사용되고 있다는 것입니다. 이러한 자격 증명 탈취가 가능한 것으로 보아, 개막식에 대한 공격이 있기 전에 올림픽 인프라가 이미 침해되었을 가능성이 있습니다.
악성코드 침투 매커니즘은 아직 밝혀지지 않았기 때문에 감염 벡터로 여러 가지를 의심해볼 수 있습니다. 그러나 공격자가 이미 사전에 시스템에 액세스했다면 이번 공격은 원격으로 이루어졌을 가능성이 있습니다. 따라서 공격자가 개막식이라는 특정 시점을 겨냥해 공격 시간을 자유롭게 제어할 수 있었을 것으로 보입니다.
커버리지
고객이 위협을 감지하고 차단하는 데 유용한 기타 솔루션은 다음과 같습니다.
AMP(Advanced Malware Protection)는 공격자가 사용하는 악성 프로그램이 실행되는 것을 방지하는 데 이상적입니다.
CWS 또는 WSA웹 검사 솔루션은 악성 웹사이트에 대한 접속을 차단하고 이 공격 수법에 사용되는 악성코드를 감지합니다.
Email
Security는 해커가 공격의 일환으로 보낸 악성 이메일을 차단할 수 있습니다.
NGFW, NGIPS,
Meraki MX와 같은 네트워크 보안 어플라이언스는 이런 위협과 연계된 악의적 활동을 감지할 수 있습니다.
AMP
Threat Grid는 악성 바이너리를 식별하고 모든 Cisco 보안 제품에 보호 기능을 구축하는 데 효과적입니다.
Umbrella는 Talos의 SIG(Secure Internet Gateway)로, 사용자가 회사 네트워크 안팎에서 악성 도메인, IP 및 URL에 연결하는 것을 차단합니다.
Open Source Snort Subscriber Rule Set 고객은 Snort.org에서 최신 룰 팩을 다운로드해서 최신 상태를 유지할 수 있습니다.
IOC
올림픽 디스트로이어(Olympic Destroyer):
edb1ff2521fb4bf748111f92786d260d40407a2e8463dcd24bb09f908ee13eb9
브라우저 스틸러:
19ab44a1343db19741b0e0b06bacce55990b6c8f789815daaf3476e0cc30ebea (unpacked: ab5bf79274b6583a00be203256a4eacfa30a37bc889b5493da9456e2d5885c7f )
시스템 스틸러:
f188abc33d351c2254d794b525c5a8b79ea78acd3050cd8d27d3ecfc568c2936 (unpacked a7d6dcdf5ca2c426cc6c447cff76834d97bc1fdff2cd14bad0b7c2817408c334 )
파괴형 악성코드:
ae9a4e244a9b3c77d489dee8aeaf35a7c3ba31b210e76d81ef2e91790f052c85
Psexec(정상적):
3337e3875b05e0bfba69ab926532e3f179e8cfbf162ebb60ce58a0281437a7ef
추가적 올림픽 디스트로이어:
D934CB8D0EADB93F8A57A9B8853C5DB218D5DB78C16A35F374E413884D915016
EDB1FF2521FB4BF748111F92786D260D40407A2E8463DCD24BB09F908EE13EB9
3E27B6B287F0B9F7E85BFE18901D961110AE969D58B44AF15B1D75BE749022C2
28858CC6E05225F7D156D1C6A21ED11188777FA0A752CB7B56038D79A88627CC