지난 5월 26일 CryptXXX 이름의 랜섬웨어 중 2.x 버전에 대한 복구 툴을 배포하였다. 최근에는 복구가 불가능한 버전 3.x의 감염사례가 증가하고 있는 추세이다. 2.x 버전에 대한 복구 툴에서는 3.x 버전으로 암호화된 파일을 진단 시, "CryptXXX 3.x 악성코드에 감염된 파일로 복원이 불가능합니다."라는 메시지 창을 출력하고 있다. (암호화된 파일을 통해 버전을 확인할 수 있음) 현재까지 확인된 3.x 버전은 3.002, 3.100, 3.102, 3.200, 3.205 버전이며, 최근 "CryptXXX 랜섬웨어 한글화 버전발견" 제목으로 기사화된 파일은 3.100 버전에 해당하며, "온라인 커뮤니티의 광고배너를 통해 유포된 파일"은 3.200 버전에 해당한다. 3.100 버전 이후로는 암호화 파일의 확장자가 ".crypt" 가 아닌 ".cryp1", ".crypz" 형태로 변경되었다. 본 글에서는 현재까지 확인된 CryptXXX 3.x 버전의 공통된 암호화 방식을 설명하고, 텍스트 형식의 일부 파일들에 대해 내용 중 일부가 손상된 형태이지만, 부분적 복구가 가능함을 소개한다.
[전용복구툴 업데이트]
- 2016.06.23
3.205 버전에서 암호화 방식은 동일하나 파일 확장자가 5바이트 랜덤형태로 변경되어 전용백신 업데이트 함. (ex) .2DF99, .FF000, ... )
1. 암호화 방식의 변화
아래의 [그림-1]은 CryptXXX 랜섬웨어 2.x 와 3.x 버전의 암호화 방식의 차이를 나타낸다. 붉은색 블록은 공개키로 암호화된 영역이며, 파란색 블록은 고유한 키 테이블 정보를 통해 암호화(XOR)된 영역을 나타낸다. 2.x 버전의 경우, 원본파일을 암호화할 때는 공개키를 사용하지 않고, 키 테이블 정보만을 공개키로 암호화하는 구조이다. 즉, 키 테이블 정보만 있으면 원본파일과 동일하게 복원이 가능하다.
3.x 버전의 경우, 원본파일을 암호화할 때 일부 블록에 대해 공개키를 사용하는 방식으로 변경되었다. 다행인 것은 공개키 사용 부분이 파일 전체가 아닌 일부 구간으로 제한적이며, 그 외 부분은 2.x와 동일방식으로 암호화를 수행한다는 점이다. 즉, 3.x 버전으로 암호화된 파일이라도 파란색 블록에 해당하는 부분은 복구가 가능하다. (2.x 버전에서 사용한 '복원'이라는 표현대신 '부분 복구'라고 언급한 이유)
[그림-1] 암호화 방식의 변화(2.x VS 3.x)
공개키로 암호화된 원본 데이터는 0x40 크기이나 암호화 시점에 0x80으로 크기가 증가하는 구조를 갖는다. 2.x 버전으로 암호화된 경우, 파일크기는 원본파일 크기에서 0x104 바이트가 증가한 형태이나, 3.x 버전으로 암호화된 경우, 증가한 파일의 크기는 다음과 같이 계산할 수 있다.
· 암호화 파일크기 = 원본파일 크기 + (공개키로 암호화된 블럭의 개수(N) x 0x40) + 0x118
2. 비 암호화 영역 백업방식의 변화
2.x 버전과 동일하게 3.x 에서도 원본파일의 크기가 0xD00000 (대략 13M) 보다 큰 영역은 암호화 작업을 수행하지 않는다. 하지만, 2.x 에서는 0xD00000 이후의 데이터가 원본과 동일한 형태인 반면, 3.x 에서는 아래의 [그림-2]와 같이 2가지 블록으로 구분하여 순서가 바뀐 형태로 백업된 것을 알 수 있다. 즉, 원본파일과 동일한 구조를 갖기 위해서는 Offset (A)가 아닌 Offset (B) 영역의 블록이 먼저 복사가 이루어져야 한다. 만약, 원본파일이 0xD19D00 보다 작은 경우에는 2가지 블록으로 구분 없이 기존과 동일한 구조를 갖는다.
[그림-2] 비 암호화 영역 백업구조
3. 부분복구 대상파일
3.x 로 암호화된 파일들은 파일 첫 시작부분이 공개키로 암호화되어 원본파일의 Magic 정보를 유추할 수 없다. 즉, 2.x 버전과 동일한 방식의 키 테이블 정보로 암호화된 영역이라 하더라도 Magic 정보를 알 수 없음으로 복구가 어려운 형태이다. 하지만, 텍스트 형식의 아래의 확장자를 갖는 파일들은 파일시작의 Magic 정보가 없는 형태이나 '알파벳', '한글', '숫자', '기호' 등의 데이터로 채워진 상태를 유효한 복호화 상태로 가정하여 키 테이블을 생성할 경우, 부분 복구가 가능하다. (총 25개 확장자)
JAVA, HTML, CPP, TXT, HTM, PHP, VBS, ASP, PAS, JSP, ASM, XML, DTD, CMD, CSS, SQL, PY, JS, CS, SH, VB, PS, PL, C, H
아래의 [그림-3]은 3.x 버전으로 암호화된 "StdAfxX.cpp" 파일에 대해 부분 복구를 시도한 결과를 나타낸다. 원본 파일과 비교하여, 파일시작 첫 64바이트(0x40)가 다름을 알 수 있으며, 이 부분은 공개키로 암호화되어 복구가 불가능한 영역이다.
이 부분은 "################################################################" 값을 삽입하여 사용자가 손상 부분을 쉽게 찾을 수 있도록 하였다. (파일크기가 큰 경우, 손상 부분이 여러개 존재)
[그림-3] 부분복구 후 원본파일과 비교
위 그림에서처럼 부분 복구를 통해 원본파일의 텍스트 데이터 중 일부를 복구할 수 있으나, 공개키로 암호화된 영역은 복구가 불가능하여 복구 툴을 이용하여 최종 복구된 파일이라도 정상적인 사용은 어려운 상태이다. 또한 부분 복구 대상 확장자라 하더라도 아래의 조건에 부합하지 않으면 복구가 실패 혹은 진단하지 못하는 경우가 발생할 수 있다.
(조건-1)
암호화된 파일의 최소크기는 472 바이트 이상.
: 공개키 암호화 크기(0x80) + 최소비교문자크기(0x40) + 악성코드 시그니처(0x118) = 0x1D8 (=472)
(조건-2)
ANSI 형태로 저장된 문서이면서, 특정범위가 "한글/영문/기호/숫자" 데이터로만 채워진 경우.
: 같은 복구대상 확장자라도 UTF-8, UNICODE 등 ANSI가 아닌 형태로 저장된 경우는 부분 복구가 불가능하며, 원본 파일시작 0x40~0x80 범위 내의 데이터는 반드시 "한글/영문/기호/숫자" 형태로만 존재해야 함. (한자, 러시아어, 일본어 등이 존재할 경우 복구불가)
4. 부분 복구툴
CryptXXX 랜섬웨어 3.x 버전에 대한 부분 복구 툴은 아래의 경로로부터 다운로드 가능하다.
- 다운로드
"안랩이 제공하는 전용 백신 및 랜섬웨어 복구툴은 사용자가 비영리 목적으로 다운로드하여 설치 및 이용할 수 있으나 영리적인 목적으로의 사용은 금지되어 있습니다.
만약 영리적인 목적의 이용 · 판매 · 재판매 행위가 확인될 시에는 법적 조치를 취할 수 있음을 밝혀둡니다."
'조치 가이드' 카테고리의 다른 글
Magniber 복구 가능 확장자 목록 (105) | 2018.04.03 |
---|---|
Magniber 랜섬웨어 복구툴 (확장자 별 키 정보) (13) | 2018.03.30 |
마이크로소프트 2014년 2월 보안 패치 배포 (0) | 2014.02.12 |
마이크로소프트 2014년 1월 보안 패치 배포 (0) | 2014.01.17 |
AhnLab ‘안전한 문자’로 스미싱 피해를 예방하세요! (0) | 2013.10.30 |
댓글