Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
Blog de la Escuela de Educación Secundaria Técnica N 8 de Quilmes
Administrador Prof. Claudio Enrique Alonso Alvite
img
01 de Junio, 2015    General

Analizando el LiveBox 2.1 de Orange


En la imagen que ilustra el artículo podéis ver a un usuario intentando meter una ruta estática en el router que su ISP le ha proporcionado. O eso es lo que deben ver los ISPs: peligrosos personajes intentando romper sus routers, dando más trabajo a sus servicios de atención telefónica, y haciendo que se evapore un peligroso 10% (atención: porcentaje inventado) de sus escasos beneficios anuales.

De un tiempo a esta parte cada vez es más normal ver cómo los routers que nos regalan (alquilan) nuestros ISPs vienen con menos opciones de configuración. Para algunas personas que no se limitan a enchufar el router y navegar por internet, sino que tienen configuraciones de red algo más curradas (o según la terminología actual: hackers avanzados que han segmentado su red doméstica) esto es bastante molesto. Y es incluso irritante cuando podemos comprobar que esos routers que nos limitan tienen multitud de opciones que podrían ser aprovechadas. Y el problema ya es sangrante cuando comprobamos que además de caparnos opciones de configuración, nos impiden ver datos como nuestro propio usuario/password SIP, haciéndonos depender de su hardware para mantener nuestra línea de voz.

Algunos diréis que lo más simple es poner nuestro propio router a continuación del que nos ofrece nuestro ISP. Así tenemos control sobre nuestra red, podemos dejar que los teléfonos sean gestionados por el router del ISP, y lo demás corre de nuestra cuenta. Y seguramente eso sea lo más inteligente. Pero a los que nos gusta complicarnos la vida todas esas limitaciones nos despiertan el "y esto cómo funciona?" que llevamos dentro. Y a algunos nos da hasta por escribir un artículo en un blog. Al lío:

Obtención del volcado de la memoria:

El primer paso cuando se "juega" con routers suele ser obtener el firmware. Para ello se nos pueden ocurrir varios métodos:
  • Obtener una actualización.
  • Descargarlo vía página de administración. 
  • ...
  • Hacer un volcado de la memoria del propio router usando métodos "hardware". 
En nuestro caso, a priori, no se ve ninguna forma de volcar el firmware usando el software del propio router. Y por descontado, no vamos a poder obtenerlo de ninguna actualización colgada en la web de Orange porque ya hemos visto lo "celosos" que son de sus interioridades. Así que cogemos el adaptador TTL-USB y nos damos un paseo por el wiki de OpenWRT a ver si encontramos el puerto serie del cacharro. Afortunadamente vemos que sólo hacen falta tres puntos de soldadura y ya estamos delante de la consola:


 Una vez aquí, no voy a explicar el proceso del volcado de la memoria. Está todo muy bien detallado en este post de seguridadwireless y es de justicia decir que se han pegado un curro importante para llevar OpenWRT a este router. Básicamente se hace una copia de todas las áreas de memoria, confiando en que más adelante sepamos qué es cada una de ellas. 

Extracción del firmware:

 Lo habitual al obtener un volcado de memoria del firmware es pasarle el binwalk para extraer los contenidos. En imágenes sin ofuscación o sin cifrado suele dar buenos resultados, pero desgraciadamente cada vez más los fabricantes usan métodos de ocultación para evitar que "curiosos" metan mano. Éste es el caso del Livebox, así que empecé a buscar cadenas que aparecían en el log de arranque, por si otros routers implementasen el mismo mecanismo, y entre toda la información que encontré estaba esta fantástica página de Stefan Viehböck.

 En nuestro caso el firmware se encuentra en mtd5, aunque para encontrarlo hay que rebuscar un poco (me tocó buscar en el volcado de memoria por todas las secuencias de bytes "sospechosas" que Stefan comenta en su post: 0x325476980xFFFFFFFF0xFFFFFFFF0x78563412...). Los "magic bytes" no son exactamente iguales (en este caso la primera sección del firmware comienza por "04 05 11 20", por ejemplo) pero la estructura de las secciones es mas o menos la misma que la mostrada en el post. Y gracias al programa del post somos capaces de tener por fin un fichero LZMA que, descomprimido, nos da lo que andábamos buscando.

 Una vez desempaquetado el firmware, toca sesión de ensamblador en MIPS (toda una experiencia no siempre agradable). Con dirección de carga 0x80002000, $gp=0x80A64120 y gracias al script de Stephen que podéis encontrar aquí tenemos una imagen lista para empezar a analizar. En mi caso estuve varios días "adecentando" el resultado, sobre todo buscando secuencias de bytes que hiciesen referencia a offsets, lo que fue relativamente sencillo (en cuanto veía un 0x80?????? en el desensamblado probaba a visualizarlo como un offset) pero muy muy muy tedioso ("Pues haber hecho un script!" diréis, con toda la razón), pero que me sirvió para hacer una toma de contacto con lo que tenía entre manos.

 OJO: Todas las direcciones de memoria a las que hago referencia a partir de este punto se refieren al firmware versión 00.96.315 (el último hasta el momento)

 Bueno, pues ya tenemos material para buscar cosas interesantes. Lo primero que intenté comprender era el proceso de desempaquetado del firmware porque, como bien decía Stephen en su post, está compuesto por varias secciones y nosotros de momento sólo tenemos una. El proceso de desempaquetado se encuentra en la dirección 0x800C68E4 y realiza varias funciones. Las más importantes son:
  • Comprueba que el tamaño del fichero esté entre 0x1B7740 y 0x600000 bytes. 
  • Comprueba si la imágen viene con CRC32 asociado. 
  • Recorre las secciones del fichero y por cada una va comprobando el "signature" y las va desempaquetando. 
Estudiar esta función también nos sirve para darnos cuenta de algunas cosas importantes a la hora de extraer el firmware completo:
  • Cuál es el la marca de fin de fichero de firmware (recordad que hasta ahora lo único que teníamos era el principio del firmware ofuscado dentro de mtd5, ahora sabemos que el firmware termina con "BRNOSPPH1"+0x00).
  • Cómo calcular el CRC32 de la imágen completa (con el último campo CRC32 a 0xFFFFFFFF se calcula el CRC y se sustituye 0xFFFFFFFF por el CRC32 calculado).
  • Si el CRC32 de la imágen es 0xFFFFFFFF no se comprueba: 
  • Las distintas secciones están alineadas a 1024 bytes (para posicionarse al final del fichero, se hace file_size & 0x3FF, que es equivalente a file_size % 1024. Los bytes resultantes, que son "BRNOSPPH1"+0x00, los descarta). 
  • Qué tipos de ficheros podemos encontrarnos en cada subsección: 

 Con esta información podemos hacernos una idea detallada de la estructura del fichero de firmware, y tenemos un punto de partida para crear un programa (lo encontraréis en la sección de herramientas de este artículo) para desempaquetar el firmware completo. La estructura y el contenido de las secciones del fichero son:


Tenemos el primer bloque, que es el que ya teníamos desempaquetado, donde se encuentra el firmware que estamos analizando. En los tres bloques posteriores tenemos el sistema de ficheros, empaquetado en formato PFS. Y los dos últimos bloques contienen lo que creo que es (en base a los logs de consola) el firmware de VSDL2 y el firmware DSP. 

El fichero de configuración:

Teniendo el firmware completamente desempaquetado lo siguiente que me picaba la curiosidad era el fichero de configuración del router. Mediante la página de administración del Livebox es posible descargar una copia de seguridad de la configuración actual. Pero cuando nos descargamos esa copia de seguridad, tan sólo podemos ver bytes sin sentido aparente: ni una sola cadena, ni una sola secuencia de bytes "sospechosa", sin padding por ningún lado... Todo apunta a que está cifrado. Y si se toman la molestia de cifrarlo, puede que tenga algo interesante.

 Soy perezoso. Y lo sé. Y antes de meterme a buscar las rutinas de cifrado/descifrado del fichero de configuración en el firmware, y teniendo en cuenta que el algoritmo de ofuscación del firmware era un refrito de otro modelo de router, supuse que podrían haber hecho lo mismo con el algoritmo de cifrado del fichero de configuración. Y tras un rato buscando, el wiki de OpenWRT vino al rescate de nuevo.

Los magic numbers, de nuevo, varían de un modelo a otro. Pero lo importante es que ya tenemos el algoritmo de cifrado (AES) y las claves. Después de ajustar el programa de descifrado a los valores del LiveBox, tenemos el fichero de configuración descifrado y un montón de datos entre los que podemos encontrar usuarios, passwords, datos de configuración del SIP, de proveedores DNS dinámicos, configuración interna de Orange... y al final del fichero tenemos otro misterioso chorro de bytes sin sentido.

Más adelante entraremos en qué es cada cosa dentro del fichero de configuración, pero por el momento quise centrarme en qué había detrás de esos bytes. Esta vez Google no dio resultado, el programa al que hacia referencia el wiki de OpenWRT se quedaba en el descifrado de la primera "capa" del fichero y no supe encontrar ninguna mención a esa segunda sección sin descifrar. Así que me tocó darme un paseo por el código del firmware.

La rutina que se encarga de la creación del fichero de configuración está en la posición 0x80337458. En general se encarga de darle a los datos de configuración la forma correcta y cifrarlos con AES, una clave y un IV. Al tener el programa de descifrado me puse a buscar dónde estaban usándose las claves que aparecían en él para, a partir de ahí, identificar la función encargada de cifrar y ver si se usaba en otros sitios, pero no tuve suerte. Las claves puestas "a fuego" en el programa al que hacía referencia la wiki de OpenWRT no aparecían por ningún lado. Y prestando más atención a nuestra función podemos ver por qué.

 Una de las funciones llamadas desde la función principal tiene esta pinta (offset 0x80336D40):


 Así que lo que parece que hacen es crear las claves en ejecución para evitar meterlas "a fuego" en el firmware, usando una función de ofuscación que tiene esta pinta (offset 0x80336B4C):


Ahora ya sabemos de dónde han salido las misteriosas claves AES del programa de descifrado. Y también sabemos cuál es la rutina de cifrado en AES (se llama inmediatamente después de la preparación de las claves) y qué significan sus parámetros:
  • Offset 0x80344004
  • $a0 -> texto cifrado 
  • $a1 -> tamaño del texto cifrado
  • $a2 -> buffer de salida 
  • $a3 -> tamaño del buffer de salida 
  • $t0 -> modo de funcionamiento (1 cifrar / 0 descifrar) 
  • $t1 -> clave 

Si buscamos otros puntos desde donde se llame a esta rutina, pasando $t0 = 0 (en modo descifrar), nos encontramos con otra función interesante en 0x8010E578. En el cuerpo de la función podemos ver ésto:


Así que tenemos una función que llama a la rutina de cifrado en AES, en modo "descifrar", y que no llama a la función de preparación de claves AES sino que mete la clave directamente. Modificamos el programa de descifrado del fichero de configuración para descifrar la última sección con esta clave y el IV de su cabecera y ahí lo tenemos: última sección descifrada. En esta última sección tenemos la "piedra de Rosetta" para interpretar todo el fichero de configuración: ya podemos saber lo que significa cada uno de los bytes de nuestro fichero.

 La estructura final del fichero de configuración la podéis ver en este esquema:


 En el fichero de configuración tenemos varios datos interesantes:
  • Usuarios y contraseñas almacenados en el router. 
  • Parámetros de configuración del funcionamiento del router, tanto a alto nivel como a bajo nivel. 
  • Parámetros de configuración de la función TR-069 (esto lo veremos más adelante), incluyendo el servidor ACS de Orange y el usuario, la password y la URL del interfaz TR-069 de nuestro router (escuchando en el puerto 50805). 
  • Parámetros de configuración del ftp para la descarga del firmware (desafortunadamente esto viene "heredado" del fabricante, seguramente para otro modelo, y no es el firmware de Orange) 
  • Parámetros de configuración de un FTP de Orange al que el router envía datos de diagnóstico (también lo veremos más adelante). 
Hay multitud de parámetros con los que jugar y "tunear" nuestro router sin tocar un pelo su firmware. Como comentaba al inicio del artículo (si todavía os acordáis) es muy molesto comprobar que estos routers, con multitud de opciones disponibles, vienen capados a la mínima expresión.

Por otra parte, esto también le será útil a los usuarios que, por el motivo que sea, quieren usar otro router manteniendo la línea de voz. Actualmente Orange se niega a dar los datos de configuración del servicio SIP de sus clientes (para este router en concreto, creo que pasa lo mismo con el resto), por lo que si quieres usar otro router te ves obligado a mantener el que te da Orange para gestionar la telefonía. Estoy seguro que algún motivo habrá pero no creo que sea por el interés de sus clientes. Con la posibilidad de descifrar el fichero de configuración, podemos recuperar todos los datos necesarios para usar el router que nos venga en gana y tener, por lo menos, la capacidad de elección que Orange nos niega.

Otras funciones interesantes en el firmware:

Analizando los strings del firmware vemos muchos mensajes interesantes que tienen relación con funcionalidades que en algunos casos están capadas, y en otros casos ocultas. Dando un paseo por el sistema de ficheros, que podemos analizar echando un vistazo a los ficheros PFS desempaquetados del fichero de firmware, nos encontramos con páginas ocultas como:
  • http:///usb_wftp_server.stm -> nos permite montar un servidor de ficheros vía web a través del puerto 8000. 
  • http:///system_firmwarel.stm -> Una especialmente útil, ahora que sabemos cómo va el empaquetado del firmware, que nos permite actualizar el firmware del router vía web (necesita una password, que es la misma que la del acceso al bootloader: Oh!123Go . Conocida gracias espeltron de seguridadwireless por éste post).
  • http:///cgi-bin/config.bin -> Una interesante que nos da el fichero de configuración ya descifrado (excepto la última sección).
  • http:///get_getnetworkconf.cgi -> Otra muy graciosa que nos da la password WIFI sin necesidad de autenticación.
Seguramente haya más "joyitas" escondidas. Con el PFS extraído es cuestión de echarle tiempo.

En los strings también vemos mensajes como "Running Console Debug... !!!", que hacen que inmediatamente dejes todo lo que estés haciendo y te pongas a investigar. El mensaje en cuestión aparece en la función que empieza en la dirección 0x8011A53C, en la que podemos ver:


Así que si "algo" es 0x29, se muestra ese mensaje. Y sabiendo que 0x29 corresponde al carácter ")", vale la pena probar a pulsar ")" en la consola.... para ver que no pasa nada. Aquí me tiré bastante tiempo analizando el firmware y preguntándome qué se necesitaba para que el mensaje apareciese, y siempre llegaba a la misma conclusión: pulsando ")". Hasta que me dio por buscar en el fichero de configuración y vi la variable "uart_rx_enabled", que estaba a 0. Al poner la variable a 1, cifrar el fichero de configuración y volverlo a cargar, pulsando ")" en el PuTTY...


Al activar la depuración por consola se nos abren otro buen montón de opciones. Pulsado ENTER nos aparece un menú con todo lo que podemos hacer:


 Por ejemplo, el menú de sistema:


 Y mención especial para el menú "FTP":


Anteriormente comentaba que en el fichero de configuración estaba definido un FTP al que el router envía datos de configuración. Los parámetros de conexión los tenemos bajo la sección "infoReport", y son "defServerDom", "defPath", "defUsername" y "defPassword". Me había estado montando muchas películas sobre los datos que se enviaban, la verdad, pero modificando el fichero de configuración para poner vuestro propio servidor FTP y usando la opción "put system log" del menú FTP de la consola de depuración veréis que son datos asociados al router que supongo usará el servicio técnico en sus diagnósticos. Es cierto que hay datos sensibles como la password de WIFI, que por otra parte pueden sacar perfectamente vía TR-069, pero respiré aliviado al ver que mis visitas a youporn no aparecían.

Otro punto a investigar dentro del firmware son los CGIs "capados". Los CGIs en realidad están ahí (bueno, no exactamente CGIs, el LiveBox corre un RTOS llamado "SuperTask", con lo que en realidad todo forma parte del kernel), pero el punto de entrada a través del interfaz web ha sido retirado. Esto lo podemos solucionar modificando el PFS o haciendo algo más "imaginativo". El mapeo entre cada CGI y su correspondiente función lo encontramos a partir del offset 0x806DB1A4 del firmware:


Una manera de "descapar" esos CGIs sería modificando el firmware para hacer que un CGI accesible llame a la función que un CGI capado invocaría.

Y para terminar con las funciones interesantes del firmware, entre esos CGIs podemos encontrar referencias a uno llamado "get" y otro llamado "set". Si nos centramos en "get", que es implementado por la función definida en 0x80107D0C, vemos que acepta dos parámetros (son excluyentes): "param" y "object". Después de desenmarañar las distintas llamadas entre funciones y con ayuda de los mensajes de error del propio firmware, vemos que lo que espera el CGI son parámetros del protocolo TR-069. Y qué es esto del protocolo TR-069?, preguntaréis algunos. Es un protocolo orientado a controlar de forma remota a los routers que los ISPs tienen en las casas de sus clientes. De esta manera pueden leer y escribir parámetros de configuración desde su central. Gracias a este protocolo los ISPs son capaces de actualizar de forma silenciosa el firmware de nuestros routers y así no hacer que todos los usuarios (algunos sin demasiados conocimientos en informática) tengan que actualizarlo de forma manual, con sus consiguientes riesgos. Tener un "parque" de routers tan grande como tienen los ISPs, y encima cada uno con su versión de firmware, se puede convertir en una pesadilla a la hora de dar un servicio técnico. Tenéis información sobre el protocolo y los parámetros que acepta aquí. Ésto es lo que nos devuelve el router si invocamos a "get" con los parámetros adecuados. Por ejemplo:

http:///cgi-bin/get?param=InternetGatewayDevice.DeviceInfo

Nos da:

InternetGatewayDevice.DeviceInfo.Manufacturer = ARCADYAN
InternetGatewayDevice.DeviceInfo.ManufacturerOUI = XXXXXX
InternetGatewayDevice.DeviceInfo.ModelName = DSL Router
InternetGatewayDevice.DeviceInfo.Description = DSL Router
InternetGatewayDevice.DeviceInfo.ProductClass = Yabox
InternetGatewayDevice.DeviceInfo.SerialNumber = XXXXXXXXXX
InternetGatewayDevice.DeviceInfo.HardwareVersion = AR.7519.02
InternetGatewayDevice.DeviceInfo.SoftwareVersion = AR.00.96.315
InternetGatewayDevice.DeviceInfo.ModemFirmwareVersion = 5.4.1.10.1.1
InternetGatewayDevice.DeviceInfo.SpecVersion = 1.0
InternetGatewayDevice.DeviceInfo.ProvisioningCode = XXXXXXXXXXX
InternetGatewayDevice.DeviceInfo.UpTime = 4018
InternetGatewayDevice.DeviceInfo.FirstUseDate = 201X-XX-XXXXXXXXX
InternetGatewayDevice.DeviceInfo.DeviceLog = 
InternetGatewayDevice.DeviceInfo.X_ORANGE-COM_ExternalIPAddress = 127.0.0.1
InternetGatewayDevice.DeviceInfo.X_ORANGE-COM_MACAddress = XXXXXXXXXXXXXX
InternetGatewayDevice.DeviceInfo.X_ORANGE-COM_RescueActive = 0

 A partir de ahí, todo es ir probando con los distintos parámetros. Algunos interesantes son:
  • Datos SIP: http:///cgi-bin/get?param=InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line.1.SIP
  • Más datos SIP: http:///cgi-bin/get?param=InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.SIP 
  • Configuración de la WLAN: http:///cgi-bin/get?param=InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.
  • Configuración del servidor ACS de Orange: http:///cgi-bin/get?param=InternetGatewayDevice.ManagementServer
  • Configuración ADSL: http:///cgi-bin/get?param=InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.1
Como he comentado antes, el CGI admite los parámetros "param" y "object". Sustituyendo "param" por "object" en las urls anteriores el router os devolverá la información en formato XML. Puede ser útil si álguien se anima a codificar un interfaz para ver todo ésto de forma cómoda... y modificarlo de forma cómoda. Porque estamos hablando del CGI "get" pero si recordáis también existe el comando "set" que hace... bueno, creo que todos os imaginaréis lo que hace. Acepta como parámetro el nombre del parámetro TR69 a modificar y su valor. Por ejemplo:
http:///cgi-bin/set?InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.DNSServers=208.67.222.222

Como habréis visto, el interfaz TR-069 nos da la opción de hacer modificaciones en los parámetros de configuración del router sin tener que estar bajando el fichero de backup, descifrándolo, modificándolo, volviéndolo a cifrar y subiéndolo al router. El fichero de configuración tiene muchísimas mas opciones, pero para ciertas modificaciones éste último método es más cómodo.

 Tengo pendiente el análisis de la generación de la clave WIFI por defecto, pero apostaría unas cañas a que puede ser parecido a esto que ya se comentó en SbD hace tiempo.

Ataques:

Hasta aquí hemos hecho un repaso del firmware y las funcionalidades del router, pero éste es un blog de seguridad y no quería dejar el artículo sin poner al menos una forma de atacar el cacharro.

Sabemos que tenemos el router prácticamente bajo nuestro control: podemos modificar el fichero de configuración, podemos modificar el firmware, podemos modificar parámetros TR-069... pero necesitamos tener las credenciales. O esa es la teoría... Ante la reciente moda de poner nombres y bonitos logos a los bugs, no he querido ser menos y os vengo a presentar...

VÓMITO 
(Volcado de Objetos de Memoria Interna Tras Overflow) 

VÓMITO consiste en un fallo en el servidor web implementado por el router que provoca que, ante un desbordamiento de memoria, recibamos un volcado de la misma como respuesta a la petición. El PoC del ataque es sencillo:
 echo `perl -e 'print "HEAD " . print "A"x135660'` | netcat -w 5 80 > vomito

En realidad en lugar de "HEAD" podéis poner "KTULU" mientras enviéis un número de bytes suficientemente grande (a mi el tamaño que me ha permitido sacar volcados mas grandes ha sido ese). Al terminar el volcado el router cascará, y en el fichero "vomito" tendremos unos 200MB del contenido de la memoria del router en el momento del ataque. No hace falta decir que en ese volcado podemos encontrarnos de todo. Y cuando digo de todo también me refiero a credenciales. Y entre todas esas credenciales tenemos las que nos dan acceso al interfaz web del router (y las de SIP, y las de correo si estuviesen definidas, y las de proveedores DNS dinámicos si estuviesen definidas...). Así que esta es la pieza que nos faltaba para poder entrar en el interfaz y, a partir de ahí, comenzar a jugar.

Ésto es interesante si nos encontramos en la red del router. Pero, qué pasa si estamos en Internet y queremos usar VÓMITO contra un LiveBox cualquiera? Desgraciadamente (o afortunadamente, que dirán algunos), he intentado provocar el VÓMITO remotamente de varias formas y la única en la que he tenido éxito ha sido con la opción de "Configuración Remota" activada. Al hacer esto exponemos el servidor web a Internet a través del puerto 8080 del router, y con él el fallo. Esto reduce drásticamente las opciones de explotación remota, pero alguno que otro se encuentra si se busca. En shodan podemos encontrar algunos de estos routers con el filtro:
  • port:8080 Apache "Content-length: 6187" org:"Orange Espana" para el firmware versión 00.96.217
  • port:8080 Apache "Content-length: 6210" org:"Orange Espana" para el firmware versión 00.96.315 (la más actual). 
Aunque un simple escaneo escogiendo bien el rango de IPs basta para encontrarnos alguno que otro. En conjunto tenemos dos escenarios posibles:
  • Escenario "local", desde la red interna: Usar VÓMITO para extraer las credenciales de acceso, cambiar los datos de configuración mediante el interfaz oculto TR-069 o mediante fichero de configuración modificado (metiendo nuestro servidor DNS, por ejemplo), desactivar actualizaciones remotas (eliminando los parámetros del ACS de Orange, por ejemplo) y, si estamos con ganas, crear un firmware troyanizado y sustituir el legítimo con el nuestro.
  • Escenario "remoto": Únicamente si la configuración remota está activada (muy reducido). 
Otros posibles escenarios de ataque remoto son el puerto 5060 (sip) y el puerto 50805 (puerto a través del cual se comunica el subsistema TR-069 del router con el ACS de Orange), pero de momento la investigación no ha dado frutos...

Tenemos la opción de no quedarnos simplemente en intentar explotar routers remotos. Al ser capaces de modificar el firmware, se hace posible (teóricamente al menos) la explotación del ACS mismo. En condiciones normales el router se comunica con el ACS mediante TR-069, se envían datos correctos y todo va como la seda. Si modificamos las respuestas del router podemos poner en un apuro al ACS si tiene algún fallo en el procesado. Podéis leer sobre el tema en esta charla de Shahar Tal en la Defcon y en este white paper de Check Point.

Herramientas:

A continuación os dejo un par de herramientas sobre las que hablaba al inicio del artículo junto a su correspondiente código fuente. Las herramientas están programadas en Java (lo siento, lo sé, en algún momento debí darme un golpe en la cabeza, de verdad que lo siento). Las podéis descargar aquí.

LiveBoxDecoder.jar
Esta herramienta descifra y cifra el fichero de configuración del LiveBox. En caso de descifrar, se le puede pasar un parámetro para generar un fichero con la última sección de la configuración (la que nos sirve para interpretar el resto) descifrada. En caso de que no se proporcione no la genera, no es necesaria para el re-cifrado del fichero de configuración, solo es útil para tener el listado de las variables que podemos modificar y saber sus offsets. El fichero con la última sección descifrada contiene una lista de parámetros con sus nombres, valores y posiciones dentro del fichero de configuración descifrado. Si, por ejemplo, queremos modificar el FTP al que el router manda el informe técnico:

java -jar LiveBoxDecoder.jar d config_dsl.bin offsets.txt
[*] Astoria Networks ARV7519RW22 (Orange LiveBox 2.1) configuration
[*] file decrypter. Decrypts/Encrypts LiveBox 2.1 configuration
[*] files, obtained via Web GUI backup option
[*] Re-encrypted config files can be uploaded to the router via Web GUI
[*] Start decrypting file....
[*] Decrypting header with:
[*] IV = 0x3a 0x2e 0x4f 0xe3 0x15 0xf1 0x43 0x1e 0x12 0x6f 0x43 0x51 0x12 0x7d 0x41 0xbf
[*] Key = 0x1d 0xe5 0xfa 0xb8 0x81 0x91 0x00 0x84 0x11 0xaf 0x53 0xdd 0xe4 0x89 0xea 0xfd
[*] Decrypting body with:
[*] IV = 0x00 0x25 0xe7 0x20 0x3f 0x7a 0xfa 0x25 0x44 0xb4 0x89 0x0a 0x25 0xa3 0xd3 0xd4
[*] Key = 0xa9 0xdc 0x0e 0xf0 0x28 0x67 0x91 0xac 0xc9 0x13 0x86 0x5d 0x2d 0xf8 0x20 0x99
[*] Done with file decryption
[*] Decrypting tail with:
[*] IV = 0x5e 0x1d 0xe0 0x76 0x19 0x0f 0x8c 0x71 0xe1 0x95 0xdc 0xa0 0x75 0x60 0xb9 0x9b
[*] Key = 0x12 0x34 0x56 0x78 0x90 0x12 0x34 0x56 0x78 0x90 0x12 0x34 0x56 0x78 0x90 0x12
[*] Done with tail decryption
Error processing element call_waiting
Error processing element clir
Error processing element call_hold
Error processing element three_pty
Error processing element cfu
Error processing element cfb
Error processing element cfnr
Error processing element enabled
Error processing element keypad
[*] Done


- Este comando creará dos ficheros: config_dsl_decoded.bin con la configuración descifrada, y offsets.txt con los datos para interpretar qué es cada valor y en qué offset está dentro del fichero de configuración descifrado. Buscamos la sección "infoReport" dentro del fichero de offsets. En este caso tenemos que "defServerDom" empieza en la posición 23468 del fichero de configuración. Modificamos el valor en config_dsl_decoded.bin, guardamos y creamos nuestro nuevo fichero de configuración modificado:

java -jar LiveBoxDecoder.jar e config_dsl_decoded.bin nueva_config.bin
[*] Astoria Networks ARV7519RW22 (Orange LiveBox 2.1) configuration
[*] file decrypter. Decrypts/Encrypts LiveBox 2.1 configuration
[*] files, obtained via Web GUI backup option
[*] Re-encrypted config files can be uploaded to the router via Web GUI
[*] Start encrypting file....
[*] Encrypting body with:
[*] IV = 0x00 0x25 0xe7 0x20 0x3f 0x7a 0xfa 0x25 0x44 0xb4 0x89 0x0a 0x25 0xa3 0xd3 0xd4
[*] Key = 0x1a 0xa8 0x80 0xb5 0x44 0x11 0xf1 0x19 0x0c 0xca 0x3d 0xe8 0x77 0x41 0x37 0x89
[*] Computed MD5: 0x17 0x3b 0xe9 0x04 0xe3 0x5f 0x0b 0x36 0x8a 0x3b 0x1e 0x98 0x16 0xf2 0xf3 0x05
[*] Encrypting header with:
[*] IV = 0x3a 0x2e 0x4f 0xe3 0x15 0xf1 0x43 0x1e 0x12 0x6f 0x43 0x51 0x12 0x7d 0x41 0xbf
[*] Key = 0x1d 0xe5 0xfa 0xb8 0x81 0x91 0x00 0x84 0x11 0xaf 0x53 0xdd 0xe4 0x89 0xea 0xfd
[*] Done

- El fichero resultante podemos subirlo al router mediante la opción Administración -> Configuración -> Restaurar la configuración del router.

FirmwareDecoder.jar
Esta herramienta desempaqueta y empaqueta el firmware del LiveBox. Para preparar el firmware:
- dumpear mtd5 del router
- Buscar por la cabecera de la primera sección (04 05 11 20)
- Copiar desde ahí hasta la última aparición de los bytes 78 56 34 12 (debe haber 6 apariciones) + otros 4 bytes para incluir también el CRC32, el resto se descarta.
- Añadir "BRNOSPPH1"+0x00 (42 52 4E 4F 53 50 50 48 31 00) al final del fichero (debería quedar algo como 78 56 34 12 XX XX XX XX 42 52 4E 4F 53 50 50 48 31 00).
- Con esto tenemos el firmware aislado y preparado. Para desempaquetar el firmware:

java -jar FirmwareDecoder.jar d mtd5
[*] Astoria Networks ARV7519RW22 (Orange LiveBox 2.1) firmware file decoder.
[*] Decodes LiveBox 2.1 firmware files, obtained via console dump.
[*] Thanks to Stefan Viehb÷ck for the initial deobfuscation method:
[*] https://sviehb.wordpress.com/2011/09/06/reverse-engineering-an-obfuscated-firmware-image-e01-unpacking/
[*] BRNOSPPH1 signature found
[*] Image size: 5089290 bytes
[*] Image CRC32: 0xff 0xff 0xff 0xff
[*] Obfuscated LZMA part found at offset 0
[*] Obfuscated LZMA part final position: 2416632
[*] Obfuscated LZMA part size: 2416306
[*] Block type: 0x00
[*] Obfuscated LZMA part DONE!
[*] Obfuscated LZMA part found at offset 2416640
[*] Obfuscated LZMA part final position: 3795960
[*] Obfuscated LZMA part size: 1378967
[*] Block type: 0x0a
[*] Obfuscated LZMA part DONE!
[*] Obfuscated LZMA part found at offset 3795968
[*] Obfuscated LZMA part final position: 4103160
[*] Obfuscated LZMA part size: 306515
[*] Block type: 0x0b
[*] Obfuscated LZMA part DONE!
[*] Obfuscated LZMA part found at offset 4103168
[*] Obfuscated LZMA part final position: 4375544
[*] Obfuscated LZMA part size: 271678
[*] Block type: 0x0c
[*] Obfuscated LZMA part DONE!
[*] LZMA part found at offset 4375552
[*] LZMA part final position: 4724728
[*] LZMA part size: 348593
[*] Block type: 0x32
[*] LZMA part DONE!
[*] LZMA part found at offset 4724736
[*] LZMA part final position: 5089272
[*] LZMA part size: 363500
[*] Block type: 0x5a
[*] LZMA part DONE!
[*] Firmware extraction finished.
[*] DO NOT CHANGE PRODUCED FILE NAMES IF YOU WANT TO USE THEM TO CREATE A NEW FIRMWARE!!

- En el nuevo directorio "extracted" tenéis el firmware desempaquetado. Ahora podéis modificarlo y volver a empaquetar los ficheros del directorio "extracted" usando:

java -jar FirmwareDecoder.jar e new_mtd5
[*] Astoria Networks ARV7519RW22 (Orange LiveBox 2.1) firmware file decoder.
[*] Decodes LiveBox 2.1 firmware files, obtained via console dump.
[*] Thanks to Stefan Viehb÷ck for the initial deobfuscation method:
[*] https://sviehb.wordpress.com/2011/09/06/reverse-engineering-an-obfuscated-firmware-image-e01-unpacking/
[*] Processing: 0-2416632.0x00.obfuscated.part...
[*] File Offset: 0
[*] File footer offset: 2416632
[*] Calculated CRC32: 05a592e2
[*] Processing: 2416640-3795960.0x0a.obfuscated.part...
[*] File Offset: 2416640
[*] File footer offset: 3795960
[*] Calculated CRC32: 1cb46a53
[*] Processing: 3795968-4103160.0x0b.obfuscated.part...
[*] File Offset: 3795968
[*] File footer offset: 4103160
[*] Calculated CRC32: 0ff7c372
[*] Processing: 4103168-4375544.0x0c.obfuscated.part...
[*] File Offset: 4103168
[*] File footer offset: 4375544
[*] Calculated CRC32: 8583d2dd
[*] Processing: 4375552-4724728.0x32.lzma.part...
[*] File Offset: 4375552 [*] File footer offset: 4724728
[*] Calculated CRC32: 0d0335e5
[*] Processing: 4724736-5089272.0x5a.lzma.part...
[*] File Offset: 4724736
[*] File footer offset: 5089272
[*] Calculated CRC32: 7dfd186a
[*] Firmware packing done. Now you can upload the new firmware image
[*] using the hidden page http:///system_firmwarel.stm
[*] Password: Oh!123Go

- Y ya se puede cargar en el router usando la página oculta http:///system_firmwarel.stm y la password "Oh!123Go" en el cuadro de texto de la página.

OJOCUIDADO: Puedes cargarte el router. Si vas a trastear con el firmware te recomiendo hacer antes una copia de seguridad de los contenidos de la memoria para poder restaurarlo luego en caso de catástrofe. La herramienta que proporciono puede fallar. A mi no me ha dado problemas pero puede que sea porque me tenga cariño. Antes de usarla, por favor, aseguraos de leer este post de seguridadwireless donde explican cómo cargar el uboot de OpenWRT y restaurar el router a su estado original a partir de la copia de los contenidos de los mtd[0-9]. En caso de no tener copia de seguridad, adiós router.

Espero que os haya parecido interesante (o por lo menos que hayáis llegado hasta aquí despiertos). Como podéis comprobar, me he apoyado bastante en trabajo anteriormente hecho por otras personas para otros routers, y he intentado ampliar un poco ese trabajo. Creo que esta información junto con las herramientas abren bastante campo para seguir investigando, tanto las funcionalidades y parámetros ocultos del router, como sus posibles vulnerabilidades. Así que descargad las herramientas, probadlas, modificadlas, mejoradlas, encontrad fallos... y compartidlos. Y pasad un buen rato que, al fin y al cabo, es de lo que se trata.

Artículo cortesía de un colaborador anónimo.

Fuente: http://www.securitybydefault.com/2015/06/analizando-el-livebox-21-de-orange.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+SecurityByDefault+%28Security+By+Default%29
Palabras claves , , ,
publicado por alonsoclaudio a las 16:34 · 1 Comentario  ·  Recomendar
 
Más sobre este tema ·  Participar
Comentarios (1) ·  Enviar comentario
Hola
Puede por favor decirme quales los datos que debo modificar en el fichero de configuración descifrado par utilizar este router con otros ISP?
como activar telnet o SSH en este router?

Gracias
publicado por brahim, el 28.01.2017 16:24
Enviar comentario

Nombre:

E-Mail (no será publicado):

Sitio Web (opcional):

Recordar mis datos.
Escriba el código que visualiza en la imagen Escriba el código [Regenerar]:
Formato de texto permitido: <b>Negrita</b>, <i>Cursiva</i>, <u>Subrayado</u>,
<li>· Lista</li>
CALENDARIO
Ver mes anterior Junio 2017 Ver mes siguiente
DOLUMAMIJUVISA
123
45678910
11121314151617
18192021222324
252627282930
BUSCADOR
Blog   Web
TÓPICOS
» General (2606)
NUBE DE TAGS  [?]
SECCIONES
» Inicio
ENLACES
MÁS LEÍDOS
» Cómo espiar WhatsApp
» Cómo usar Metashield protector for Client y por qué utilizarlo
» Ejecución remota de código arbitrario en OpenSSH
» Ganar dinero con 1.200 Millones de identidades robadas
» Hardware y sus 4 Funcionamientos Basicos y Principales en una Computadora
» #Phishing masivo a #BancoFrances, #PagoMisCuentas y #Movistar (110 afectados en 4 horas)
» Redes de la Deep Web: CJDNS y la Red Hyperboria
» Unidad Central de Procesamiento CPU
» Vulnerabilidad en Youtube permitió borrar cualquier video
» Wassap, la aplicación que permite usar WhatsApp desde la PC
SE COMENTA...
» Cómo liberar software – guía para principiantes :)
1 Comentario: seo plugin
» Cómo descargar música desde Goear
2 Comentarios: seo plugin, Juanjo
» Cómo espiar WhatsApp
10 Comentarios: Hacktivist, Bayford., carlos quiros, [...] ...
» Analizando el LiveBox 2.1 de Orange
1 Comentario: brahim
» Software libre para punto de venta
2 Comentarios: JOSE, Esc00
SOBRE MÍ
FOTO

Prof. Claudio Enrique Alonso Alvite



» Ver perfil

AL MARGEN
Escuela de Educacion Secundaria Tecnica N 8 de Quilmes
(Técnicos en Informática Personal y Profesional)
FULLServices Network | Blogger | Privacidad