Vous êtes sur la page 1sur 4

MANUAL DE EXPLOITS

ndice
1- Introduccin 2- Tipologa de exploits 2.1 Buffer Overflow 2.2 Condicin de carrera 2.3 Error de formato de cadena 2.4 Cross Site Scripting (XSS) 2.5 Inyeccin SQL 2.6 Inyeccin de caracteres (CRLF) 2.7 Denegacin de servicio (DoS) 2.8 Ventanas engaosas

1- Introduccin
Un exploit es un pequeo programa malicioso que aprovecha una vulnerabilidad de un programa informtico, generalmente causada por un bug en la programacin del mismo. La funcin de estos programas suele ser la de violar las medidas de seguridad del programa que atacan, utilizando para ello el bug , accediendo a l de forma no autorizada para obtener algn tipo de beneficio del mismo. Por ejemplo, en los servidores FTP, que es un protocolo utilizado para enviar y recoger ficheros en remoto, se ha descubierto una vulnerabilidad cuando ste est configurado para redireccionar conexiones FTP a otros ordenadores que estn en la misma red de rea local. As, aunque un firewall pudiera evitar que los buscadores de puertos ataquen a otros ordenadores de esta LAN, se puede explotar este fallo del servidor FTP para buscar puertos. Una exploit es un programa que explota una vulnerabilidad en concreto, es decir, no existe un exploit universal, sino que por cada una de las vulnerabilidades que se van descubriendo, van surgiendo nuevos exploits. Adems, los exploits dependen de cada sistema operativo y su configuracin, as como de los programas que se estn ejecutando, la versin de los mismos y su configuracin. Segn el mbito de actuacin de los exploits podemos hacer una primera clasificacin en dos grandes grupos: Exploits locales : stos son aquellos que actan en la maquina en la que estn. Exploits remotos : stos son aquellos que se ejecutan desde la mquina atacante de manera que se sirven de algn servicio conectado a la red que tenga una vulnerabilidad para poder

obtener algn tipo de beneficio como puede ser acoplar una Shella un puerto no privilegiado. Un puerto no privilegiado es cualquiera por encima del 1024 , ya que los anteriores estn reservados para el sistema y para el usuario root, y slo se podrn usar estos puertos si el exploit consigue actuar como root. Para explotar una vulnerabilidad, un usuario experimentado, generalmente se hace sus propios programas, que habitualmente estarn escritos en los lenguajes C, C++, Perl o Sh. Cuando buscamos un exploit por internet y nos lo bajamos, podemos encontrarnos con una versin compilada o una sin compilar. En el primer caso, podemos hacer uso de la misma directamente, en el segundo de los casos el primer paso que tendremos que hacer ser compilar el cdigo fuente que tenemos, y para ello necesitaremos un compilador del lenguaje en el que esta escrito el exploit. Hay ocasiones en las que la compilacin no es una tarea inmediata, ya que algunos de estos cdigos fuente no estn totalmente limpios, son los llamados exploits capados , en estos casos necesitamos tener algunas nociones del lenguaje de programacin para corregirlo y compilarlo.

2-TIPOLOGA DE EXPLOITS
Como hemos visto los exploits aprovechan las vulnerabilidades que presentan ciertas aplicaciones. Estas vulnerabilidades pueden ser agrupadas segn el tipo de bug que las produzca, por lo tanto tambin podemos agrupar a los exploits segn el tipo de vulnerabilidad que exploten: Buffer Overflow o desbordamiento de buffer Race condition o de condicin de carrera Format string bugs o errores de formato de cadena SQL injection Inyeccin de caracteres (CRLF) Denegacin de servicio Window spoonfing o ventanas engaosas.

2.1 Buffer Overflow


Un buffer overflow o desbordamiento de buffer es un error de sistema causado por un defecto de programacin. Un programa tiene su rea de cdigo ejecutable, y organiza su espacio de memoria utilizando una parte para almacenamiento de los datos que el programa recibe y que sern guardados temporalmente en la memoria. Cuando en la entrada se introduce un volumen de datos demasiado grande, mayor de lo que el programador pudo prever, y se pretende escribir sobre un rea de memoria que no es suficientemente grande para alojarlos, se sobrescribirn otras zonas de memoria, provocando lo que hemos llamado desbordamiento de buffer. Este fallo puede estar producido porque el programador no introdujo en su cdigo las correspondientes comprobaciones entre la

capacidad de buffer y los datos que se pretender alojar en el mismo. Como consecuencia de este error se produce una excepcin de acceso a memoria y la terminacin del programa en ejecucin.

El problema real viene cuando el desbordamiento sobrescribe datos vlidos que ya estaban guardados en memoria. Si adems tenemos en cuenta que en las arquitecturas comunes de ordenadores el espacio de memoria dedicado a los datos y al programa estn reservados de forma consecutiva, es decir, que no hay separacin entre ambos, nos podemos dar cuenta de que entre los datos perdidos por la sobreescritura puede haber fragmentos de rutinas o procedimientos necesarios, con lo que se producir un error en el programa. El fallo de seguridad nace cuando un usuario malintencionado provoca este desbordamiento de buffer mediante el envo de datos que incluyen porciones de cdigo en el espacio reservado para las variables locales y despus modifica la direccin de regreso o a donde regresa la informacin para que apunte a la posicin de memoria donde hemos introducido nuestro cdigo. Este cdigo puede ser lo que se conoce como un shellcode , es decir, un conjunto de rdenes programadas generalmente en lenguaje ensamblador que se inyectan en la pila para conseguir que la mquina en la que se reside se ejecute la operacin que se haya programado, que generalmente suele ser el lanzamiento de un intrprete de comandos como el bash, sh, etc.

2.2 Condicin de carrera


Otro tipo de vulnerabilidad bastante frecuente es la que se conoce como condicin de carrera o race condition . Estos errores son producidos en situaciones de concurrencia de varios hilos en las que se compite por los recursos que proporciona el sistema operativo. Bajo estas condiciones hay ocasiones en las que se presentan situaciones en las que dos o ms procesos tienen que leer o escribir en un rea comn que comparten. En estos casos se deberan tomar las precauciones necesarias para que las acciones llevadas a cabo por cada recurso fuesen atmicas, sin embargo hay ocasiones en las que no lo son, ocasionando datos inconsistentes o dejando en ocasiones abierto un intervalo de tiempo en el que un atacante podra obtener privilegios, leer y escribir sobre ficheros protegidos. Un ejemplo muy sencillo de lo que es una condicin de carrera lo vemos ahora:

Cdigo: [Seleccionar]

Var x=10 Sub decrementar If x-} } { {

(x>0)

Si tenemos una rutina como la anterior, donde x es una variable global compartida, si un

nico proceso es el que la ejecuta, la variable no tomar nunca un valor negativo, sin embargo en un entorno concurrente, en el que varios procesos ejecutan la misma rutina compitiendo por el tiempo de CPU, si un proceso no iniciase la ejecucin de la misma hasta que otro no finalice su ejecucin no habra problemas. Pero podra darse la situacin en la que un proceso P1 inicie la ejecucin de la rutina para un valor de x=1, P1 realizara la comprobacin x>0 que se cumple, en ese momento se interrumpe la ejecucin de P1 para dar paso al proceso P2, el cual tambin comprueba el valor de x, que no ha cambiado porque la ejecucin de proceso P1 ha sido detenido justo antes de cambiar el valor de x, por lo tanto la condicin de x>0 tambin se cumple y se ejecuta el cdigo contenido en la comprobacin, con lo que x toma el valor 0. El proceso P2 termina su ejecucin y devuelve el turno de ejecucin de P1 que retoma la ejecucin en el mismo punto en el que se par, es decir, decrementando la variable x, ya que la comprobacin la realizo anteriormente, con lo que el final de esta rutina devuelve un valor negativo en la variable x. Este es un ejemplo muy bsico para entender que es una vulnerabilidad de condicin de carrera.

Vous aimerez peut-être aussi