63

EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección
Page 2: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

EJECUCIÓN DE CÓDIGOARBITRARIO MEDIANTECADENAS DE FORMATO

Page 3: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

OBJETIVOS

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

● Conocer algunas formas de ataque utilizadas por los intrusos para explotar una vulnerabilidad.

Page 4: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

ORDEN DEL DÍA

● Fundamentos– Programas - Procesos– Pila – Funciones -Invocación– Cadenas de formato

● Inyección de cadenas de formato– Para leer memoria arbitrarias– Para escribir en memoria arbitraria– Para ejecutar código arbitrario

Page 5: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PROGRAMAS

● Lenguaje de alto nivel– Compilador

● Lenguaje ensamblador – Ensamblador

●Mnemonics●Opcode

● Lenguaje de máquina

Page 6: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

ORGANIZACIÓN DE UN PROCESO EN MEMORIA

● Segmento de texto (r-x)– Código

● Segmento de datos (rw-)– Variables estáticas

● Segmento de pila (rwx)– Variables locales automáticas

Page 7: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

ÁREAS DEL SEGMENTO DE PILA

● Heap– Memoria dinámica

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

● Argumentos● Ambiente

Page 8: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

EJEMPLOint global; // Segmento de datos

int

sumar (int i, int j)

{

return i + j;

}

int

main ()

{

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

}

Page 9: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

MEMORIA

Page 10: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

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

Page 11: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

TALLER 1

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

Page 12: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

TALLER 1

141

Page 13: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

SEPARATION OF CONCERNS

● Edsger Dijkstra

● Programación Estructurada

–Funciones, Procedimientos● Programación Orientada a Objetos

– Objetos

● Programación Orientada a Aspectos– Aspecto

Page 14: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

FUNCIONESint global;

int sumar (int i, int j)

{

return i + j;

}

int main ()

{

int resultado = sumar (1, 2);

resultado = sumar (3, 4);

}

Page 15: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

LOCALIZACIÓN DE FUNCIONES

SEGMENTO DE TEXTO987 función SUMAR6543 función MAIN21

1 2 3 4 5 6 7 8

Page 16: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DURACIÓN DE VARIABLES

SEGMENTO DE DATOS98 global

76 resultado

543 i j

21

1 2 3 4 5 6 7 8

Page 17: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

INVOCACIÓN DE FUNCIONES

● ¿Que problemas hay con las funciones?– Devolver el control a la función invocadora– Asignar memoria a las variables locales– Asignar memoria a los parámetros

Page 18: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

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

existir 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

Page 19: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyecció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– Parámetros– Variables locales– Valor de retorno– Dirección de retorno

Page 20: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

INVOCACIÓN DE FUNCIONESESP 00 00 00 42

EBP 00 00 00 66

EIP ?? ?? ?? ??

343842 ?? ?? ?? ?? Variable local46 ?? ?? ?? ?? Variable local50 ?? ?? ?? ?? Variable local54 ?? ?? ?? ?? Variable local58 ?? ?? ?? ?? Variable local62 ?? ?? ?? ?? Variable local66 86 00 00 0070 10 10 00 0074 ?? ?? ?? ?? Parametro78 ?? ?? ?? ?? Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Apuntador de marco de la función invocadoraDirección de retorno a la función invocadora

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 21: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

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

Page 22: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

EJEMPLO EN C

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

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

Page 23: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

EJEMPLO EN ASM

(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.

Page 24: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

ANTES DE (a)ESP 82 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246505458626670747882 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 25: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DESPUES DE (a)ESP 70 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246505458626670 01 00 00 00 Parametro74 02 00 00 00 Parametro78 03 00 00 00 Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 26: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DESPUES DE (b) y (c)ESP 66 00 00 00

EBP 86 00 00 00

EIP 80 83 04 08

343842465054586266 96 83 04 0870 01 00 00 00 Parametro74 02 00 00 00 Parametro78 03 00 00 00 Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Dirección de retorno a la función invocadora

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 27: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

EJEMPLO EN ASM (AT&T)

(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.

Page 28: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DESPUES DE (d)ESP 62 00 00 00

EBP 86 00 00 00

EIP 80 83 04 08

3438424650545862 86 00 00 0066 96 83 04 0870 01 00 00 00 Parametro74 02 00 00 00 Parametro78 03 00 00 00 Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadoraDirección de retorno a la función invocadora

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 29: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DESPUES DE (e)ESP 42 00 00 00

EBP 62 00 00 00

EIP 80 83 04 08

343842 ?? ?? ?? ?? Variable local buffer2[12]46 ?? ?? ?? ??50 ?? ?? ?? ??54 ?? ?? ?? ?? Variable local buffer1[5]58 ?? ?? ?? ??62 86 00 00 0066 96 83 04 0870 01 00 00 00 Parametro74 02 00 00 00 Parametro78 03 00 00 00 Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadoraDirección de retorno a la función invocadora

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 30: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

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– movl %ebp,%esp– popl %ebp

Page 31: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DESPUES DE (f)ESP 66 00 00 00

EBP 86 00 00 00

EIP 80 83 04 08

343842 ?? ?? ?? ?? Variable local buffer2[12]46 ?? ?? ?? ??50 ?? ?? ?? ??54 ?? ?? ?? ?? Variable local buffer1[5]58 ?? ?? ?? ??62 86 00 00 0066 96 83 04 0870 01 00 00 00 Parametro74 02 00 00 00 Parametro78 03 00 00 00 Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadoraDirección de retorno a la función invocadora

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 32: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

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

Page 33: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

DESPUES DE (g)ESP 70 00 00 00

EBP 86 00 00 00

EIP 96 83 04 08

343842 ?? ?? ?? ?? Variable local buffer2[12]46 ?? ?? ?? ??50 ?? ?? ?? ??54 ?? ?? ?? ?? Variable local buffer1[5]58 ?? ?? ?? ??62 86 00 00 0066 96 83 04 0870 01 00 00 00 Parametro74 02 00 00 00 Parametro78 03 00 00 00 Parametro82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadoraDirección de retorno a la función invocadora

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 34: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

¿QUE SE ALMACENA EN LA PILA?

● Parámetros● Dirección de retorno● Dirección de las variables anteriores● Variables locales

Page 35: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

LENGUAJES

Mecanismos estandarizados de comunicación con el computador● Objetivos

– Manipulación de datos– Presentación de información– Definir lenguajes– Ejecutar sentencias de comandos– Especificar el formato de un texto

Page 36: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

CADENAS DE FORMATO

● “Millos es %d veces campeon\n”● “Millos es %s a Nacional\n”

Page 37: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

CADENAS DE FORMATO

printf (“%s %d %s\n”..

Parámetros de formatoCOMO TRATAR LOS DEMÁS

PARÁMETROS

Page 38: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

CONTENIDO SINTÁCTICO

Las expresiones tienen:– Contenido constante

● Definidas por el programador● Definidas por el usuario

– Contenido sintáctico● Definido por el programador● Definido por el usuario

● “Millos es %d veces campeon\n”

Page 39: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

LEER POSICIONES ARBITRARIAS DE MEMORIA

Page 40: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

USO PREVISTO DE PRINTF(A)

int x = 13;printf (“%d\n”, x);

(B)char* y = “Millos campeon”;printf (“%s”, y);

(D)printf (y);

(C)printf (“%s %d veces\n”, y, x);

Page 41: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA EN (A)ESP 58 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246505458 70 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato62 13 00 00 00 Parametro 2: Entero que se debe imprimir66 ?? ?? ?? ?? Variable local70 % d \ n Variable local: Definición de la cadena de formato74 ?? ?? ?? ?? Variable local78 ?? ?? ?? ?? Variable local82 ?? ?? ?? ?? Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 42: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA EN (B)ESP 58 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246505458 70 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato62 78 00 00 00 Parametro 2: Cadena que se debe imprimir66 ?? ?? ?? ?? Variable local70 % s \ n Variable local: Definición de la cadena de formato74 ?? ?? ?? ?? Variable local78 M i l l Variable local82 o s . . Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 43: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA EN (C)ESP 54 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

343842465054 70 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato58 78 00 00 00 Parametro 2: Cadena que se debe imprimir62 13 00 00 00 Parametro 3: Parametro que se debe imprimir66 ?? ?? ?? ?? Variable local70 % s % Variable local: Definición de la cadena de formato74 d v . Variable local78 M i l l Variable local82 o s . . Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

(B)

Page 44: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA EN (D)ESP 62 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

3438424650545862 78 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato66 ?? ?? ?? ?? Variable local70 ?? ?? ?? ?? Variable local74 ?? ?? ?? ?? Variable local78 M i l l Variable local82 o s . . Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 45: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PROGRAMA VULNERABLE

intmain (int argc, char** argv){ if (argc == 2) { printf (argv[1]); printf ("\n"); }}

Page 46: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO CONS.ESP 62 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

3438424650545862 78 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato66 ?? ?? ?? ?? Variable local70 ?? ?? ?? ?? Variable local74 ?? ?? ?? ?? Variable local78 M i l l Variable local82 o s . . Variable local86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 47: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO SINTA.ESP 50 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246 66 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato50 ?? ?? ?? ?? Variable local54 ?? ?? ?? ?? Variable local58 ?? ?? ?? ?? Variable local62 M i l l Variable local: Definición de la cadena de formato66 % 0 8 x70 % 0 8 x74 % 0 8 x78 % 0 8 x82 % 0 8 x86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 48: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

SALIDA

$ ./programa "Millos"Millos$ ./programa "%08x"00000066$ ./programa "%08x.%08x.%08x.%08x.%08x"00000066.????????.????????.????????.%08x%08x

Page 49: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

Y SI......?

La primera parte de la cadena inyectada contiene una dirección

yEl parametro de formatocorrespondiente es %s

Page 50: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO SINTA.ESP 50 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246 66 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato50 ?? ?? ?? ?? Variable local54 ?? ?? ?? ?? Variable local58 ?? ?? ?? ?? Variable local62 34 00 00 00 Variable local: Definición de la cadena de formato66 % 0 8 x70 % 0 8 x74 % 0 8 x78 % 0 8 x82 % s86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 51: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

ESCRIBIR POSICIONES ARBITRARIAS DE MEMORIA

Page 52: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PARÁMETRO DE FORMATO PELIGROSO

%d Leer%s Leer%x Leer%n Escribir

Page 53: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO SINTA.ESP 50 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34 32 00 00 00 Caracteres impresos: 8 + 8 + 8 + 8384246 66 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato50 ?? ?? ?? ?? Variable local54 ?? ?? ?? ?? Variable local58 ?? ?? ?? ?? Variable local62 34 00 00 00 Variable local: Definición de la cadena de formato66 % 0 8 x70 % 0 8 x74 % 0 8 x78 % 0 8 x82 % n86 ?? ?? ?? ??90 ?? ?? ?? ??

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 54: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO SINTA.ESP 50 00 00 00

EBP 86 00 00 00

EIP ?? ?? ?? ??

34384246 66 00 00 00 Parametro 1: Apuntador a la definición de la cadena de formato50 ?? ?? ?? ?? Variable local54 ?? ?? ?? ?? Variable local58 ?? ?? ?? ?? Variable local62 90 00 00 00 Variable local: Definición de la cadena de formato66 % 0 8 x70 % 0 8 x74 % 0 8 x78 % 0 8 x82 % n86 ?? ?? ?? ??90 32 00 00 00

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 55: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

EJECUTAR CÓDIGO ARBITRARIO

Page 56: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

MISIÓN

Sobreescribir la dirección de retorno con un valor valido, es

decir que apunte a código válido

Page 57: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PROBLEMAS

● Sobreescribir el valor de retorno● Con un valor válido

– El valor que se escribe esta en función de los caracteres procesados.

– Las direcciones de memoria generalmente son del orden de los 4 mil millones. Se necesitan 4 mil millones de caracteres procesados.

Page 58: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

SOLUCIÓN

AlineaciónEscribir por bytes no por palabras

Page 59: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO SINTA.

22 38 00 00 00 Parametro 1: Apuntador a la cadena de formato26 ?? ?? ?? ?? Variable local30 ?? ?? ?? ?? Variable local34 ?? ?? ?? ?? Variable local38 90 00 00 00 Variable local: Definición de la cadena de formato42 91 00 00 0046 92 00 00 0050 93 00 00 0054 % 0 8 x58 % 0 8 x62 % 0 8 x66 % 0 8 x70 .. .. % n Relleno para alcanzar valor deseado + par. formato74 .. .. % n Relleno para alcanzar valor deseado + par. formato78 .. .. % n Relleno para alcanzar valor deseado + par. formato82 .. .. % n Relleno para alcanzar valor deseado + par. formato86 ?? ?? ?? ??90 X Y Z W

Puntero de marco de funcion invocadora de función invocadoraDirección de retorno a la función invocadora de función invocadora

Page 60: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

OTRAS PREGUNTAS

● ¿A donde apunta XYZW?– A código valido

● ¿Donde esta el código valido?– En los rellenos de la cadena de formato– ¿y que pasa con los %n intermedios?– Las instrucciones del relleno se tienen

que brincar

Page 61: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

PILA CON CONTENIDO SINTA.

90 91 92 93 94 95 96X ? ? ?

Y ? ? ?Z ? ? ?

W ? ? ?

X Y Z W

Page 62: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

CONTROLES

● Cuando se construyan programas y se utilicen funciones como printf o cualquier otra que reciba cadenas de formato, nunca permitir la parametrización de la cadena por el usuario. Es decir, siempre especificar cadena de formato.

● Utilizar herramientas de análisis estático para encontrar estos problemas en código ya existente

Page 63: EJECUCIÓN DE CÓDIGO ARBITRARIO MEDIANTE CADENAS DE FORMATO · ORDEN DEL DÍA Fundamentos – Programas - Procesos – Pila – Funciones -Invocación – Cadenas de formato Inyección

Nombre: Juan Rafael Álvarez Correa

Email: [email protected]

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

Teléfono celular: 3006551750

Teléfono oficina: 574-3522627