top of page

현재까지 파악된 랜섬웨어에 대하여 05 (Donut, Dharma, Ryuk)



이 문서는 국내 정보보안 관련 기관인 KISA(한국인터넷 진흥원)에서 제공하는 보고서 문서를 참고하였습니다. (KISA 홈페이지 > 지식플랫폼 > 동향분석 > 랜섬웨어 동향)


이 문서는 2021년 3분기까지 공개된 KISA의 분기별 랜섬웨어 동향 보고서를 제외하고 이후 공개된 랜섬웨어 암호기능 분석 보고서를 대상으로 확인하였습니다.


문서에 표기된 특정 랜섬웨어에 대한 자세한 정보는 KISA 홈페이지를 통해 분석 보고서를 다운로드하여 열람할 수 있습니다.


 



1. Donut

Donut은 Windows 운영체제 시스템에서 동작하고 오픈소스 랜섬웨어인 히든 티어(Hidden Tear) 소스코드 기반의 랜섬웨어입니다.


2018년 6월에 유포되었으며 456개의 확장자에 대해 암호화를 수행하고 파일 확장자 뒤에 .donut 확장자 명을 추가하는 특징을 가집니다.


Donut 랜섬웨어는 암호화 작업이 완료되면 감염된 시스템에 약 100달러 가치의 비트코인을 지불하라는 내용의 결제 안내 파일(decrypt.txt)을 생성합니다. 또한 바탕화면에 도넛 모양의 그림을 생성합니다.


[암호화 대상 확장자]

오피스 파일 확장자(doc, xls, ppt. etc.), 일반문서 파일(txt, pdf, etc.), 소스코드(c, cpp, h, java, css, html, etc.) 등 456개 확장자


[암호 제외 조건]

/* 제외 경로 */

\ProgramData

\Program Files

\Program Files (x86)

\Windows

\All Users

\Local Settings

\AppData

\lulu

\$RECYCLE

\System Volume Information


/* 제외 파일 */

desktop.ini

autorun.inf

ntuser.dat

iconcache.db

bootsect.bak

boot.ini

ntuser.dat.log

thumbs.db


[암호화]

AES-256-CBC를 사용하여 암호화하며 Windows 버전에 따라 난수 생성기로 UUID를 반환하며 32비트의 해시값을 생성합니다. 이 해시값을 랜덤함수의 시드로 사용하여 256비트 크기의 키를 생성합니다. 각 Windows 버전에 따라 키 생성이 다를 수 있습니다.


Donut 랜섬웨어는 AES-256-CBC 모드를 이용하고 제로 패딩을 사용합니다. 또한 모든 파일에 대해 동일한 IV를 사용하며 IV 값은 하드코딩되어 있습니다.


암호화가 끝난 파일의 후위에 패딩 정보 1바이트를 추가하고 파일 명에 .donut 확장자를 추가하는 것으로 감염대상 파일에 대해 암호화를 마무리합니다.


[복호화]

Donut 랜섬웨어는 AES 알고리즘과 고정된 IV를 사용하지만 난수화 과정을 통해 생성되는 키를 사용하기 때문에 복호화가 불가능합니다.


하지만 감염된 직후 메모리가 보존되어 있다면 복호화가 가능합니다. 암호화가 완료되어 관련 정보를 공격자 서버로 전달되는 데이터에는 pc_id=, pc_key= 키워드로 복호화 정보가 담겨 있습니다.


랜섬웨어 감염 후 PC를 재부팅하지 않았거나, 메모리가 덮어씌워지지 않았다면 복호화에 필요한 정보를 발견할 가능성이 있습니다.


메모리 덤프를 통해 확보한 암호화 키를 확보된다면 감염된 모든 파일에 대해 복호화가 가능합니다.


 

2. Dharma

Dharma 랜섬웨어는 CrySis 랜섬웨어의 변종으로 스팸메일 등을 통해 배포됩니다. 소셜 엔지니어링을 통해 파일관리 프로그램이나 백신 프로그램 등으로 위장하여 사용자에게 위장된 파일을 실행하도록 유도합니다.


2016년에 첫 등장 이후 다양한 변종이 생성되고 계속해서 유포 중입니다. 2020년까지 약 725억 원(약 6,126만 달러)의 피해가 발생한 것으로 추정되고 있습니다.


Dharma 랜섬웨어는 데이터베이스나 문서와 관련된 특정 프로세스를 종료시키고 자가복제와 시스템 부팅 시 자동으로 실행되도록 레지스트리를 등록합니다.


[종료 프로세스 목록]

lc8.exe, lcv77.exe, outlock.exe, postgres.exe, mysqld-nt.exe, mtsqld.exe, sqlserver.exe


[종료 서비스 목록]

Firebird Guardian Default Instance

Firebird Server Default Instance

sqlwriter

mssqlserver

sqlserveradhelper


[자가복제 위치]

(System32)\dharma.exe

%APPDATA%\Roaming\dharma.exe


[등록 레지스트리]

HKLM\MicroSoft\Windows\CurrentVersion\Run\dharma.exe

- 값 : "C:\\Windows\System32\dharma.exe"


[암호화 대상 확장자]

오피스 파일 확장자(doc, xls, ppt. etc.), 일반문서 파일(txt, pdf, etc.), 소스코드(c, cpp, h, java, css, html, etc.) 등


[암호화]

감염 대상 파일이 1,536kb(0x180000 bytes) 이상의 크기를 가진 파일은 암호화하지 않고 상위 256kb(0x40000)의 데이터를 제로화(데이터를 0x00으로 덮어 씌우는 작업)합니다.


Dharma 랜섬웨어는 AES-256-CBC 암호화 알고리즘을 사용하며 RDTSC(Read Time Stamp Count)와 SHA1을 이용한 암호화 키와 IV를 생성합니다. 그리고 감염 대상 파일을 공격자의 공개키의 SHA1 해시값, 공격자의 공개키를 암호화(RSA-1024)된 키, IV 등으로 AES 암호화를 실행합니다.


[복호화]

Dharma 랜섬웨어는 감염 대상 파일의 크기에 따라 암호화하지 않고 파일의 상위 정해진 크기(0x40000)만큼 제로화 작업을 수행하기 때문에 공격자의 개인키를 알고 있더라도 모든 파일에 대해 복구가 불가능합니다. 하지만 이 랜섬웨어의 다양한 변종이 존재하기 때문에 해당 복구 불가한 부분이 포함되지 않을 수 있습니다.


Dharma 랜섬웨어에 감염된 시스템에 대하여 제작자의 RSA-1024 개인키가 있는 경우와 파일 암호키를 재현할 수 있는 경우로 2가지 복구 시나리오가 있습니다.


/* 제작자의 RSA-1024 개인키가 있는 경우 */

각 파일에 저장된 공개키로 암호화된 암호키를 복호화하고 파일을 복호화할 수 있습니다.


/* 파일 암호키를 재현할 수 있는 경우 */

AES 파일 암호키 재현을 위해 키 생성에 사용된 메모리 값과 RDTSC 함수를 통한 출력 값이 필요합니다. 키 생성에 사용되는 메모리 값을 사용하기 때문에 메모리 초기상태와 RDTSC의 출력값을 알고 있어야 하며 동일한 알고리즘을 사용하여 암호키를 재현할 수 있습니다.



 


3. Ryuk

Ryuk 랜섬웨어는 2018년 8월에 발견되었으며 러시아의 WIZARD SPIDER 조직에서 배포한 Hermes 랜섬웨어의 변종입니다. 이 Ryuk 랜섬웨어는 APT 기법을 이용하여 기업과 기관을 대상으로 공격했으며 2019년 6월에 플로리다로부터 2차례에 걸처 110만 달러를 요구하고 2020년 4월에는 병원과 의료기관을 대상으로 공격한 사례가 보고되었습니다.


이 Ryuk 랜섬웨어를 실행하면 특정 위치에 5개의 임의의 문자열을 가진 파일 명과 언패킹된 실행파일을 생성합니다. 파일 위치는 시스템에 따라 상이할 수 있습니다. 이후 시스템 재부팅 후에도 자동 실행이 가능하도록 레지스트리를 등록합니다. 이후 일부 프로세스를 제외하고 현재 실행 중인 프로세스에 침투하여 악성 행위를 수행합니다.


Ryuk 랜섬웨어는 공격자의 메일 주소와 비트코인 계좌가 담겨있는 랜섬노트를 생성하고 파일을 암호화합니다. 또한 백업 기능을 사용하지 못하도록 볼륨 섀도 복사본을 삭제합니다.


[파일 생성 위치]

/* Windows Vista 이상 */

C:\Users\Public


/* Windows Vista 미만 */

C:\Documents and Settings\Default User


[등록 레지스트리 - Windows 7의 경우]

HKLM\MicroSoft\Windows\CurrentVersion\Run\svchost

- 값 : "C:\\Users\Public\[랜덤 문자열].exe"


[감염 제외 프로세스]

csrss.exe

explorer.exe

lsaas.exe


[암호 제외 조건]

/* 제외 확장자 */

lnk

exe

hrmlog


/* 제외 폴더 */

Windows

AhnLab

Mozilla

Chrome

$Recycle.Bin

WINDOWS


/* 제외 파일 */

RyukReadMe.txt

PUBLIC

UNIQUE_ID_DO_NOT_REMOVE


[암호화]

Ryuk 랜섬웨어는 랜덤한 암호키를 생성하고 AES-256-CBC 암호 알고리즘으로 파일을 암호화하고 파일 암호화에 사용한 암호화 키를 공격자 공개키를 이용하여 추가 암호화(RSA-2048) 하여 감염 파일 후위에 암호화된 키를 추가합니다.


[복호화]

Ryuk 랜섬웨어는 자체적으로 복구가 어렵고 특수한 경우에 한해서 복구가 가능합니다.


/* 제작자의 RSA-2048 개인키를 획득하는 경우 */

파일 암호화에 사용된 AES 키는 RSA-2048 공개키로 암호화되어 파일 뒷부분에 저장되기 때문에 제작자의 RSA-2048 개인키를 통해 파일을 암호화한 AES 키를 복호화할 수 있습니다.

복호화된 AES 키로 파일을 복구할 수 있습니다.


/* 파일 암호키를 재현할 수 있는 경우 */

파일 암호화에 사용된 AES 키를 재현할 수 있는 경우, 파일 복구가 가능합니다. 파일의 시작부터 'HERMES' 시그니처 이전까지 암호화된 데이터를 AES-256-CBC를 사용하여 복호화할 수 있습니다. 만일 시스니처 앞에 |#|과 같이 특정 문자열이 발견된 경우는 1,000,000 바이트 단위로 블록 단위로 복호화합니다.

bottom of page