[Threat Analysis] '몸값' 없이 파일 복구가 가능한 랜섬웨어
테슬라크립트(TeslaCrypt) 랜섬웨어 상세 분석
PC의 파일을 암호화한 후 복구하는 조건으로 금전적 대가를 요구하는 랜섬웨어(ransomware)가 국내에서도 잇따라 발견되면서 사용자들의 불안이 커지고 있다. 최근에는 게임 관련 파일을 노리는 랜섬웨어인 '테슬라크립트(TeslaCrypt 또는 Tescrypt)'가 등장했다. 다행히 국내에서는 아직 피해 사례가 보고되지는 않았을 뿐만 아니라 ‘몸값’을 지불하지 않고도 테슬라크립트 랜섬웨어에 감염된 파일을 복구할 수 있는 것으로 알려졌다.
이 글을 통해 테슬라크립트 랜섬웨어의 공격 방식을 상세히 살펴보고 감염된 파일의 복원 방법을 미리 확인하여 추후 해당 랜섬웨어 감염 시 피해를 최소화하는 방법을 마련하자.
지난 4월 한글 버전이 발견돼 크게 화제가 되었던 크립토락커(CryptoLocker) 랜섬웨어는 explorer.exe나 svchost.exe 등과 같은 정상 프로세스에 코드를 인젝션(injection)하는 방식을 이용했다. 이와 달리 테슬라크립트(TeslaCrypt) 랜섬웨어는 %APPDATA% 경로에 생성한 악성코드 실행을 통해 감염이 발생한다.
테슬라크립트 랜섬웨어가 사용자의 파일을 암호화하는 과정은 다음과 같으며, 해당 랜섬웨어에 감염되면 사용자 PC에는 '.ecc' 이름의 파일만 존재하게 된다.
|
normal.jpg → normal.jpg(암호화) → normal.jpg.ecc(복사본) → normal.jpg(삭제) |
테슬라크립트 랜섬웨어 상세 분석
테슬라크립트 랜섬웨어의 감염 방식과 동작 과정을 상세히 살펴보자.
1. 파일 및 레지스트리 생성
(1) 파일 생성
%APPDATA% 경로(CSIDL_APPDATA)에 생성되는 파일들은 다음과 같다.
경로: %APPDATA%: C:\Documents and Settings\<username>\Application Data
- 랜덤이름.exe (예:asoddjv.exe)
- help.html
- log.html : 감염된 파일들 목록 정보
- key.dat : 파일 복호화에 사용되는 키(KEY) 파일
사용자 PC의 바탕화면 경로(CSIDL_DESKTOPDIR)에 다음과 같은 파일들이 생성된다.
- CryptoLocker.lnk: %APPDATA%asoddjv.exe 파일에 대한 바로가기
- HELP_TO_DECRYPT_YOUR_FILES.bmp: 경고창('v4')의 내용에 대한 이미지 파일
- HELP_TO_DECRYPT_YOUR_FILES.txt : 경고창('v4')의 내용에 대한 텍스트 파일
(2) 레지스트리 등록
자동 실행을 위해 아래와 같이 레지스트리를 등록한다.
레지스트리 : HKCU\Software\Microsoft\Windows\CurrentVersion\Run
- 값 이름: crypto13 - 고정
- 값 데이터: C:\Documents and Settings\<username>\Application Data\asoddjv.exe - 가변
2. 뮤텍스(Mutex) 생성
테슬라크립트 랜섬웨어는 아래와 같은 고정된 뮤텍스 이름을 사용한다.
- System1230123
3. 볼륨 섀도(Volume Shadow) 삭제
감염 작업을 수행하기 전, 아래의 명령(Volume Shadow copy Service(VSS) Admin)을 통해 모든 윈도 복원 이미지를 사용할 수 없도록 한다.
- vssadmin delete shadows /all
4. 감염 대상 드라이브 및 파일
테슬라크립트 랜섬웨어는 드라이브 명에 상관없이 고정식 드라이브(DRIVE_FIXED)만 감염 대상으로 하며, 이동식 드라이브나 네트워크 드라이브는 감염 대상에서 제외한다.
또한 감염 대상 드라이브에서 [표 1]과 같은 확장자를 갖는 파일들을 감염 대상으로 한다. 이 확장자 리스트 중 arch00, Day Profile, forge, mcgame, rgss3a 등이 게임 관련 파일들이다.
[표 1] 감염 대상 파일의 확장자 리스트
이때 다음과 같은 3가지 조건에 해당되는 파일은 감염 대상에서 제외된다.
√ 파일 확장자 : ".ecc" 확장자를 갖는 파일 형태 제외
√ 파일명 : 파일명에 "Temporary"가 존재하는 경우 제외
√ 파일 크기 : 0x10000000바이트(대략 260MB 이상)보다 큰 파일 제외
테슬라크립트 랜섬웨어 감염 파일 복원
이제 테슬라크립트 랜섬웨어 감염 시 생성된 파일들의 구조를 파악하여 파일들을 복원하는 방법을 알아보자. 해외 네트워크 업체도 지난 4월 블로그를 통해 테슬라크립트 랜섬웨어에 감염된 파일의 복원 방법을 소개한 바 있다.
1. 파일 복원의 핵심 파일 'key.dat'
%APPDATA% 경로에 생성되는 데이터 파일 중 'key.dat' 파일은 이름에서 짐작할 수 있듯이 암호화된 파일을 복원하는데 필요한 AES 키(Key) 정보를 담고 있다.
[그림 1] 테슬라크립트 랜섬웨어 감염 알림 창
[그림 1]은 테슬라크립트 랜섬웨어 감염 후 나타나는 화면으로, 이에 따르면 사용자 PC는 'RSA-2048' 방식으로 암호화되었으며 복원에 필요한 프라이빗 키(Private Key)는 서버에 저장되어 있다. 그러나 실제로는 RSA 방식이 아닌 AES 방식으로 암호화되었으며, CBC(Cipher Block Chaining) 모드가 사용되었다.
테슬라크립트 랜섬웨어에서 사용한 암호화 방식은 아래의 파이썬(Python) 예제 코드와 같은 형태로 이루어진다.
[그림 2] 테슬라크립트 랜섬웨어 암호화 방식 예시
위의 예제 코드에서 붉은색으로 표시된 'This is a key123'이 첫 번째 키(AES Key)를 나타내며, 파란색으로 표시된 'This is an IV456'이 두 번째 키(Initialization Vector)로 사용된다. 테슬라크립트 랜섬웨어가 생성한 key.dat 파일에는 위의 예제에서 붉은색으로 표시된 'This is a key123' 정보가 존재한다. 또한 위 예제에서 파란색으로 표시된 'This is an IV456' 정보에 해당하는 초기화 벡터(Initialization Vector, 이하 IV) 값은 감염 파일의 처음 16 바이트를 통해 얻을 수 있다.
좀더 정확히는 'key.dat' 파일의 오프셋(0x177 ~ 0x197)까지의 0x20바이트 값을 SHA256으로 변환하는 과정을 거쳐 생성된 값이 실제 AES 키(256바이트)로 사용된다.
(1) AES 키(Key)
테슬라크립트 랜섬웨어는 key.dat 파일에 존재하는 AES 키 값(0x20 바이트)과 감염 파일마다 각각 다른 IV값(0x10)을 통해 복원이 이루어질 수 있는 구조이다. [그림 3]은 key.dat 파일의 내용을 나타내며, 파란색으로 표시된 부분이 AES 키에 해당하는 0x20바이트를 나타낸다. 해당 값은 파일의 시작을 기준으로 0x177 오프셋만큼 떨어진 위치에 존재하며, 전체 파일 크기는 0x27C바이트로 고정적이다.
[그림 3] key.dat 파일의 AES 키(파란색 표시 부분)
이렇게 생성된 AES 키 값은 [그림 4]와 같이 암호화 과정을 거친 후 공격자 서버로 전송된다.
[그림 4] AES 키 값 전송 과정
여기에서 "key=6446f0b0351eae14d01bcc70b0d4653ac1ce34887b2d23a53607c25655c8c793" 항목에 추가되는 값([그림 3]의 ①)이 AES 키 값이며, "addr=1MX9oeHq4gcCULbdG93eVyd1kWrtJKozFz" 항목에 추가되는 값([그림 3]의 ②)는 비트코인 주소(BitCoin Address)로 사용되는 값이다.
해당 테슬라크립트 랜섬웨어 내부에 존재하는 공격자 주소는 다음과 같은 4곳이다.
테슬라크립트 랜섬웨어 내 공격자 주소
- 7tno4hib47vlep5o.s2.tor-gateways.de
- 7tno4hib47vlep5o.tor2web.fi
- 7tno4hib47vlep5o.tor2web.blutmagie.de
- 7tno4hib47vlep5o.2kjb7.net
(2) 비트코인 주소(Bitcoin Address)
[그림 5]와 같이 key.dat 파일의 처음 시작 부분에 존재하는 값 ‘1MX9oeHq4gcCULbdG93eVyd1kWrtJKozFz’는 파일 복원을 위해 결제 시 사용되는 비트코인 주소 값과 동일하다. 정확한 비트코인 주소 값을 입력하면 프라이빗 키를 결제하기 위한 수단으로 약 528달러 상당의 비트코인(2.2 BTC~) 또는 페이팔(PayPal My Cash Card) 등 2가지 방법을 제안한다.
한편 테슬라크립트 랜섬웨어는 피해자들의 신뢰를 얻기 위해 테스트로 500KB 이하의 암호화된 파일 단 1개만 복호화해주는 기능을 제공하며, 웹 기반으로 파일을 업로드하는 구조이다.
2. 감염 파일 구조
[그림 6]은 ‘겨울.jpg’ 파일의 테슬라크립트 랜섬웨어 감염 전•후를 비교한 것이다. 감염 후 파일 크기가 증가하였으며, 내부 데이터도 암호화된 것을 확인할 수 있다.
[그림 6] 테슬라크립트 랜섬웨어 감염 전•후 파일 비교
테슬라크립트 랜섬웨어에 의해 암호화된 파일은 ‘원본파일명.ecc’ 형태를 하고 있다. 변경된 파일들의 공통점은 파일 시작으로부터 0x10 바이트의 데이터가 암호화에 사용된 2차 키 값 IV이며, 이후 리틀엔디안(Little-endian) 형태로 저장된 4바이트 값(0x00019C46)에는 암호화 이전의 원본 파일의 크기 정보가 저장된다는 점이다. 즉, 암호화된 데이터의 시작은 감염 파일의 시작으로부터 0x14바이트 떨어진 위치임을 알 수 있다.
실제 파일 복원 작업은 다음과 같은 순서로 이루어진다.
① key.dat 파일로부터 AES 키 정보 0x20바이트를 읽는다. (오프셋: 0x177~0x197)
- 변환 전 AES 키 : 6446f0b0351eae14d01bcc70b0d4653ac1ce34887b2d23a53607c25655c8c793
② AES 키 값을 ‘SHA256’ 값으로 변환한다.
- 변환 후 AES 키 : 795230585896ef6e3dfdbaf694f426e60290b36b00c5b75cf028a82f2a35afc3
③ 암호화된 파일에서 얻은 IV 값과 AES 키를 이용하여 복호화한다. 이때 IV 값은 *.ecc 파일의 처음 시작 16바이트이다.
이와 같은 정보를 토대로, 감염된 시스템의 'key.dat' 파일과 암호화된 파일들(*.ecc)만 있으면 [그림 7]과 같은 파이썬 코드로 감염된 파일들을 복원할 수 있다.
[그림 7] 파일 복구를 위한 파이썬 코드
3. 그 외 key.dat 파일의 항목들
지금까지 key.dat 파일에 존재하는 8가지 항목의 데이터 중 비트코인 주소와 AES 키에 해당하는 항목을 위주로 살펴보았다. key.dat 파일에 존재하는 그 외의 항목들은 아래와 같은 API 호출을 통해 얻은 정보들을 이용해 생성되는 것으로 확인되었다.
[그림 8]은 위의 API 중 ‘CryptGenRandom’ 함수를 통해 얻은 0x40 크기의 데이터가 특정 함수(sub_41B3A0)를 통해 변환되는 과정이다.
마찬가지로 다른 API 들의 결과로 리턴된 값들도 sub_41B3A0 함수를 통한 변환 과정을 거치며, 최종 변환값이 key.dat에 사용되는 것을 확인할 수 있다. 예를 들어 GlobalMemoryStatus, GetCurrentProcessId API 호출을 통해 얻은 결과값도 [그림 9]와 같이 sub_41B3A0 함수를 통해 변환 과정을 거친다.
[그림 9] GlobalMemoryStatus, GetCurrentProcessId 변환 과정
[그림 10]은 key.dat 파일의 8개 세부 항목들이 데이터를 쓰는(Write) 과정이다. [그림 10]의 붉은색 박스로 표시된 부분은 마지막 8번 째에 추가되는 항목으로, GetLocalTime API 를 통해 얻은 시간 정보(16바이트)이다(그 외 각 세부 항목별 데이터의 의미와 사용 목적에 대한 분석 내용은 추후 제공할 예정이다).
[그림 10] key.dat 파일의 세부 항목
4. 프로세스 강제 종료
감염 스레드(thread) 구동 후 2번 째로 생성하는 스레드(GetProcessImageFileNameW)는 아래의 이름으로 실행되는 프로세스를 강제로 종료(TerminateProcess)하는 기능을 갖는다. 단순히 프로세스 이름만으로 비교가 이루어지기 때문에 이름을 변경하여 실행하면 정상적인 실행이 가능하다.
강제 종료하는 프로세스
- taskmgr
- procexp
- regedit
- msconfig
- cmd.exe
지금까지 테슬라크립트 랜섬웨어의 구조와 동작 방식을 상세히 살펴보고 감염된 파일을 복구할 수 있는 방법을 알아봤다. 위와 같은 방법으로 파일 복구가 어려운 사용자들을 위해 안랩은 ".ecc"라는 확장자로 암호화된 파일 복원을 위해 전용백신을 제공하고 있다. 단, key.dat 파일이 %AppData% 경로에 존재할 경우에만 해당 전용백신을 이용할 수 있다.
그러나 테슬라크립트가 아닌 대부분의 랜섬웨어에 감염되면 몸값을 지불하지 않고는 파일을 복구할 수 있는 방법이 알려져 있지 않다. 게다가 설사 돈을 지불하더라도 시스템이 원래대로 돌아온다는 보장도 없다. 결국 사전에 랜섬웨어 감염을 방지하는 것이 가장 좋은 방법이다. 발신자가 명확하지 않은 이메일에 포함된 의심스러운 파일들을 실행하지 않아야 한다. 또한 사용 중인 백신을 항상 최신의 상태로 업데이트하고, OS와 애플리케이션 또한 최신 버전으로 유지하는 것이 중요하다. 이와 함께 중요한 파일들은 미리 백업을 해둘 것을 권장하고 있다.
한편 V3 제품군은 테슬라크립트 랜섬웨어를 다음과 같은 진단명으로 탐지하고 있다. @
<V3 제품군 진단명>
Trojan/Win32.Tescrypt
<참고 사이트>
- https://technet.microsoft.com/en-us/library/cc788026.aspx
- https://pypi.python.org/pypi/pycrypto
- 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://www.microsoft.com/security/portal/threat/encyclopedia/entry.aspx?Name=Ransom:Win32/Tescrypt.A#tab=2
- AhnLab분석팀 양하영 책임