원본 파일 복원이 가능한 랜섬웨어 '테슬라크립트' AhnLab / 2015-05-19
게임 관련 파일을 타깃으로 제작된 랜섬웨어 '테슬라크립트(TeslaCrypt, Tescrypt)'는 지난 4월 시스코시스템즈의 블로그에서 처음 파일 복원 방법이 소개됐다. 국내에서는 테스클라크립트에 대한 피해 사례가 많지 않지만 추후 피해 발생에 대비해 소개하고자 한다.
테슬라크립트는 지난 4월 이슈가 된 크립토락커(CryptoLocker) 처럼 정상 프로세스(explorer.exe, svchost.exe)에 코드 인젝션(injcetion)을 통한 방식이 아닌, %APPDATA% 경로에 생성한 악성코드 실행을 통해 감염된다. 파일을 암호화하는 과정은 다음과 같다. 감염 후 사용자 시스템에는 .ecc 이름의 파일만 존재한다.
테슬라크립트는 드라이브 명에 상관없이 고정식 드라이브(DRIVE_FIXED)만을 감염대상으로 한다. 이동식, 네트워크 드라이브는 감염대상에서 제외된다. 감염대상은 아래 확장자를 가진 파일들이다. 확장자 리스트 중 .arch00, .DayZPrifile, .forge, .mcgame, .rgss3a 등은 게임 관련 파일이다.
[표 1] 감염대상 확장자 파일
반면 감염이 되지 않는 경우도 있다. 파일 확장자 중 .ecc를 갖거나 파일명 중 Temporary가 있는 경우, 그리고 파일크기가 0x10000000바이트(대략 260MB 이상) 보다 큰 경우이다.
파일 복원의 핵심(‘key.dat’)
%APPDATA% 경로에 생성되는 데이터 파일 중 'key.dat' 파일은 파일이름에서 알 수 있듯이 암호화된 파일을 복원하는데 필요한 'AES Key' 정보를 담고 있다. 테슬라크립트에 감염된 후 사용자에게 보이는 아래 윈도 화면에서는 'RSA-2048' 방식으로 암호화됐다. 복원을 위한 'Private Key'는 서버에 저장된다고 명시돼 있다.
감염된 후 사용자 PC에 나타나는 화면
하지만 실제로는 RSA 방식이 아닌, AES 방식으로 암호화됐으며, CBC(Cipher Block Chaining) 모드가 사용됐다. 테슬라크립트에서 사용한 암호화 방식은[표1]의 python 예제코드와 같은 형태로 이뤄진다. 아래의 예제코드에서 붉은색으로 표시된 'This is key123'이 첫 번째 키(AES Key)를 나타내며, 파란색은 'This is an IV456'이 두 번째 키(Initialization Vector)로 사용된다.
출처: https://pypi.python.org/pypi/pycrypto
악성코드가 생성한 'key.dat' 파일에는 붉은색으로 표시한 'This is a key123' 정보가 존재하며, 파란색의 'This is an IV456' 정보에 해당하는 Initialization Vector(IV) 값은 감염파일의 첫 시작 16 바이트를 통해 얻을 수 있다.
좀더 정확하게는 'key.dat' 파일의 옵셋(0x177 ~ 0x197) 까지의 0x20 바이트값을 SHA256으로 변환하는 과정을 거쳐 생성된 값이 실제 AES key (256-bits)로 사용된다.
랜섬웨어에 의해 암호화된 파일은 "원본파일명.ecc" 형태이며, 변경 후의 파일들은 공통적으로 파일시작부터 0x10 바이트의 데이터는 암호화에 사용된 2차 키 값 IV(Initialization Vector)이며, 이후 LittleEndian 형태로 저장된 4바이트 값(0x00019C46)은 암호화 전 원본파일 크기정보가 저장된다. 즉, 암호화된 데이터의 시작은 감염파일 시작부터 0x14 바이트 떨어진 위치임을 알 수 있다. 실제 파일복원 시, 수행하는 작업은 다음과 같은 순서로 이루어진다.
1) key.dat 파일로 부터 AES Key 정보 0x20 바이트를 읽는다. (Offset: 0x177~0x197) → AES Key(변환 전): 6446f0b0351eae14d01bcc70b0d4653ac1ce34887b2d23a53607c25655c8c793
2) AES Key 값을 SHA256 값으로 변환한다. → AES Key(변환 후): 795230585896ef6e3dfdbaf694f426e60290b36b00c5b75cf028a82f2a35afc3
3) 암호화된 파일에서 얻은 IV 값과 AES Key 를 이용하여 복호화한다. → IV 값은 *.ecc 파일의 첫 시작 16바이트
이러한 정보를 바탕으로 감염된 시스템의 'key.dat '파일과 암호화된 파일들(*.ecc)만 있으면, 아래와 같은 Python 코드로 감염된 파일들을 복원할 수 있다.
그 외 'key.dat' 파일의 항목
'key.dat' 파일에 존재하는 8가지 항목의 데이터 중, 'Bitcoin address'와 'AES Key'에 해당하는 항목은 언급됐지만 나머지 항목들의 정보는 어떤 용도로 사용되는지는 파악하지 못햇다. 다만, 아래의 API 호출을 통해 얻은 정보들이 'key.dat' 파일의 나머지 항목들을 생성하는데 사용된다는 것이 확인됐다. 아래 그림은 실제 아래에 언급한 API 중, CrpyGenRandom 함수를 통해 얻은 0x40 크기의 데이터가 특정 함수(sub_41B3A0)를 통해 변환되는 부분을 나타낸다. 그외 다른 API도 결과로 리턴된 값이 공통적으로 sub_41B3A0 함수를 통해 변환 과정을 거치며, 최종 변환값이 'key.dat'에 사용되는 것을 확인할 수 있다.
아래의 그림은 위와 동일하게 GlobalMemoryStatus, GetCurrentProcessld API 호출을 통해 얻은 결과값이 sub_41B3A0 함수를 통해 변환과정이 이루어짐을 나타낸다.
아래 API들이 ‘key.dat’ 파일의 데이터를 생성하는데 사용되는 것으로 감염 시스템의 다양한 정보들(Process, Thread, Module, Heap)이 이용됨을 알 수 있다. 감염될 때마다 ‘key.dt’ 파일의 데이터가 다르게 생성되는 것도 아래의 API들의 영향으로 추정된다.
아래의 그림은 key.dat 파일의 8가지 세부 항목별로 데이터를 쓰는(write) 부분을 나타낸다. 마지막 8번째 추가되는 항목은 GetlocalTime API를 통해 얻은 시간정보(16바이트)로, 붉은색 부분을 나타낸다.
프로세스 강제종료
감염 스레드 구동 후 2번째로 생성하는 스레드에서는 아래의 이름(GetProcessImageFileNameW)으로 실행되는 프로세스를 강제로 종료하는 기능을 갖는다. 단순히 프로세스 이름만으로 비교가 이뤄지므로 이름을 변경 실행 시 정상으로 실행할 수 있다. 보다 자세한 내용은 ASEC 블로그에서 확인할 수 있다. @
-taskmgr -procexp -regedit -msconfig -cmd.exe
<참고 사이트> - http://blogs.cisco.com/security/talos/teslacrypt - https://blogs.mcafee.com/mcafee-labs/teslacrypt-joins-ransomware-field - https://blog.kaspersky.com/teslacrypt-ransomware-targets-gamers/ - http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation |
'<정보 및 지식> > ◈ 컴퓨터 & IT' 카테고리의 다른 글
스마트폰을 위한 '똑똑한' 보안앱 (0) | 2015.06.02 |
---|---|
아이패드를 버리고 '서피스 3'을 선택해야 하는 7가지 이유 (0) | 2015.05.26 |
디스크 정리로 PC 저장 공간 늘리기 (0) | 2015.05.24 |
누구나 직접 할 수 있는 3가지 PC 수리 (0) | 2015.05.21 |
소프트웨어 업데이트, 꼭 해야 하는 이유 (0) | 2015.05.20 |