정상파일을 ".crypt" 확장자를 부여하여 암호화하는 특징을 갖는 CryptXXX 이름의 랜섬웨어는 현재까지 버전 1.x, 2.x, 3.x 세 가지 형태가 알려져 있다. 본 글에서는 이 중, 2.x 버전의 암호화 방식을 소개하고, 이를 바탕으로 일부 파일에 한해 복구가 가능함을 설명한다.

 

1. 암호화 방식

아래의 [그림-1]은 CryptXXX 에 의해 암호화된 "Photo.jpg.crypt" 파일을 나타낸다. 암호화는 고정크기(0x1FFF)의 블록 단위로 순차적으로 이루어지며, 암호화 최대 크기는 0xD012FE (대략 13M)로 이후의 데이터는 원본파일과 동일하다. (단, 원본파일 끝에 260바이트 크기의 데이터는 삽입)

 

[그림-1] CryptXXX 암호화 방식

 

암호화된 파일은 공통적으로 원본파일과 비교하여 260(=0x104)바이트가 증가한 형태이며, 이는 파일 끝 부분에 삽입된 KeyTable 정보([그림-1]에서 붉은색 블록)로 인한 것이다. 이 KeyTable 정보가 블록 단위의 암호를 복호화하는데 핵심이 되는 데이터로 공개키를 통해 암호화되어 저장된다. 즉, 구조적으로는 해당 공개키에 매칭되는 개인키 정보없이는 해당 KeyTable 정보를 복호화할 수 없고, 파일복구가 불가능하다. 하지만, 해당 KeyTable 정보는 개인키 없이도 원본파일 시작부분 일부 데이터(예를들면 파일포멧 별 Magic 정보)만 알 수 있다면 유추할 수 있는 취약성이 존재한다.

- PDF 파일의 Magic: "%PDF" (파일시작 첫 4바이트)
- DOC, PPT, XLS 파일의 Magic: "D0CF11E0" (파일시작 첫 4바이트)

 

2. KeyTable 생성방식과 취약성

아래의 [그림-2]는 파일 끝에 삽입된 0x104 바이트 크기의 KeyTable 이 생성되는 과정을 나타내며, 노란색 부분이 공개키로 암호화된 KeyTable_A[0x40] 이며, CryptEncrypt() API를 통해 공개키로 암호화 시 원본 0x40 크기의 데이터가 최종 0x80 크기로 증가된다.

 

[그림-2] 키 테이블 생성과정

 

[그림-2]에서 언급된 암호화에 사용되는 핵심 정보 3가지는 "4바이트 SEED 값", "KeyTable_A[0x40]", KeyTable_B[0x100] 이며, 최초 4바이트 크기의 SEED 값으로 부터 이후 정보들이 순차적으로 만들어지는 구조를 갖는다. 키 생성과정의 최 상위에 위치하는 SEED 값은 감염시점의 시스템시간(SystemTime) 정보 중, 시(wHour), 분(wMinute), 초(wSecond), 밀리초(wMillisecond) 를 이용하여 얻어지며, 이 SEED 값으로부터 0x40 크기의 KeyTable_A[0x40] 데이터가 생성된다. 바로 이 부분에서 제작자가 의도하지 않은(?) 취약성이 존재하며, SEED 값이 동일하면 매번 동일한 KeyTable_A[0x40] 가 생성되는 구조를 갖는다. 최종 블록 단위의 암호화에 사용되는 KeyTable_B[0x100]의 데이터와 원본파일로 부터 읽은 블록과의 XOR를 통해 암호화가 수행된다. 

즉, SEED 값이 동일하면, 매번 생성되는 최종 키 테이블정보가 동일한 점과 암호화 방식이 XOR라는 2가지 포인트를 바탕으로 복구대상 파일의 고정적 Magic 정보가 존재한다면, 역으로 키를 유추할 수 있는 구조이다. 아래의 [그림-3]은 SEED 값이 0x02978CAC 일 때, 생성되는 키 테이블 A,B의 예를 나타낸다.

 

[그림-3] 키 테이블 A,B 예제

 

KeyTable_A[0x40] 데이터가 생성되는 방식은 아래의 2가지 기본 테이블 중, Delphi Random 함수를 통해 얻은 랜덤값을 바탕으로 하나의 값이 선택되어 구성되는 구조를 갖는다.

(1) "QWERTYUIOPASDFGHJKLZXCVBNM<>:\?!@$%^&*()_+~|"
(2) "qwertyuiop[]asdfghjkl;zxcvbnm,./`1234567890-="

CryptXXX 는 총 2번의 Delphi Random 함수를 사용하여 아래의 Index(A)와 Index(B)를 얻게되고, Index(A)는 위 기본 테이블 중 하나를 선택하기 위한 목적으로, Index(B)는 선택된 테이블의 데이터 중 하나를 선택하기 위한 목적으로 사용된다.

Index(A): DelphiRandom(3) - 0 ~ 2 범위의 랜덤 값 생성 (0, 2인 경우 -> (1)번, 1인 경우 -> (2)번)
Index(B): DelphiRandom(44) - 0 ~ 43 범위의 랜덤 값 생성

예를 들어 Index(A) == 0 이고, Index(B) == 3이면, ‘R’ 문자열이 선택된다.

 

3. 키 테이블 생성함수

CryptXXX 랜섬웨어에서 파일 암호화 시 사용되는 핵심 정보 3가지 별 생성함수는 다음과 같다.

 

(1) SEED 값 생성

아래의 [그림-4]는 SystemTime 정보를 통해 4바이트 크기의 SEED 값을 생성하는 함수를 나타낸다. 시스템시간 정보는 SEED 값 생성에 가장 중요한 정보로 암호화된 파일의 수정시간을 통해 유추할 수 있으나, CryptXXX 는 암호화 수행 전 해당 파일의 시간정보를 저장(GetFileTime)해둔 후, 암호화 완료 후 원래의 시간정보로 재 설정(SetFileTime)하는 기능으로 인해 유추가 불가능하다.

[그림-4] SEED 값 생성함수

 

(2) 키 테이블(A) 생성

아래의 [그림-5]는 SEED 값을 바탕으로 0x40 크기의 키 테이블을 생성하는 함수이며, do-while 문을 통해 1바이트 씩 생성되는 데이터가 SEED 값이 동일하면 동일형태로 생성되는 취약성이 존재하는 부분이다.

[그림-5] 키 테이블(A) 생성함수

 

(3) 키 테이블(B) 생성

아래의 [그림-6]은 키 테이블(A)로 부터 0x100 크기의 최종 키 테이블(B)가 생성되는 함수를 나타낸다. 이 키 테이블 정보는 1바이트 단위의 블록단위의 암호화 시 XOR 키 값으로 사용된다.

[그림-6] 키 테이블(B) 생성함수

 

4. 복구방식

시, 분, 초, 밀리초 정보를 통해 계산되는 SEED 값의 범위는 다음과 같다.

- 최소값: 00:00:00:0000 -> 0, 최대값: 23:59:59:999 -> 0x5265BFF

사용자 마다 그리고 암호화된 파일마다 서로 다른 SEED 값을 유추하기 위해 0 ~ 0x5265BFF 범위의 SEED 를 순차적으로 선택하며, 이를 바탕으로 암호화에 사용된 키 테이블을 생성 및 복호화를 시도한다. 첫 번째 블록에 대한 복호화를 통해 파일의 고유한 Magic 정보가 확인되면, 유효한 SEED 값으로 판단하고 전체 파일에 대한 블록 단위의 복구를 시도한다. 우선 첫 번째 파일이 복구에 성공하면, 두 번째 파일부터는 SEED의 범위를 제한하여 좀 더 빠른 복구가 가능하도록 하였다. 이러한 설정은 복구대상 파일들이 동일 시간대에 감염된 형태가 대부분일 것으로 가정하여 이루어진 것으로 복구대상 파일들이 서로 다른 시스템에서 다른 시간대에 수집된 형태의 경우, 복구시간이 더 오래 걸리는 특징을 갖는다.

아래의 [그림-7]은 CryptXXX 복구툴에서 파일복구을 위해 이루어지는 과정을 나타낸 것으로 구조상 첫번째 파일을 복구하는데 오랜 시간이 소요되며, 이후 파일부터는 빠르게 복구가 가능하다.

 

[그림-7] 복구툴 동작방식

 

5. 복구대상 리스트

복구툴을 통해 복구가능한 CryptXXX 버전은 2.x 로 제한적이며, 우선 아래의 확장자들에 대해 복구가 가능하도록 제작되었다. 하지만, 이 외에도 원본파일의 고유한 Magic 정보만 알 수 있다면, 복구가 가능한 구조이므로 추후 복구대상이 추가될 수 있다.

CHM, AI, HWP, PDB, PDF, RTF, HTM, HTML, PHP, XML, DWG, PS, WSF, KEY, CSR, CRT, WAV, MP3, OGG, WMA, WMV, AVI, ASF, MP4, MOV, MID, MPG, FLV, PNG, GIF, BMP, TIF, JPG, JPEG, ZIP, RAR, BZ2, 7Z, GZ, JAR, APK, TGZ, ODS, DOC, DOT, PPT, POT, PPS, XLS, XLT, DOCX, DOCM, DOTX, DOTM, PPTX, PPTM, POTM, POTX, PPSM, XLSX, XLSB, XLSM, XLTM, XLTX, EPS, ISO, SQLITE3, MDB, MSI, APP, FDB, ACCDB, SLN, CLASS, VCXPROJ

(단, 위 명시된 확장자들 중, 파일시작 부분이 고유한 Magic 정보를 갖지않는 파일들(HTM, HTML, XML, PHP 등)은 현재 일부 태그(<html, <?xml, <?php 등)만을 Magic 정보로 추가한 상태이다. 즉, 암호화된 파일이 해당 태그로 시작하지 않는 경우, 복구하지 못함)

 

[추가 복구대상]

- *.M4A 확장자 추가 - 전용 복구툴 업데이트(2016.06.01)

 

6. 복구툴 경로

CryptXXX 랜섬웨어 2.x 버전에 대한 복구툴은 아래의 경로로 부터 다운로드 가능하다.

https://www.ahnlab.com/kr/site/download/product/productVaccineView.do?seq=118


복구툴에 의해 진단되었으나 치료버튼 클릭 시, 아래와 같이 "복원 실패"로 처리된 파일들의 유형은 다음의 2가지 경우에 해당한다.

전용 복구툴 실행화면

 

유형-1) 감염시점이 복구된 파일들과 다른 경우: 재 검사/치료 시 복원 가능

유형-2) Magic 값을 찾지못한 경우: 새로운 Magic 패턴 추가필요 (대부분 HTML, PHP, XML 등의 경우에 해당)

 

7. CryptXXX 3.x 버전

CryptXXX 랜섬웨어 3.x 버전은 원본 파일을 암호화 시, 키 테이블을 이용한 XOR 방식이 아닌 공개키를 사용하는 것으로 확인되어 복구가 불가능한 구조를 갖습니다. 전용 복구툴을 통해 3.x 버전에 감염된 파일을 진단 시, 아래와 같은 메시지 창을 확인할 수 있습니다.

 

3.x 버전에 대한 복원 불가 메시지

 

 

신고
Posted by yhayoung


최근 크립트엑스엑스엑스 랜섬웨어가 대량 유포되면서 피해 사례가 늘어나고 있다. 크립토엑스엑스엑스의 특징은 기존 랜섬웨어와는 달리 실행파일(EXE) 형태가 아니라 동적 링크 라이브러리(DLL) 형태로 유포되고 있다는 점이다. DLL 형태로의 유포는 정상적인 프로세스와 함께 동작하는 구조여서 감염 사실을 알아차리기조차 어렵다.

이 글에서는 크립트엑스엑스엑스의 동작 방식과 주요 기능 등 자세한 분석 내용을 소개한다. 또한 안랩은 이러한 분석을 바탕으로 현재 일부 버전(CryptXXX 2.x 버전)에 대한 원본 파일 복구 툴도 제공하고 있다.

크립트엑스엑스엑스 랜섬웨어(진단명: Trojan/Win32.CryptXXX, 이하 크립트엑스엑스엑스)는 컴퓨터에 있는 파일을 암호화한 뒤 “.crypt”확장자로 변경하여 사용자에게 비트코인을 요구하는 랜섬웨어이다. 아래의 [그림 1]은 크립트엑스엑스엑스의 동작 방식이다.

[그림-1] 크립트엑스엑스엑스 동작 방식

 

크립트엑스엑스엑스의 경우 다른 랜섬웨어와의 차이점은 DLL(동적 링크 라이브러리, Dynamic Linking Library)로 동작한다는 점이다. 크립트엑스엑스엑스는 정상 rundll32.exe를 악성 DLL이 있는 경로에 svchost.exe로 이름을 바꾸어 복사한 뒤 악성 DLL의 내보내기(Export) 함수를 인자 값으로 호출하여 동작한다.

[그림-2] svchost.exe(정상 rundll32.exe)로 로드되어 동작하는 악성 DLL

 

이 악성코드는 피해자의 컴퓨터를 감염시킬 때 “!Recovery_사용자ID.txt”, “!Recovery_사용자ID.html”, “!Recovery_사용자ID.bmp” 형식의 파일을 생성하며 내용은 [그림 3, 4]와 같다

[그림-3] 크립트엑스엑스엑스 결제 안내 페이지


[그림-4] 크립트엑스엑스엑스 결제 안내 텍스트


크립트엑스엑스엑스 주요 기능 

n  자동 실행 등록

크립트엑스엑스엑스는 [1]와 같이 시작프로그램에 바로가기 링크파일을 생성한다. [그림 5]에서 알 수 있듯이 해당 링크파일에 의해 실행되는 파일은 크립트엑스엑스엑스이며, MS114 라는 이름의 함수를 호출하는 기능을 한다.


 [-1] 자동 실행 등록을 위한 바로가기 링크파일 생성


[그림-5] 자동 실행 등록 정보

 

n  C&C 통신

[그림-6] C&C 통신 패킷 정보

크립트엑스엑스엑스는 파일을 암호화 하기 전에 C&C에 악성코드가 생성한 사용자 ID를 전송한다.

 

악성 DLL 내부에 암호화 된 C&C 2개이며, 첫 번째 IP에 접속이 되지 않았을 경우 두 번째 IP로 연결된다.

- 144.7*.82.1*:443 

- 93.1**.187.6*:443

 

C&C접속유무와 관계없이 패킷을 전송 한 후에는 파일 암호화가 진행된다.

  

n  파일 암호화 대상

분석된 크립트엑스엑스엑스로부터 확인된 암호화 대상은 [2]와 같다.

Z:\ 부터 A:\ 까지 마운트 된 모든 드라이브 중, 아래 암호화 대상 드라이브만 감염이 진행된다.

[표-2] 암호화 대상 드라이브 


[-3] 암호화 대상 확장자


[표-4] 암호화 제외 대상 경로


n  암호화된 환경

크립트엑스엑스엑스는 암호화가 완료된 파일의 수정한 날짜 시간정보를 백업된 원본의 수정한 날짜로 변경한다.

[그림-7] 암호화 된 파일의 파일의 시간 정보 변경 코드


[그림 7]에서 붉은색 박스로 표현한 부분의 데이터(A4 80 BC 4B 36 B0 D1 01)SetFileTime API를 사용하여 백업된 원본의 수정한 날짜로 변경된다.

[그림-8] 암호화 된 파일의 파일의 시간 정보 변경 전(좌) 및 변경 후(우)


이때 시간정보가 변경된 파일은 MoveFileW API를 사용하여 [원본 파일명].crypt로 확장자가 변경된다.

[그림-9] 암호화 후 확장자 변경

 

그리고 암호화 된 파일이 있는 경로마다 결제 안내 파일들을 생성한다.

[그림-10] 암호화 된 파일들과 생성 된 결제 안내 파일 (.bmp, .html, .txt)


앞서 언급했듯이 SetFileTime API를 이용하여 [그림 11]에 있는 붉은색 박스에 있는 데이터 (00 00 00 00 71 37 00 00)1601312일 월요일 101727초로 변경된다.

[그림-11] 결제 안내 파일의 시간 정보 변경 코드


[그림-12] 결제 안내 파일의 시간 정보 변경 전(좌) 및 변경 후(우)

 

 

생성한 결제 안내 파일의 시간 정보를 [그림-12]과 같이 변경한다. 암호화가 완료되면 [그림-13]와 같은 화면을 띄우고 스크린을 잠기게 하여 사용자가 어떠한 동작도 할 수 없게 한다. 

[그림-13] 암호화 완료 후 화면


 


크립트엑스엑스엑스는 일반적으로 웹사이트 다운로드 등으로 유포되는 경우가 많다따라서 사용자는 출처를 알 수 없는 메일에 첨부된 파일 실행이나 불필요한 사이트 접근을 삼가는 등의 주의가 필요하다

해당 악성코드 감염을 막기 위해서는 항상 윈도우 보안 패치 및 V3 백신 프로그램을 최신 업데이트 상태로 유지하는 것이 필요하다.

안랩은 원본 파일을 복구해주는 툴을 랜섬웨어 보안센터를 통해 무료로 제공하고 있다.

복구툴 다운로드 받으러 가기

신고
Posted by JYP

4월 11일 발견된 Locky 랜섬웨어를 다운로드하는 악성코드에서 "CVE-2015-1701" 취약점이 사용된 것이 확인되었다. "CVE-2015-1701" 취약점은 2015년 4월, 'Operation RussianDoll' 이름으로 명명된 러시아발 APT(Advanced Persistent Threat) 공격에 사용되어 알려진 취약점이다. 참고로 Locky 랜섬웨어는 발견 당시부터 현재까지 윈도우 설치언어가 러시아어 인 경우, 동작하지 않는 특징을 갖는다. 즉, Locky 랜섬웨어는 러시아에서 제작/배포되는 것으로 추정되며, APT 공격에 사용된 취약점이 랜섬웨어에서도 동일하게 사용된 것이 흥미로운 부분이다. 또한, "CVE-2015-1701" 취약점과 관련하여 기 알려진 함수("ClientCopyImage") 외에 Win8 이상의 경우에는 새로운 공격기법도 확인되어 추가분석이 필요한 상황이다.

"CVE-2015-1701" 취약점은 Win7 환경에서만 동작하며 "CreateWindowsEx" API 를 통해 시스템 권한을 획득하는 것이 주 기능이다. 기존에 알려진 Locky 랜섬웨어 다운로드는 주로 이메일의 첨부파일(MS오피스문서, 자바스크립트 파일)을 통해 이루어진다. 하지만, 이번에 발견된 악성코드는 EXE 파일 형태로 Locky 랜섬웨어를 다운로드 하는 기능과 "CVE-2015-1701" 취약점이 포함된 특징을 갖는다. 이러한 다운로드 방식의 변화는 향후 Locky 랜섬웨어가 이메일이 아닌 다양한 방식을 통해 감염이 시도될 수 있음을 나타낸다.

 

1. Locky 다운로드

해당 다운로더는 "URLDownloadToCacheFileW" 함수를 사용하여 아래의 사이트로 접속 및 Locky 랜섬웨어 다운로드가 이루어진다.

- http://[xxxx].nussvital.com.ar/read.php 

 

2. CVE-2015-1701 취약점

 

(1) 취약점 대상

1차 조건은 OSMajorVersion 값이 6인 경우이며, 2차 조건은 대상 시스템의 "win32k.sys" 파일의 "수정날짜" 정보를 바탕으로 이루어지며, 지정된 날짜 이전 인 경우가 공격대상이다. 운영체제 버전 별로 악성코드 내부에 저장된 비교대상 날짜는 다음과 같다.

  • 2015년 5월 14일 (이전) - Win7

  • 2015년 2월 20일 (이전) - Win8 이상

날짜 정보를 얻어오는 방식은 "NtQueryInformationFile" API 호출을 통해 이루어지며, 운영체제 버전에 따라 비교하는 날짜가 다름을 알 수 있다. [그림-1]에서 악성코드에서 사용하는 [4113CC] 주소의 상수 값은 PEB(Process Environment Block) 구조체의 OSMajorVersion, OSMinorVersion 정보를 통해 얻은 운영체제 버전에 따라 설정되는 값이다. 좀 더 구체적으로 운영체제 마다 [4113CC] 주소의 상수 값이 설정되는 내용은 다음과 같다.

즉, 아래의 [그림-1]의 코드에서 Win7의 경우 14 값이 설정되며, "win32k.sys" 파일의 비교날짜는 2015년 5월 13일이다. 반면, 6.2 버전의 Win8의 경우는 2015년 2월 20일이 취약점 여부를 판단하는 기준날짜가 된다. 취약점 공격 대상 시스템은 OSMajorVersion 값이 6 인 환경이며, OSMinorVersion 값에 따라 [411404] 주소의 상수 값이 1과 2 로 설정되는 구조이다. [411404] 주소의 1, 2 값은 이후 후킹대상이 되는 함수를 결정하는 정보로 활용된다.

2 값으로 설정된 경우 "CVE-2015-1701" 취약점으로 알려진 KernelCallbackTable[0x36] 의 함수 주소 4바이트가 변경된다. (KernelCallbackTable[0x36] 에 해당하는 함수는 "ClientCopyImage" 임)

1 값으로 설정된 경우, KernelCallbackTable[0x02] 위치의 주소 4바이트가 변경되며 이 위치 값의 변경은 "CVE-2015-1701" 과 관련하여 알려지지 않은 상태이다.

 

[그림-1] 취약점 발생대상 (win32k.sys 날짜정보)

 

아래의 [그림-2]에서 "win32k.sys" 파일의 날짜정보를 얻기위해 "NtQueryInformationFile" API가 사용된 것을 알 수 있으며, 5번째 인자값 4는 FileBasicInformation 을 나타낸다.

[그림-2] 날짜 비교부분

 

(2) ClientCopyImage 주소 변경

아래의 [그림-3]은 CreateWindowExA 함수호출 시, 해당 윈도우에 대한 프로시저 구동 전 호출되는 ClientCopyImage 라는 이름의 Callback 함수 주소를 변경하는 코드이다. 악성코드는 우선 PEB 구조체의 0x2C 위치에 존재하는 KernelCallbackTable 주소를 얻어오며, [그림-1]에서 설정된 [411404] 주소의 상수 값에 따라 후킹대상 테이블의 인덱스가 다르게 설정되는 것을 확인할 수 있다.

4바이트 주소값 변경 시, "InterlockedExchange" API가 사용된다.

[그림-3] PEB's KernelCallbackTable 후킹

 

Win7 환경에서 아래의 붉은색 주소 4바이트 값이 PEB의 KernelCallbackTable[0x36] 에 위치한 함수주소에 해당하며, 수정 전의 값을 나타낸다. (USER32.DLL 영역)

77CF2A48  09 EB D0 77 92 8F D3 77 F6 19 D1 77 F3 28 D0 77
77CF2A58  4C 8E D3 77 FF 82 D0 77 B2 F4 CF 77 83 8E D3 77 

아래의 파란색 주소가 변경 후의 값을 나타낸다. 00403BFD 주소로 악성코드 영역으로 설정된 것을 알 수 있다.

77CF2A48  FD 3B 40 00 92 8F D3 77 F6 19 D1 77 F3 28 D0 77
77CF2A58  4C 8E D3 77 FF 82 D0 77 B2 F4 CF 77 83 8E D3 77 

아래의 [그림-4]는 ClientCopyImage 함수 후킹을 통해 분기한 곳에서 "SetWindowLongA" API 호출하는 부분으로 윈도우 프로시저를 커널영역의 디폴트 윈도우 프로시저(Default Window Procedure)로 변경하는 코드를 나타낸다. (GWL_WNDPROC(-4) -> "Sets a new address for the window procedure")

 

 

[그림-4] 윈도우 프로시저 주소변경

 

(3) 새로운 공격기법(?)

위의 [그림-3]에서 PEB 구조체의 KernelCallbackTable의 0x36(54) 위치의 함수인 "ClientCopyImage" 주소값이 후킹되는 것은 "CVE-2015-1701" 취약점과 관련하여 기 알려진 공격방식이다. 하지만, Win8 이상의 경우에 변경되는 KernelCallbackTable의 0x02 위치는 아직 알려지지 않는 공격기법으로 추가 분석이 필요한 상황이다.

 

[참고 사이트]

- https://www.fireeye.com/blog/threat-research/2015/04/probable_apt28_useo.html

- https://github.com/hfiref0x/CVE-2015-1701/

- http://blog.trendmicro.com/trendlabs-security-intelligence/exploring-cve-2015-1701-a-win32k-elevation-of-privilege-vulnerability-used-in-targeted-attacks/

 

 

신고
Posted by yhayoung

컴퓨터 파일을 인질로 삼은 후 돈(비트코인)을 요구하는 랜섬웨어(Ransomware)의 기세가 올해에도 식을 줄을 모르고 있다. 

2월부터 꾸준히 유포되고 있는 Locky 랜섬웨어에 이어 파일을 암호화한  스크립트를 이용해 목소리로 사용자에게 친절하게 비트코인을 요구하는 "Cerber 랜섬웨어"(이하 Cerber)의 감염 사례가 최근 꾸준히 접수되었다. Cerber 유포경로는 주로 광고 서비스의 정상적인 네트워크를 이용하여 악성코드를 유포하는 멀버타이징(Malvertising)”으로 알려져 있으며, 러시아 지하 시장”에서는 Cerber가 해커들에게 활발하게 판매되고 있는 것으로 파악된다

Malvertising 에 사용된 도메인 일부는 다음 [표-1]과 같다.

Malvertising에 사용된 도메인

angryfire.top

angrypack.top

asidewait.top

asklists.top

bidgood.top

bulkask.top

byfails.top

darkwoman.top

daysis.top

doubtnext.top

fewpieces.top

fitforget.top

flattank.top

fliedman.top

hostdoors.top

joinsseen.top

losefate.top

mapquote.top

mixplanet.top

quickwise.top

sadshame.top

thatan.top

turnedway.top

vagueland.top

wifestood.top

[-1Malvertising에 사용된 도메인


아래의 [그림-1] Cerber 동작을 보여준다.


[그림-1] 악성코드 주요기능 동작과정


이전에 유포 되었던 Cryptowall, Teslacrypt, Locky 랜섬웨어와 Cerber와의 가장 큰 차이점은 PE 파일의 리소스 영역 안에 미리 RSA 공개키를 보관해 둔다는 것이다. RSA 공개키 뿐만 아니라 감염 대상, 감염 방법 등도 함께 저장되어 있어 시스템 감염을 위해 따로 C&C와의 실시간 통신을 할 필요가 없다. 공격자 입장에서는 편의성이 좋아진 것이다. 

또한 Cerber에 감염되면 암호화한 파일의 확장자를 ".cerber"로 변경하며, [그림-2]와 같이 “# DECRYPT MY FILES #.vbs” 라는 이름의 비주얼 베이직 스크립트를 생성하여 당신의 파일이 암호화 되었습니다.”라는 경고문구를 직접 읽어주는 방법을 사용한다.


[그림-2] Cerber 음성 안내문


“# DECRYPT MY FILES #.vbs” 파일과 함께 생성되는 "# DECRYPT MY FILES #.html"과 # DECRYPT MY FILES #.txt" 파일은 암호화된 복호화를 위한 페이지 URL을 제공해 주는데, 파일 복호화 및 비트코인 결제 진행하기 위해서는 익명성을 보장해 주는 토르 브라우저 설치한 [그림-3] 빨간색 주소(“http://비트코인 결제 페이지/PC_ID” 형식이다.) 접속하라는 안내가 되어 있다.


[그림-3] Cerber Bitcoin 안내 페이지


접속 시에는 간단한 국가 확인  인증 후에 파일 복구를 위해 0.75.BTC( 36만원)에서 2.48BTC(약 120만원)의 비트코인을 지불하라는 문구가 게시되어 있다.


[그림-4] Cerber Bitcoin 결제 페이지


다음으로 Cerber가 어떠한 동작기능을 가지고 있는지 간단히 알아보자.


UAC 우회

Cerber 암호화를 진행하기 UAC(User Access Control) 우회여부를 확인한다. UAC Windows Vista이상 운영체제의 보안기능 하나로써 관리자 수준 권한이 필요한 작업이 수행될 경우 사용자에게 알려주는 기능이다. Vista 이상 운영체제에는 사용자의 동의과정을 거친 프로세스가 관리자 권한을 가질 있다

Cerber 과정을 회피하기 위하여 UAC 우회를 시도하는데, [표-2]와 같이 레지스트리 값을 확인하여 UAC 기능이 존재하는 확인한다.

UAC 레지스트리 존재 유무 확인

HKLM\Software\Microsoft\Windows\CurrentVersion\policies\system

- Value: EnableLUA

[-2] 암호화 대상 드라이브

레지스트리를 확인한 다음으로 UAC 우회가 가능한 PE 파일을 “%windir%\system32\“ 경로에서 찾아 임시폴더에 복사한 후, 프로그램 코드 진입점에 Cerber를 실행 시키는 코드를 삽입 하여 UAC를 우회한다. 또한 동작 중인 프로세스에 SeDebugPrivilege API 호출하 코드를 삽입하여 모든 프로세스에 대한 접근권한을 획득한다.


[그림- 5] 관리자 권한을 사용하는 PE파일의 매니페스트 정보

[그림- 6] 동작중인 프로세스 진입점에 SeDebugPrivilege API를 호출하는 코드 인젝션


파일 생성 및 레지스트리 등록

다음과 같은 파일 생성 및 레지스트리를 등록하여 시스템 재부팅 시 동작되게 한다파일명은 %windir%\system32\ 폴더 내에 있는 윈도우 실행 파일  하나를 선택하여 이름을 변경한다. 여기서 cerber의 파일명은 “mmc.exe”가 아닌 다른 파일명일 수 있다.

파일 생성  레지스트리 등록


파일 생성        : %APPDATA%\[RANDOM CLSID]\mmc.exe

                    C:\Documents and Settings\...\프로그램\시작프로그램\mmc.lnk

레지스트리 생성 : HKCU\Software\Microsoft\Windows\CurrentVersion\Run\

                    - Value: mmc

                    - Data: “%appdata%\[RANDOM CLSID]\mmc

                    HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

                    - Value: mmc

                    - Data: “%appdata%\[RANDOM CLSID]\mmc

                    HKCU\Software\Microsoft\Command Processor\AutoRun

                    - Value: mmc

                    - Data: “%appdata%\[RANDOM CLSID]\mmc

                    HKCU\Printers\Defaults\[RANDOM CLSID]

                    - Value: Component_00, Component_01

                    - Data: base64 바이너리 데이터

[-3] 파일 생성  레지스트리 등록


볼륨 쉐도우(Windows Volume Shadow) 삭제

Cerber는 감염 동작 중 윈도우즈 볼륨 쉐도우(Windows Volume Shadow)를 삭제하여 윈도우 시스템 복구가 불가능하도록 한다.


파일 암호화

Cerber RSA 공개키는 Cerber 리소스 영역의 RCDATA 디렉토리 존재한다. 암호화 되어 있는 상태로 존재하기 때문에 Cerber는 내부에서 복호화 과정을 거쳐 RSA 공개키를 복구한다. 복호화된 데이터에는 RSA 공개키와 파일 암호화 대상, 암호화 제외 대상, C&C 정보, Anti-Virus 여부, 기타 옵션 설정 및 "# DECRYPT MY FILES #"의 파일 본체 등이 저장되어 있다.


[그림- 6] 리소스 영역의 RCDATA 디렉토리 검색

[그림- 7] 공개키가 포함된 리소스 영역 저장 정보


Cerber 암호화대상

Cerber가 감염시키는 대상을 [표-4], [표-5], [표-6]에 정리해 보았다.

암호화 대상 드라이브

고정식 드라이브, 이동식 드라이브, RAM 드라이브

[-4] Cerber 암호화 대상 드라이브


다음은 암호화 대상으로 하는 파일이다. 공격자가 RCDATA 데이터의 옵션 수정을 통해 암호화 대상 확장자를 추가할 수 있다.

1cd 3dm 3ds 3fr 3g2 3gp 3pr 7z 7zip aac ab4 accdb accde
accdr accdt ach acr act adb adp ads agdl ai aiff ait al
aoi apj arw asf asm asp aspx asx avi awg back bak bank
bay bdb bgt bik bin bkp blend bmp bpw c cdf cdr cdr3
cdr4 cdr5 cdr6 cdrw cdx ce1 ce2 cer cfg cgm cib class cls
cmt cpi cpp cr2 craw crt crw cs csh csl css csv dac
dat db db3 dbf dbx dc2 dcr dcs ddd ddoc ddrw dds der
des dgc dit djvu dng doc docm docx dot dotm dotx drf drw
dtd dwg dxb dxf dxg edb eml eps erf exf fdb ffd fff
fh fhd fla flac flf flv flvv fpx fxg gif gray grey gry
h hbk hdd hpp html ibank ibd ibz idx iif iiq indd java
jnt jpe jpeg jpg js kc2 kdbx kdc key kpdx kwm ldf lit
log lua m m2ts m3u m4p m4v max mbx md mdb mdc mdf
mef mfw mid mkv mlb mmw mny mos mov mp3 mp4 mpeg mpg
mrw msg myd nd ndd ndf nef nk2 nop nrw ns2 ns3 ns4
nsd nsf nsg nsh nvram nwb nx2 nxl nyf oab obj odb odc
odf odg odm odp ods odt ogg oil orf ost otg oth otp
ots ott p12 p7b p7c pab pages pas pat pcd pct pdb pdd
pdf pef pem pfx php pif pl plc png pot potm potx ppam
pps ppsm ppsm ppsx ppt pptm pptm pptx prf ps psd pst ptx
pwm py qba qbb qbm qbr qbw qbx qby qcow qcow2 qed r3d
raf rar rat raw rdb rm rtf rvt rw2 rwl rwz s3db safe
sav save say sd0 sda sdf sldm sldx sql sr2 srf srt srw
st4 st5 st6 st7 st8 stc std sti stm stw stx svg swf
sxc sxd sxg sxi sxm sxw tex tga thm tlg txt vbox vdi
vhd vhdx vmdk vmsd vmx vmxf vob wab wad wallet wav wb2 wma
wmv wpd wps x11 x3f xis xla xlam xlk xlm xlr xls xlsb
xlsm xlsx xlt xltm xltx xlw xml yuv zip ycbcra backup
backupdb config contact db_journal design erbsql
groups incpas laccdb mapimail moneywell plus_muhd
psafe3 pspimage sas7bdat sqlite sqlite3 sqlitedb

[-5] Cerber 암호화 대상 - 확장자

암호화 대상 파일


%appdata%\....\qmgr0.dat


%appdata%\....\qmgr1.dat

C:\Document and setting\...\NTUSER.DAT.LOG

C:\Document and setting\...\History\IE5\index.dat

C:\Document and setting\...\Cookies\index.dat

C:\Document and setting\...\Content\IE5\index.dat

C:\Document and setting\...\IETldCache\index.dat


[-6] Cerber 암호화 대상 - 파일


또한 Cerber는 암호화 제외 대상이 존재한. [표-7]에 정리해 두었으며 특징으로는 시스템 폴더 및 비트코인 클라이언트 파일은 암호화 하지 않고, 러시아권 국가 및 언어권 시스템들도 감염시키지 않는다는 것이다. 

암호화 제외 대상(문자열 비교)

국가 및 특정 언어 사용 시스템

파일

폴더

아르메니아

아제르바이잔

벨라루스

조지아

타지키스탄

몰도바

러시아

투르크메니스탄

타지키스탄

우크라이나

우즈베키스탄

bootsect.bak

iconcache.db

thumbs.db

wallet.dat

$recycle.bin

Boot

program files

users\\all users

windows

appdata\\local

$windows.~bt

Drivers

program files (x86)

programdata

appdata\\locallow

appdata\\roaming

public\\music\\sample music

public\\pictures\\sample pictures

public\\videos\\sample videos

tor browser

[-7] 암호화 제외 대상


암호화되어 생성되는 파일은 "[랜덤숫자,영문10글자].cerber" 형식으로 저장되며 원본 데이터, 파일의 이름 정보 등이 암호화하여 저장된다

[그림- 8] 암호화 파일명 변경


암호화가 완료되면 시스템 종료 명령을 실행시켜 강제로 시스템을 재부팅 시킨 , 재부팅 시에 결제 안내문을 띄어 비트코인 결제를 유도한다.


[그림- 9] 시스템 재부팅 경고 메시지


해당 Cerber 랜섬웨어 파일은 V3 제품에서 다음 진단명으로 진단 가능하며, [그림-5]와 같이 랜섬웨어의 악의적인 동작을 탐지하여 추가 감염이 발생하지 않도록 차단하고 있다. 행위기반 진단은 시그니처 업데이트 없이 특정 행위만으로 진단하기에 효과적인 보안 기능을 제공할 수 있다.

- Trojan/Win32.Cerber


[그림- 10] Cerber 랜섬웨어 행위기반 진단


최근 급증하는 랜섬웨어 감염을 예방하기 위해 사용자의 각별한 주의가 요구되며, 발신자가 불분명한 이메일이나 의심스러운 첨부파일은 열어보지 않도록 주의를 기울일 필요가 있다.


APT 전문 대응 솔루션 ‘안랩 MDS’에 포함된 실행보류 기능(execution holding, 네트워크에서 발견된 의심파일을 분석이 끝나기 전까지 PC에서 실행되는 것을 막아주는 기능)으로 예방이 가능하다

또한안랩은 최근 이슈되고 있는 랜섬웨어와 랜섬웨어 변종에 대한 정보를 ‘랜섬웨어 보안센터 (www.ahnlab.com/kr/site/securityinfo/ransomware/index.do#cont2) 에서 제공 중이다.


신고
Posted by 비회원

3월부터 현재까지 Locky 라는 이름의 랜섬웨어의 국내감염 사례가 지속적으로 발생하고 있다. 국내뿐 아니라 해외 여러 보안업체에서도 이러한 Locky 랜섬웨어 대응을 위한 다양한 시도들이 진행되고 있으며, 제작자 또한 이를 우회하기 위해 기존의 동작방식에 변화를 주는 추세이다. 본 글에서는 최근 국내접수 Locky 를 통해 확인한 변화내용 3가지를 소개하고자 한다.

 

1. DGA (Domain Generation Algorithm) 호출방식

Locky 는 파일 암호화에 사용할 키 정보를 얻기위해 내부에 저장된 IP 로 접속을 시도한다. (접속 실패 시, 파일 암호화 과정 실패) 과거에는 "main.php" 가 최근에는 "submit.php"가 이용되고 있다.

최근에 발견되는 Locky 에는 총 3곳의 IP가 존재하며, 1차로 저장된 IP 로의 접속 실패 시, 2차로 고유한 DGA 함수를 통해 생성한 도메인으로 접속을 시도한다. Locky 에서 사용하는 DGA 함수는 "GetSystemTime" 함수를 통해 얻은 년/월/일 정보를 통해 생성되는 구조이며, 매일 생성하는 도메인이 변경되는 특징을 갖는다. (하루에 12개 씩)

Locky 에서 사용하는 DGA 알고리즘은 현재까지 총 2가지 방식이 알려져있다. 아래의 사이트에서 각 알고리즘 별로 dga.py, dgav2.py 이름의 파이썬 코드를 공개하였다. 이를 통해 Locky 가 접속시도하는 도메인 정보를 사전에 미리 인지하여 탐지에 활용할 수 있다.

- [참고] https://github.com/baderj/domain_generation_algorithms/tree/master/locky

하지만, DGA 알고리즘에서 가장 핵심이 되는 것이 seed 값(4바이트 상수)으로 Locky 마다 가변적인 형태로 발견되고 있다. 즉, 알려지지 않은 Locky 에 대해 도메인을 사전에 인지하는 것은 어려운 구조를 갖는다.

최근 접수 Locky 에서는 DGA 방식은 동일하나 12개의 도메인이 순차적으로 생성되는 것이 아닌, 이 중 일부가 선택되어 접속하는 방식으로 변경되었다.

아래의 [그림-1], [그림-2]는 각각 과거/현재 DGA 함수를 호출하는 부분이다. 최근 파일에서는 DGA 함수 호출 전, CryptGenRandom 함수를 통해 얻은 난수값을 12로 나눈 나머지 값(0~11)이 DGA 함수 호출 시, 인지값으로 사용되는 것을 알 수 있다. 인자값은 12개 생성 도메인의 인덱스와 같은 기능을 하며, 해당 코드의 추가로 기존과 달리 접속하는 도메인이 중복/누락될 수 있는 구조를 갖는다.

[그림-1] DGA 함수 호출방식 (과거)

 

[그림-2] DGA 함수 호출방식 (최근)

 

Locky 에서 고유한 seed 값이 저장된 위치는 GetSystemDefaultLangID 함수 호출 전, 얻어오는 구조를 갖는다.

00A045F0 A1 4C48A100   MOV    EAX, DWORD PTR DS:[A1484C]  ; seed
00A045F5 A3 84AAA100   MOV    DWORD PTR DS:[A1AA84], EAX  
00A045FA A0 5648A100   MOV    AL, BYTE PTR DS:[A14856]
00A045FF 84C0          TEST   AL, AL
00A04601 74 3B         JE     SHORT 00A0463E
00A04603 FF15 2021A100 CALL   DWORD PTR DS:[A12120]       ; GetSystemDefaultLangID 

00A04B5D A1 00B0A100   MOV    EAX, DWORD PTR DS:[A1B000]
00A04B62 8078 0E 00    CMP    BYTE PTR DS:[EAX+E], 0
00A04B66 8B48 04       MOV    ECX, DWORD PTR DS:[EAX+4]    ; seed
00A04B69 890D 04B0A100 MOV    DWORD PTR DS:[A1B004], ECX
00A04B6F 74 40         JE     SHORT 00A04BB1
00A04B71 FF15 1C21A100 CALL   DWORD PTR DS:[A1211C]        ; GetSystemDefaultLangID

 

2. IP 주소 암호화

최근에는 접속에 사용되는 IP 정보가 암호화되어 저장된 형태이며, 실행 시점에 동적으로 복호화하여 생성하는 구조를 갖는다. 아래의 [그림-3], [그림-4]는 과거/현재 IP 주소가 존재하는 부분을 나타내며, 최근에는 IP주소가 동적으로 할당받은 메모리 공간에 쓰여진 것을 확인할 수 있다.

[그림-3] 파일내부에 저장된 IP정보 (과거) 

 

[그림-4] 실행시점에 동적으로 생성된 IP정보 (현재)

 

 

3. ZwQueryVirtualMemory API 후킹

최근 Locky 의 경우, "ZwQueryVirtualMemory" API를 후킹하는 기능을 갖는다. 아래의 [그림-5]는 과거/현재 Locky 내부의 문자열 데이터 중 일부이며, 최근에 "ntdll.dll", "NtQueryVirtualMemory" 문자열이 추가된 것을 알 수 있다.

[그림-5] 새롭게 추가된 API 후킹기능

 

아래의 [그림-6]은 후킹 전/후의 "ZwQueryVirtualMemory" API 시작부분을 나타낸다. 후킹 후, 함수 시작이 JMP 코드로 변경되었으며, 분기하는 위치는 Locky 랜섬웨어 코드영역이다.

[그림-6] ZwQueryVirtualMemory 함수(변경 전/후)

 

아래의 [그림-7]은 후킹을 통해 분기하는 곳 (0x008D0000)의 코드를 나타내며, "PAGE_EXECUTE" 속성이 부여된 메모리인 경우, 강제로 "MEM_IMAGE" 로 해당 메모리에 대한 상태(Type) 값이 설정되는 기능을 수행한다.

[그림-7]의 '0x008D0033' 주소의 [ECX]는 "MEMORY_BASIC_INFORMATION" 구조체를 나타내며, [ECX+14]와 [ECX+18]은 각각 해당 구조체의 'Protect'와 'Type' 값을 나타낸다.

typedef struct _MEMORY_BASIC_INFORMATION {
  PVOID  BaseAddress;
  PVOID  AllocationBase;
  DWORD  AllocationProtect;
  SIZE_T RegionSize;
  DWORD  State;
  DWORD  Protect;
  DWORD  Type;
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;

 

[그림-7] 후킹함수 부분

TEST [ECX+14], F0 명령어의 조건을 만족하는 경우는 메모리의 Protect 값이 아래의 4가지인 경우이며, 이 때 Type 값을 강제로 MEM_IMAGE(0x1000000)로 설정하는 기능을 한다.

  • PAGE_EXECUTE (0x10)
  • PAGE_EXECUTE_READ (0x20)
  • PAGE_EXECUTE_READWRITE (0x40)
  • PAGE_EXECUTE_WRITECOPY (0x80)

아래의 [그림-8]은 "ZwQueryVirtualMemory" 함수 시작 6바이트를 변경하는 코드를 나타낸다.

[그림-8] 메모리 패치하는 코드

 

이러한 기능의 후킹코드의 추가는 일반적인 악성코드에서는 잘 사용하지 않는 것으로 Locky 랜섬웨어가 동적으로 할당받은 메모리 공간(Private 영역)에 새롭게 생성한 자신의 PE 이미지(Execute 속성)가 다양한 분석툴 및 보안모듈(인젝션 코드탐지)에 의해 탐지/추출되는 것을 우회하기 위한 것으로 추정된다.

 

신고
Posted by yhayoung

최근 다양한 경로를 통해 유포되고 있는 신종 Locky (록키) 랜섬웨어로 인한 피해가 급증하고 있어 사용자의 각별한 주의가 요구되고 있다. 


Locky 랜섬웨어는 주로 이메일 첨부파일에 가짜 송장 파일이나 급여 명세서와 같이 사용자의 호기심을 불러 일으키는 파일을 포함하여 사용자로 하여금 의심없이 파일을 실행하도록 하는 사회공학적 기법을 사용하여 유포된다.

이메일 첨부파일은 오피스 문서인 Excel(엑셀) Word(워드) 파일 내 악성코드를 다운로드 하는 Macro(매크로) 를 포함하는 형태이며, 최근에는 악성코드를 다운로드 하는 스크립트 파일을 압축하여 ZIP 파일로 직접 첨부하는 형태로 제작되고 있다. 

또한, Locky 랜섬웨어 감염 시 사용자의 시스템 뿐만 아니라 연결된 네트워크 드라이브를 스캔하여 추가 감염을 진행하기 때문에 전파 속도와 범위가 증가하고 있다.


아래의 [그림-1]은 최근 Locky 랜섬웨어 파일이 이메일 첨부파일로 유포되는 형태이며, 다음과 같이 발신자가 불분명한 메일을 수신할 경우 첨부파일을 열어보지 않도록 각별히 주의할 필요가 있다.

[그림-1] 이메일 첨부파일로 Locky 랜섬웨어가 유포되는 형태


[그림-2] 와 같이 이메일 내용 및 첨부된 파일명은 주로 급여 명세서나 송장을 위장하여 정상으로 보이지만, 실제 해당 압축파일 내에는 Locky 랜섬웨어를 다운로드 하는 스크립트 (JavaScript) 파일이 존재한다. 사용자가 의심없이 해당 파일을 실행할 경우 Locky 랜섬웨어 실행파일을 다운로드 하며, 이후 시스템 감염을 진행한다.

[그림-2] 첨부된 압축파일 내 포함된 스크립트 파일


아래의 [그림-3] 최근 유포되고 있는 Locky 랜섬웨어 전체 동작흐름을 나타낸다.

[그림-3] Locky 랜섬웨어 유포 경로


Locky 랜섬웨어에 감염되면 암호화한 파일의 확장자를 ".locky"로 변경하는 것이 특징이며, 시스템 감염이 완료되면 [그림-4]와 같이 암호화 된 파일을 복구하는 비용으로 비트코인 (BitCoin) 지불을 요구하는 내용의 그림 파일을 바탕화면으로 지정한다.

[그림-4] 감염 후 변경되는 바탕화면 이미지


Locky 랜섬웨어가 감염시키는 대상은 [표-1]과 같으며, 해당 드라이브의 모든 폴더와 파일 목록을 조회하여 감염 대상을 찾는다.

[표-1] Locky 랜섬웨어 감염 대상 드라이브


아래의 [표-2]는 암호화 대상으로 하는 파일의 확장자를 나타내며, 최근에는 한글파일 "hwp" 확장자가 추가되었다.

m4u

001

002

003

004

005

006

007

008

009

010

011

123

3dm

3ds

3g2

3gp

602

7z

aes

ARC

asc

asf

asm

asp

Avi

bak

bat

bmp

brd

bz2

c

cgm

class

cmd

cpp

crt

cs

csr

CSV

db

dbf

dch

dif

dip

djv

djvu

DOC

docb

docm

docx

DOT

dotm

dotx

fla

flv

frm

gif

gpg

gz

h

hwp

ibd

jar

java

jpeg

jpg

js

key

lay

lay6

ldf

m3u

max

mdb

mdf

mid

mkv

mml

mov

mp3

mp4

mpeg

mpg

ms11

MYD

MYI

NEF

odb

odg

odp

ods

odt

onetoc2

otg

otp

ots

ott

p12

PAQ

pas

pdf

pem

php

pl

png

pot

potm

potx

ppam

pps

ppsm

ppsx

PPT

pptm

pptx

psd

pst

qcow2

rar

raw

rb

RTF

sch

sh

sldm

sldx

slk

sql

stc

std

sti

stw

svg

swf

sxc

sxd

sxi

sxm

sxw

tar

tbk

tgz

tif

tiff

txt

uop

uot

vb

vbs

vdi

vmdk

vmx

vob

wav

wb2

wk1

wks

wma

wmv

xlc

xlm

XLS

xlsb

xlsm

xlsx

xlt

xltm

xltx

xlw

xml

zip

SQLITEDB

SQLITE3

wallet.dat

 

 

 

 

[표-2] Locky 랜섬웨어 감염 대상 확장자


또한, [표-3]과 같이 Locky 랜섬웨어 감염에서 제외하는 대상도 존재한다. 

이는 대부분 시스템 파일들로써, 비트코인 지불을 유도하는 그림파일과 텍스트 파일도 감염 대상에서 제외시킨다.

[표-3] Locky 랜섬웨어 감염 제외 대상


Locky 랜섬웨어 감염시 윈도우즈 볼륨 쉐도우(Windows Volume Shadow) 를 삭제하여 윈도우 시스템 복구가 불가능하도록 한다.


해당 Locky 랜섬웨어 파일은 V3 제품에서 다음 진단명으로 진단 가능하며, [그림-5]와 같이 랜섬웨어의 악의적인 동작을 탐지하여 추가 감염이 발생하지 않도록 차단하고 있다. 행위기반 진단은 시그니처 업데이트 없이 특정 행위만으로 진단하기에 효과적인 보안 기능을 제공할 수 있다.

- JS/Obfus.Gen

- JS/Nemucod

- JS/Downloader

- JS/Obfus.S1 ~ JS/Obfus.S16

- Win-Trojan/Lockycrypt.Gen

- Trojan/Win32.Locky

[그림-5] Locky 랜섬웨어 행위기반 진단


최근 급증하는 랜섬웨어 감염을 예방하기 위해 사용자의 각별한 주의가 요구되며, 발신자가 불분명한 이메일이나 의심스러운 첨부파일은 열어보지 않도록 주의를 기울일 필요가 있다.


APT 전문 대응 솔루션 ‘안랩 MDS’에 포함된 실행보류 기능(execution holding, 네트워크에서 발견된 의심파일을 분석이 끝나기 전까지 PC에서 실행되는 것을 막아주는 기능)으로 예방이 가능하다

또한, 안랩은 Locky (록키) 랜섬웨어와 변종을 비롯한 다양한 랜섬웨어에 대한 정보를 ‘랜섬웨어 보안센터 (www.ahnlab.com/kr/site/securityinfo/ransomware/index.do#cont2) 에서 제공 중이다.


신고
Posted by a0_zest

지난 2015 5 12일 한글 프로그램 최신 패치버전에서 동작하는 제로데이 취약점 파일이 접수되어 사용자의 각별한 주의가 요구된다.

취약점이 발생하는 프로그램은 한글2007, 2010, 2014 버전이 모두 해당되며 2015 3 31일 업데이트 된 최신 패치가 적용된 상태에서도 동작하도록 제작되었다. 취약점 발생 이후에는 다운로더 기능의 악성파일을 생성하며 주기적으로 특정 사이트로 접속을 시도한다.

V3 에서는 취약점 한글 파일을 "HWP/Exploit"(V3: 2015.05.12.02) 으로, 취약점 발생 이후 생성하는 악성파일을 "Win-Trojan/Hwdoor.107620"(V3: 2015.05.12.02) 로 진단한다.

취약점 피해를 예방하기 위해 아래의 한글과컴퓨터에서 제공한 2015.05.21 일자 보안 업데이트를 다운로드 받아 설치하거나, 자동 업데이트를 통해 한글 최신버전으로 업데이트하는 작업이 필요하다.

-       http://www.hancom.com/downLoad.downPU.do?mcd=001

 

취약점 발생원인은 한글의 본문에 해당하는 'HWPTAG_PARA_TEXT' 레코드에 사용된 확장 컨트롤(0x03) 조작을 통해 공격자가 설정한 주소로 분기를 통해 발생하며, 아래의 [그림-1]은 취약점 한글문서의 Section별 구조를 나타낸다.

[그림-1] 취약점 파일의 섹션구조

취약점 한글파일은 [그림-1]과 같이 총 15개의 섹션을 갖고 있으며, "Section0"는 정상적인 문자열 정보와 취약점을 발생 시키는 'HWPTAG_PARA_TEXT' 레코드가 존재한다. "Section1~Section14"의 경우, 모두 동일한 데이터를 갖고 있으며, "Heap Spray + ShellCode" 삽입을 위한 'HWPTAG_PARA_TEXT' 레코드가 존재한다.

   본 취약점은 [그림-2]와 같이 "Section0" 본문 내 특정 아랍어 문자를 처리하는 과정에서 발생하였으며, 0x988 오프셋의 "0x0634"는 유니코드(Unicode) 에서 해당 아랍어 범위에 해당된다.

[그림-2] 파일 내 취약점 발생영역

한글은 문서 내 문자열이 유니코드 (Unicode) 형태로 구성되며 한 글자당 2바이트 크기를 갖는다. 따라서 'HWPTAG_PARA_TEXT' 버퍼 내에서 특정 문자열이 참조되는 위치는 (문자열개수 * 2) 오프셋에 해당하며, 취약점은 [그림-3]과 같이 문단 내 'HWPTAG_PARA_TEXT' 버퍼의 0xCF 번째 문자열을 참조하는 과정(0xCF * 2 = 0x19E 오프셋 영역)에서 발생한다.

 

[그림-3] 취약점이 발생하는 버퍼 내 오프셋 계산 구간

[그림-4]는 'HWPTAG_PARA_TEXT' 버퍼 내 0x19E 오프셋 영역에 해당하며 "03" 제어문자 레코드의 시작으로 인식되지만, 정상적인 구조로는 레코드 시작으로 인식되지 않는 영역이다. 취약점 파일에서는 해당 구간을 레코드로 인식하기 위해 0xCF 값이 버퍼내의 오프셋 참조번지로 사용되었다.

[그림-4] 'HWPTAG_PARA_TEXT' 버퍼 내 0x19E 오프셋 영역

문서 본문 내 'HWPTAG_PARA_TEXT' 레코드에서 "03" 제어문자는 [그림-5]와 같이 Extended형 컨트롤 형식으로 구성되며, 레코드 버퍼 시작부터 6바이트 건너뛴 위치에 4바이트 가상주소 값을 갖는다.

[그림-5] 제어문자 컨트롤 형식

[그림-6]과 같이 제어문자 "03" 레코드에서 참조하는 가상주소 항목에 "0x0D0C0D0C" 값 이 설정되어 있으며 해당 주소번지의 4바이트 값을 쉘코드 분기에 사용한다. 정상 한글파일의 경우 Extended형 레코드의 가상주소 영역은 NULL로 초기화되어 있으며 한글 실행 후 자동으로 주소 값이 설정되는 구조이다.

[그림-6] 취약점 발생구간

[그림-7]과 같이 "0x0D0C0D0C" 주소의 메모리에는 "Section1~Section14" 에 의해 채워진 SledCode가 존재하며, "0x0D0C0D0C" 주소에 저장된 "0x0B0C0B04" 주소로 분기가 발생한다

[그림-7] "03" 제어문자 레코드의 가상주소 조합 부분

[그림-8] 가상주소에서 참조하는 "0x0D0C0D0C" 주소번지

[그림-9]와 같이 공격자가 설정한 주소로 분기하기 위해 "CALL EAX" 명령어를 수행한다.

[그림-9] "0x0B0C0B04" SledCode 영역으로 분기하는 구간

"CALL EAX" 명령에 의해 분기한 "0x0B0C0B04" 메모리 영역에는 [그림-10]과 같이 HeapSpray SledCode가 존재하며 NOP 명령을 수행하다가 유효 쉘코드를 실행한다.

 

[그림-10] "0x0B0C0B04" 메모리 이후 유효 쉘코드

취약점 발생 이후  %Temp% 경로에 "smss.exe" 파일을 생성하며, 해당 악성코드는 다운로드 기능을 수행한다. ("smss.exe" 파일은 V3에서 "Win-Trojan/Hwdoor.107620" 로 진단)

[그림-11] 악성파일 생성

생성된 "smss.exe" 파일은 실행 시점에 따라 다음 2개의 URL 중 한곳에서 다운로드를 시도하며, 다운로드 받은 파일은 %AppData% 폴더에 "~D543F5E7FB16DDC62E.TMP" 이름으로 생성된다.

-       http://www.n***rfun.net/img/img_[임의의숫자].jpg  <목요일 실행시>

-       http://ig**et.com/img/img_[임의의숫자].jpg           <그 외 실행시>

(* img_[임의의숫자].jpg 는 감염 시스템의 호스트(host) 명을 통해 생성되며, 분석당시 실제로 파일이 다운로드되지는 않음 - 특정 호스트에서는 실제 파일 다운로드가 이루어졌을 것으로 추정 됨)

다운로드가 성공 시 해당 파일을 디코딩하여 [그림-12]와 같이 %AppData% 폴더에 "wuaudt.exe" 파일로 생성 및 실행한다.

[그림-12] 다운로드 파일 "wuaudt.exe"

 

악성코드 감염을 막기 위해서는 항상 한글 프로그램 및 백신 프로그램을 최신 업데이트 상태로 유지하는 것이 필요하다. 또한, 취약점 한글 문서파일은 특정인에게 이메일의 첨부파일 형태로 유포된 것으로 확인되었으므로 불명확한 발신인 혹은 확인되지 않은 첨부파일의 경우, 실행 전에 보안에 문제가 없는지 확인하는 과정이 필요하다.

 

 

신고
Posted by a0_zest

국내에는 게임관련 파일들을 타겟(Target)으로 제작된 랜섬웨어로 알려진 'TeslaCrypt' 혹은 'Tescrypt' 라는 이름의 악성코드는 2015년 4월 27일, CISCO 블로그("Threat Spotlight: TeslaCrypt – Decrypt It Yourself")를 통해 처음으로 복원방법이 소개되었다. 국내에서는 아직 피해사례가 많지 않지만, 감염기법에 대한 상세정보 및 복원 가능여부 확인을 통해 추후 피해가 발생 시 활용하고자 한다. 'TeslaCrypt' 랜섬웨어는 지난 4월 국내에 이슈가된 랜섬웨어 처럼 정상 프로세스(explorer.exe, svchost.exe)에 코드 인젝션(Injection)을 통한 방식이 아닌, %APPDATA% 경로에 생성한 악성코드 실행을 통해 감염이 이루어진다. 파일을 암호화하는 과정은 다음과 같다. (감염 후, 사용자 시스템에는 '.ecc' 이름의 파일만 존재)

'normal.jpg' -> 'normal.jpg'(암호화) -> 'normal.jpg.ecc' (복사본) -> 'normal.jpg'(삭제) 
                                                        (kernel32.MoveFileW)          (kernel32.DeleteFileW)

 

TeslaCrypt 랜섬웨어의 분석내용 다음과 같다.

 

1. 파일 및 레지스트리 생성

 

(1) 파일생성

%APPDATA% 경로(CSIDL_APPDATA)에 생성되는 파일들은 다음과 같다.
(%APPDATA%: C:\Documents and Settings\<username>\Application Data)

- 랜덤이름.exe (예제:asoddjv.exe)
- help.html
- log.html (감염된 파일들 목록정보)
- key.dat (파일 복호화에 사용되는 KEY 파일)

바탕화면 경로(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" (참고: https://technet.microsoft.com/en-us/library/cc788026.aspx)

 

4. 감염대상 드라이브 및 파일들

TeslaCrypt 랜섬웨어는 드라이브 명에 상관없이 고정식 드라이브(DRIVE_FIXED)만을 감염대상으로 하며, 이동식, 네트워크 드라이브는 감염대상에서 제외된다.

감염대상 드라이브의 아래의 확장자를 갖는 파일들을 감염대상으로 한다. (확장자 리스트 중, .arch00, .DayZProfile, .forge, .mcgame, .rgss3a 등이 게임관련 파일들 임)

감염 제외조건은 다음의 3가지가 존재한다.

- File Extension: 파일 확장자 중 ".ecc" 를 갖는 형태
- File Name: 파일명 중 "Temporary"가 존재하는 경우
- File Size: 파일크기가 0x10000000 바이트(대략 260M 이상)보다 큰 경우

 

5. 파일복원의 핵심 ('key.dat')

%APPDATA% 경로에 생성되는 데이터 파일 중, 'key.dat' 파일은 파일이름에서 알 수 있듯이 암호화된 파일을 복원하는데 필요한 'AES Key' 정보를 담고있는 파일이다. TeslaCrypt 랜섬웨어에 감염 후, 사용자에게 보여지는 아래의 윈도우 화면창에서는 'RSA-2048' 방식으로 암호화되었으며, 복원을 위한 'Private Key'는 서버에 저장됨을 명시하고 있다. 

하지만, 실제로는 RSA 방식이 아닌 'AES' 방식으로 암호화되었으며, CBC(Cipher Block Chaining) Mode가 사용되었다. TeslaCrypt 랜섬웨어에서 사용한 암호화방식은 아래의 Python 예제코드와 같은 형태로 이루어진다. 아래의 예제코드에서 붉은색으로 표시한 'This is a key123'가 첫번째 키(AES Key)를 나타내며, 파란색으로 표시한 'This is an IV456'두번째 키(Initialization Vector)로 사용된다.

출처: https://pypi.python.org/pypi/pycrypto

>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> ciphertext
'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'
>>> obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> obj2.decrypt(ciphertext)
'The answer is no' 

악성코드가 생성한 'key.dat' 파일에는 붉은색으로 표시한 'This is a key123' 정보가 존재하며, 파란색의 'This is an IV456' 정보에 해당하는 Initialization Vector(IV) 값은 감염파일의 첫 시작 16 바이트를 통해 얻을 수 있다. ('(3)감염파일 구조' 참고)

좀 더 정확하게는 'key.dat' 파일의 옵셋(0x177 ~ 0x197) 까지의 0x20 바이트값을 SHA256 으로 변환하는 과정을 거쳐 생성된 값이 실제 AES key (256-bits)로 사용된다.

 

(1) AES Key

'key.dat' 파일에 존재하는 AES Key 값(0x20 바이트)과 감염파일 마다 다른 IV값(0x10)을 통해 복원이 이루어질 수 있는 구조이다. 아래의 그림은 'key.dat' 파일의 내용을 나타내며, 파란색으로 표시된 부분이 AES Key 에 해당하는 0x20 바이트를 나타낸다. 해당 값은 파일시작을 기준으로 0x177 옵셋만큼 떨어진 위치에 존재하며, 전체 파일크기는 0x27C 바이트로 고정적이다.

생성된 AES Key 값은 공격자 서버에 전송되며, 아래와 같은 형태로 암호화과정을 거친 후 전송되는 구조이다.  "key=6446f0b0351eae14d01bcc70b0d4653ac1ce34887b2d23a53607c25655c8c793" 항목에 추가되는 값(1)이 AES Key 값이며, "addr=1MX9oeHq4??????????eVyd1kWrtJKozFz" 항목에 추가되는 값(2)은 BitCoin Address로 사용되는 값이다.  

악성코드 내부에 존재하는 공격자 주소는 아래와 같이 4곳이다.

- 7tno4hib47vlep5o.s2.tor-gateways.de
- 7tno4hib47vlep5o.tor2web.fi
- 7tno4hib47vlep5o.tor2web.blutmagie.de
- 7tno4hib47vlep5o.2kjb7.net

 

(2) Bitcoin Address

아래의 그림은 'key.dat' 파일의 첫 시작부터 존재하는 값(1MX9oeHq4??????????eVyd1kWrtJKozFz)이 결제를 통한 파일복원 시, 사용되는 인증 값(Bitcoin address)과 동일함을 알 수 있다. 정확한 Bitcoin address 값을 입력할 경우, 'Private Key' 를 얻기위한 결제수단으로 'Bitcoin'(2.2 BTC ~= 528 USD) 혹은 'PayPal My Cash Card(USD)' 2가지 방법을 제시한다.

테스트 목적으로 단 한번, 암호화된 파일(500kb 이하)을 복호화하는 기능을 제공하며, 웹 기반으로 파일을 업로드하는 구조이다.

 

(3) 감염파일 구조

아래의 그림은 랜섬웨어에 감염 전/후의 "겨울.jpg" 파일의 내용을 나타낸다. 감염 후 파일크기가 증가하였으며, 내부 데이터도 암호화된 것을 확인할 수 있다.

랜섬웨어에 의해 암호화된 파일은 "원본파일명.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 코드로 감염된 파일들을 복원할 수 있다.

   # read_key: 'key.dat' 에서 읽은 값
   read_key = KeyBuff[0x177:0x197]
   # SHA256 변환
   h = SHA256.new()
   h.update(read_key)
   # aes_key: 실제 복원시 사용되는 AES Key
   aes_key = h.digest()

   # iv_key: '*.ecc'에서 읽은 값 
   iv_key = EncBuff[:16]
   # aes_key, iv_key 를 이용한 복호화
   obj = AES.new(aes_key , AES.MODE_CBC, iv_key)
   # enc_data: '*.ecc'에서 읽은 값
   enc_data  = encbuff[20:]
   dec_data = obj.decrypt(enc_data)

 

(4) 그 외 'key.dat' 파일의 항목들

'key.dat' 파일에 존재하는 8가지 항목의 데이터 중, 'Bitcoin address' 와 'AES Key'에 해당하는 항목은 언급되었으나 나머지 항목들의 정보는 어떠한 용도로 사용되는 지 파악하지 못하였다.

다만, 아래의 API 호출을 통해 얻은 정보들이 'key.dat' 파일의 나머지 항목들을 생성하는데 사용된다는 것은 확인되었다. 아래의 그림은 실제 아래에 언급한 API 중, CryptGenRandom 함수를 통해 얻은 0x40 크기의 데이터가 특정 함수(sub_41B3A0)를 통해 변환되는 부분을 나타낸다. 그 외 다른 API 들도 결과로 리턴된 값이 공통적으로 sub_41B3A0 함수를 통해 변환과정을 거치며, 최종 변환값이 'key.dat'에 사용되는 것을 확인할 수 있다.

아래의 그림은 위와 동일하게 GlobalMemoryStatus, GetCurrentProcessId API 호출을 통해 얻은 결과값이 sub_41B3A0 함수를 통해 변환과정이 이루어짐을 나타낸다.

아래의 API 들이 'key.dat' 파일의 데이터를 생성하는데 사용되는 것으로 감염 시스템의 다양한 정보들(Process, Thread, Module, Heap)이 이용됨을 알 수 있다. 감염이 이루어질 때마다 'key.dat' 파일의 데이터가 다르게 생성되는 것도 아래의 API 들의 영향으로 추정된다.

 

[NETAPI32]

- NetStatisticsGet(0, "LanmanWorkstation", 0, 0, &buf)
- NetStatisticsGet(0, "LanmanServer", 0, 0, &buf)

[ADVAPI32]

- CryptAcquireContextW(&hProv, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)
- CryptGenRandom(hProv, 0x40, &buf)

- CryptAcquireContextW(&hProv, 0, "Intel Hardware Cryptographic Seervice Provider", PROV_INTEL_SEC, 0)
- CryptGenRandom(hProv, 0x40, &buf)

[kernel32]

- CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)

- GetTickCount
- Heap32ListFirst
- Heap32First
- Heap32Next
- GetTickCount
- Heap32ListNext
- GetTickCount

- GetTickCount
- Process32First
- Process32Next
- GetTickCount

- GetTickCount
- Thread32First
- Thread32Next
- GetTickCount

- GetTickCount
- Module32First
- Module32Next
- GetTickCount

- GlobalMemoryStatus
- GetCurrentProcessId

아래의 그림은 key.dat 파일의 8가지 세부 항목별로 데이터를 Write 하는 부분을 나타낸다. 마지막 8번째 추가되는 항목은 GetLocalTime API 를 통해 얻은 시간정보(16바이트)로 붉은색 블럭을 나타낸다. 

각 세부 항목별 데이터의 의미 및 어떻게 사용되는 지 부분에 대한 분석은 추후 진행할 예정이다.

 

5. 프로세스 강제종료

감염 쓰레드가 구동 후, 2번째로 생성하는 쓰레드에서는 아래의 이름(GetProcessImageFileNameW)으로 실행되는 프로세스를 강제로 종료(TerminateProcess)하는 기능을 갖는다. 단순히, 프로세스 이름만으로 비교가 이루어짐으로 이름을 변경하여 실행 시, 정상적으로 실행할 수 있다.

- taskmgr
- procexp
- regedit
- msconfig
- cmd.exe

 

6. 참고사이트

- 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
- http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

 

해당 악성코드에 대한 V3 진단명은 다음과 같다.

- Trojan/Win32.Tescrypt (md5: 03c1a14c715e3a41f36b026a11a1bcb4)

 

또한, 아래의 경로에서 제공하는 전용백신을 통해 ".ecc" 이름으로 암호화된 파일들에 대한 복원이 가능하며, 'key.dat' 파일이 %AppData% 경로에 존재해야 한다.

- http://www.ahnlab.com/kr/site/download/product/downVacc.do?fileName=v3_TeslaDecryptor.exe

 

신고
Posted by yhayoung

4월 21일 이슈된 CryptoLocker 의 변종파일이 4월 28일 발견되었다. 특이한 점은 기존에 확인된 랜섬웨어 기능외에 DDoS 공격목적의 실행파일이 추가로 확인되어 주의가 필요하다.

 

 1. 랜섬웨어 기능

엑셀 아이콘 모양으로 제작된 악성코드를 실행 시, 아래의 [그림-1]의 (2)번째 단계에서 처럼 "explorer.exe" 프로세스가 실행되며, 해당 프로세스 메모리에 랜섬웨어 기능의 실행파일이 Injection 되어 동작하는 것을 알 수 있다. 해당 랜섬웨어는 국내 커뮤니티 사이트인 C업체 광고배너를 통해 유포된 것과 동일한 형태이며, 접속시도하는 사이트는 다음과 같다.  

- tidisow.ru

[그림-1] 악성 기능별 인젝션 대상 프로세스

해당 랜섬웨어의 상세 기능은 하기의 글을 참고

- http://asec.ahnlab.com/1030

 

 2. DDoS 기능

기존 알려진 랜섬웨어 기능외에 해당 샘플은 DDoS 공격기능의 실행파일을 구동하는 특징을 갖는다. 구체적 DDoS 공격방식은 Nitol 이라는 이름으로 알려진 악성코드와 동일하며, 아래의 C&C 주소와의 통신을 통해 공격자의 명령에 따라 파일 다운로드 및 DDoS 기능을 수행한다.

- b.googlex.me (Port: 22, 23, ...)

 

아래의 [그림-2]는 공격자 명령에 의해 DDoS 공격이 발생하는 부분을 나타내며, DDoS 기능관련 Thread가 반복적으로 생성되는 구조이다.

[그림-2] DDoS 관련 쓰레드 생성루틴

 

아래의 [그림-3]은 DDoS 공격 시 사용하는 다양한 HTTP 메시지 내용을 나타낸다.

[그림-3] DDoS 공격 시 사용되는 HTTP 메시지

 

랜섬웨어 동작방식과 유사하게 악성행위를 하는 실행파일이 별도의 파일형태로 생성되는 구조가 아닌, 정상 프로세스 실행 및 인젝션(Injection)을 통해 동작하여 파일기반의 진단을 우회하도록 한다.

인젝션 대상이 되는 프로세스는 감염 시스템의 아래의 레지스트리 정보를 통해 얻은 웹 브라우저이며, 테스트 시스템에서는 "chrome.exe"가 기본 웹 브라우저로 설정되어있어 [그림-1]의 (1)번째 단계에서 보여진 것  처럼 "chrome.exe"가 실행됨을 알 수 있다.

- HKCR\http\shell\open\command

[그림-4] 인젝션 대상 웹 브라우저 정보

 

해당 악성코드가 생성하는 뮤텍스 정보는 다음과 같다.

- "qazwsxedc" (고정)

 

최초 C&C 주소와 통신 시, 공격자에게 전송되는 정보는 아래의 API 호출을 통해 얻는다. (최종 전송 시, XOR 를 통해 암호화되어 전송)

- KERNEL32.GetComputerNameA
- KERNEL32.GetLocaleInfoW
- ADVAPI32.RegOpenKeyExA ("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion")
- ADVAPI32.RegQueryValueExA ("ProductName", "ProcessorNameString")
- KERNEL32.GlobalMemoryStatusEx
- KERNEL32.GetSystemInfo

 

Anti-VM 기능으로 아래의 [그림-5]에서 처럼 C&C 접속 전 30분간의 Sleep()을 수행하며, GetTickCount API를 이용하여 정상적으로 30분간 Sleep()을 수행하였는지 여부를 체크하는 코드가 존재한다.

 

[그림-5] 30분 Sleep() 정상 수행여부 체크

 

해당 악성코드에 대한 V3 진단명은 다음과 같다.

- Win-Trojan/Cryptolocker.Gen

 

 

신고
Posted by yhayoung

1. 개요

랜섬웨어는 사용자 시스템에 설치된 후 파일들을 암호화해서 정상적으로 사용하지 못하도록 하고 이를 정상적으로 돌려준다는 조건으로 비트코인 또는 추적이 어려운 전자 화폐를 통한 금액 지불을 요구하는 악성코드이다. 주로 국외에서 확산되면서 많은 피해자를 양산했는데 최근 몇 년 사이에 국내에서도 랜섬웨어에 감염된 사용자가 증가하였으며 그 중 국내 유명 인터넷 커뮤니티 사이트를 통해 유포된 CryptoLocker 에 대한 분석 정보를 공유하고자 한다.

최근에 발견된 ‘CryptoLocker’는 [그림-1]에서 볼 수 있듯이 과거 2013년 9월에 처음 발견이 되었으며 ‘CryptoWall’, ‘TorrentLocker’, ‘CryptographicLocker’, ‘TeslaCrypt’ 등의 이름으로 변형들이 계속해서 나타났다. 주로 이메일을 통해 유포되던 랜섬웨어 악성코드가 최근 국내 인터넷 커뮤니티 사이트를 이용해 유포되었고 해당 랜섬웨어인 ‘CryptoLocker’ 도 과거의 그것들과 같은 류이다.

 

[그림-1] 주요 랜섬웨어 타임라인

 

이번 랜섬웨어에 감염되면 나타나는 페이지는 [그림-2]와 같은데 암호화된 파일들을 복원하기 위해 한화 약 438,900원의 BitCoin을 요구한다. 피해자들이 비용 지불을 쉽게 할 수 있도록 결제 방법을 상세하게 설명하고 있으며 실제 복원이 됨을 증명하기 위해 암호화된 파일 중 1개의 파일을 무료로 복호화 해주고 있다. 이를 통해 악성코드 제작자는 중요한 파일을 암호화하여 사용자의 금액 지불을 유도하는 것이 목적임을 알 수 있다.

 

[그림-2] CryptoLocker에 감염 시, 보여지는 웹 페이지

 

그리고 사용자 PC의 IP대역을 확인해서 해당 국가에 맞은 언어의 안내 페이지를 생성 및 실행하여 보여 준다. 결제를 진행하기 위해 안내된 링크를 클릭하면 아래와 같은 정보가 기본으로 세팅 되어 있는데, Tor (anonymity network)를 사용해서 네트워크를 추적하기 어렵게 해 놓았다.

(예제) http://zoqowm4kzz4cvvvl.torlocator.org/jxt85f9.php 
- User-Code:  12lrne9
- User-Pass:  8394

 

2. 감염 경로

아래의 [그림-3]과 같이 사용자 시스템의 취약점을 이용한 전형적인 웹 기반의 DBD(Drive-By-Download) 방식을 통해 감염이 이루어졌다. 국내에서 많은 사용자들을 보유하고 있는 유명 커뮤니티 사이트에 접속하게 되면 취약한 사이트로 리다이렉션(Redirection) 되면서 특정 취약점에 의해 랜섬웨어 악성코드가 다운로드 되고 실행되었다.

 

[그림-3] 감염경로

 

1) 최초 유포지 및 경유지

이번 랜섬웨어 악성코드 배포에는 국내 3곳의 대표적인 IT 커뮤니티가 악용되었음이 확인되었다.

(1) C업체
(2) S업체
(3) R업체

이들 국내 사이트에는 광고 데이터를 동적으로 받아서 화면에 보여주는 기능이 포함되어 있다. 공격자는 이 기능을 악용하여, 아래와 같이 광고서버에 악의적인 스크립트를 삽입하거나 또는 직접 사이트를 변조하는 방법으로 사용자들이 인지하지 못한 채 악의적인 사이트로 연결되도록 유도하였다.

[그림-4] C업체에 삽입된 악성스크립트

 

[그림-5] S업체에 삽입된 악성스크립트

 

[그림-6] R업체에 삽입된 악성스크립트 (SWF 이용)

 

특히, 삽입된 악성 스크립트들은 경유지 사이트를 거쳐, 최종적으로 취약점 공격코드가 탑재된 사이트로연결된다. 이 때, 사용자 클라이언트 시스템 상의 취약점을 이용하기 위해 자동화된 웹 공격 툴킷인  “Angler EK” 가 사용되었다. 

 

2) 자동화된 웹 공격 툴킷 –“Angler EK”

아래의 [그림-7], [그림-8]과 같이 사용자는 최종적으로 난독화된 “Angler EK”의 취약점 랜딩페이지로  연결된다.

[그림-7] Angler EK 난독화된 취약점 랜딩페이지

 

[그림-8] Angler EK 동작구조

 

이 때, 악성코드의 탐지우회 기능과 유사하게, 스크립트 레벨에서도 취약점 'CVE-2013-7331'을 이용하여 가상환경, 분석환경, 백신 프로그램 등의 클라이언트 환경을 체크한다. 만약, 해당 프로그램들이 존재하는 경우, 공격이 정상적으로 이루어지지 않는다.

또한, 다음과 같이 특유의 변수를 이용하여 개별 애플리케이션들의 공격여부를 제어한다.

애플리케이션

변수

 

 

Adobe Flash Player

 

window.sf325gtgs7sfdf1

window.sf325gtgs7sfdf2

 

MS SilverLight

 

window.sf325gtgs7sfds

 

Oracle Java

 

window.sf325gtgs7sfdj

 

환경체크

 

window.sf325gtgs7sfdfn

[표-1] 애플리케이션 제어 변수

 

3) 취약점 및 페이로드 (쉘코드)

일반적인 Angler EK는 다양한 애플리케이션 취약점을 이용하는 것으로 알려져 있으나, 이번 공격에는 “God Mode”로 알려진 'CVE-2014-6332'와 Flash 취약점인 'CVE-2014-0515' 취약점이 이용되었다.

[그림-9] 'CVE-2014-6332' 취약점

 

[그림-10] 'CVE-2014-0515' 취약점 발생부분

 

[그림-11] 웹으로부터 전달된 “exec” 파라미터(Base64 인코딩) 처리

 

[그림-12] 'CVE-2014-0515' 취약점 원인 'Pixel Bender Binary Data'

 

[그림-13] 'CVE-2014-0515' 취약점 코드

 

다음과 같이 실제 쉘코드 실행 시, 공격자 사이트로부터 추가적인 Payload를 다운로드 받는다. 이를 해당 KEY 문자열로 해제한 후, 페이로드의 시작이 “9090” 또는 “MZ” 인지 구별하여 직접 메모리 상에서 실행하거나 tmp 파일(%temp%폴더)로 생성하여 실행한다.

[그림-14] 쉘코드(ShellCode) 일부

 

3. 기능분석

 

1) 전체 동작 흐름

이번 랜섬웨어가 실행이 되면 기타 다른 악성코드처럼 자기 자신을 ‘%WINDOWS%’ 폴더에 복사해놓고 ‘HKCU\Software\Microsoft\Windows\CurrentVersion\Run\<랜덤명>’ 에 등록한다. 해당 키에 실행 파일을 동록 해 놓으면 시스템을 재 부팅할 때마다 자동으로 실행이 되는데, 이렇게 되면 해당 파일을 찾아서 삭제하지 않는다면 감염된 PC의 사용자가 금액을 지불하고 파일을 복구했다고 하더라도 재감염 될 가능성이 높다. 자신을 자동 실행되게 등록한 후에는 정상 ‘explorer.exe’ 프로세스를 생성하고 C&C 서버 통신 및 파일을 암호화하는 주요 기능을 포함한 PE파일을 인젝션 시켜서 동작한다.

[그림-15] CryptoLocker 동작흐름

 

2) 세부 내용

 

a) 네트워크 접속

네트워크 통신 상태를 확인하기 위해 ‘www.download.windowsupdate.com’ 와 ‘akamaitechnologies.com’에 접속한다. 이후 아래의 [그림-16]과 같이 C&C 서버 인 ‘https://lepodick.ru/topic.php’에 두 번에 걸쳐 ‘POST’ 패킷을 전송하는데 첫 번째는 사용자 PC의 정보를 전달한 후 IP대역에 따른 (각 나라별) ‘.txt’와 ‘.html’ 파일을 받아 온다. 그리고 두 번째에는 앞에서 보낸 정보에 암호화된 파일들을 복호화 할 때 필요한 키 정보(256byte)를 함께 보내고 서버에서 ‘200 OK’ 응답을 받으면 파일들을 암호화하기 시작한다. 서버로부터 받은 ‘DECRYPT_INSTRUCTIONS.txt’와 ‘DECRYPT_INSTRUCTIONS.html’ 파일은 암호화한 파일이 있는 모든 폴더에 생성되며, 시스템이 감염되었다는 메시지를 사용자에게 보여주고 파일을 정상적으로 복원하기 위해 BitCoin을 사용한 결제 방법이 설명되어 있다.

[그림-16] C&C 통신과정

 

b) 볼륨 섀도우 카피 삭제

아래 명령을 실행해서 볼륨 섀도우 카피를 삭제하는데 이렇게 되면 Windows 운영체제에서 제공하는 파일 백업 및 복원 기능을 정상적으로 사용할 수 없다. 이 명령은 CryptoLocker류에서 공통적으로 확인 할 수 있는 기능이다.

- vssadmin.exe Delete Shadows /All /Quiet

 

c) 파일 암호화

랜섬웨어의 가장 특징적인 기능인 사용자의 중요 파일들을 암호화하는데 아래에 리스트 되어 있는 확장자를 가진 파일과 폴더는 대상에서 제외된다. 그리고 ‘이동식 드라이브’와 ‘네트워크 드라이브’에 있는 파일도 암호화 대상이 되며 암호화가 완료된 파일에는 확장자 뒤에 ‘.encrypted’ 문자열이 붙게 된다.

 

[제외대상 확장자]

.avi, .wav, .mp3, .gif, .ico, .png, .bmp, .txt, .html, .inf, .manifest, .chm, .ini, .tmp, .log, .url, .lnk, .cmd, .bat, .scr, .msi, .sys, .dll, .exe

 

[제외대상 폴더]

- %Program Files%
- %ProgramW6432%
- C:\WINDOWS
- C:\Documents and Settings\All Users\Application Data
- C:\Documents and Settings\사용자계정\Application Data
- C:\Documents and Settings\사용자계정\Local Settings\Application Data
- C:\Documents and Settings\사용자계정\Cookies
- C:\Documents and Settings\사용자계정\Local Settings\History
- C:\Documents and Settings\사용자계정\Local Settings\Temporary Internet Files

앞에서 리스트 되어 있던 암호화 대상 제외 확장자 및 폴더를 제외하고는 파일 외형적으로는 아래 [그림-17]처럼 파일의 확장자에 ‘.encrypted’ 가 추가가 된 것을 확인 할 수 있다. 이렇게 암호화된 파일 내부에는 변경된 원본 데이터와 시그니쳐 그리고 복호화에 필요한 256 바이트 Public Key가 포함되어 있다.

[그림-17] 감염 전/후의 변경된 파일명

 

4. 복구 프로그램

이번 국내 이슈가된 CryptoLocker 에 대한 복구 프로그램은 내부에 감염 사용자 별로 다른 복호화 키 인덱스 정보(0x20 바이트)를 포함하고 있다. 실행 시, 아래의 [그림-18]과 같은 화면이 나타나며 "Start Decryption" 버튼을 클릭하면, 감염 조건에 부합하는 드라이브 및 폴더에 대한 스캔과정을 수행하며 ".encrypted" 확장자를 갖는 파일들에 대해 실제 복호화작업이 이루어짐을 확인할 수 있다.

[그림-18] 복구 프로그램 내부에 저장된 Key 정보

".encrypted"로 암호화된 파일은 공통적으로 원래 파일크기에 0x108(264 바이트)가 증가한 것을 알 수 있다. 파일 끝에 추가된 0x108 크기의 데이터는 다음과 같은 구조를 갖는다.

증가한 264 바이트 = 해쉬정보(4-bytes) + 시그니처(4-bytes) + 공개키(256-bytes)

아래의 [그림-19]는 실제 복구툴 내부에 저장된 키 인덱스 정보(0x20 바이트)룰 통해 생성된 데이터(0x108 바이트)와 ".encrypted" 파일에 존재하는 해쉬정보 비교를 통해 유효한 키 인지 검증하는 과정을 나타낸다.

[그림-19] 유효한 키 여부 검증하는 부분

 

5. 결론

이번 CryptoLocker 랜섬웨어는 국내 유명 커뮤니티 웹사이트의 광고 배너를 통해 유포되면서 많은 국내 피해자를 발생시켰다. 이에 웹 관리자의 보안에 대한 주의가 필요하며 PC 사용자는 랜섬웨어 악성코드를 예방하기 위해 발신자가 불명확한 이메일의 열람에 주의하고 중요 파일들은 별도로 백업해 놓을 필요가 있겠다. 그리고 취약점에 의한 감염 피해를 줄이기 위해 운영체제와 응용프로그램들을 항상 최신으로 업데이트해야 하겠다. 이 외에도 백신프로그램을 통해 예방 할 수 있는데 V3에서는 해당 악성코드를 ‘Win-Trojan/Cryptolocker.229892’, ‘Win-Trojan/Cryptolocker.Gen’, ‘Trojan/Win32.Cryptolocker’ 등으로 진단하고 있으며 현재까지 파악된 관련 악성 경유지 및 유포지를 아래와 같이 확보하였다. 이에 주의가 필요하겠다.


[경유지]
- medbps.filmwedding.ro/bkktab2.html (gtdgq2.html, lrvqdg2.html, nprgj2.html)
- guhm.gusg.com.br/pzvjqn2.html
- aker.ktc66.com/tpgop2.html
- lub.liuboya.com/xzrwqh2.html (wvbrrd2.html, gibusn2.html, jibnnm2.html, lxhufq2.html, ubodwx2.html)
- lab.lamo.ro/tpgop2.html

[유포지]
- row.bottomwebsites.xyz/elusiveness_sugarcoated_icepack_worthier/41294017316481015
- gate.moneyslistsarea.xyz/dynasty_sunset_trepidation_guitarists/65630335056125154
- gate.nothaveillinous.xyz/tyrant_absolves_pimply_casualness/16752510507522986
- gate.nothaveillinous.xyz/shirked_edison_gatehouses_springier/47090670725834176

[C&C]
- lepodick.ru/topic.php
- possoqer.ru/topic.php
- koposorer.ru/topic.php
- wosowpe.ru/topic.php
 

 

신고
Posted by yhayoung