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/