랜섬웨어 복구 프로그램 종류와 원리

1. 개요


악성코드에서 랜섬웨어의 비중이 크게 증가했고, 그 종류 또한 무척 다양해졌다. 


 2016년 등장한 랜섬웨어

 JobCrypt, PadCrypt, HydraCrypt, Radament, Virus-Encoder, DMALocker, 7ev3n, Ransom32, Lechiffre, UmbreCrypt, CryptoJoker, NanoLocker, Locky, Surprise, Maktub, SAMAS, CryptoHost, KimcilWare, Enigma, GNL Locker, CryptoHitman, Crypren, Mischa, CryptXXX, Jigsaw, Petya, TeslaCrypt



랜섬웨어는 특징상 감염될 경우 금전적인 이익 (비트코인, 선불 카드 등) 을 요구하게 되고 중요 파일이 감염될 경우 어쩔 수 없이 금액을 지불해야 하지만 과연 암호화된 파일을 되찾을 수 있을지는 의문이다. 
하지만 랜섬웨어가 이슈가 된 만큼이나 랜섬웨어를 분석해 만들어진 복구 프로그램이 나타나게 되었으므로 만약 랜섬웨어에 감염되었다면 우선 이러한 복구 프로그램을 통해 해결 가능한지 확인해 보는 것도 하나의 방법이 될 수 있다. 


 2016년 등장한 복구가 가능한 랜섬웨어

 CryptXXX, Jigsaw, Petya, TeslaCrypt



그런데 RSA 등 강력하다고 알려진 암호화 알고리즘을 사용해 감염된 파일을 해당 프로그램들은 어떻게 복구가 가능할까?

랜섬웨어 복구 프로그램 중 최근까지 지속적으로 이슈가 되고 있는 Jigsaw 와 CryptXXX 복구 프로그램을 통해 그 원리에 대해 자세히 알아보자. 



2. 간략 분석


(1) Jigsaw Ransomware


< Figure 0. Jigsaw 랜섬웨어 감염 화면 >


Jigsaw 랜섬웨어는 4월 초 등장한 랜섬웨어이며 240개의 확장자에 대하여 암호화를 진행한뒤, 확장자를 "FUN", "KKK", "GWS", "BTC" 로 변경합니다.  파일 삭제를 향한 카운트 다운이 시작된다. 일반적으로 Jigsaw 랜섬웨어는 $20-$150 를 요구하며 시간마다 배로 증가하는 수의 파일을 삭제하며, 컴퓨터를 재부팅할 경우 1000개의 암호화된 파일을 삭제한다. 


< Figure 1. 감염 후 생성 파일 >

감염 사실을 알리는 노트 파일이 생성되지 않으며 암호화된 파일과 원본 파일의 크기도 달라진다. 
Jigsaw 랜섬웨어는 감염된 확장자로 버전을 확인해볼 수 있는 특징이 있다.


(2) CryptXXX

< Figure 2. 랜섬웨어 감염 화면 >

CryptXXX 랜섬웨어는 4월 말 등장한 랜섬웨어로 PC에서 자주 사용되는 파일 확장자에 대하여 암호화가 진행된다. 

암호화가 완료되면 확장자가 "CRYPT" 로 변경되고, 복호화를 진행하기 이전에는 데이터를 확인할 수 없다.

해커는 $500 요구하며 정해진 기한 내에 지불하지 않을 경우 두배인 $1000를 요구한다.



< Figure 3. 감염 후 생성 파일 >


감염후 각 폴더에는 감염 사실을 알리는 노트 파일과 암호화된 파일이 생성된다. 암호화된 파일은 원본 파일과 크기가 달라지지 않는다. 
또한 CryptXXX 랜섬웨어는 일반적인 랜섬웨어와 다른 DLL 파일이므로 취약점을 통해 실행된다. 



(3) 암호화 비교


 랜섬웨어 명

Jigsaw

CryptXXX 

암호화 방식 

AES CBC 

RSA-2048 + AES CBC 


대부분의 랜섬웨어는 비밀키를 이용한 암호화 방식을 사용하고 그 키를 다음의 방식 중 하나를 선택해 저장한다. 


1. 악성코드에 저장되어 있는 경우 

2. 감염된 파일에 저장되어 있는 경우

3. 외부 서버에 저장되어 있는 경우 


따라서 어떤 경우든 비밀키가 없는 경우 복호화가 불가능하다. 주 분석 대상으로 선정한 Jigsaw와 CryptXXX의 경우도 이와 같다. Jigsaw의 경우 "악성코드에 저장되어 있는 방식" 이고 CryptXXX는 "외부 서버에 저장되어 있는 방식"이다. 

하지만 CryptXXX의 경우 감염코드의 로직상의 문제점으로 인해 비밀키를 알지 못하더라도 복호화가 가능하며 이를 이용한 복호화 프로그램이 공개되어 있다. 



3. 랜섬 웨어 판별


< Figure 4. 감염된 랜섬웨어 확인하기 >



암호화가 이미 진행된 파일의 확장자만으로 랜섬웨어를 판별하기에는 많은 랜섬웨어가 나왔고 어떠한 랜섬웨어에 감염됬는지조차 알기 힘들어졌다. 이에 발 맞춰 랜섬웨어를 판별해주는 "ID Ransomware" 사이트가 등장했다.

 

해당 사이트는 랜섬웨어에 감염되어 생성된 노트 파일이나 암호화 된 파일을 업로드하면 어떠한 랜섬웨어에 의하여 감염되었는지 판별해준다. 모르는 랜섬웨어에 감염되었다면 먼저 해야할일은 감염된 랜섬웨어의 정체부터 밝혀내야 검색해볼 수 있다. 그런 측면에서 바라보았을 때 매우 유용한 사이트다. 



4. 분석


어떠한 랜섬웨어에 감염되었느지 알고있다고 하더라도 파일은 복구시키는 일은 어렵다. 해커의 입장에서는 자신에게 돈을 지불하는것 외에 복구가 불가능해야 하므로 랜섬웨어의 암호화방법, 키 저장방법등을 고민할 것이며, 랜섬웨어가 점진적으로 발전해가는 이유일 것이다.


(1) Jigsaw Ransomware


< Figure 5. 파일 암호화에 쓰인 키 >


Jigsaw 랜섬웨어는 디컴파일링하여 소스코드를 확인할 수 있다.  소스코드에는 파일 암호화의 종류, Key, IV값이 노출 되어있었고  이는 돈을 지불하지 않고도 복호화가 가능함을 알 수 있다.



< Figure 6. Jigsaw 복호화 프로그램 >

[Figure 6] 는 BleepingComputer에서 배포한 Jigsaw 복호화 프로그램이다. 해당 프로그램은 복호화를 진행할 폴더를 지정하면 그 폴더안의 암호화된 파일들을 풀어주게 되어있다. Jigsaw 랜섬웨어에 쓰이는 키는 프로그램에 내장되어 있으므로 키가 다른 버전이나, 감염된 파일만 있는 상황에서는 복호화가 어렵다.

< Figure 7. Jigsaw 복호화 프로그램 메모리 >
 

Jigsaw 복호화 프로그램은 서버와의 통신이 없고 실행될 때 키를 내장하고 있다는 사실에 근거하여 복호화 프로그램이 내장하고 있음을 알 수 있었다. 이 복호화 프로그램은 암호화된 파일에서 "FUN" , "KKK" , "BTC", "GWS" 같은 확장자에 따라 다른 키를 사용하고 있었다.
  • .fun : OoIsAwwF23cICQoLDA0ODe==
  • .kkk : kUIsAwwF55cICQoLDA0ODe==
  • .btc : PjTsAwwF56CICkIyDA0htR==
  • .gws : OoIsL3eF23cICQoLDA0ODe==  


< Figure 8. Jigsaw에 의해 암호화된 파일 >


Jigsaw에 의해서 "fun" 확장자로 암호화된 파일의 원본을 구할 수 있음을 증명하기 위해 파일을 임의로 암호화 하였다.


< Figure 9. Jigsaw 복호화 코드 >


모듈들을 사용하여 Jigsaw가 사용한 암호화 코드를 돌려놓는 코드를 작성하였고 복호화 프로그램에서 사용한

"OoIsAwwF23cICQoLDA0ODe==" 키를 이용했다.


< Figure 10. Jigsaw 복호화 성공 >


정상적으로 복호화가 되었다 이로써 Jigsaw에서 키가 어떻게 유출되었으며 키를 가지고 있다면 암호화된 파일의 원본을 얻어내는것이 가능하다는 사실을 알 수 있다.


(2) CryptXXX


< Figure 11. CryptXXX 복호화 프로그램 >


RannohDecryptor 는 4월 등장한 CryptXXX 랜섬웨어 복호화 프로그램이며 카스퍼스키에서 배포하였다. 이 프로그램은 
다음의 조건이 만족될 경우 복호화가 가능하다. 

  1. 암호화된 파일(crypt)을 이전 상태로 복원하기 위해서는 반드시 암호화된 파일과 이전 상태의 원본을 가지고 있어야 한다.

  2. 복호화 프로그램을 이용해 복원이 이루어지는 파일은 최초 선택한 파일의 사이즈보다 이하인 경우에 가능하므로 용량이 높은 파일을 선택하여야 더 많은 파일의 해제가 가능하다.


< Figure 12. CryptXXX 암호화 파일 비교 >


"ASDF.txt.crypt" 파일은 "ASDF" 문자열이 감염된 파일이다. 원본 데이터를 알고 있으니 이를 통해 같은 크기의 파일인

idontknow.txt.crypt" 파일은  복호화가 가능하다는 공식이 성립한다. 같은 크기,원본 데이터,암호화 데이터를 가지고 복호화 할 수 있는 연산에는 XOR 일 수 있다고 생각하였으며 XOR은 아래의 특징을 가지고 있다.


  • A XOR B = C

  • A XOR C = B

  • C XOR B = A

A : 암호화 파일

B : 원본 파일

C : 암호화 키 테이블


위와 같이 정의 하였을때 암호화 키 테이블을 이용하여 다른 암호화 파일을 복호화 할 수 있음을 알 수 있게 된다.



< Figure 13. CryptXXX 암호화 파일 비교 >


C에 해당하는 키 테이블 0x14, 0xDE, 0x6F, 0xC0 값을 얻어냈다. 테이블의 단점은 테이블의 길이보다 큰 파일은 복원이 불가능하다는 점이다.



< Figure 14. CryptXXX 암호화 파일 비교 >

키 테이블을 이용해 "idontknow.txt.crypt" 의 데이터를 복원을 시도하자 ASDG라는 사실을 알 수 있었다. 이 값은 원하던 원본 데이터와 동일했다. 일반적인 랜섬웨어 복호화 프로그램은 암호화 키를 이용해  복호화를 시도하나 카스퍼스키의
RannohDecryptor 프로그램은 키 테이블을 이용하는 방식이였다. 


현재 CryptXXX 2.0 또한 같은 방식으로 되어 있으며, 카스퍼스키는 CryptXXX 변종에 대해 지속적인 업데이트를 지원하고 있다. 


    5. 참고


    이 글을 공유하기

    댓글(1)