CryptXXX 랜섬웨어 3.x 버전 ‘부분 복구툴’ 공개
최근 CryptXXX 랜섬웨어 3.x 버전의 감염 사례가 증가하고 있는 가운데, 안랩이 부분 복구가 가능한 복구툴을 공개했다.
안랩은 6월 7일 CryptXXX 랜섬웨어 3.x에 대한 분석을 완료하고, 텍스트 기반의 일부 파일들에 대해 부분 복구가 가능한 복구툴을 홈페이지를 통해 무료로 제공하고 있다. 지난 5월 26일에는 CryptXXX 2.x 버전에 대한 복구툴을 무료로 배포한 바 있다.
이 글에서는 현재까지 확인된 CryptXXX 3.x 버전의 공통된 암호화 방식을 설명하고, 텍스트 형식의 일부 파일들에 대해 내용 중 일부가 손상된 형태이지만, 부분적 복구가 가능함을 소개한다.
암호화 방식의 변화
CryptXXX 3.x 버전은 기존 2.x와는 몇 가지 다른 양상을 띠고 있다. 우선 CryptXXX 3.100 버전 이후로는 암호화 파일의 확장자가 .crypt 가 아닌 .cryp1, .crypz 형태로 변경되었다. 또한 암호화할 때 2.x 버전은 공개키를 사용하지 않는 반면, 3.x 버전에서는 일부 블록에 대해 공개키를 사용한다는 점이 다르다. 현재 이슈가 되고 있는 CryptXXX 3.x 버전은 3.002, 3.100, 3.102, 3.200 버전이다. ‘CryptXXX 랜섬웨어 한글화 버전 발견’으로 기사화된 파일은 3.100 버전, ‘온라인 커뮤니티의 광고배너를 통해 유포된 파일’은 3.200 버전에 해당한다.
[그림 1]은 CryptXXX 2.x 와 3.x 버전의 암호화 방식의 차이를 나타낸다. 붉은색 블록은 공개키로 암호화된 영역이며, 파란색 블록은 고유한 키 테이블 정보를 통해 암호화(XOR)된 영역을 나타낸다. 2.x 버전의 경우, 원본 파일을 암호화할 때는 공개키를 사용하지 않고, 키 테이블 정보만을 공개키로 암호화하는 구조이다. 즉, 키 테이블 정보만 있으면 원본 파일과 동일하게 복구가 가능하다.
3.x 버전의 경우, 원본 파일을 암호화할 때 일부 블록에 대해 공개키를 사용하는 방식으로 변경되었다. 다행인 것은 공개키 사용 부분이 파일 전체가 아닌 일부 구간으로 제한적이며, 그 외 부분은 2.x 버전과 동일한 방식으로 암호화를 수행한다. 즉, 3.x 버전으로 암호화된 파일이라도 파란색 블록(키 테이블 정보를 통해 암호화한 부분)에 해당하는 부분은 복구가 가능하다.
[그림1] CryptXXX 암호화 방식의 변화(2.x vs. 3.x)
비 암호화 영역 백업 방식의 변화
2.x 버전과 동일하게 3.x 에서도 원본 파일의 크기가 0xD00000(대략 13MB)보다 큰 영역은 암호화 작업을 수행하지 않는다. 하지만, 2.x 에서는 0xD00000 이후의 데이터가 원본과 동일한 형태인 반면, 3.x 에서는 [그림2]와 같이 2가지 블록으로 구분하여 순서가 바뀐 형태로 백업된 것을 알 수 있다. 즉, 원본 파일과 동일한 구조를 갖기 위해서는 Offset (A)가 아닌 Offset (B) 영역의 블록이 먼저 복사가 이루어져야 한다. 만약, 원본 파일이 0xD19D00보다 작은 경우에는 2가지 블록으로 구분 없이 기존과 동일한 구조를 갖는다.
부분 복구 대상 파일 및 복구툴 경로
현재 안랩이 제공하는 복구툴은 텍스트 형식의 다음과 같은 총 28종의 확장자를 갖는 파일이며, '알파벳', '한글', '기호' 등의 데이터로 채워진 상태를 유효한 복호화 상태로 가정하여 키 테이블을 생성할 경우, 부분 복구가 가능하다. 또한 MS 오피스 문서 파일 중 .pptx, .docx, .xlsx 확장자 파일들에 대한 부분 복구기능을 제공한다. 이들 세 가지 파일들은 Open XML 형식으로 파일 시작 부분이 ZIP 압축 헤더 형태를 갖는 공통점이 존재한다. 부분 복구툴에서는 세 가지 문서 파일들의 데이터 중 일부가 (공개키 암호화로 인해) 손실된 상태에서도 ZIP 압축 헤더를 재구성해주는 방식을 통해 일부 데이터를 복구하는 형태로 전용 복구툴을 업데이트했다.
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, PPTX, DOCX, XLSX
[그림3]은 3.x 버전으로 암호화된 StdAfxX.cpp 파일을 부분 복구를 시도한 결과를 나타낸다. 원본 파일과 비교하여, 파일시작 첫 64바이트(0x40)가 다름을 알 수 있으며, 공개키로 암호화되어 복구가 불가능한 영역이다. 복구가 불가능한 영역은 ""############## Damaged Block(64-byte) by CryptXXX ##############"" 문구를 삽입하여 사용자가 손상 부분을 쉽게 찾을 수 있도록 했다.
단, 이 복구툴은 텍스트 데이터 중 일부를 복구할 수 있으나, 공개키로 암호화된 영역은 복구가 불가능하여 복구툴을 이용하여 최종 복구된 파일이라도 정상적인 사용은 어려운 상태이다. 또한 부분 복구 대상 확장자라 하더라도 아래의 조건에 부합하지 않으면 복구가 실패하게 된다.
CryptXXX 3.x 버전에 대한 복구 툴에 대한 자세한 분석 정보는 ASEC 블로그에서 확인할 수 있으며, 복구툴은 ‘안랩 랜섬웨어 보안센터’에서 무료로 다운로드가 가능하다.
- AhnLabASEC 분석팀