• Like
  • Save

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,226
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. COMO PENETRAR UN SISTEMA POR MEDIO DE DESBORDAMIENTO DE BUFFER
  • 2. OBJETIVO Entender los aspectos técnicos, por los cuales un intruso puede ingresar a un sistema y tomar el control de éste
  • 3. AGENDA Programas ● Memoria ● Pila ● Funciones ● Etapas de invocación ● Arreglos y buffers ● Desbordamiento de buffer ● Impacto ● Tecnicas de protección ●
  • 4. PROGRAMAS Lenguaje de alto nivel ● – Compilador Lenguaje ensamblador ● – Ensamblador ● Mnemonics ● Opcode Lenguaje de máquina ●
  • 5. ORGANIZACIÓN DE UN PROCESO EN MEMORIA Segmento de texto (r-x) ● – Código Segmento de datos (rw-) ● – Variables globales – Variables estáticas Segmento de pila (rwx) ●
  • 6. AREAS DEL SEGMENTO DE PILA Heap ● – Memoria dinámica Pila ● – Direcciones de retorno – Variables locales – Parámetros Argumentos ● Ambiente ●
  • 7. EJEMPLO int global; // Segmento de datos int sumar (int i, int j) { return i + j; } int main () { int resultado = sumar (1, 2); // Segmento de pila }
  • 8. MEMORIA
  • 9. LA PILA COMO TAD LIFO: Last In First Out ● Ultimo objeto ubicado en ella es el ● primero en salir Operaciones: ● – PUSH: Añade un elemento al tope de la pila – POP: Retira el elemento del tope de la pila
  • 10. TALLER 1 PUSH 1 ● PUSH 2 ● POP ● PUSH 2 ● PUSH 1 ● POP ● POP ● PUSH 4 ● PUSH 1 ●
  • 11. TALLER 1 1 4 1
  • 12. SEPARATION OF CONCERNS Edsger Dijkstra ● Programación Estructurada ● – Funciones, Procedimientos Programación Orientada a Objetos ● Objetos – Programación Orientada a Aspectos ● Aspecto –
  • 13. FUNCIONES int global; int sumar (int i, int j) { return i + j; } int main () { int resultado = sumar (1, 2); resultado = sumar (3, 4); }
  • 14. LOCALIZACIÓN DE FUNCIONES SEGMENTO DE TEXTO 9 8 7 función SUMAR 6 5 4 3 función MAIN 2 1 1 2 3 4 5 6 7 8
  • 15. DURACIÓN DE VARIABLES SEGMENTO DE DATOS 9 8 global 7 6 resultado 5 4 3 i j 2 1 1 2 3 4 5 6 7 8
  • 16. INVOCACIÓN DE FUNCIONES ¿Que problemas hay con las funciones? ● Devolver el control a la función invocadora – Si las variables locales estuvieran en el – segmento de datos: ¿Que pasaria con esa memoria si la funcion no se ● invoca? ¿Que pasaria con la recursividad de funciones? ● ¿Que pasaria con los hilos? ●
  • 17. INVOCACIÓN DE FUNCIONES Soluciones ● Las variables locales solo deben existir – mientras la función este en ejecución Por cada invocación a la función, deben – exisitir diferentes copias de sus variables locales Siempre que se invoque la función se debe – almacenar la dirección a la cual se debe retornar una vez termine la función
  • 18. INVOCACIÓN DE FUNCIONES Cada que se invoque una función se ● reservará un espacio en la pila para que en ella se almacene todo lo que se necesita Parametros – Variables locales – Valor de retorno – Dirección de retorno –
  • 19. INVOCACIÓN DE FUNCIONES AREA DE PILA 1VALOR DE RETORNO SUMAR 2VARIABLES LOCALES 3DIRECCIÓN DE RETORNO 4VALOR DE RETORNO MAIN 5VARIABLES LOCALES 6DIRECCIÓN DE RETORNO
  • 20. ETAPAS DE INVOCACIÓN Etapa 1 - Invocación ● (a) Almacenamiento de parámetros (b) Almacenamiento de dirección de retorno (c) Cambio del PC a la dirección de la función Etapa 2 - Prólogo ● (d) Almacenamiento de dirección de frame anterior (e) Separar espacio para almacenar variables locales Etapa 3 - Epílogo ● (f) Disponibilidad de variables locales anteriores (g) Retornar el control a la función anterior
  • 21. EJEMPLO void funcion (int a, int b, int c) { char buffer1[5]; char buffer2[10]; } int main () { funcion(1,2,3); }
  • 22. EJEMPLO – TALLER 2 (gdb) disas main Dump of assembler code for function main: 0x8048388 <main>: push %ebp 0x8048389 <main+1>: mov %esp,%ebp 0x804838b <main+3>: push $0x3 (a) 0x804838d <main+5>: push $0x2 0x804838f <main+7>: push $0x1 (b) y (c) 0x8048391 <main+9>: call 0x8048380 <funcion> 0x8048396 <main+14>: add $0xc,%esp 0x8048399 <main+17>: leave 0x804839a <main+18>: ret 0x804839b <main+19>: nop End of assembler dump.
  • 23. RESULTADO AREA DE PILA 1 5 9 13 17 21 SP -> 25 08 04 83 96 29 00 00 00 01 MAIN 33 00 00 00 02 37 00 00 00 03 BP -> 41 ? ? ? ?
  • 24. EJEMPLO – TALLER 2 (gdb) disas funcion Dump of assembler code for function funcion: (d) 0x8048380 <funcion>: push %ebp (e) 0x8048381 <funcion+1>: mov %esp,%ebp (e) 0x8048383 <funcion+3>: sub $0x14,%esp 0x8048386 <funcion+6>: leave 0x8048387 <funcion+7>: ret End of assembler dump.
  • 25. RESULTADO AREA DE PILA SP -> 1 FUNCION 5 9 13 17 BP -> 21 00 00 00 41 BP 25 08 04 83 96 DR MAIN 29 00 00 00 01 PAR1 33 00 00 00 02 PAR2 37 00 00 00 03 PAR3 41 ? ? ? ?
  • 26. EJEMPLO – TALLER 3 (gdb) disas funcion Dump of assembler code for function funcion: 0x8048380 <funcion>: push %ebp 0x8048381 <funcion+1>: mov %esp,%ebp 0x8048383 <funcion+3>: sub $0x14,%esp (f) 0x8048386 <funcion+6>: leave 0x8048387 <funcion+7>: ret End of assembler dump. Leave ● – Igualar el SP al BP Hacer POP y poner ese valor en el BP –
  • 27. RESULTADO AREA DE PILA 1 FUNCION 5 9 13 17 21 00 00 00 41 BP SP -> 25 08 04 83 96 DR MAIN 29 00 00 00 01 PAR1 33 00 00 00 02 PAR2 37 00 00 00 03 PAR3 BP -> 41 ? ? ? ?
  • 28. EJEMPLO – TALLER 4 (gdb) disas funcion Dump of assembler code for function funcion: 0x8048380 <funcion>: push %ebp 0x8048381 <funcion+1>: mov %esp,%ebp 0x8048383 <funcion+3>: sub $0x14,%esp 0x8048386 <funcion+6>: leave (g) 0x8048387 <funcion+7>: ret End of assembler dump. Ret ● – Hacer POP y poner ese valor en el PC
  • 29. RESULTADO AREA DE PILA 1 FUNCION 5 9 13 17 21 00 00 00 41 BP 25 08 04 83 96 DR MAIN SP -> 29 00 00 00 01 PAR1 33 00 00 00 02 PAR2 37 00 00 00 03 PAR3 BP -> 41 ? ? ? ?
  • 30. ¿QUE SE ALMACENA EN LA PILA? Parametros ● Dirección de retorno ● Dirección de las variables anteriores ● Variables locales ●
  • 31. ARREGLOS Agrupación ● Consecutiva ● Mismo tipo ● Recorrido por medio de ● – Apuntadores – ¿Referencias? ¿Verificación de limites? ●
  • 32. DESBORDAMIENTO DE BUFFER Sobrepasar el limite ● ● Escritura en posiciones adyacentes al buffer, es decir, fuera de los limites
  • 33. TALLER FINAL Que pasaría si el buffer que trataramos de ● escribir en el primer ejemplo fuera el siguiente: – 01-02-03-04-05-06-07-08-09-10- 11-12-13-14-15-16-17-18-19-20- 21-22-23-24-00-00-00-01
  • 34. RESULTADO AREA DE PILA SP -> 1 01 02 03 04 FUNCION 5 05 06 07 08 9 09 10 11 12 13 13 14 15 16 17 17 18 19 20 BP -> 21 21 22 23 24 BP 25 00 00 00 01 DR MAIN 29 00 00 00 01 PAR1 33 00 00 00 02 PAR2 37 00 00 00 03 PAR3 41 ? ? ? ?
  • 35. PREGUNTAS ¿Que se sobreescribiría?
  • 36. RESPUESTA LA DIRECCIÓN DE RETORNO ¿y esto que significa?
  • 37. RESPUESTA Desbordando un buffer puedo cambiar el flujo de ejecución de un programa ¿pero a dónde?
  • 38. RESPUESTA A instrucciones maliciosas que se encuentran en el mismo buffer ¿y cuál es el impacto?
  • 39. RESPUESTA Se pueden ejecutar instrucciones arbitrarias dentro de un proceso
  • 40. TECNICAS DE PROTECCIÓN Segmentos de pila no ejecutables ● ● Verificación de limites
  • 41. Nombre: Juan Rafael Alvarez Correa Email: juan.alvarez@fluidsignal.com Web: http://people.fluidsignal.com/~jalvarez Telefono celular: 3006551750 Telefono oficina: 574-3522627