secure systems engineering
play

Secure Systems Engineering Chester Rebeiro Indian Institute of - PowerPoint PPT Presentation

Secure Systems Engineering Chester Rebeiro Indian Institute of Technology Madras Flaws that would allow an attacker access the OS flaw Bugs in the OS The Human factor Chester Rebeiro, IITM 2 Program Bugs that can be exploited Buffer


  1. Secure Systems Engineering Chester Rebeiro Indian Institute of Technology Madras

  2. Flaws that would allow an attacker access the OS flaw Bugs in the OS The Human factor Chester Rebeiro, IITM 2

  3. Program Bugs that can be exploited • Buffer overflows – In the stack – In the heap – Return-to-libc attacks • Double frees • Integer overflows • Format string bugs Chester Rebeiro, IITM 3

  4. Buffer Overflows in the Stack • We need to first know how a stack is managed Chester Rebeiro, IITM 4

  5. Stack in a Program (when function is executing) Parameters for main return Address prev frame pointer Locals of main Parameters for function return Address Frame pointer prev frame pointer Locals of function Stack pointer Chester Rebeiro, IITM 5

  6. Stack Usage (example) Stack (top to bottom): address stored data 1000 to 997 3 996 to 993 2 992 to 989 1 Parameters 988 to 985 return address for function 984 to 981 %ebp (stored Return Address frame pointer) prev frame pointer frame pointer (%ebp)980 to 976 buffer1 Locals of function 975 to 966 buffer2 (%sp) 964 stack pointer Chester Rebeiro, IITM 6

  7. Stack Usage Contd. Stack (top to bottom): address stored data 1000 to 997 3 996 to 993 2 992 to 989 1 What is the output of the following? 988 to 985 return address • printf(“%x”, buffer2) : 966 984 to 981 %ebp (stored • printf(“%x”, &buffer2[10]) frame pointer) 976  buffer1 (%ebp)980 to 976 buffer1 Therefore buffer2[10] = buffer1[0] 976 to 966 buffer2 A BUFFER OVERFLOW (%sp) 964 Chester Rebeiro, IITM 7

  8. Modifying the Return Address Stack (top to bottom): buffer2[19] = address stored data &arbitrary memory location 1000 to 997 3 This causes execution of an 996 to 993 2 arbitrary memory location 992 to 989 1 instead of the standard return 988 to 985 Return Address Arbitrary Location 984 to 981 %ebp (stored 19 frame pointer) (%ebp)980 to 976 buffer1 976 to 966 buffer2 (%sp) 964 Chester Rebeiro, IITM 8

  9. Stack (top to bottom): address stored data Now that we seen how buffer 1000 to 997 3 overflows can skip an instruction, 996 to 993 2 We will see how an attacker can use 992 to 989 1 it to execute his own code (exploit 988 to 985 ATTACKER’S code) code pointer 984 to 981 %ebp (stored frame pointer) (%ebp)980 to 976 buffer1 976 to 966 buffer2 (%sp) 964 Chester Rebeiro, IITM 9

  10. Big Picture of the exploit Fill the stack as follows (where BA is buffer address) BA BA BA Parameters for function BA BA Return Address BA prev frame pointer frame pointer BA buffer BA stack pointer Exploit code BA buffer Address Chester Rebeiro, IITM 10

  11. Exploit Code • Lets say the attacker wants to spawn a shell • ie. do as follows: • How does he put this code onto the stack? Chester Rebeiro, IITM 11

  12. Step 1 : Get machine codes • objdump –disassemble-all shellcode.o • Get machine code : “eb 1e 5e 89 76 08 c6 46 07 00 c7 46 0c 00 00 00 00 b8 0b 00 00 00 89 f3 8d 4e 08 8d 56 0c cd 80 cd 80” • If there are 00s replace it with other instructions Chester Rebeiro, IITM 12

  13. Step 2: Find Buffer overflow in an application Defined on stack O O O O o Chester Rebeiro, IITM 13

  14. Step 3 : Put Machine Code in Large String large_string shellcode Chester Rebeiro, IITM 14

  15. Step 3 (contd) : Fill up Large String with BA Address of buffer is BA large_string shellcode BA BA BA BA BA BA BA BA Chester Rebeiro, IITM 15

  16. Final state of Stack BA BA • Copy large string into buffer BA BA BA • When strcpy returns the BA exploit code would be executed BA BA buffer shellcode large_string BA shellcode BA BA BA BA BA BA BA BA buffer Address BA Chester Rebeiro, IITM 16

  17. Putting it all together bash$ gcc overflow1.c bash$ ./a.out $sh Chester Rebeiro, IITM 17

  18. Buffer overflow in the Wild • Worm CODERED … released on 13 th July 2001 • Infected 3,59,000 computers by 19 th July. Chester Rebeiro, IITM 18

  19. CODERED Worm • Targeted a bug in Microsoft’s IIS web server • CODERED’s string GET /default.ida?NNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNN %u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u78 01%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u 00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.0 Chester Rebeiro, IITM 19

  20. How to Protect against buffer overflows Chester Rebeiro, IITM 20

  21. Non-executable stack • Mark the stack pages as non-executable. bash$ gcc overflow1.c bash$ ./a.out Segmentation Fault Chester Rebeiro, IITM 21

  22. Non Executable Stack Implementations • In Intel processors, NX bit present to mark stack as non-executable. • Works for most programs • Does not work for some programs that NEED to execute from the stack. – Eg. Linux signal delivery. Chester Rebeiro, IITM 22

  23. Will non executable stack prevent buffer overflow attacks ? return to libc attacks Chester Rebeiro, IITM 23

  24. Return to Libc (big picture) BA BA BA BA Return Address BA This will not work if NX bit is set BA BA BA buffer Exploit code Chester Rebeiro, IITM 24

  25. Return to Libc (big picture contd.) F1ptr F1ptr Some F1ptr Function F1ptr F1 Return Address F1ptr F1ptr What is F1? F1ptr • It is some function present in the program F1ptr • It should be able to execute attacker’s code buffer F1ptr Chester Rebeiro, IITM 25

  26. F1 = system() • One option is function system present in libc system(“/bin/bash”); would create a bash shell So we need to 1. Find the address of system in the process 2. Supply an address that points to the string /bin/sh Chester Rebeiro, IITM 26

  27. The return-to-libc attack F1ptr F1 ptr /bin/bash Shell ptr F1ptr Return Address F1ptr F1ptr F1ptr system() In libc F1ptr buffer F1ptr Chester Rebeiro, IITM 27

  28. Find address of system $ gdb a.out (gdb) p system $1 {<text variable…>} 0x28086526 <system> Chester Rebeiro, IITM 28

  29. Find address of /bin/sh • Every process stores the enviroment variables • We need to find this and extract the string /bin/sh from it Chester Rebeiro, IITM 29

  30. Limitation of ret2libc “Difficult to execute arbitrary code” Chester Rebeiro, IITM 30

  31. Return Oriented Programming Attacks • Discovered by Hovav Shacham of Stanford University • Allows arbitrary computation without code injection – thus can be used with non executable stacks Chester Rebeiro, IITM 31

  32. Gadgets (1) Lets say this is the payload needed to be executed by an attacker. Chester Rebeiro, IITM 32

  33. Gadgets (2) • Scan the entire binary for code snippets of the form useful instruction(s) ret • This is called a gadget Chester Rebeiro, IITM 33

  34. Gadgets (3) • Find gadgets in the binary for the payload movb $0x0, 0x7(%esi) G2 ret movl $0xb, %eax G4 ret movb $0x0, 0xc(%esi) G3 ret movl %esi, 0x8(%esi) G1 ret Program Binary Chester Rebeiro, IITM 34

  35. Other Precautions for buffer overflows • Use a programming language that automatically check array bounds – Example java • Use securer libraries. For example C11 annex K, gets_s, strcpy_s, strncpy_s, etc. (_s is for secure) Chester Rebeiro, IITM 35

  36. Canaries Stack (top to bottom): • Known (pseudo random) values placed on stack to monitor buffer stored data overflows. 3 • A change in the value of the canary 2 indicates a buffer overflow. • Implemented in gcc by default. 1 • Evaded if canary is known ret addr sfp (%ebp) Insert a canary here Insert canary here buffer1 check if the canary value buffer2 has got modified Chester Rebeiro, IITM 36

  37. Bounds Checking • Check accesses to each buffer so that it cannot be beyond the bounds • In C and C++, bound checking performed at pointer calculation time or dereference time. • Requires run-time bound information for each allocated block. Chester Rebeiro, IITM 37

  38. Address Space Randomization • Attackers need to know specific locations in the code. – For instance, where the stack begins – Where functions are placed in memory, etc. • Address space layout randomization (ASLR) makes this difficult by randomizing the address space layout of the process Chester Rebeiro, IITM 38

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend