EXPLOITS







Archivos Exploits


¿Cuántas veces habéis leído grupos de noticias o listas de correo y visto mensajes que decían "enséñame hacking", o que preguntaban "Cómo puedo entrar aquí"?. A menudo parece que la persona que pregunta no entiende los fundamentos de las vulnerabilidades y de los exploits. La finalidad de esta Guía es explicar qué son las vulnerabilidades y los exploits y cómo están relacionados con la seguridad informática.

Comencemos con un ejemplo. Supongamos que estás tratando de vender algo por teléfono. Primero comienzas llamando a diversos teléfonos, y sigues llamando hasta que alguna persona te contesta, no un contestador automático, sino una persona de carne y hueso. Entonces si la persona que responde habla tu misma lengua y puede entenderte, tratarás de vender el producto. Muchas personas te colgarán, pero quizás alguien te compre algo... ¡bang! ¡Has puntuado!

En esta Guía aprenderás:


Qué es una vulnerabilidad

Qué es un exploit

Cómo buscar vulnerabilidades



--------------------------------------------------------------------------------

Pero ¿qué tiene que ver todo esto con el hacking? Imagina que tu marcador telefónico es un buscador de puertos en Internet. Algunos ordenadores no responderán. Quizás un cortafuegos está bloqueando los puertos que estás buscando. Otros servidores responderán y en este punto puede, sólo puede, que hayas encontrado un ordenador vulnerable.



--------------------------------------------------------------------------------

Nota para principiantes: ¿Qué son esos 'puertos' de los que estamos hablando? Es un número utilizado para identificar un servicio en un servidor de Internet. Por esta razón a menudo son llamados puertos 'TCP/IP' (Protocolo de Control de Transferencia/ Protocolo Internet), para distinguirlos de otras clases de puertos de ordenadores, como los de los modems, los de las impresoras, etc. Cada ordenador conectado a Internet se identifica con una dirección IP como por ejemplo 'victima.cualquierisp.com'. Como cada servidor puede tener varios servicios ejecutándose, cada servicio utiliza un puerto diferente. Para contactar con cualquiera de esos puertos a través de Internet tú utilizas la dirección IP del servidor y un número de puerto- es como llamar a un número de teléfono.


--------------------------------------------------------------------------------

Ahora puede que hayas conectado al servidor, mediante telnet, por el puerto 23. Obtienes la línea de acceso, pero no sabes ninguna combinación válida de nombre de usuario/contraseña. Así que el servidor al que te has conectado "te cuelga". Después de varias horas intentándolo, te conectas a un servidor en el puerto correcto y ... ¡Tachán! Eres saludado con la línea de acceso y tú rápidamente adivinas una combinación válida nombre de usuario/contraseña. Lo siguiente que verás es la línea de ordenes. Has descubierto una vulnerabilidad- una contraseña fácil de averiguar. Así que como 'hacker bueno' que eres, envías un correo electrónico al administrador del servidor y te vas tranquilamente.



--------------------------------------------------------------------------------

Nota para principiantes: Un 'host' es un ordenador conectado a Internet. Un 'servicio' es un programa que está ejecutándose en un puerto de un servidor conectado a Internet. Cada servicio es un programa que responde a ciertas órdenes. Si das con la orden correcta, podrás conseguir alguna cosa.

El ejemplo más simple de servicio es 'chargen', el generador de caracteres (puerto 19). Si haces una conexión mediante telnet por ese puerto a un servidor que disponga de ese servicio, el programa reaccionará a esta conexión enviando una cadena de caracteres que verás repetidos en la ventana de tu programa de telnet. Todo lo que necesitas hacer es conectar a ese servicio.

Otro ejemplo de servicio es finger (puerto 79). Si ejecutas el programa finger para preguntar información de un usuario particular en un servidor determinado, y el servicio finger (o 'fingerd') está ejecutandose, y si el usuario no ha configurado el servicio finger para indicarle que ignore preguntas referidas a él o ella, obtendrás información de ese usuario.


--------------------------------------------------------------------------------

¿Qué servicios son ejecutados desde estos puertos y cómo podemos aprender más sobre ellos? Los puertos numerados del 1 al 1024 son llamados puertos 'conocidos'. Están listados en la RFC 1700 (búscala en http://www.internetnorth.com.au/keith/networking/rfc.html). Muchos de estos puertos conocidos están también listados en un fichero de tu ordenador llamado 'services'. En Win95, está en c:\windows\services; en NT, está en c:\winnt\system32\drivers\etc\services; en muchas clases de ordenadores Unix (tu cuenta shell), está en /etc/services.

Estos puertos son llamados "conocidos" porque se usan habitualmente para ciertos servicios. Por ejemplo, el puerto conocido para enviar el correo electrónico es el puerto SMTP, o puerto 25. Como se conoce, cualquiera puede enviar correo a cualquiera. A causa de que el puerto 110 es el puerto conocido para recoger el correo, todos los programas clientes saben que deben conectarse al servidor POP en el puerto 110 para recoger el correo electrónico.

Hay una excelente FAQ sobre los puertos TCP/IP en http://www.technotronic.com/tcpudp.html



--------------------------------------------------------------------------------

Aviso de puñetazo en la nariz: Hay muchas herramientas que sirven para buscar puertos, y seguramente los hackers las usan... mucho. Pero, ¿con qué propósito? En muchos casos todo lo que sucede es que el administrador de sistemas o del cortafuegos mira el fichero de logs del ordenador para ver quién intenta atacar el sitio web. Entonces decidirá si ignoran tu búsqueda o si llaman al administrador del sitio del que procede tu búsqueda de puertos. Incluso aunque (en Estados Unidos por lo menos) buscar puertos sea legal, ¡los administradores de sistemas estarán realmente enfadados contigo! Para evitar ser expulsado de tu proveedor de Internet, ¡obtén primero permiso para buscar puertos!.


--------------------------------------------------------------------------------


¿Qué es una vulnerabilidad?


--------------------------------------------------------------------------------

Una 'vulnerabilidad' es algo de un sistema informático que evitará que se pueda usar correctamente, o que permitirá que lo controlen personas no autorizadas. Hay muchos tipos de vulnerabilidades. Puede haber un error en la configuración del servicio o un error en la programación del servicio.

Un ejemplo de fallo de configuración es dejar activas las ordenes 'wiz' o 'debug' en las versiones antiguas del programa sendmail, o configurar incorrectamente los permisos en tu servidor FTP y dejar que la gente pueda coger el fichero de contraseñas. En estos casos, la vulnerabilidad no está en cómo se escribió el programa, sino en cómo está configurado. Permitir compartir ficheros en tu ordenador con Windows 95 o 98 cuando no es necesario o no ponerle contraseña a un fichero compartido, son otros ejemplos.

Ejemplos de errores de programación de servicios son el gran número de vulnerabilidades por desbordamiento de buffer que hay en los programas que ejecutan servicios de Internet. Muchos de estos problemas de desbordamiento de buffer permiten a la gente entrar y tomar el control de esos servidores (Ver "Smashing the Stack", por Aleph One, en: http://www.happyhacker.org/docs/smash.txt).


¿Qué es un exploit?


--------------------------------------------------------------------------------

Un 'exploit' es un programa o técnica que aprovecha una vulnerabilidad. Por ejemplo, la vulnerabilidad FTP-Bounce se da cuando un servidor FTP (usado para permitir a la gente enviar y recoger ficheros) se configura para redireccionar conexiones FTP a otros ordenadores. No hay realmente ninguna buena razón para permitir esta característica. Ha surgido una vulnerabilidad porque esta característica 'de salto' permite a cualquiera usarla para escanear puertos de otros ordenadores de la misma red de área local del servidor FTP. Así, aunque un cortafuegos puede evitar que los buscadores de puertos ataquen a otros ordenadores de esta LAN, se puede buscar puertos desde el servidor FTP mediante un salto.

Así, un exploit es cualquier técnica que aprovecha una vulnerabilidad para poner en práctica tus planes, en contra de los deseos del administrador de tu objetivo. Los exploits dependen de los sistemas operativos y sus configuraciones, de las configuraciones de los programas que se están ejecutando en un ordenador y de la LAN donde están.

Sistemas operativos como NT, VMS y Unix son muy diferentes, y las diferentes versiones de Unix tienen sus diferencias también. (Ejemplos de sistemas operativos UNIX son BSD, AIX, SCO, IRIX, SUN OS, Solaris y Linux). Incluso las diversas versiones de Linux son diferentes entre ellas.

Esto quiere decir que exploits que funcionan contra sistemas NT probablemente no funcionarán contra sistemas Unix, y exploits para sistemas Unix probablemente no funcionarán contra NT. Los servicios en NT son ejecutados por programas que son diferentes a los que puedes encontrar en los ordenadores de tipo Unix. Además, diferentes versiones del mismo servicio ejecutándose en un sistema operativo particular probablemente no serán vulnerables al mismo exploit, porque cada versión de un servicio es ejecutado por un programa diferente. A veces estos programas diferentes pueden tener el mismo nombre y sólo tener un diferente número de versión. Por ejemplo, sendmail 8.9.1a es diferente del 8.8.2. Muchas de estas diferencias son que la versión 8.9.1a ha sido reparada para que ninguno de los antiguos exploits funcionen en ella.

Por ejemplo, el exploit "Leshka" descrito en la Guía sobre programación avanzada en shell señala claramente que sólo funciona en versiones 8.7-8.8.2 del servicio SMTP del programa denominado 'sendmail'. Hemos observado a gran número de personas que jugando en nuestro juego de guerra hacker han tratado de ejecutar el exploit Leshka contra una versión posterior, ya reparada, de sendmail.

Así que recuerda, un exploit que funcione en un sistema operativo o servicio es improbable que funcione contra otro sistema operativo. Esto no quiere decir que sea seguro que no funciona, sino que es probable. No obstante, es casi seguro que un exploit que funcione en Win95 o NT no funcionará contra otra clase de Unix.


Cómo buscar vulnerabilidades


--------------------------------------------------------------------------------

Ahora comencemos por algún sitio en el que es improbable que te dén en los morros por mirar puertos: tu propio ordenador.

Puedes hacer esto tecleando 'netstat -a' en la línea de ordenes.

Verás algo como esto:

Conexiones activas

Proto Dirección Local Dirección Remota Estado
TCP localhost:1027 0.0.0.0:0 LISTENING
TCP localhost:135 0.0.0.0:0 LISTENING
TCP localhost:135 0.0.0.0:0 LISTENING
TCP localhost:1026 0.0.0.0:0 LISTENING
TCP localhost:1026 localhost:1027 ESTABLISHED
TCP localhost:1027 localhost:1026 ESTABLISHED
TCP localhost:137 0.0.0.0:0 LISTENING
TCP localhost:138 0.0.0.0:0 LISTENING
TCP localhost:nbsession 0.0.0.0:0 LISTENING
UDP localhost:135 *:*
UDP localhost:nbname *:*
UDP localhost:nbdatagram *:*

Hhhmm... no hay mucho que ver. La 'dirección local' (es decir, mi máquina) parece estar escuchando en los puertos 135, 137, 138, y 'nbsession' (el puerto 139... escribe 'netstat -an' para ver los números de los puertos, no los nombres de los puertos). Esto está bien... estos puertos son parte de la red Microsoft, y necesitan estar activos en la LAN a la que mi máquina está conectada.

Ahora conectamos nuestro navegador a http://www.happyhacker.org y al mismo tiempo ejecutamos una sesión de telnet en Windows y conectamos a la cuenta shell de ejemplo.com. Veamos qué sucede. A continuación se ve la salida de la orden 'netstat -a', ligeramente abreviada:

Conexiones activas

Proto Dirección Local Dirección Remota Estado
TCP localhost:1027 0.0.0.0:0 LISTENING
TCP localhost:135 0.0.0.0:0 LISTENING
TCP localhost:135 0.0.0.0:0 LISTENING
TCP localhost:2508 0.0.0.0:0 LISTENING
TCP localhost:2509 0.0.0.0:0 LISTENING
TCP localhost:2510 0.0.0.0:0 LISTENING
TCP localhost:2511 0.0.0.0:0 LISTENING
TCP localhost:2514 0.0.0.0:0 LISTENING
TCP localhost:1026 0.0.0.0:0 LISTENING
TCP localhost:1026 localhost:1027 ESTABLISHED
TCP localhost:1027 localhost:1026 ESTABLISHED
TCP localhost:137 0.0.0.0:0 LISTENING
TCP localhost:138 0.0.0.0:0 LISTENING
TCP localhost:139 0.0.0.0:0 LISTENING
TCP localhost:2508 zlliks.505.ORG:80 ESTABLISHED
TCP localhost:2509 zlliks.505.ORG:80 ESTABLISHED
TCP localhost:2510 zlliks.505.ORG:80 ESTABLISHED
TCP localhost:2511 zlliks.505.ORG:80 ESTABLISHED
TCP localhost:2514 ejemplo.com:telnet ESTABLISHED

Así, ¿qué vemos ahora? Bien, están los puertos que están escuchando en la red Microsoft, como en el primer ejemplo. Y hay también algunos nuevos puertos listados. Cuatro están conectados a 'zlliks.505.org' en el puerto 80, y uno a 'ejemplo.com' en el puerto telnet. Se corresponden a las conexiones cliente que arranqué. Bien, de esta manera sabes el nombre del ordenador en el que está el web de Happy Hacker en este momento.

Pero, ¿qué son esos números de puerto realmente altos? Bien, ¿recuerdas los puertos 'conocidos' de los que hablábamos antes? Las aplicaciones cliente, como los navegadores y los clientes telnet (los clientes son programas conectados a los servidores) necesitan usar un puerto para recibir datos, así que aleatoriamente seleccionan puertos fuera del rango de puertos 'conocidos'... por encima de 1024. En este caso, mi navegador ha abierto cuatro puertos ... del 2508 al 2511.

Ahora supón que quieres mirar los puertos de tus amigos. Es la mejor manera, porque no tendrás que preocuparte de que tu amigo haga que te echen de tu ISP porque sospecha que quieres entrar en su ordenador por la fuerza. ¿Cómo averiguar la dirección IP de tu amigo? Díle que ejecute la orden (desde la línea de ordenes del DOS) 'netstat -r'. Esto mostrará algo como esto:

C:\WINDOWS>netstat -r

Tabla de caminos

Rutas activas:

Destino de red Máscara Puerta de acceso Interfaz Métrica
0.0.0.0 0.0.0.0 198.59.999.200 198.59.999.200 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
198.59.999.0 255.255.255.0 198.59.999.200 198.59.999.200 1
198.59.999.200 255.255.255.255 127.0.0.1 127.0.0.1 1
198.59.999.255 255.255.255.255 198.59.999.200 198.59.999.200 1
224.0.0.0 224.0.0.0 198.59.999.200 198.59.999.200 1
255.255.255.255 255.255.255.255 198.59.999.200 0.0.0.0 1

Conexiones activas

Proto Dirección Local Dirección remota Estado
TCP lovely-lady:1093 mack.foo66.com:smtp ESTABLISHED

La 'puerta de acceso' y la 'interfaz' dan la dirección IP actual de tu ordenador. Si estás en una LAN, la puerta de acceso será diferente de la dirección IP de tu ordenador. Si tú o tu amigo estáis en una LAN, deberías pensarlo dos veces antes de buscaros puertos el uno al otro, o el administrador de la LAN puede darse cuenta de lo que hacéis. Aviso, los administradores de sistemas tienen un gran arsenal de larts disponible contra los usuarios que actúan sospechosamente.



--------------------------------------------------------------------------------

Nota para principiantes: ¿Lart? ¿Qué narices es un lart? Es una "herramienta de reajuste de la actitud de un luser". Es una clase genérica de técnicas usadas por los administradores de sistemas para castigar a los lusers. ¿Qué es un luser? Un usuario rebelde. Para tener un ejemplo de larts populares visita la página http://mrjolly.cc.waikato.ac.nz/. Quieres que tus administradores de sistemas sean tus amigos, ¿verdad? ¡Nunca olvides esto!


--------------------------------------------------------------------------------

¿Cuáles son algunas de las vulnerabilidades de Win95 y NT? Busca esta información en Guías anteriores. Quizás la cosa más importante que recordar acerca de Windows es que (al igual que el 'root' en Unix), puede ejecutar un programa que use cualquier puerto que quiera, incluso los puertos conocidos. Se puede demostrar esta vulnerabilidad con un programa de Weld Pond, de L0pht, llamado 'netcat'. Se puede obtener el programa en:

http://www.l0pht.com/~weld/netcat

Lee la documentación que viene con el programa, o las Guías sobre Win95 y telnet o las de seguridad de NT de:

http://www.infowar.com/hacker/hacker.html-ssi

Por supuesto, varias aplicaciones Windows, como Internet Explorer, tienen sus propias vulnerabilidades.

A estas alturas te estarás preguntando dónde puedes aprender más acerca de diversas vulnerabilidades y exploits que puedes encontrar en cualquier ordenador en Internet. Una lista de sitios:


ISS X-Force
http://www.iss.net/xforce


RootShell
http://www.rootshell.com/


TechnoTronic
http://www.technotronic.com/


Packet Storm Security Site
http://packetsorm.securify.com/


Bugtraq Archives
http://www.securityfocus.com/


NTBugTraq
http://www.ntbugtraq.com/


Aelita Software
http://www.ntsecurity.com/

**En este sitio está el programa RedButton, que demuestra la capacidad de conectar a una máquina NT vía una sesión nula y conseguir información del registro. Este es un problema relativamente simple de arreglar... mira las Guías de seguridad de NT en: http://www.infowar.com/hacker/hacker.html-ssi


NT Security
http://www.ntsecurity.net/


Active Matrix's HideAway
http://www.hideaway.net/exploits.html


CERT
http://www.cert.org/


Exploits que han sido probados y que no causarán daños en tu ordenador:
http://www.anticode.com/