ELF EN LA MIRA: HACKING Y DEFENSA <ul><li>Alejandro Hernández Hernández </li></ul><ul><li>[email_address] </li></ul><ul><l...
TABLA DE CONTENIDOS <ul><li>¿QUE ES ELF? </li></ul><ul><ul><li>Interfaces o vistas </li></ul></ul><ul><ul><li>Estructura <...
¿QUE ES ELF? ELF  por sus siglas en inglés de  Executable and Linking Format  es un formato de archivo mayormente utilizad...
¿QUE ES ELF? (Cont.) <ul><li>Tipos de archivo </li></ul><ul><ul><li>Ejecutables </li></ul></ul><ul><ul><li>Librerías compa...
INTERFACES O VISTAS
ESTRUCTURA DE ELF Elf32_Ehdr
ESTRUCTURA DE ELF Elf32_Shdr
ESTRUCTURA DE ELF Elf32_Phdr
BLACKHAT
HACE ALGUNOS AÑOS… <ul><li>“… Usa Linux, en Linux no existen los virus…” </li></ul><ul><li>La plataforma mas atacada era W...
“ Virus writers and other cyber criminals have lost interest in Linux, since it is neither “underground” nor mainstream, w...
Breakdown of malware according to platform  MALWARE FOR UNIX-TYPE SYSTEMS (Cont.) Fuente:  Kaspersky Security Bulletin 200...
Breakdown of malware according to platform  MALWARE FOR UNIX-TYPE SYSTEMS (Cont.) Fuente:  Kaspersky Security Bulletin 200...
TÉCNICAS DE INFECCIÓN <ul><li>Sobrescritura, “pre/post pending” </li></ul><ul><li>$cat ejecutable >> parasito </li></ul><u...
CASO: INFECCIÓN DEL SEGMENTO DE DATOS .text .data .bss 0x080482d0 *(int *)&parasite[par_entry_off] = header->e_entry; &quo...
header->e_entry = program->p_vaddr + program->p_memsz; CASO: INFECCIÓN DEL SEGMENTO DE DATOS (Cont.) .text .data .bss 0x08...
.text .data .bss 0x080482d0 CASO: INFECCIÓN DEL SEGMENTO DE DATOS (Cont.) “ x6ax0bx58x99x52” “ x66x68x2dx46x89” “ xe1x52x6...
CASO: INFECCIÓN DEL SEGMENTO DE DATOS (Cont.) .text .data .bss nitr0us@hacklab $ ./run_forest_run Parásito
DEMO ELF_data_infector.c  (nitr0us) 4554invader.c  (Electronic Souls) ES-Malaria  (Electronic Souls)
ESTEGANOGRAFÍA <ul><li>En código ejecutable  </li></ul><ul><ul><li>Instrucciones funcionalmente equivalentes </li></ul></u...
DEMO Hydan  ( Rakan El-Khalil)
WHITEHAT
SEGURIDAD EN ELF <ul><li>Encripción Binaria </li></ul><ul><ul><li>Código/Datos </li></ul></ul><ul><ul><li>Burneye (scut [T...
DEMO cryptelf.c  (SLACKo) ELFCrypt.c  (JunkCode) elfsign  (skape)
GRAYHAT FRANK SINATRA
<ul><li>Técnicas anti-análisis </li></ul><ul><ul><li>Estático </li></ul></ul><ul><ul><li>Dinámico </li></ul></ul><ul><ul><...
ANÁLISIS DE VULNERABILIDADES <ul><li>Violar la especificación de ELF </li></ul><ul><li>Análisis de campos numéricos </li><...
ELF HEADER (Elf32_Ehdr)
¿Y QUE SI…?
ELF PROGRAM HEADER (Elf32_Ehdr)
¿Y QUE SI…?
INTERPRETE
¿Y QUE SI…?
Elf32_Shdr *sections = (Elf32_Shdr *) (elfptr + hdr.e_shoff);  shstrtab_section = *(Elf32_Shdr *) (elfptr + hdr.e_shoff + ...
 
KERNEL (Linux 2.6) /usr/src/linux/fs/binfmt_elf.c load_elf_interp() int size; ... if (interp_elf_ex->e_phentsize != sizeof...
KERNEL (Cont.) /usr/src/linux/fs/binfmt_elf.c load_elf_binary() unsigned int size; … size = loc->elf_ex.e_phnum * sizeof(s...
KERNEL (Cont.) /usr/src/linux/fs/binfmt_elf.c load_elf_library() int j; /* Now read in all of the header information */ j ...
DEMO ELFsh_crash.esh  (nitr0us) ht_shstrndx_poc.c  (nitr0us) Gizmo  (izik)
CONCLUSIÓN ELF es un formato de archivos algo complejo, dentro del cual se encuentran estructuras de datos, ya sea para cr...
¿PREGUNTAS? ¿COMENTARIOS?
REFERENCIAS [1] Anonymous, (2002). Runtime Process Infection.  Phrack Magazine, 11 (59). Extraido el 02 de Junio de 2007 d...
REFERENCIAS (Cont.) [6] Griffiths, A. (s.f.).  Binary protection schemes  (Ed. Rev. 1.0-prerelease- 0.7). Extraido el 13 d...
[11]  Johnson, R. (2004).  Hooking the Linux ELF Loader . Trabajo presentado en Toorcon 2004 conference, Septiembre 24-26,...
A. Alejandro Hernández Hernández [email_address] http://www.genexx.org/nitrous/ Gracias !
Upcoming SlideShare
Loading in …5
×

ELF en la mira: Hacking y Defensa

873 views

Published on

ENLI @ UPAEP \’08, Puebla, Mexico.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
873
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ELF en la mira: Hacking y Defensa

  1. 1. ELF EN LA MIRA: HACKING Y DEFENSA <ul><li>Alejandro Hernández Hernández </li></ul><ul><li>[email_address] </li></ul><ul><li>http://www.genexx.org/nitrous/ </li></ul><ul><li>UPAEP @ Puebla, Puebla. 24/Oct/2008 </li></ul>
  2. 2. TABLA DE CONTENIDOS <ul><li>¿QUE ES ELF? </li></ul><ul><ul><li>Interfaces o vistas </li></ul></ul><ul><ul><li>Estructura </li></ul></ul><ul><li>BLACKHAT </li></ul><ul><ul><li>Malware hace algunos años… </li></ul></ul><ul><ul><li>Técnicas de Infección </li></ul></ul><ul><ul><li>Esteganografía </li></ul></ul><ul><li>WHITEHAT </li></ul><ul><ul><li>Encripción Binaria </li></ul></ul><ul><ul><li>Firma Digital </li></ul></ul><ul><li>GRAYHAT </li></ul><ul><ul><li>Anti-análisis/Anti-forense </li></ul></ul><ul><ul><li>Análisis de Vulnerabilidades (vuln-dev) </li></ul></ul><ul><li>CONCLUSIÓN </li></ul><ul><li>PREGUNTAS/COMENTARIOS </li></ul><ul><li>REFERENCIAS </li></ul>
  3. 3. ¿QUE ES ELF? ELF por sus siglas en inglés de Executable and Linking Format es un formato de archivo mayormente utilizado en sistemas tipo UNIX como Linux, BSD, Solaris, Irix. Existen otros formatos soportados en algunos de estos sistemas como COFF o a.out, pero ELF es sin duda el más usado.
  4. 4. ¿QUE ES ELF? (Cont.) <ul><li>Tipos de archivo </li></ul><ul><ul><li>Ejecutables </li></ul></ul><ul><ul><li>Librerías compartidas </li></ul></ul><ul><ul><li>Relocalizables </li></ul></ul><ul><ul><li>Volcados de Memoria (coredumps) </li></ul></ul><ul><li>Interfaces o Vistas </li></ul><ul><ul><li>Ejecución (Segmentos) </li></ul></ul><ul><ul><li>Enlace (Secciones) </li></ul></ul>
  5. 5. INTERFACES O VISTAS
  6. 6. ESTRUCTURA DE ELF Elf32_Ehdr
  7. 7. ESTRUCTURA DE ELF Elf32_Shdr
  8. 8. ESTRUCTURA DE ELF Elf32_Phdr
  9. 9. BLACKHAT
  10. 10. HACE ALGUNOS AÑOS… <ul><li>“… Usa Linux, en Linux no existen los virus…” </li></ul><ul><li>La plataforma mas atacada era Windows </li></ul><ul><li>En Linux no eran más que PoCs lejos de ser amenazas reales </li></ul><ul><li>Técnicas de infección y protección simples </li></ul>
  11. 11. “ Virus writers and other cyber criminals have lost interest in Linux, since it is neither “underground” nor mainstream, which means there isn't much money-making potential” Fuente: Kaspersky Security Bulletin 2006: Malware for Unix-type systems MALWARE FOR UNIX-TYPE SYSTEMS Number of malicious programs for Unix platforms
  12. 12. Breakdown of malware according to platform MALWARE FOR UNIX-TYPE SYSTEMS (Cont.) Fuente: Kaspersky Security Bulletin 2006: Malware for Unix-type systems
  13. 13. Breakdown of malware according to platform MALWARE FOR UNIX-TYPE SYSTEMS (Cont.) Fuente: Kaspersky Security Bulletin 2006: Malware for Unix-type systems
  14. 14. TÉCNICAS DE INFECCIÓN <ul><li>Sobrescritura, “pre/post pending” </li></ul><ul><li>$cat ejecutable >> parasito </li></ul><ul><li>$mv parasito ejecutable; ./ejecutable </li></ul><ul><li>Relleno de páginas (padding) </li></ul><ul><ul><li>Infección de .text </li></ul></ul><ul><ul><li>Infección de .data </li></ul></ul><ul><ul><li>Infección de .fini </li></ul></ul><ul><li>Hooking PLT/GOT </li></ul><ul><li>En tiempo de ejecución [ptrace()] </li></ul><ul><li>Ejecutables estáticos </li></ul><ul><li>Etc. </li></ul>
  15. 15. CASO: INFECCIÓN DEL SEGMENTO DE DATOS .text .data .bss 0x080482d0 *(int *)&parasite[par_entry_off] = header->e_entry; &quot; xbdxedxacxefx0d &quot; // mov $0xdefaced,%ebp &quot; xffxe5 &quot; // jmp *%ebp &quot; xbd xd0x82x04x08 &quot; &quot; xffxe5 &quot; Entrypoint
  16. 16. header->e_entry = program->p_vaddr + program->p_memsz; CASO: INFECCIÓN DEL SEGMENTO DE DATOS (Cont.) .text .data .bss 0x080482d0 Entrypoint
  17. 17. .text .data .bss 0x080482d0 CASO: INFECCIÓN DEL SEGMENTO DE DATOS (Cont.) “ x6ax0bx58x99x52” “ x66x68x2dx46x89” “ xe1x52x66x68x65” “ x73x68x74x61x62” “ x6cx68x6ex2fx69” “ x70x68x2fx73x62” “ x69x89xe3x52x51” “ x53x89xe1xcdx80”
  18. 18. CASO: INFECCIÓN DEL SEGMENTO DE DATOS (Cont.) .text .data .bss nitr0us@hacklab $ ./run_forest_run Parásito
  19. 19. DEMO ELF_data_infector.c (nitr0us) 4554invader.c (Electronic Souls) ES-Malaria (Electronic Souls)
  20. 20. ESTEGANOGRAFÍA <ul><li>En código ejecutable </li></ul><ul><ul><li>Instrucciones funcionalmente equivalentes </li></ul></ul><ul><li>add %eax, $50 == sub %eax, $-50 </li></ul>Tazas de Codificación Fuente: Hydan: Hiding Information in Program Binaries
  21. 21. DEMO Hydan ( Rakan El-Khalil)
  22. 22. WHITEHAT
  23. 23. SEGURIDAD EN ELF <ul><li>Encripción Binaria </li></ul><ul><ul><li>Código/Datos </li></ul></ul><ul><ul><li>Burneye (scut [TESO]) </li></ul></ul><ul><li>PKI (Public Key Infrastructure) </li></ul><ul><ul><li>Firma Digital (elfsign) </li></ul></ul>
  24. 24. DEMO cryptelf.c (SLACKo) ELFCrypt.c (JunkCode) elfsign (skape)
  25. 25. GRAYHAT FRANK SINATRA
  26. 26. <ul><li>Técnicas anti-análisis </li></ul><ul><ul><li>Estático </li></ul></ul><ul><ul><li>Dinámico </li></ul></ul><ul><ul><ul><li>ptrace() </li></ul></ul></ul><ul><li>Técnicas anti-forense </li></ul><ul><ul><li>SELF (Pluf & Ripe) </li></ul></ul><ul><li>Ofuscación </li></ul><ul><ul><li>Código </li></ul></ul><ul><ul><li>Datos </li></ul></ul>(IN) SEGURIDAD EN ELF
  27. 27. ANÁLISIS DE VULNERABILIDADES <ul><li>Violar la especificación de ELF </li></ul><ul><li>Análisis de campos numéricos </li></ul><ul><ul><li>Integer overflows </li></ul></ul><ul><li>Strings sin terminación (‘x00’) </li></ul><ul><li>Reserva de memoria </li></ul><ul><ul><li>Buffers más chicos/grandes de lo esperado </li></ul></ul><ul><li>Referencias inválidas de memoria </li></ul><ul><li>Comportamientos indefinidos </li></ul>
  28. 28. ELF HEADER (Elf32_Ehdr)
  29. 29. ¿Y QUE SI…?
  30. 30. ELF PROGRAM HEADER (Elf32_Ehdr)
  31. 31. ¿Y QUE SI…?
  32. 32. INTERPRETE
  33. 33. ¿Y QUE SI…?
  34. 34. Elf32_Shdr *sections = (Elf32_Shdr *) (elfptr + hdr.e_shoff); shstrtab_section = *(Elf32_Shdr *) (elfptr + hdr.e_shoff + hdr.e_shstrndx * sizeof(Elf32_Shdr)); shstrtab_offset = shstrtab_section.sh_offset; printf(“[Nr] Section namen”); for(k = 0; k < hdr.e_shnum; k++, sections++){ printf(&quot;[%2d] %sn&quot;, k, elfptr + shstrtab_offset + sections->sh_name); … } if(phdrs->p_type == PT_INTERP) printf(&quot;[Interpreter: %s]n&quot;, elfptr + phdrs->p_offset); ENTONCES, QUE PASARÍA CON…
  35. 36. KERNEL (Linux 2.6) /usr/src/linux/fs/binfmt_elf.c load_elf_interp() int size; ... if (interp_elf_ex->e_phentsize != sizeof(struct elf_phdr)) goto out; if (interp_elf_ex->e_phnum < 1 || interp_elf_ex->e_phnum > 65536U / sizeof(struct elf_phdr)) goto out; /* Now read in all of the header information */ size = sizeof(struct elf_phdr) * interp_elf_ex->e_phnum; if (size > ELF_MIN_ALIGN) /* size > 4096 */ goto out; elf_phdata = (struct elf_phdr *) kmalloc(size, GFP_KERNEL);
  36. 37. KERNEL (Cont.) /usr/src/linux/fs/binfmt_elf.c load_elf_binary() unsigned int size; … size = loc->elf_ex.e_phnum * sizeof(struct elf_phdr); elf_phdata = (struct elf_phdr *) kmalloc(size,GFP_KERNEL); … elf_interpreter = (char *) kmalloc(elf_ppnt->p_filesz, GFP_KERNEL);
  37. 38. KERNEL (Cont.) /usr/src/linux/fs/binfmt_elf.c load_elf_library() int j; /* Now read in all of the header information */ j = sizeof(struct elf_phdr) * elf_ex.e_phnum; /* j < ELF_MIN_ALIGN because elf_ex.e_phnum <= 2 */ elf_phdata = kmalloc(j, GFP_KERNEL);
  38. 39. DEMO ELFsh_crash.esh (nitr0us) ht_shstrndx_poc.c (nitr0us) Gizmo (izik)
  39. 40. CONCLUSIÓN ELF es un formato de archivos algo complejo, dentro del cual se encuentran estructuras de datos, ya sea para crear un ejecutable o para cargarlo en memoria y ejecutarlo. Dentro de estas estructuras de datos es posible encontrar diferentes valores que podrían ser modificados para violar la especificación.
  40. 41. ¿PREGUNTAS? ¿COMENTARIOS?
  41. 42. REFERENCIAS [1] Anonymous, (2002). Runtime Process Infection. Phrack Magazine, 11 (59). Extraido el 02 de Junio de 2007 desde http://www.phrack.org/issues.html?issue=59&id=8 [2] Barros, C. (2006). Complete guide to process infection. The Bug Magazine, 1 (1). Extraido el 20 de Enero de 2007 desde http://www.thebugmagazine.org/magazine/bug01/0x06_complete- guide-to-process-infection.txt [3] Bauche, D. (2005). Ingeniería Inversa en Linux . Guadalajara, Jalisco, México. Extraido el 11 de Noviembre de 2006 desde http://www.genexx.org/pubs/iil/IIL.pdf [4] El-Khalil, R. & Keromytis, A. Hydan: Hiding Information in Program Binaries . Department of Computer Science, Columbia University. New York. [5] Garaizar, P. (s.f.). Virus en Linux – Un nuevo campo de batalla .
  42. 43. REFERENCIAS (Cont.) [6] Griffiths, A. (s.f.). Binary protection schemes (Ed. Rev. 1.0-prerelease- 0.7). Extraido el 13 de Febrero de 2007 desde http://felinemenace.org/papers/Binary_protection_schemes-1.00- prerelease.tar.gz [7] Grugq, Scut (2001). Armouring the ELF: Binary encryption on the UNIX platform. Phrack Magazine, 11 (58). Extraido el 02 de Junio de 2007 desde http://www.phrack.org/issues.html?issue=58&id=5 [8] Grugq. (s.f.). Cheating the ELF . Extraido el 04 de Marzo de 2006 desde http://m4dch4t.effraie.org/coding/Cheating_elf.pdf [9] Haungs, M. (1998). Extending Sim286 to the Intel386 Architecture with 32-bit processing and Elf Binary input (p. 10-17). Extraido el 12 de Mayo de 2006 desde http://www.cs.ucdavis.edu/~haungs/paper/paper.html [10] Hodson, D.(2004). ELF: A fairytale for viruses . Trabajo presentado en RuxCon 2004 conference, Julio 10-11, Sydney, Australia.
  43. 44. [11] Johnson, R. (2004). Hooking the Linux ELF Loader . Trabajo presentado en Toorcon 2004 conference, Septiembre 24-26, San Diego, California, USA. [12] Lu, H. (1995). ELF: From The Programmer's Perspective . NY 10604, USA. [13] Starzetz, P. (2004). Linux kernel binfmt_elf loader vulnerabilities . [14] TIS Committee. (1995). Executable and Linking Format (ELF) Specification v. 1.2 . Extraido el 22 de Enero de 2005 desde http://www.x86.org/ftp/manuals/tools/elf.pdf REFERENCIAS (Cont.)
  44. 45. A. Alejandro Hernández Hernández [email_address] http://www.genexx.org/nitrous/ Gracias !

×