Hace unos días recibí una llamada de Movistar, con la que tengo contratado el ADSL, para comentarme que por motivos técnicos me iban a enviar un nuevo router ADSL ya que la instalación que les constaba que tenía se había quedado algo desactualizada.
A los pocos días llegué a casa y, ¡router nuevo!
Se trata de un router wifi ADSL2/2+ fabricado por Alpha Networks, y está etiquetado con el nombre Amper ASL 26555. Son los modelos más actuales de router casero que está distribuyendo actualmente Movistar a sus clientes. El zombie no viene incluido.
Para acceder a la configuración tenemos diferentes opciones.
El dispositivo cuenta con dos paneles web para su configuración, uno "dummy" de Movistar que corre en el puerto 80 y no vamos a tocar (por la complejidad del asunto), y el panel de configuración original de Alpha Networks que está en el puerto 8000.
Si accedemos mediante el navegador a la IP del dispositivo utilizando el puerto 8000 (http://192.168.1.1:8000/) e introducimos los credenciales de administración (1234 / 1234 por defecto), accedemos al panel.
Mediante este panel podemos configurar de forma avanzada el dispositivo.
Como curiosidad, podemos ver toda la configuración que tiene Movistar para acceder a nuestro router a través de sus redes de forma transparente al usuario. Podemos cambiarla para no permitirles acceso, pero si luego no os funciona Internet y el técnico no puede acceder de forma remota, ¡no os quejéis!
Otra posibilidad que nos da el router es acceder vía telnet.
Si nos conectamos por telnet, vemos que utiliza BusyBox 1.00 con un juego de comandos algo reducido.
$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
login as: admin
password:
BusyBox v1.00 (2011.05.02-12:14+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.
ASL-26555 #
El dispositivo cuenta con una CPU MIPS 24K, arquitectura MIPS Little Endian.
ASL-26555 # cat /proc/cpuinfo
system type : Ralink SoC
processor : 0
cpu model : MIPS 24K V4.12
BogoMIPS : 255.48
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes
ASEs implemented : mips16 dsp
VCED exceptions : not available
VCEI exceptions : not available
El sistema de ficheros al que tenemos acceso no tiene permisos de escritura, a excepción de /tmp/, y con el BusyBox que viene instalado no podemos transferir datos a través de la red. Por suerte, el router tiene un puerto USB al que podemos conectar un dispositivo de almacenamiento. Si le conectamos un pendrive nos lo monta automáticamente en /var/tmp/storage_dev/usb1_1
Podemos descargar el binario de la última versión de BusyBox para MIPSEL, que incluye un juego de comandos mucho más amplio, y meterlo en el pendrive.
Ya que tenemos acceso a una consola con bastantes comandos, el siguiente paso es compilar nuestros propios programas.
Para hacerlo necesitamos realizar compilación cruzada para MIPS. Podemos hacerlo con Buildroot, que nos permite generar un juego de herramientas para compilar código para diferentes arquitecturas.
Una vez lo tengamos podemos probar a portar, por ejemplo, Unhide (herramienta de detección de rootkits y procesos ocultos).
Unhide realiza algunas llamadas a comandos del sistema que no están disponibles, pero sí están en el BusyBox que hemos metido. Por ello, modificamos el código fuente para que ejecute los comandos a través de nuestro BusyBox, de esta forma no sólo nos vale para nuestro router sino para cualquier otro sistema embebido acompañado de un BusyBox actualizado.
La modificación es trivial (unhide - unhide-tcp), ahora nos queda compilar el código. Con nuestras herramientas de compilación preparadas:
mipsel-linux-gcc -static -O3 unhide.c -o unhide
mipsel-linux-gcc -static -O3 unhide-tcp.c -o unhide-tcp
Limpiamos un poco los binarios ...
mipsel-linux-strip unhide
mipsel-linux-strip unhide-tcp
Y lo acompañamos del binario de BusyBox. Podéis descargar los tres binarios ya preparados aquí.
Lo pasamos al pendrive y ejecutamos en el router:
ASL-26555 # ls -l
-rwxrwxrwx 1 0 0 65488 unhide-tcp
-rwxrwxrwx 1 0 0 65752 unhide
-rwxrwxrwx 1 0 0 1563696 busybox
ASL-26555 # ./unhide sys
Unhide 20110113
http://www.unhide-forensics.info
[*]Searching for Hidden processes through getpriority() scanning
[*]Searching for Hidden processes through getpgid() scanning
[*]Searching for Hidden processes through getsid() scanning
ASL-26555 #
Algo que he echado en falta es obtener el firmware a través de la web del fabricante. No lo he encontrado por internet, no obstante, si echamos un vistazo al CD de configuración avanzada que proporciona Movistar con el router, además de otros programas hay un agente de configuración remoto. Si lo instalamos y buscamos en el directorio dónde se ha instalado, podremos encontrar el firmware que está instalado por defecto. Para ahorraros el proceso, lo tenéis disponible aquí.
Ya sabemos como configurar el router a fondo, meterle programas, compilar los nuestros propios y tenemos el firmware del dispositivo. Ahora falta la seguridad, ¡algo había que decir!
La vulnerabilidad de la que vamos a hablar nos permite control total sobre el dispositivo con permisos de administrador. Es curiosa por su forma de ser y porque haya pasado desapercibida.
Como hemos dicho antes, la forma de gestionar el router es a través de un panel web con autenticación que corre en el puerto 8000. La sorpresa es que en el mismo servidor web tenemos un directorio llamado /APIS/, que no requiere autenticación. Nos devuelve error 404 cuando lo visitamos, pero si sabemos los nombres de los ficheros que tiene podemos hacer llamadas a los mismos.
Nos permite hacer diferentes llamadas para leer prácticamente toda la información de la configuración. Hay una llamada especial, con el nombre returnJSON.htm, que nos devuelve los credenciales del administrador.
$ curl http://192.168.1.1:8000/APIS/returnJSON.htm
{
"RETURN":{
"success": true,
"errorDescription": "ERROR_GENERAL"
},
"USER":{
"USERNAME": "admin",
"PASSWORD": "adm1n_passw0rd_exposed"
}
}
Con ésto podemos autenticarnos en el panel web y gestionar el dispositivo.
Dado que dicha API no está documentada por ningún lado y no requiere autenticación, da la sensación de que el fallo es en realidad un backdoor que se dejó el fabricante original para poder acceder a información del dispositivo aunque no se conozcan los credenciales.
Hay que añadir que con la configuración que carga Movistar en los routers, nadie fuera de nuestra red interna o de las redes de Movistar puede utilizar esto, ya que el servicio no es accesible por red sin contar esas dos excepciones.
Publiqué la vulnerabilidad hace unos días, aquí está la descripción detallada, que incluye todas las llamadas que nos permite la API.
Como conclusión, para ser un router casero está bien técnicamente y nos permite un control relativamente amplio sobre él. Tiene algunos puntos útiles, por ejemplo poder compartir el acceso al dispositivo USB a través de SMB por red para acceder a contenidos multimedia desde diferentes puntos. Merece la pena investigarlo un poco.
Contribución por Alberto Ortega.
No hay comentarios.:
Publicar un comentario