como penetrar un sistema por medio de desbordamiento de buffer€¦ · desbordamiento de buffer....

Post on 09-Sep-2020

16 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

COMO PENETRAR UN SISTEMA POR MEDIO DE DESBORDAMIENTO DE BUFFER

OBJETIVO

Entender los aspectos técnicos, por los cuales un intruso puede ingresar a un sistema y tomar el control

de éste

AGENDA

● Programas● Memoria● Pila● Funciones● Etapas de invocación● Arreglos y buffers● Desbordamiento de buffer● Impacto● Tecnicas de protección

PROGRAMAS

● Lenguaje de alto nivel– Compilador

● Lenguaje ensamblador – Ensamblador

●Mnemonics●Opcode

● Lenguaje de máquina

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)

AREAS DEL SEGMENTO DE PILA

● Heap– Memoria dinámica

● Pila– Direcciones de retorno– Variables locales– Parámetros

● Argumentos● Ambiente

EJEMPLOint global; // Segmento de datos

int

sumar (int i, int j)

{

return i + j;

}

int

main ()

{

int resultado = sumar (1, 2); // Segmento de pila

}

MEMORIA

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

TALLER 1

● PUSH 1● PUSH 2● POP● PUSH 2● PUSH 1● POP● POP● PUSH 4● PUSH 1

TALLER 1

141

SEPARATION OF CONCERNS

● Edsger Dijkstra

● Programación Estructurada

–Funciones, Procedimientos● Programación Orientada a Objetos

– Objetos

● Programación Orientada a Aspectos– Aspecto

FUNCIONESint global;

int sumar (int i, int j)

{

return i + j;

}

int main ()

{

int resultado = sumar (1, 2);

resultado = sumar (3, 4);

}

LOCALIZACIÓN DE FUNCIONES

SEGMENTO DE TEXTO987 función SUMAR6543 función MAIN21

1 2 3 4 5 6 7 8

DURACIÓN DE VARIABLES

SEGMENTO DE DATOS98 global

76 resultado

543 i j

21

1 2 3 4 5 6 7 8

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?

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

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

INVOCACIÓN DE FUNCIONES

AREA DE PILA

1VALOR DE RETORNO

SU

MA

R

2VARIABLES LOCALES3DIRECCIÓN DE RETORNO4VALOR DE RETORNO

MA

IN

5VARIABLES LOCALES6DIRECCIÓN DE RETORNO

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

EJEMPLO

void funcion (int a, int b, int c){ char buffer1[5]; char buffer2[10];}

int main (){ funcion(1,2,3);}

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

0x804838d <main+5>: push $0x2 (a)0x804838f <main+7>: push $0x1

0x8048391 <main+9>: call 0x8048380 <funcion> (b) y (c)0x8048396 <main+14>: add $0xc,%esp

0x8048399 <main+17>: leave

0x804839a <main+18>: ret

0x804839b <main+19>: nop

End of assembler dump.

RESULTADOAREA DE PILA

159131721

SP -> 25 08 04 83 9629 00 00 00 01

MA

IN33 00 00 00 0237 00 00 00 03

BP -> 41 ? ? ? ?

EJEMPLO – TALLER 2

(gdb) disas funcion

Dump of assembler code for function funcion:

0x8048380 <funcion>: push %ebp (d)0x8048381 <funcion+1>: mov %esp,%ebp (e)0x8048383 <funcion+3>: sub $0x14,%esp (e)0x8048386 <funcion+6>: leave

0x8048387 <funcion+7>: ret

End of assembler dump.

RESULTADOAREA DE PILA

SP -> 1

FU

NC

ION

591317

BP -> 21 00 00 00 41

MA

IN

BP25 08 04 83 96 DR29 00 00 00 01 PAR133 00 00 00 02 PAR237 00 00 00 03 PAR341 ? ? ? ?

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

0x8048386 <funcion+6>: leave (f)0x8048387 <funcion+7>: ret

End of assembler dump.

● Leave– Igualar el SP al BP– Hacer POP y poner ese valor en el BP

RESULTADOAREA DE PILA

1

FU

NC

ION

59131721 00 00 00 41

MA

IN

BPSP -> 25 08 04 83 96 DR

29 00 00 00 01 PAR133 00 00 00 02 PAR237 00 00 00 03 PAR3

BP -> 41 ? ? ? ?

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

0x8048387 <funcion+7>: ret (g)End of assembler dump.

● Ret– Hacer POP y poner ese valor en el PC

RESULTADOAREA DE PILA

1

FU

NC

ION

59131721 00 00 00 41

MA

IN

BP25 08 04 83 96 DR

SP -> 29 00 00 00 01 PAR133 00 00 00 02 PAR237 00 00 00 03 PAR3

BP -> 41 ? ? ? ?

¿QUE SE ALMACENA EN LA PILA?

● Parametros● Dirección de retorno● Dirección de las variables anteriores● Variables locales

ARREGLOS● Agrupación● Consecutiva● Mismo tipo

● Recorrido por medio de– Apuntadores– ¿Referencias?

● ¿Verificación de limites?

DESBORDAMIENTO DE BUFFER

● Sobrepasar el limite● Escritura en posiciones adyacentes al buffer, es decir, fuera de los limites

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

RESULTADOAREA DE PILA

SP -> 1 01 02 03 04

FU

NC

ION

5 05 06 07 089 09 10 11 1213 13 14 15 1617 17 18 19 20

BP -> 21 21 22 23 24

MA

IN

BP25 00 00 00 01 DR29 00 00 00 01 PAR133 00 00 00 02 PAR237 00 00 00 03 PAR341 ? ? ? ?

PREGUNTAS

¿Que se sobreescribiría?

RESPUESTA

LA DIRECCIÓN DE RETORNO

¿y esto que significa?

RESPUESTA

Desbordando un buffer puedo cambiar el flujo de

ejecución de un programa

¿pero a dónde?

RESPUESTA

A instrucciones maliciosas que se encuentran en el

mismo buffer¿y cuál es el impacto?

RESPUESTA

Se pueden ejecutar instrucciones arbitrarias

dentro de un proceso

TECNICAS DE PROTECCIÓN

● Segmentos de pila no ejecutables● Verificación de limites

Nombre: Juan Rafael Alvarez Correa

Email: juan.alvarez@fluidsignal.com

Web: http://people.fluidsignal.com/~jalvarez

Telefono celular: 3006551750

Telefono oficina: 574-3522627

top related