상세 컨텐츠

본문 제목

CryptXXX 2.x 복호화툴 공개!

이스트시큐리티 소식

by 알약(Alyac) 2016. 6. 27. 14:53

본문

안녕하세요 알약입니다. 

알약에서 CryptXXX 2.x 버전 복호화 툴을 개발하였습니다. 


CryptXXX 2.x버전은 dll형태로 유포되고 있으며, DLLMain이 구동되면서 추가적인 Export 함수가 실행되는 구조를 취하고 있습니다. 


사용자 PC를 감염시킨 후 시스템에 존제하는 드라이브 문자열을 얻어와 DriveType을 얻어오며, 이동식 드라이브, HDD, SSD, 네트워크 드라이브라면 암호화의 대상이 됩니다. 


랜섬웨어 제작자는 암호화 하고자 하는 파일의 크기가 13,631,488(0xD00000) 바이트를 넘을 경우 최대 13,631,488 바이트만 암호화 하고 나머지 부분은 암호화가 되지 않도록 해 두었습니다. 부분 암호화가 되더라도 파일의 구조가 손상되기 때문에 암호화가 된 것과 마찬가지이기 때문입니다. 


암호화 후에는 파일 확장자를 .crypt로 변경하며, 암호화된 파일의 수정날자를 임의로 조작합니다. 그 이유는 CryptXXX의 암호화 방식이 시스템의 시간값을 이용한 방식이기 때문에, 암호화가 된 시점의 시간 값을 읽을 수 있다면 복호화 툴이 쉽게 제작될 수 있기 때문입니다. 






복호화 툴 원리


CryptXXX v2는 각각의 파일을 암호화 할 때마다 시스템의 현재 시간을 Seed로 활용하여 키 테이블을 생성합니다. 그리고 생성된 키 테이블을 활용하여 XOR연산을 수행하면서 파일을 암호화 합니다. 아래는 각각의 파일이 암호화 될 때마다 수행되는 루틴의 일부를 나타낸 것입니다. 테이블을 생성하고 반복문을 돌면서 XOR연산을 수행하는 것을 확인할 수 있습니다. 



복호화 하는 입장에서는 최초의 Seed값만 알아낼 수 있다면 암호화 당시의 키 테이블이 재현 가능해지기 때문에 그것을 이용해서 다시 한번 더 XOR연산을 하면 원래의 데이터를 얻어낼 수 있습니다. 시간 값을 Seed로 활용하는데, 시간 값은 한정이 되어 있어 오랜 시간이 걸려도 결국 최초의 Seed값을 알아낼 수 있던 것입니다. 


▶ CryptXXX 2.x 복호화 툴 다운로드   [국문]  [영문]



CryptXXX 2.x와 CryptXXX 3.x 차이점


CryptXXX v2는 시간값을 가지고 암호화를 하기 때문에, 해당 시간값을 유추해 낸다면 복호화가 가능하였습니다. 이런 점 때문에 복호화 툴이 개발되자 해커는 Crypt 3.x 를 개발하였습니다. 


3.x는 2.x와 비교했을 때 암호화 방식에서 약간의 차이가 있습니다.


3.x는 파일을 암호화할때 2.x와 같이 파일의 모든 영역을 시간값을 이용하여 암호화 하는 것이 아니라, 일부 영역은 공개키를 이용해서 암호화 하고 일부영역은 시간값 기반으로 생성된 키테이블을 이용해서 암호화를 수행합니다. 여기서 시간값을 이용하는 부분은 복호화가 가능하지만 공개키를 기반으로 암호화가 진행된 부분은 복호화가 불가능하기 때문에 3.x는 근본적으로 복구라는것이 불가능하며, 텍스트 파일에 한해서 부분 복호화만 가능합니다. 텍스트 파일만 가능한 이유는 텍스트 파일은 시그니쳐가 존재하지 않고 사람이 읽을 수 있는 문자열 기반이기 때문에 시간값을 이용해서 복호화를 계속적으로 시도하면서 사람이 읽을 수 있는 범위의 텍스트가 등장하면 복호화가 된 것으로 볼 수 있습니다. 그러나 exe파일등의 시그니처가 존재하는 파일들은, 3.x 가 파일의 첫번째 부분을 공개키로 암호화 하기 때문에 복호화가 불가능하므로 그 시그니처를 유추할 수 없습니다. 따라서 공격자의 비밀키(개인키)를 획득하지 않는 이상 텍스트 파일 형식 이외의 파일들은 복호화가 불가능합니다.





관련글 더보기

댓글 영역