2017년 6월 27일, 우크라이나에서 Petya 이름의 랜섬웨어 감염 피해가 보고되었다. 사실 Petya 랜섬웨어는 파일을 암호화하는 다른 랜섬웨어와 달리 부팅을 불가능하게 하는 유형(MBR, MFT 암호화)으로 이미 알려진 형태이다. 하지만, 이번에 이슈 된 Petya는 지난 5월 WannaCryptor 랜섬웨어에서 사용한 SMB 취약점(CVE-2017-0144)을 사용하여 네트워크 전파기능이 추가되면서 피해가 큰 것이 특징이다. 또한, 기존 형태와 달리 일부 확장자 파일들에 대한 암호화도 진행하는 등 다양한 기능이 추가된 것을 확인할 수 있다. SMB 취약점(CVE-2017-0144)은 MS 보안패치 MS17-010에 포함되었으므로 감염 확산을 막기 위해서는 보안패치 적용이 필요하다.

 

1. 동작과정

[그림-1] 랜섬웨어 동작과정

[그림-1]은 랜섬웨어의 전체적인 동작과정 및 내부 파일의 구조를 나타낸다. 최초 감염방식은 MEDoc (Ukraine Financial Software) 이름의 프로그램의 업데이트 과정에서 발생한 것과 MS 오피스 취약점(CVE-2017-0199)을 이용한 방식 2가지가 알려져 있다. 랜섬웨어는 DLL 형태로 제작되었으며, 네트워크 전파를 위해 SMB 취약점 외에 ‘Mimikatz’(Credential Dumping Tool) 이름으로 알려진 소스코드를 이용하여 원격지 접속을 위한 계정정보 획득을 시도한다. 악성코드 내부에 별도의 취약한 계정정보(ID/PW)를 갖고 있지는 않다. 아래는 Petya 랜섬웨어에서 수행하는 악의적인 기능들을 나타낸다.

- MBR 감염
- 네트워크 전파
- 파일 암호화
- 시스템 재부팅 시도
- MFT 암호화
- 부팅불가

아래의 [그림-2]는 랜섬웨어(ex. “2.dll”) 감염 시 발생하는 행위로그를 나타낸다. Action 항목에“Write physical disk” 라고 표시된 부분이 MBR 감염시도를 나타내며, “at.exe”를 실행한 부분은 재부팅을 위한 윈도우 작업스케줄 등록부분이다. %temp% 경로에 생성되는 “[랜덤숫자].tmp” 파일(ex. 1.tmp)은 ‘Mimikatz’ 툴로 계정정보 획득을 위한 악성코드이다. 이후 전파를 위한 네트워크 대역 내의 IP를 순회하면서 139/445 포트가 열려있는 시스템을 탐색하는 기능을 수행한다. 전파시도와 동시에 파일에 대한 암호화(AES-128) 작업도 이루어지며, [그림-2]에서는 바탕화면에 위치한 “TEST_Word.docx” 파일이 암호화된 것을 확인할 수 있다.

[그림-2] 행위로그

재부팅을 시도하기 위해 수행하는 윈도우 작업스케줄 등록작업은 아래와 같은 명령을 통해 이루어지며, 윈도우 버전에 따라 명령에 차이가 있다.

schtasks /RU “SYSTEM” /Create /SC once /TN “” /TR “C:\Windows\system32\shutdown.exe /r /f” /ST [H:M]

at [H:M] C:\Windows\system32\shutdown.exe /r /f

작업스케줄 등록을 통해 일정시간(1시간 내 가변)이 지난 후에는 시스템이 재부팅 되며, 이후 감염된 MBR 코드가 실행된다. 윈도우 작업스케줄을 이용한 방법 외에도 강제 BSOD 발생을 위해 “NtRaiseHardError” API 를 호출하는 경우도 존재한다. 재부팅 후에는 감염된 MBR(Master Boot Record) 코드에 의해 MFT(Master File Table)에 대한 암호화가 이루어진다.

원격지에 파일복사가 이루어진 후, 실행을 위해서는 MS에서 제공하는 PsExec(Sysinternals: 원격지 파일실행) 와 WMIC(WMIC.exe: Windows Management Instrumentation Command)라는 툴이 사용된다. 또한, Credential 정보를 이용한 원격지 복사가 실패한 경우, 마지막 단계에 SMB 취약점을 이용한 전파가 이루어진다. 재부팅 전 아래와 같은 명령을 통해 윈도우 이벤트 로그를 삭제하는 기능을 수행한다.

cmd.exe /c wevtutil cl Setup & wevtutil cl System & wevtutil cl Security & wevtutil cl Application & fsutil usn deletejournal /D <드라이브>:

[그림-1]에서 알 수 있듯이 DLL 파일 내부의 리소스 영역에는 총 4개의 RCDATA 이름의 항목이 존재하며, 각각 Mimikatz 툴(32비트/64비트)과 PsExec 툴, SMB 취약점관련 쉘코드로 구성된다.

 

2. 주요기능

(1) MBR 감염

랜섬웨어 실행 시, 가장 먼저 수행되는 작업이 MBR에 대한 감염이며 아래의 [그림-3]은 Petya에서 사용하는 MBR 감염코드를 나타낸다.

[그림-3] MBR 감염코드 부분

정상적인 부팅을 위해 필요한 원본 MBR 정보는 아래의 [그림-4]에서처럼 디스크의 0x4400 옵셋위치에 고정된 키 값(0x07)로 XOR 된 상태로 백업된다. MBR 정보는 단순한 암호화 방식으로 암호화 및 백업이 되어있어 복구가 가능한 구조이나, 이후에 진행되는 MFT에 대한 암호화 작업은 Salsa Stream 암호화라는 알고리즘을 통해 이루어지며 복구에는 키 정보가 필요한 구조이다.

[그림-4] MBR 백업코드 부분

아래의 [그림-5]는 실제 디스크 옵셋 0x4400 위치에 원본 MBR 코드가 암호화된 상태로 백업된 것을 확인할 수 있다.

[그림-5] MBR 백업데이터

 

(2) 네트워크 전파

원격지에 자신을 복사하기 위해서 크게 메모리상의 Credential 정보획득(CredEnumerate, Mimikaz)을 통한 ADMIN$ 공유폴더에 복사와 SMB 취약점을 이용한 전파 2가지가 이루어진다. ADMIN$ 에 복사된 DLL 형태의 랜섬웨어를 구동하기 위해 PsExec 혹은 WMIC 2가지 툴이 사용되며, 취약점을 이용한 경우 쉘코드를 통해 구동되는 특징을 갖는다. 또한, 전파방식 2가지 중 ADMIN$ 를 통한 복사가 실패한 경우에 한해 SMB 취약점을 시도하는 구조이다. 아래의 [그림-6]은 "EternalBlue" 취약점(CVE-2017-0144) 및 랜섬웨어 복사와 관련된 패킷 데이터 중 일부를 나타낸다. 

 

[그림-6] SMB 취약점 패킷

아래의 [그림-7]은 Credential 정보획득을 통해 원격지의 ADMIN$ 공유폴더에 복사 후 구동된 화면을 나타낸다. 테스트 시 랜섬웨어 파일을 “a.dll”로 실행하였으며 원격지의 %windows% 폴더에 “a.dll” 이름으로 복사 후 실행 시 확장자가 제거된 “a” 이름으로 존재함을 확인할 수 있다. 이러한 증상은 랜섬웨어 코드에 확장자 제거 및 실행 후 0바이트로 변경하는 기능에 의한 것으로 진단우회 및 기 감염여부 체크를 위한 것으로 판단된다.

[그림-7] 원격지 파일복사 및 실행

아래의 그림은 DLL 형식의 랜섬웨어를 구동 시, #1 통해 첫 번째 Export 함수호출을 통해 최초 동작이 이루어짐을 알 수 있다. 이후의 인자 값 60은 재부팅 시간(분)을 나타내는 것으로 디폴트 설정 값이 60으로 되어있다. 하지만, 실제 60분 뒤 재부팅이 이루어지는 것은 아니며, 해당 값을 가지고 연산을 통해 얻은 랜덤 시간에 재부팅이 수행된다. (최소 13분~최대 60분)

[그림-8] 원격지 랜섬웨어 구동

아래의 [그림-9]는 원격지에 파일복사 및 구동을 위해 사용하는 PsExec WMIC 관련 코드부분을 나타낸다. (아래의 표에서 “dllhost.dat” 파일은 PsExec 툴을 나타냄)

C:\WINDOWS\dllhost.dat \\192.168.209.3 -accepteula -s -d C:\Windows\System32\rundll32.exe ""C:\Windows\a.dll"",#1 60"

[그림-9] 원격지 파일복사 및 실행

 

(3) 파일 암호화

파일 암호화에는 CryptGenKey API 를 통해 생성된 하나의 대칭키(AES-128)를 사용하며, 해당 대칭키는 다시 공개키를 통해 암호화되어 "C:\ReadMe.txt" 파일에 저장된다. 즉, 해당 공개키에 매칭되는 개인키 정보가 없이는 복구가 불가능한 구조를 갖는다. WannaCryptor 복구에 언급된 메모리 상에 존재하는 키 정보를 활용한 복구도 Petya의 경우는 1시간 내에 강제 재부팅이 이루어짐으로 어려울 것으로 판단된다. 또한, 공개키가 공격자와 통신을 통해 네트워크로 받아지는 구조가 아님으로 악성코드 내부에는 별도의 C&C 주소가 존재하지 않는다. 아래의 [그림-10]에서 붉은색으로 표시된 “Your personal installation key” 부분이 공개키로 암호화된 AES-128 키를 BASE64도 다시 암호화한 값을 나타낸다.

[그림-10] ReadMe.txt 내용

 

(4) MFT 암호화

감염된 MBR 코드에 의해 부팅 시 아래의 [그림-11]과 같은 화면이 사용자에게 보여진다. 문구내용을 보면 CHKDSK 를 이용하여 시스템을 점검하는 정상적인 과정으로 인식할 수 있으나, 해당 문구는 악성코드 내에 존재하는 것으로 실제는 CHKDSK가 아닌 MFT에 대한 암호화 작업을 수행한다.

[그림-11] 부팅 시 화면 (허위 CHKDSK)

아래의 [그림-12]는 감염된 MBR 코드에서 MFT 테이블을 암호화하는 코드 중 일부를 나타낸다. Salsa20 암호화에서 사용하는 키 정보(Nonce, Key)를 통해 MFT 테이블에 대한 암호화가 수행된다. 키 정보는 디스크의 특정위치(0x4000)에 백업되어 있다.

[그림-12] MFT 암호화 코드

MFT에 대한 암호화 작업이 완료되면, 아래의 [그림-13]과 같은 화면이 사용자에게 보여진다. 사용자에게 $300 상당의 비트코인 결제를 유도하며, 결재 완료 시 제작자로 추정되는 메일주소를 통해 복구에 필요한 Key 정보를 전달받는 구조이다.

[그림-13] 비트코인 지불요청 화면

하지만, 분석결과 Key 정보를 전달받아도 복구가 불가능한 구조를 갖고 있음이 확인되었다. 실제 MFT 테이블 암호화에 사용된 키 정보(Nonce, Key)가 저장된 부분이 암호화가 완료된 후, 제거되는 것을 알 수 있다. 즉, 해당 Petya 랜섬웨어는 기존 랜섬웨어와 달리 파괴를 목적으로 제작한 것으로 추정할 수 있다.

아래의 [그림-14]는 디스크 옵셋 0x4000 위치에 MFT 암호화에 사용된 키 정보가 암호화 과정을 완료 후, NULL 값으로 채워진 것을 확인할 수 있다.

[그림-14] 복구불가 원인

 

3. V3 대응

Petya 랜섬웨어 관련 V3에서는 아래와 같이 진단하고 있다.

- md5: 71b6a493388e7d0b40c83ce903bc6b04 (V3: Trojan/Win32.Petya) - 랜섬웨어 본체
- md5: e285b6ce047015943e685e6638bd837e(V3: Trojan/Win32.Petya) - 랜섬웨어 본체
- md5: 2813d34f6197eb4df42c886ec7f234a1 (V3: Trojan/Win32.Petya) - Mimikatz x86 
- md5: 7e37ab34ecdcc3e77e24522ddfd4852d (V3: Trojan/Win64.Petya) - Mimikatz x64 

또한, 추가 감염피해를 막기위해 SMB취약점 관련 윈도우 보안패치를 적용하는 것이 필요하다.

SMB 취약점을 이용한 랜섬웨어 공격 주의 권고
- http://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25703

SMB 취약점 관련 Windows XP, Server 2003 등 긴급 보안 업데이트 권고
- http://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25704

SMB 취약점을 악용한 랜섬웨어 방지 대국민 행동 요령
- http://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25723

윈도우 버전별 보안업데이트 다운로드
- http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598

신고
Creative Commons License
Creative Commons License
Posted by yhayoung