Cómo hackear un Router de casa para conseguir la Password SIP: una PoC Just for Fun!
Este artículo llega con un retraso de aproximadamente cinco años. Ha residido en estado latente mientras escribía el libro de 0xWord titulado "Hacking Home Devices I: PoCs & Hacks Just for Fun!". La razón de esta “dilatación” es que este artículo fue el detonante que inspiró mi nuevo libro, gracias a Chema Alonso, quien me sugirió convertirlo en un libro completo. Hoy os traigo un resumen de lo que explico en el libro.
Figura 1: Cómo hackear un Router de casa para
Así nació este proyecto que lo bauticé como “Book & Roll”, el libro que me mantuvo ocupado durante aproximadamente cuatro años mientras desarrollaba otras ideas que tenía en mente.
Señoras y señores, hackers, a continuación se expone el artículo en versión resumida pero ofreciendo más nivel de detalles sí lo requerís oportuno, pues incluye el combo de White Paper + vídeo del proceso (como de costumbre).
Comodidad VS Seguridad
La comodidad ha llevado a la despreocupación por ciertas cosas elementales, como la seguridad digital al estar conectados a Internet. Recuerdo mi primer módem, un U.S. Robotics 56K faxmodem, donde se apreciaba un surfista saliendo de una pantalla CRC en la caja.
Y cómo la tecnología ha evolucionado desde esos días hasta los routers sofisticados que tenemos hoy en día. Cambié en aquel entonces de Movistar a Adamo, (motivado por razones personales) y me encontré explorando la seguridad de los routers proporcionados por Adamo, específicamente el Inteno EG200 basado en OpenWRT.
Configuración de VoIP
Decidí investigar para sacar la configuración de la VoIP de mi nuevo router para así configurarlo como cliente SIP en otro equipo (tal y como lo tuve anteriormente con el router SmartWiFi de Movistar - la versión antigua -). Comencé antes con pruebas de velocidad y algunas llamadas telefónicas para cerciorarme de que el servicio funcionaba correctamente. Con VoiP se pueden hacer muchas cosas... ya sabéis.
Escrito por Gerard Fuguet.
Comodidad VS Seguridad
La comodidad ha llevado a la despreocupación por ciertas cosas elementales, como la seguridad digital al estar conectados a Internet. Recuerdo mi primer módem, un U.S. Robotics 56K faxmodem, donde se apreciaba un surfista saliendo de una pantalla CRC en la caja.
Figura 3: Caja del U.S. Robotics 56K faxmodem versión alemana
Y cómo la tecnología ha evolucionado desde esos días hasta los routers sofisticados que tenemos hoy en día. Cambié en aquel entonces de Movistar a Adamo, (motivado por razones personales) y me encontré explorando la seguridad de los routers proporcionados por Adamo, específicamente el Inteno EG200 basado en OpenWRT.
Configuración de VoIP
Decidí investigar para sacar la configuración de la VoIP de mi nuevo router para así configurarlo como cliente SIP en otro equipo (tal y como lo tuve anteriormente con el router SmartWiFi de Movistar - la versión antigua -). Comencé antes con pruebas de velocidad y algunas llamadas telefónicas para cerciorarme de que el servicio funcionaba correctamente. Con VoiP se pueden hacer muchas cosas... ya sabéis.
Después investigué la configuración SIP en foros de Internet, encontrando información útil pero incompleta en bandaancha.eu. Aunque enfrenté algunos desafíos, persistí en mi búsqueda para dar con una solución.
Interceptando Tráfico &m; Information Gathering
Utilicé un TAP pasivo (Throwing Star LAN Tap Pro) para interceptar el tráfico de red entre el router y la ONT.
Con herramientas como Wireshark, capturé la autenticación SIP mediante el protocolo Digest.
Aunque no logré descifrar la información, esta técnica me permitió acercarme un poco más a mi objetivo. Intenté obtener la contraseña SIP a través de ingeniería social, pero tampoco funcionó. A través de un SMS que llegaba a tu móvil al darte de alta, pude deducir que el usuario se componía de 6 números y el password de 8 caracteres alfanuméricos (a-z, A-Z y 0-9).
El servicio técnico me confirmó que sí se componía la clave de 8 dígitos, y eso era todo hasta el momento...
Jugando con Exploits y WebSockets
Probé alternativa con varios exploits conocidos para routers Inteno, todos ya parcheados por Neonsea. Entonces, decidí investigar la comunicación a través de WebSockets. Utilizando herramientas como curl y Firefox, interactué con el router mediante comandos ubus para obtener información.
Convertimos a nuestro Firefox en un auténtico cliente WebSocket, sacamos jugo de su buena referencia y así lo plasmamos:
Interceptando Tráfico &m; Information Gathering
Utilicé un TAP pasivo (Throwing Star LAN Tap Pro) para interceptar el tráfico de red entre el router y la ONT.
Figura 5: Dirección que toman los paquetes en Throwing Star LAN Tap Pro
Con herramientas como Wireshark, capturé la autenticación SIP mediante el protocolo Digest.
Figura 6: Capturando autenticación Digest
Aunque no logré descifrar la información, esta técnica me permitió acercarme un poco más a mi objetivo. Intenté obtener la contraseña SIP a través de ingeniería social, pero tampoco funcionó. A través de un SMS que llegaba a tu móvil al darte de alta, pude deducir que el usuario se componía de 6 números y el password de 8 caracteres alfanuméricos (a-z, A-Z y 0-9).
Figura 7: SMS de alta enviado por Adamo
El servicio técnico me confirmó que sí se componía la clave de 8 dígitos, y eso era todo hasta el momento...
Jugando con Exploits y WebSockets
Probé alternativa con varios exploits conocidos para routers Inteno, todos ya parcheados por Neonsea. Entonces, decidí investigar la comunicación a través de WebSockets. Utilizando herramientas como curl y Firefox, interactué con el router mediante comandos ubus para obtener información.
Convertimos a nuestro Firefox en un auténtico cliente WebSocket, sacamos jugo de su buena referencia y así lo plasmamos:
1. Creando el socket con su correspondiente protocolo.
var superSocket = new WebSocket("ws://192.168.1.1/", "ubus-json")
2. Log, muestra las respuestas por cada mensaje enviado.
superSocket.onmessage = function (event) {console.log(event.data)}
3. Solicitando un id de sesión haciendo un login con el usuario del router (user) y su contraseña del WiFi que viene por defecto.
superSocket.send(JSON.stringify({"jsonrpc":"2.0","method":"call","params":["00000000000000000000000000000000","session","login",{"username":"user","password":"wifis-password"}],"id":0}))
Figura 8: Listando los comandos que brinda y ejemplo de ejecución
Esto generó más juego con los comandos ofrecidos así que, la diversión prosiguió... Luego descubrí un archivo .enc que parecía contener datos valiosos.
Figura 9: Petición GET, HTTP del fichero .enc
Pero el fichero estaba cifrado... nuevo reto.
Descifrando el Archivo .enc
Descubrí el algoritmo 3DES utilizado para cifrar el archivo .enc en un manual de Inteno.
Figura 10: Mecanismo de cifrado usando 3DES
Utilizando comandos en openssl (como se hacía en WhatsApp para ver las fotos de 1 sólo uso) y la llave de cifrado obtenida en los params de la llamada que capturamos a través de WebSockets (Figura 8) logré descifrar el archivo.
Figura 11: Mostrando el contenido de Provisioning.conf
Revelando un archivo .tar.gz que contenía la configuración de aprovisionamiento, incluida la contraseña SIP.
Reporte de la Vulnerabilidad y CVE
Compartí mi hallazgo con Inteno y Adamo. Cooperé con ellos para solucionar la vulnerabilidad y finalmente, se implementó un parche.
Figura 12: Comunicación para solucionar el problema
Recibí el CVE ID (CVE-2019-13140) por esta vulnerabilidad. El proceso no fue sencillo, pero la cooperación y la persistencia dieron sus frutos.
Reflexiones Finales
Creía que Movistar era de lo más restrictivo con los dispositivos que brinda a los clientes… y resulta que no, todo lo contrario, y se pueden hacer muchísimas cosas con SmartWiFi - que lo tienes hasta en la Televisión -. He podido hacer más cosas a mi “aire” con ellos que con cualquier otro operador… Supongo que el temor encoge/restringe protegiendo a los suyos ante cualquier exposición peligrosa.
Creía que Movistar era de lo más restrictivo con los dispositivos que brinda a los clientes… y resulta que no, todo lo contrario, y se pueden hacer muchísimas cosas con SmartWiFi - que lo tienes hasta en la Televisión -. He podido hacer más cosas a mi “aire” con ellos que con cualquier otro operador… Supongo que el temor encoge/restringe protegiendo a los suyos ante cualquier exposición peligrosa.
¿Pero cómo proteger? ¿Estaríamos más seguros si nos quedásemos en casa todo el día sin salir al exterior? Sí uno decide hacerlo, es totalmente libre de acogerse a lo que quiera, pero que tenga al menos la opción de abrir la puerta. El router de Inteno que Adamo brindaba no daba la opción de cambiar la contraseña, si alguien la adivina, si alguien sabía su “secreto”, hasta que no se cambiase de dispositivo, no había nada que hacer… Y es una pena, porque son equipos que no están nada mal. Se desaprovechan muchas características por la decisión de acotamiento de funciones.
El password de la WiFi cumple con los criterios de robustez, solo que el hecho de “momificarse” le puede convertir en “carne de cañón”.
Sólo quería aquello que me pertenecía, y sólo faltaba una parte vital para que funcionase, una contraseña para deshacer la esclavitud por la que estaba pasando la VoIP ¿Porque negártelo? Apunto estuve en adentrarme por la vía física, por consola RS232 (USB-TTL) pinchando en la placa del router, pensé que esa era mi única salida (o terminar con un trágico final, en un callejón sin salida).
Sólo quería aquello que me pertenecía, y sólo faltaba una parte vital para que funcionase, una contraseña para deshacer la esclavitud por la que estaba pasando la VoIP ¿Porque negártelo? Apunto estuve en adentrarme por la vía física, por consola RS232 (USB-TTL) pinchando en la placa del router, pensé que esa era mi única salida (o terminar con un trágico final, en un callejón sin salida).
Quise probar otros caminos y ver si era factible realizar la fuerza bruta usando HashCat una vez capturado el hash MD5 con el TAP. No emplee ningún diccionario, utilice que se oscilara en un rango de dígitos. Tal que:
hashcat64.exe -m 11400 -a 3 adamo.hash -1 ?l?u?d ?1?1?1?1?1?1?1?1
Figura 14: Password crackeado bajo HashCat
Conclusión
Este viaje en la seguridad de dispositivos del hogar ha demostrado la importancia de la seguridad digital y la cooperación entre usuarios y proveedores. Con determinación y recursos adecuados, es posible mejorar la seguridad y obtener las configuraciones críticas para el correcto funcionamiento de los dispositivos.
El histórico, o llamado Timeline, fue:
2019-06-29 - White Paper done2019-07-01 - CVE assigned2019-07-09 - Notified to Inteno2019-07-11 - Adamo aware and ask for detailed info2019-07-12 - Info facilitated2019-07-25 - Early patch available and applied (Cooperation starts)2019-07-26 - Tested and failed (VoIP not working)2019-08-27 - New firmware available2019-08-30 - Firmware EG200-WU7P1U_ADAMO3.16.8-190820_0937 applied on router2019-08-31 - Tested OK2019-09-04 - Disclosure published
¡Bonus Track!
Para mas detalles, os dejo aquí el “White Paper” de todo este mejunje digital.
Y un vídeo sobre lo visto, esta vez en castellano con subs y textos en inglés (international mode ON). No hubiera tenido tal buen aspecto sin la ayuda de Esther Martínez (la chica que señala con el dedo en el vídeo), que se lo curra para dejar unos acabados más pulidos (que esto de los vídeos creerme ¡Que tiene su miga!).
Para mas detalles, os dejo aquí el “White Paper” de todo este mejunje digital.
Figura 15: Call your key to phone all from Gerard Fuguet
Y un vídeo sobre lo visto, esta vez en castellano con subs y textos en inglés (international mode ON). No hubiera tenido tal buen aspecto sin la ayuda de Esther Martínez (la chica que señala con el dedo en el vídeo), que se lo curra para dejar unos acabados más pulidos (que esto de los vídeos creerme ¡Que tiene su miga!).
Nota: Hasta el segundo 37, Se hace mención especial a la gente del foro de Banda Ancha. Prometí compartirlo con tod@s ell@s si tenía éxito extrayendo el password de la SIP.
Remember… Be Good, Be Hackers!
Remember… Be Good, Be Hackers!
Autor: Gerard Fuguet (Contactar con Gerard Fuguet)
No hay comentarios:
Publicar un comentario