문서 파일내 DDE 기능을 활용한 악성코드

malwares.com 코드분석팀 분석 자료


<부제 :  DDE 이건 또 뭐냐 >


1. 개요

 
2017년 10월 9일 SensePost의 블로그에 흥미로운 글이 게시됐다. 이는 오피스 문서 내 DDE(Dynamic Data Exchange) 기능을 활용해 임의의 코드 실행 관련 글로 매크로와 같은 스크립트를 삽입하는 과정이 상세히 나와있다. 또한 이렇게 악성 동작을 삽입한 스크립트는 안티 바이러스 업체에서 탐지가 불가능하다는 것도 보여주고 있다. 그 동안 Macro와 GhostScript(또는 PostScript) 기능을 이용한 형태에 다른 방식이 추가된 것이다. 문제는 대부분의 안티 바이러스 업체에서 이를 탐지하지 못하기 때문에 바이러스 진단에 있어 보안에 적신호가 켜진 것이다.  해당 글이 공개된 이후 연일 관련 뉴스들이 쏟아지고 있으며 그 중 Locky 랜섬웨어에서 사용하기도 하고 최근엔 러시아 해킹 그룹인 APT28 (또는 Fancy Bear) 에서도 관련 기법을 활용하고 있다고 한다. 

이렇게 많은 이슈를 낳고 있는 DDE는 무엇인지, 어떻게 탐지할 수 있는지 확인해 보자.



2. 분석 정보 

(1) DDE(Dynamic Data Exchange) 정의 

DDE는 Dynamic Data Exchange의 약자로 1987년 Windows 2.0을 공개하면서 다른 프로그램과 상호 작용을 위해 만들어 놓은 오피스 기능이다. 예를 들어 엑셀의 셀 정보를 참조하고 있는 워드 문서가 있을 경우 셀 정보가 수정되면 DDE를 통해 워드에 공유되는 형태이다. 현재는 기능의 일부를 OLE에서 처리되고 있다. (실제 포맷을 분석해 보면 매크로 부분은 DDE에서 제거되어 OLE에서 처리되고 있다.)

- CFBF : Compound File Binary Format
- OLE : Object Linking and Embedding

흔히 엑셀이나 워드 문서를 OLE 파일 포맷이라 말하지만 OLE는 오피스 파일간 데이터 공유를 위해 사용하고 있는 프로토콜이며 실제 오피스 파일은 CFBF라고 하는 것이 정확한 표현이다. 



(2) 포맷 분석을 통한 DDE 스크립트 추출 

DDE 관련 정보는 워드문서 내의 WordDocument Stream과 Table Stream과 관련이 있다. 따라서 분석 대상 파일 내에서 WordDocument와 Table Stream을 추출한다. 

[ 그림 1. SSView를 이용한 WordDocument Stream 추출 ]


추출된 WordDocument Stream을 Hex Editor로 확인해 보면 다음과 같이 "DDEAUTO"로 시작하는 스크립트를 확인할 수 있다. 


[ 그림 2. WordDocument Stream에서 확인된 DDE 스크립트 ]


저장된 WordDocument Stream에서 문자열만 추출한 후 'MSWord.exe'와 같은 문자열로 검색하는 방법도 DDE를 탐지하는 방법은 될 수 있다. 하지만 본문 내에 검색 문자열이 있는 등 다양한 예외 상황이 발생할 수 있어 제품에 적용하기에는 무리가 있다. 따라서 WordDocument Stream 포맷 분석을 통해 DDE 스크립트를 추출하면 된다 

WordDocument Stream은 FIB' (File Information Block)으로 시작하고 FIB 구조체 정보를 바탕으로 WordDocument Stream 내의 Text 나 정보를 확인할 수 있다. 

[ 그림 3. FIB 구조체 일부 (참조 : MS-DOC.pdf) ]


FIB 구조체는 다음과 같이 구성된다. 

[ 그림 4. FIB 전체 구조 ]


해당 구조체를 조건에 맞춰 분석을 수행하고, 이 중 DDE와 관련된 구조체 멤버를 식별해 관련 정보 분석을 수행한다. 


- Main Document

- Header

- Footnote

- Comment

- EndNote

- TextBox


해당 샘플의 경우 멤버별 세부 정보를 분석하면 다음과 같은 결과를 확인할 수 있다. 


[ 그림 5. DDE를 참조하는 구조체 정보 ]


따라서 해당 분석 샘플은 DDE 관련 정보가 Main Document에서 참조하고 있음을 알 수 있다.  하지만 실제 구조체 정보에서는 WordDocument Stream에 저장된 데이터를 참조하도록 경로(Offset, Size)만 저장돼 있을 뿐 실제 데이터가 존재하진 않는다. 따라서 이러한 정보를 저장하고 있는 구조체를 확인해야 되며 Clx에서 해당 관련 정보를 확인할 수 있다. 

[ 그림 6. DDE 정보를 저장하고 있는 Clx 구조체 ]


Clx 구조체 정보는 WordDocument Stream이 아닌 Table Stream에 저장돼 있다. Table Stream은 파일에 따라 0Table Stream/1Table Stream을 갖고 있으며 1Table Stream이 없을 경우 0Table Stream을 참조하면 된다. 분석 대상의 경우 1Table Stream 만 저장하고 있으므로 해당 Table Stream을 추출해 FIB 구조체에서 확인한 Clx의 위치(fcClx)와 크기(lcbClx)를 바탕으로 Clx를 추출하면 된다. 


[ 그림 7. Clx에서 데이터 추출과정 ]

이러한 과정을 통해 분석하면 CP 2개와 Pcd 1개를 확인할 수 있으며 Pcd에 읽어들일 문자열과 unicode type을 저장하고 있으므로 이를 순차적으로 분석하면 다음과 같은 DDE 스크립트를 추출할 수 있다. 

[ 그림 8. Clx를 통해 추출된 DDE 스크립트 ]


DDE 와 DDEAUTO는 다음과 같은 방식으로 실행된다. 


[ 그림 9-1. DDE 스크립트 실행 방법 ]


[ 그림 9-2. DDEAUTO 스크립트 실행 방법 ]


따라서 해당 코드는 mshta.exe를 통해 외부 서버내 파일을 실행하는 형태이다. 


- hxxp://w-szczecin.pl/img2/NEW15_10.doc/index.hta


3. IoC



해쉬

BD61559C7DCAE0EDEF672EA922EA5CF15496D18CC8C1CBEBEE9533295C2D2EA9

파일크기

22,016 Bytes

유입파일명

DanePrzesylki17016.doc

태그

#doc, #exploit, #cve-2017-0199, #interested_strings_url, #attachment, #trojan, #downloader, #agent

주요동작

DDE

초기감염방법

이메일 첨부 파일, 다운로드 

재실행방법

X

네트워크연결

hxxp://w-szczecin.pl/img2/NEW15_10.doc/index.hta















이 글을 공유하기

댓글(0)