Prólogo
Bien, hace algunos años, aquellos que empezábamos con internet contratábamos nuestra linea de 56k con un ruidoso y chirriante modem. Poco después, vino el ADSL, trayendo vertiginosas velocidades de 1mb. Pero en todo esto había una gran amenenaza que las compañías telefónicas no vieron: cualquiera en su casa podía montar un pequeño servidor. Es cierto que las velocidades de subida no podían dar pie a grandes servicios, pero sí eran lo suficientemente grandes como para abrir un puerto a la escucha y poner una shell remota. En cualquier momento, un atacante podría escanear un rango de IPs y cuando detectara cierto puerto abierto era sinónimo de que estaba infectado con el famoso troyano, tomando el control absoluto del ordenador. Era la época del famoso SubSeven.
De cómo SubSeven cayó en el olvido
A medida que pasaba el tiempo, al abaratarse los equipos informáticos, los usuarios comenzaron a adquirir más ordenadores. Pero el problema era que con los antiguos modem tan solo se podia conectar uno a internet, y en caso de querer encufar más máquinas a la red, hacía falta un engorroso proceso. Fue entonces cuando la gente comenzó a comprar routers, hubs ethernet que permitían comunicar cuatro o más equipos con el mundo exterior. Esta práctica se popularizó, hasta que las propias compañías proveedoras de servicios proporcionaban equipos híbridos módem-router, que son los que conocemos ahora.
Al utilizar un router, los paquetes que llegan de fuera deben decidir el camino a tomar, porque si hay cuatro ordenadores en la red interna peude ser un auténtico lío. Para eso necesita tablas de enrutamiento. Y si uno quiere conectarse a un ordenador, antes tiene que dar cuentas al router, que debe de estar correctamente configurado para que cuando le decimos "router, conéctame con la máquina x en el puerto 80", este nos lleve efectivamente a la máquina x en el puerto 80. Por defecto, todos los puertos en los routers están desenrutados, por lo que, a menos que se abran manualmente, este aparatito cuadrado hará oídos sordos de cualquier requerimiento de conexión. El SubSeven había muerto.
Máquinas de pocas palabras
Los troyanos de conexión directa ya no eran útiles, pero nunca se cierra una puerta sin que se abra una ventana. Para configurar el router, ciertamente, hacía falta una interfaz. Para ello, estos quedaban a la escucha con un servidor HTTP detrás, y cuando un usuario lo requiriera, ya fuese desde la red local o desde el exterior, el aparato te permitía configurarlo correctamente, siempre y cuando supieras el santo y seña. Y he aquí el quid de la cuestión, la contraseña en casi todos los casos era la misma que traía de fábrica. El 90% de los usuarios no la habrían cambiado, tal vez ni siquiera sabría qué coño es eso. Probando cosas como "admin", "root", "password", "1234"... cualquier atacando sin nada mejor que hacer podía tomar control absoluto de tus tablas de erutamiento.
Pero claro, siempre habían usuarios avispados, que la cambiaban con presteza. El problema ahora era que los routers domésticos antiguos no te permitían, en el mejor de los casos, exceder los seis carácteres. Así que un atancante un poco más mañoso, con una sencilla herramienta que probase todas las combinaciones, si se le metía en los cojones acababa accediendo a las enrutadas tripas del engendro.
Sofisticación VS Seguridad
Internet creció, las páginas se hicieron más pesadas, el streamming de audio y video provocaban auténticos trombos de datos, y es por eso que el bando de ancha creció, y con el la velocidad de acceso del usuario medio. Para manejar tremenda cantidad de datos, los routers tenían que ser más sofisticados, y sus pequeños ordenadores emebebidos más potentes. Los software de configuración cambiaron, y ahora tambien ofrecían configuración por FTP, telnet, SSH, HTTPS y el antiguo HTTP. Todo muy bonito y configurable, pero esto entraña otro riesgo: a más servicios, más puertos abiertos. Y a más puertos, hace falta un sistema más grande y estable. Y a más grande sea el sistema, más código tiene. Y a más código tiene, más bugs posee. Si a esto sumamos que el usuario sigue sin cambiar la contraseña en sus bonitos routers, tenemos el sueño de cualquier piratilla informático.
Idea general del ataque
Desde hace unos pocos años, si un router tiene abiertos los puertos 22 o 23 (SSH y telnet), significará que no solo tiene un pequeño interfaz de configuración, si no un pequeño linux embebido. Muchas marcas de routers los tienen. Si nos conseguimos colar como usuario root el sistema se verá seriamente comprometido. Y si una vez estamos dentro como root, subimos e instalamos un programita que a su vez escanee la red en busca de más equipos vulnerables, tendríamos un gusano peligrosísimo. Y no solo eso: ¿porqué no montar un servidor HTTP, FTP o incluso IRC? Las máquinas tienen un pequeño disco duro, y pocos recursos, pero si yo quiero distribuir material ilegal podría se runa buena opción. Además, casi todos los routers cuentan con un servicio de actualización de DNS dinámico, como DynDNS o No-IP. Con una dirección fija, ya tendríamos un server en toda regla.
El sueño de todo hacker es obtener root en un servidor. Esto te da control absoluto. Pero si además eres indetectable por parte del usuario (si este deja la contraseña que trae el router por defeto, ¿va a explorar quien puede estar en su sistema?) y por los firewalls y antivirus, estamos ante una utopía.
Comenzando el asalto
En este ejemplo, que es totalmente real, no daré detalles como IPs, o rangos de IP's donde se pueden encontrar equipos vulnerables, ni de compañías que instalan este tipo de routers o de países. Eso sería una irresponsabilidad por mi parte, y se aleja del objetivo didáctico de este artículo. Tan solo diré que es bastante común encontrar un router vulnerable.
Bien, lo primero es hacerse con las herramientas necesarias. Nuestro objetivo es arbitrario, o sea, que nos da igual quien sea. Por ello vamos a adquirir la último versión del nmap, un gran programa, de su correspondiente web: http://www.insecure.org. Una vez lo tenemos, tanto en Windows como en Linux, vamos a escanear el rango de IPs donde puede haber una vulnerabilidad:
Código:
Esto escanería los 255 hosts de esa IP. Nótese que esta es poco menos que
ficticia.
Tras un ratito escaneando, el nmap nos debería escupir algunos resultados. Yo,
para este ejemplo, me he fijado en este:
Código:
abiertos: FTP, SSH, telnet y HTTP. Sin perder más tiempo, abro una línea de
comandos (estoy en Windows) y le hago un rápido telnet:
Código:
BusyBox on localhost login:
¡Bingo! Tenemos un login por telnet. De igual forma podría ser por SSH, perobueno, telnet viene a ser los mismo. Veo una palabra clave: "BusyBox". Un rápido
googleo me informa de que es un minilinux para sistemas embebidos. Me pide el
login, y como yo quiero ser "root", pongo root. Entonces me pide la contraseña.
Pruebo varias, como root, admin, 1234, en blanco,
password, pass... tras algunos intentos, lo consigo (no diré la
verdadera):
Código
BusyBox on localhost login: root
Password:
#
La ostia. A la primera. Estoy como root en un sistema remoto que no actualizan
desde el 25 de septiembre de 2006. Esto debe de ser el paraíso. Hago un par de
comandos para tantear donde estoy metido:
Código
Built-in commands:
-------------------
. : bg break builtin cd chdir continue eval exec exit export
false fc fg hash help jobs kill local pwd read readonly return
set setvar shift times trap true type ulimit umask unset wait
# busybox
BusyBox v0.61.pre (2006.09.25-12:57+0000) multi-call binary
Usage: busybox [function] [arguments]...
or: [function] [arguments]...
BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use, and BusyBox
will act like whatever it was invoked as.
Currently defined functions:
[, ash, busybox, cat, chgrp, chmod, chown, cp, cut, dd, df, echo,
false, free, grep, hostname, id, ifconfig, init, insmod, kill,
ln, login, ls, lsmod, mkdir, modprobe, mount, mv, passwd, ping,
ps, pwd, reboot, rm, rmmod, route, sh, sleep, sync, tar, test,
tftp, touch, true, tty, umount, wget, whoami, yes
#
Como pueden ver, esoy en el directorio / de un sistema Linux como usuario "root".
Vamos a echar un vistazo alrededor:
Código:
# cat version
Linux version 2.4.17_mvl21-malta-mips_fp_le (beri@debian) (gcc version 2.95.3 20
010315 (release/MontaVista)) #1 Mon Sep 25 15:52:29 EEST 2006
Con esto obtenemos un poco más de información. La versión del kernel es bastante
antigua (2.4.17), compilada para un procesador MIPS de 4K. ¿Quien necesita más?
¿No es esto suficiente para hacer maldades? Y lo mejor esque ni siquiera
necesito ejecutar un exploit que me permita ser root. Ya lo soy.
Bueno, llegados a este punto, no se puede perder el tiempo. Veo que dispongo del
comando wget:
Código:
Me voy a disponer a compilar un simple "Hola Mundo". El código sería el
siguiente:
Código:
caigo en la cuenta de que necesito un compilador para MIPS. Después de buscar un
poco en google descargo este, ya compilado:
http://www.uclibc.org/downloads/binaries/0.9.30.1/cross-compiler-mipsel.tar.bz2.
Habrán muchos otros, pero este fue el primero que encontré. Puede que también
les sirva. No entraré en detalles, los compilé y lo subí a un servidor FTP
gratuito. De nuevo en mi router rooteado, hago:
Código:
internet un ejemplo de bot IRC en C, lo ajusté, corregí un poco el código, lo
compilé, lo subí, lo ejecuté y vi con admiración como se conectaba a mi servidor
IRC desde un lugar remoto del mundo, completamente a mis órdenes. Podría haberle
puesto un comando para que buscase mas equipos vulnerables, con un mini logeador
por telnet a fuerza bruta y otro comando para inicar un básico DDoS. No hice
nada maligno, pero de querer haberlo hecho, ¿quién iba a impedírmelo? Y es más,
de haberlo hecho, ¿quién me iba a descubrir?
Conclusiones
El ejemplo que he descrito se trata de un serio problema de seguridad mundial.
Cualquier atacante malintencionado podría instalar bots IRC para hacer ataques
DDoS, proxies completamente anónimos, servidores de cualquier tipo, etc. Es
cierto que los routers son muy poco potentes, pero el poder dispones de 1000,
2000 o 10000 pequeñas máquinas indetectables, por muy poco potentes que sean, y
por muy poco ancho de banda del que dispongan, son una seria amenaza.
Con este artículo no estoy incitando al crimen, más bien todo lo contrario.
Intento fomentar el uso de claves seguras, y la responsabilidad del ISP de
mantener a sus clientes a su propia red fuera de peligro.
Espero que el ejemplo quede claro. Como dije antes, con el tiempo, los routers
serán cada vez más complejos y esto no ha hecho más que empezar. El futuro del
hacking, a mi modo de ver, irá por este camino. Esperemos que le encuentren
solución rápidamente.
Fuente original:
http://www.descifra.me
0 comentarios:
Publicar un comentario