Quark seguridad informática
コンピュータセキュリティ明日
jueves, 4 de junio de 2015
no sólo de Linux vive el pentester
Cuando hablamos sobre auditar un sistema o sistemas, una de las primeras cosas que quizás haga uno sea armarse con una distribución Kali Linux, pero no sólo de Linux vive el pentester, de hecho un buen pentester debe ir más allá del simple uso de ciertas herramientas o sistema operativo.
Si te enfrentas a una auditoría y todo de lo que dispones es de un sistema Windows, quizás esta colección de herramientas llamada Pentest Box te venga como anillo al dedo.
Pentest Box, como acabo de decir, es un conjunto de herramientas que corren bajo Windows y que además puedes llevar en un lápiz USB o algún otro tipo de almacenamiento portátil.
Las herramientas que contiene este framework es bastante amplia y la mayoría de ellas son archiconocidas. Incluso empaqueta una gran cantidad de comandos básicos bien conocidos en sistemas Linux.
Las herramientas están agrupadas en las siguientes categorías:
Web Vulnerability Scanners
Web Applications Proxies
Web Crawlers
Information Gathering
Exploitation Tools
Password Attacks
Android Security
Reverse Engineering
Stress Testing
Sniffing
Forensic Tools
Wireless Attacks
Text Editors
Linux Utilities
Analizando livebox
De un tiempo 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 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í, voy a explicar el proceso del volcado de la memoria.
Gracias de nuevo a espeltron tenemos pass del boot original: Oh!123Go
Versión unificada de u-boot para versiones R01 y R02.
Soporte en trunk de Openwrt.
Soporte VDSL gracias a espeltron:
copiamos el fichero vdsl.bin en /lib/firmware , conectamos la línea y hacemos:
Código:
/etc/init.d/dsl_control stop
/etc/init.d/dsl_control start
/etc/init.d/dsl_control status
Estado actual
Soporte de OpenWrt total, salvo el Wifi y puertos de teléfono.
Es importante entender que el boot esta dividido en dos: uno tuneado que se empeña en arrancar el firmware original siempre y esta protegido por contraseña. Lesgar consiguió saltar esta protección y acceder a la consola de comandos con el procedimiento descrito más abajo.
Una vez ahí accederemos al segundo uboot, desde donde vamos a arrancar imágenes en RAM y desde probar o flashear OpenWrt definitivamente.
También podemos directamente habilitar el modo UART, subir un uboot que corre en RAM y desde ahí flashear un uboot definitivo. En este punto podremos utilizar toda la flash del router, respetando la última partición de configuración.
Finalmente parece que el método más cómodo consiste en hacer corto en la flash, y desde el mismo boot original flashear en su lugar el u-boot nuevo, enviado mediante Xmodem.
Hardware
Todo está contenido en la wiki de OpenWrt:
http://wiki.openwrt.org/toh/arcadyan/arv7519
Atención: no conectar el punto VCC al adaptador TTL-USB dado que no es necesario y se ha comprobado que el router deja de funcionar.
Si alguien quiere poner todo en castellano, bienvenido sea.
Lo importante
Existen dos versiones R01 y R02 que podemos verificar en el arranque o bien mirando la etiqueta bajo el router. Debemos escoger el firmware adecuado. Si no usamos el u-boot o fw adecudado, los puertos ethernet no funcionan.
Es imprescindible soldar el puerto serial. Podemos hacerlo con cables y un soldador de 25W o bien poner pines.
En la wiki tenemos los pines y su correspondencia.
Nuevo manual hecho por Lesgar:
1-Backup
Copiamos el passsword del boot original: Oh!123Go
Arrancamos el router pulsamos tres veces la barra espaciadora
Pegamos la pasword
Accedemos al modo administrador pulsando "!"
Código:
[VR9 Boot]:!
Enter Administrator Mode ! En el [VR9 Boot] pones lo siguiente:
"H"
Y modificas el boot options de FE-FF-FF-FF-FF-FF o FF-FF-FF-FF-FF-FF a:
"FF-00-00-00-00-00"
Pones "linux image" con:
"2"
Reinicias con:
"Y"
Solamente hay que pulsar la tecla J.
De esta forma tendremos un backup 100% original que arrancará por si solo con el firmware de Orange.
Código:
VR9 Boot]:j
Ready to run firmware
U-Boot 2010.06-LANTIQ-v-2.0.26-dirty (Jul 25 2011 - 09:16:19)
CLOCK CPU 500M RAM 250M
DRAM: 128 MiB
Flash: 32 MiB
In: serial
Out: serial
Err: serial
Net: fw_addr=0xa0200000
Internal phy(FE) firmware version: 0x8200
vr9 Switch
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 1
....
...
... Dentro de root@arcadyan haz esto:
Coloca una memoria USB formateada como FAT16 o FAT32. Yo he usado el puerto USB trasero, pero valdria igualmente el otro.
Realiza el backup de todo en menos de 1 minuto:
Código:
cat /dev/mtd0 > /tmp/usb/a1/mtd0.bin
sync
cat /dev/mtd1 > /tmp/usb/a1/mtd1.bin
sync
cat /dev/mtd2 > /tmp/usb/a1/mtd2.bin
sync
cat /dev/mtd3 > /tmp/usb/a1/mtd3.bin
sync
cat /dev/mtd4 > /tmp/usb/a1/mtd4.bin
sync
cat /dev/mtd5 > /tmp/usb/a1/mtd5.bin
sync
cat /dev/mtd6 > /tmp/usb/a1/mtd6.bin
sync
cat /dev/mtd7 > /tmp/usb/a1/mtd7.bin
sync
cat /dev/mtd8 > /tmp/usb/a1/mtd8.bin
sync
cat /dev/mtd9 > /tmp/usb/a1/mtd9.bin
sync
cat /dev/mtd0 > /tmp/usb/a1/mtd0a.bin
sync
cat /dev/mtd1 > /tmp/usb/a1/mtd1a.bin
sync
cat /dev/mtd2 > /tmp/usb/a1/mtd2a.bin
sync
cat /dev/mtd3 > /tmp/usb/a1/mtd3a.bin
sync
cat /dev/mtd4 > /tmp/usb/a1/mtd4a.bin
sync
cat /dev/mtd5 > /tmp/usb/a1/mtd5a.bin
sync
cat /dev/mtd6 > /tmp/usb/a1/mtd6a.bin
sync
cat /dev/mtd7 > /tmp/usb/a1/mtd7a.bin
sync
cat /dev/mtd8 > /tmp/usb/a1/mtd8a.bin
sync
cat /dev/mtd9 > /tmp/usb/a1/mtd9a.bin
sync
Desmontas la unidad USB:
Código:
umount /tmp/usb/a1
Conjectamos el usb al pc y verificamos que se haya copiado bien con un md5sum
Código:
md5sum mtd*
85d71f2f2853cd946b3b11f74286e6c7 mtd0.bin
85d71f2f2853cd946b3b11f74286e6c7 mtd0a.bin
dbc706a9561a93bb1f199f4af9608be3 mtd1a.bin
dbc706a9561a93bb1f199f4af9608be3 mtd1.bin
35e99851d54769f14554603551c4a97c mtd2a.bin
35e99851d54769f14554603551c4a97c mtd2.bin
16a2b702e0f607f2c667592d5f653885 mtd3a.bin
16a2b702e0f607f2c667592d5f653885 mtd3.bin
2261435b7db30104108bf17e14c85b6b mtd4a.bin
2261435b7db30104108bf17e14c85b6b mtd4.bin
4531703a2c0c1f217906e94e293c9f2b mtd5a.bin
4531703a2c0c1f217906e94e293c9f2b mtd5.bin
3e159f50c18d679155c44a62fa6142d8 mtd6a.bin
3e159f50c18d679155c44a62fa6142d8 mtd6.bin
fe95326845fc89fce42a2303a8372712 mtd7a.bin
fe95326845fc89fce42a2303a8372712 mtd7.bin
42be09fa44e3ba8cd9be771817ea89c5 mtd8a.bin
42be09fa44e3ba8cd9be771817ea89c5 mtd8.bin
79309eb3491945f91092fc9612aa139a mtd9a.bin
79309eb3491945f91092fc9612aa139a mtd9.bin
Montar Imagen
Código:
cat mtd0.bin mtd1.bin mtd2.bin mtd3.bin mtd4.bin mtd5.bin mtd6.bin mtd7.bin mtd8.bin mtd9.bin > dump.bin
El comando para hacer eso en Windows sería
Código:
copy /b mtd0.bin+mtd1.bin+mtd2.bin+mtd3.bin+mtd4.bin+mtd5.bin+mtd6.bin+mtd7.bin+mtd8.bin+mtd9.bin dump.bin
copy /b hace las concatenaciones en modo binario sin traducir caracteres pero hay un error en el retorno del carro que genera imagenes mas grandes.
2-Instalacion
Copiamos el passsword del boot original: Oh!123Go
Arrancamos el router pulsamos tres veces la barra espaciadora
Pegamos la pasword
Accedemos al modo administrador pulsando "!"
Código:
[VR9 Boot]:!
Enter Administrator Mode ! Pulsamos "U" para cargar el uboot
Código:
[VR9 Boot]:U
UPLOAD Flash
---------------------------------------
Area Address Length
---------------------------------------
[0] Boot 0xB0000000 512K
[1] Image 0 0xB1280000 6144K
[2] Image 1 0xB1880000 6144K
[3] Configuration 0xB1E80000 1024K
[4] Boot Parameters 0xB1F80000 256K
[5] Flash Image 0xB0000000 32768K
[6] Linux Image 0xB0080000 24576K
[7] Emergency Value 0xB1FC0000 2883584K
---------------------------------------
Enter area to UPLOAD: 0
Upload area 0. Are you sure? (Y/n) Pulsamos "Y" y mandamos por X-modem la imagen de uboot
2.-Instalación de OpenWrt desde u-boot modificado
Muy sencillo; definimos dos nuevas macros y las hacemos permanentes en u-boot con:
Código:
setenv write-openwrt 'tftpboot openwrt-lantiq-xrx200-ARV7519RWV1[color=red]X-[/color]squashfs.image && protect off 0xB0080000 +$filesize && erase 0xB0080000 +$filesize && cp.b $fileaddr 0xB0080000 $filesize'
setenv kernel_addr 0xB0080000
saveenv
(cambiamos la X por la versión de nuestro router).
Al final del post se añade como configura el tftp
Ejecutamos la macro: run write-openwrt,
Código:
arv7519rw # run write-openwrt
ltq_phy: addr 0, link 0, speed 10, duplex 0
ltq_phy: addr 17, link 0, speed 10, duplex 0
ltq_phy: addr 19, link 1, speed 100, duplex 1
Using ltq-eth device
TFTP from server 192.168.1.100; our IP address is 192.168.1.1
Filename 'openwrt-lantiq-xrx200-ARV7519RWV11-squashfs.image'.
Load address: 0x81000000
Loading: #################################################################
#################################################################
#################################################################
########################################################
5 MiB/s
done
Bytes transferred = 3670020 (380004 hex)
............................. done
Un-Protected 29 sectors
............................. done
Erased 29 sectors
Copy to Flash... 10....9....8....7....6....5....4....3....2....1....done
arv7519rw # reset
Crear un servidor TFTP
Si usas windows, el tftpd32 es un servidor que instalas en windows.
http://tftpd32.jounin.net/
http://tftpd32.jounin.net/tftpd32_download.html
Selecciona el programa de instalacion que mejor te convenga y permite el acceso a traves del firewall cuando te lo indique.
Este servidor es muy facil de configurar, solo tienes que indicarle la tarjeta de red que va a usar mediante la IP que tenga asignada.
Le indicas la carpeta que vas a utilizar para compartir (descargar o subir archivos), que normalmente puede estar dentro de la ruta donde se instala el programa.
Cuando activas el servidor tftpd cualquier equipo conectado a tu red puede subir o descargar archivos que tengas compartidos en esa carpeta, mediante el protocolo tftpd y la IP de esa tarjeta de red.
Para que esto funcione la IP de la tarjeta de red tiene que ser la adecuada, segun cada aplicacion en concreto.
Por ejemplo podria ser requisito que la IP fuera: 192.168.1.100, o la que tuviera el uboot fijada como IP del servidor tftpd.
Aunque se pueda usar el protocolo Xmodem muchos uboot con loady suelen utilizar el Ymodem. Prueba a usar el protocolo Ymodem con el hiperterminal de windows. Pero estos procedimientos son muchiiiiiiiiisimo mas lentos. Creo que solo deberían usarse en caso de emergencia.
Volver al estado de fábrica
Encendemos el router:
Código:
ROM VER: ��!D
U-Boot 2014.01-openwrt2-dirty (Apr 27 2014 - 15:57:36) arv7519rw
Board: Arcadyan ARV7519RW
SoC: Lantiq VRX288 v1.1
CPU: 500 MHz
IO: 250 MHz
BUS: 250 MHz
BOOT: NOR
DRAM: 64 MiB
Flash: 32 MiB
In: serial
Out: serial
Err: serial
Net: ltq-eth
Hit any key to stop autoboot:
Pulsamos una tecla y una vez hemos accedido al prompt tecleamos tftpboot dump.bin. Estamos cargando por tftp el backup de la flash (que previamente has sacado de TU flash) en la ram del router
Código:
arv7519rw # tftpboot dump.bin
ltq_phy: addr 0, link 0, speed 10, duplex 0
ltq_phy: addr 17, link 0, speed 10, duplex 0
ltq_phy: addr 18, link 0, speed 10, duplex 0
ltq_phy: addr 19, link 1, speed 100, duplex 1
ltq_phy: addr 20, link 0, speed 10, duplex 0
Using ltq-eth device
TFTP from server 192.168.1.2; our IP address is 192.168.1.1
Filename 'dump.bin'.
Load address: 0x81000000
Loading: * #######################################################
#################################################################
[...]
#################################################################
#################################################################
###########
2.5 MiB/s
done
Bytes transferred = 33554432 (2000000 hex)
Ahora solo falta grabar,en la flash del router, lo que hemos subido a la ram. Tecleamos run write-uboot-nor
Código:
arv7519rw # run write-uboot-nor
Un-Protected 256 sectors
................................. done
Erased 256 sectors
Copy to Flash... 10....9....8....7....6....5....4....3....2....1....doneCuando haya terminado solo faltaría resetear el router. Tecleamos reset
Código:
arv7519rw # reset
ROM VER: 1®
ROM VER: 1.0.5
CFG 01
Tuning DDR begin
DDR Access auto data-eye tuning Rev 0.3a
DDR size from 0xa0000000 - 0xa7ffffff
DDR check ok... start booting...
=======================================================================
Wireless ADSL IAD VR9 Loader v0.70.01 build Mar 26 2012 13:36:53
Arcadyan Technology Corporation
=======================================================================
A1x VR9
0xbe22ff1c : 70240000
0xBf203014 : 70240000
MXIC MX29GL256EL top boot 16-bit mode found
Copying boot params.....DONE
Enter command mode ...
Get Primary to 0.....
Image Check from FLASH_AREA_IMAGE_0 : Passed.
Recordar que si para hacer el backup habeis cambiado algo en el brnboot, hay que dejarlo como estaba al principio.
Nota: para que arranque por defecto sea el fimware de orange hay que teclear 3 en el prompt del vrboot.
Código:
[VR9 Boot]:3
Set to Supertask image done
Métodos de emergencia
Activar UART
"Precauciones iniciales del ARV7519RW22 y casos catastroficos"
erase Flash
conectar vcc
NUNCA conecteis el pin VCC con adaptadores serial USB, ya que no lo necesita y es peligroso.
Modo UART
Usar resistencias
Creditos:
Pteridium, Gmtii, Espeltron, www-www, jmcabgam y alguno más que seguro se me olvida
Configurar los parámetros de uboot después de haberlo flasheado
Podéis configurar las IPs del servidor y del router en el uboot como os dé la gana, pero la MAC es conveniente que la cojáis de la etiqueta que lleva el router.
Código:
setenv ipaddr 192.168.1.3
setenv serverip 192.168.1.2
setenv ethaddr 88:03:55:XX:XX:XX
saveenv
Reflashear el uboot
Código:
tftpboot u-boot.bin
write-uboot-nor
Iniciar una imagen initramfs desde uboot
Para arrancar la imagen initramfs es necesario que modifiquéis las direcciones IP y la MAC tal y como aparece descrito en este mismo post.
Código:
tftpboot openwrt-lantiq-xway-ARV7519RWV1x-uImage-initramfs
bootm
Flashear una imagen squashfs desde uboot
Para arrancar la imagen initramfs es necesario que modifiquéis las direcciones IP y la MAC tal y como aparece descrito en este mismo post.
Código:
tftp openwrt-lantiq-xway-ARV7519RWV1x-squashfs.image
erase B0080000 +$filesize
cp.b 81000000 B0080000 $filesize
Descargas
uboot-lantiq-2013_10-arv7519rw22
Firmwares OpenWrt para R01 y R02
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.
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,
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
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 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 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. en caso de no tener copia de seguridad, adiós router.
Como pueden comprobar, me he apoyado bastante en trabajos hechos por otras personas para otros routers, y he intentado ampliar un poco ese trabajo.
Versión unificada de u-boot para versiones R01 y R02.
Soporte en trunk de Openwrt.
Soporte VDSL gracias a espeltron:
copiamos el fichero vdsl.bin en /lib/firmware , conectamos la línea y hacemos:
Código:
/etc/init.d/dsl_control stop
/etc/init.d/dsl_control start
/etc/init.d/dsl_control status
Estado actual
Soporte de OpenWrt total, salvo el Wifi y puertos de teléfono.
Es importante entender que el boot esta dividido en dos: uno tuneado que se empeña en arrancar el firmware original siempre y esta protegido por contraseña. Lesgar consiguió saltar esta protección y acceder a la consola de comandos con el procedimiento descrito más abajo.
Una vez ahí accederemos al segundo uboot, desde donde vamos a arrancar imágenes en RAM y desde probar o flashear OpenWrt definitivamente.
También podemos directamente habilitar el modo UART, subir un uboot que corre en RAM y desde ahí flashear un uboot definitivo. En este punto podremos utilizar toda la flash del router, respetando la última partición de configuración.
Finalmente parece que el método más cómodo consiste en hacer corto en la flash, y desde el mismo boot original flashear en su lugar el u-boot nuevo, enviado mediante Xmodem.
Hardware
Todo está contenido en la wiki de OpenWrt:
http://wiki.openwrt.org/toh/arcadyan/arv7519
Atención: no conectar el punto VCC al adaptador TTL-USB dado que no es necesario y se ha comprobado que el router deja de funcionar.
Si alguien quiere poner todo en castellano, bienvenido sea.
Lo importante
Existen dos versiones R01 y R02 que podemos verificar en el arranque o bien mirando la etiqueta bajo el router. Debemos escoger el firmware adecuado. Si no usamos el u-boot o fw adecudado, los puertos ethernet no funcionan.
Es imprescindible soldar el puerto serial. Podemos hacerlo con cables y un soldador de 25W o bien poner pines.
En la wiki tenemos los pines y su correspondencia.
Nuevo manual hecho por Lesgar:
1-Backup
Copiamos el passsword del boot original: Oh!123Go
Arrancamos el router pulsamos tres veces la barra espaciadora
Pegamos la pasword
Accedemos al modo administrador pulsando "!"
Código:
[VR9 Boot]:!
Enter Administrator Mode ! En el [VR9 Boot] pones lo siguiente:
"H"
Y modificas el boot options de FE-FF-FF-FF-FF-FF o FF-FF-FF-FF-FF-FF a:
"FF-00-00-00-00-00"
Pones "linux image" con:
"2"
Reinicias con:
"Y"
Solamente hay que pulsar la tecla J.
De esta forma tendremos un backup 100% original que arrancará por si solo con el firmware de Orange.
Código:
VR9 Boot]:j
Ready to run firmware
U-Boot 2010.06-LANTIQ-v-2.0.26-dirty (Jul 25 2011 - 09:16:19)
CLOCK CPU 500M RAM 250M
DRAM: 128 MiB
Flash: 32 MiB
In: serial
Out: serial
Err: serial
Net: fw_addr=0xa0200000
Internal phy(FE) firmware version: 0x8200
vr9 Switch
Type "run flash_nfs" to mount root filesystem over NFS
Hit any key to stop autoboot: 1
....
...
... Dentro de root@arcadyan haz esto:
Coloca una memoria USB formateada como FAT16 o FAT32. Yo he usado el puerto USB trasero, pero valdria igualmente el otro.
Realiza el backup de todo en menos de 1 minuto:
Código:
cat /dev/mtd0 > /tmp/usb/a1/mtd0.bin
sync
cat /dev/mtd1 > /tmp/usb/a1/mtd1.bin
sync
cat /dev/mtd2 > /tmp/usb/a1/mtd2.bin
sync
cat /dev/mtd3 > /tmp/usb/a1/mtd3.bin
sync
cat /dev/mtd4 > /tmp/usb/a1/mtd4.bin
sync
cat /dev/mtd5 > /tmp/usb/a1/mtd5.bin
sync
cat /dev/mtd6 > /tmp/usb/a1/mtd6.bin
sync
cat /dev/mtd7 > /tmp/usb/a1/mtd7.bin
sync
cat /dev/mtd8 > /tmp/usb/a1/mtd8.bin
sync
cat /dev/mtd9 > /tmp/usb/a1/mtd9.bin
sync
cat /dev/mtd0 > /tmp/usb/a1/mtd0a.bin
sync
cat /dev/mtd1 > /tmp/usb/a1/mtd1a.bin
sync
cat /dev/mtd2 > /tmp/usb/a1/mtd2a.bin
sync
cat /dev/mtd3 > /tmp/usb/a1/mtd3a.bin
sync
cat /dev/mtd4 > /tmp/usb/a1/mtd4a.bin
sync
cat /dev/mtd5 > /tmp/usb/a1/mtd5a.bin
sync
cat /dev/mtd6 > /tmp/usb/a1/mtd6a.bin
sync
cat /dev/mtd7 > /tmp/usb/a1/mtd7a.bin
sync
cat /dev/mtd8 > /tmp/usb/a1/mtd8a.bin
sync
cat /dev/mtd9 > /tmp/usb/a1/mtd9a.bin
sync
Desmontas la unidad USB:
Código:
umount /tmp/usb/a1
Conjectamos el usb al pc y verificamos que se haya copiado bien con un md5sum
Código:
md5sum mtd*
85d71f2f2853cd946b3b11f74286e6c7 mtd0.bin
85d71f2f2853cd946b3b11f74286e6c7 mtd0a.bin
dbc706a9561a93bb1f199f4af9608be3 mtd1a.bin
dbc706a9561a93bb1f199f4af9608be3 mtd1.bin
35e99851d54769f14554603551c4a97c mtd2a.bin
35e99851d54769f14554603551c4a97c mtd2.bin
16a2b702e0f607f2c667592d5f653885 mtd3a.bin
16a2b702e0f607f2c667592d5f653885 mtd3.bin
2261435b7db30104108bf17e14c85b6b mtd4a.bin
2261435b7db30104108bf17e14c85b6b mtd4.bin
4531703a2c0c1f217906e94e293c9f2b mtd5a.bin
4531703a2c0c1f217906e94e293c9f2b mtd5.bin
3e159f50c18d679155c44a62fa6142d8 mtd6a.bin
3e159f50c18d679155c44a62fa6142d8 mtd6.bin
fe95326845fc89fce42a2303a8372712 mtd7a.bin
fe95326845fc89fce42a2303a8372712 mtd7.bin
42be09fa44e3ba8cd9be771817ea89c5 mtd8a.bin
42be09fa44e3ba8cd9be771817ea89c5 mtd8.bin
79309eb3491945f91092fc9612aa139a mtd9a.bin
79309eb3491945f91092fc9612aa139a mtd9.bin
Montar Imagen
Código:
cat mtd0.bin mtd1.bin mtd2.bin mtd3.bin mtd4.bin mtd5.bin mtd6.bin mtd7.bin mtd8.bin mtd9.bin > dump.bin
El comando para hacer eso en Windows sería
Código:
copy /b mtd0.bin+mtd1.bin+mtd2.bin+mtd3.bin+mtd4.bin+mtd5.bin+mtd6.bin+mtd7.bin+mtd8.bin+mtd9.bin dump.bin
copy /b hace las concatenaciones en modo binario sin traducir caracteres pero hay un error en el retorno del carro que genera imagenes mas grandes.
2-Instalacion
Copiamos el passsword del boot original: Oh!123Go
Arrancamos el router pulsamos tres veces la barra espaciadora
Pegamos la pasword
Accedemos al modo administrador pulsando "!"
Código:
[VR9 Boot]:!
Enter Administrator Mode ! Pulsamos "U" para cargar el uboot
Código:
[VR9 Boot]:U
UPLOAD Flash
---------------------------------------
Area Address Length
---------------------------------------
[0] Boot 0xB0000000 512K
[1] Image 0 0xB1280000 6144K
[2] Image 1 0xB1880000 6144K
[3] Configuration 0xB1E80000 1024K
[4] Boot Parameters 0xB1F80000 256K
[5] Flash Image 0xB0000000 32768K
[6] Linux Image 0xB0080000 24576K
[7] Emergency Value 0xB1FC0000 2883584K
---------------------------------------
Enter area to UPLOAD: 0
Upload area 0. Are you sure? (Y/n) Pulsamos "Y" y mandamos por X-modem la imagen de uboot
2.-Instalación de OpenWrt desde u-boot modificado
Muy sencillo; definimos dos nuevas macros y las hacemos permanentes en u-boot con:
Código:
setenv write-openwrt 'tftpboot openwrt-lantiq-xrx200-ARV7519RWV1[color=red]X-[/color]squashfs.image && protect off 0xB0080000 +$filesize && erase 0xB0080000 +$filesize && cp.b $fileaddr 0xB0080000 $filesize'
setenv kernel_addr 0xB0080000
saveenv
(cambiamos la X por la versión de nuestro router).
Al final del post se añade como configura el tftp
Ejecutamos la macro: run write-openwrt,
Código:
arv7519rw # run write-openwrt
ltq_phy: addr 0, link 0, speed 10, duplex 0
ltq_phy: addr 17, link 0, speed 10, duplex 0
ltq_phy: addr 19, link 1, speed 100, duplex 1
Using ltq-eth device
TFTP from server 192.168.1.100; our IP address is 192.168.1.1
Filename 'openwrt-lantiq-xrx200-ARV7519RWV11-squashfs.image'.
Load address: 0x81000000
Loading: #################################################################
#################################################################
#################################################################
########################################################
5 MiB/s
done
Bytes transferred = 3670020 (380004 hex)
............................. done
Un-Protected 29 sectors
............................. done
Erased 29 sectors
Copy to Flash... 10....9....8....7....6....5....4....3....2....1....done
arv7519rw # reset
Crear un servidor TFTP
Si usas windows, el tftpd32 es un servidor que instalas en windows.
http://tftpd32.jounin.net/
http://tftpd32.jounin.net/tftpd32_download.html
Selecciona el programa de instalacion que mejor te convenga y permite el acceso a traves del firewall cuando te lo indique.
Este servidor es muy facil de configurar, solo tienes que indicarle la tarjeta de red que va a usar mediante la IP que tenga asignada.
Le indicas la carpeta que vas a utilizar para compartir (descargar o subir archivos), que normalmente puede estar dentro de la ruta donde se instala el programa.
Cuando activas el servidor tftpd cualquier equipo conectado a tu red puede subir o descargar archivos que tengas compartidos en esa carpeta, mediante el protocolo tftpd y la IP de esa tarjeta de red.
Para que esto funcione la IP de la tarjeta de red tiene que ser la adecuada, segun cada aplicacion en concreto.
Por ejemplo podria ser requisito que la IP fuera: 192.168.1.100, o la que tuviera el uboot fijada como IP del servidor tftpd.
Aunque se pueda usar el protocolo Xmodem muchos uboot con loady suelen utilizar el Ymodem. Prueba a usar el protocolo Ymodem con el hiperterminal de windows. Pero estos procedimientos son muchiiiiiiiiisimo mas lentos. Creo que solo deberían usarse en caso de emergencia.
Volver al estado de fábrica
Encendemos el router:
Código:
ROM VER: ��!D
U-Boot 2014.01-openwrt2-dirty (Apr 27 2014 - 15:57:36) arv7519rw
Board: Arcadyan ARV7519RW
SoC: Lantiq VRX288 v1.1
CPU: 500 MHz
IO: 250 MHz
BUS: 250 MHz
BOOT: NOR
DRAM: 64 MiB
Flash: 32 MiB
In: serial
Out: serial
Err: serial
Net: ltq-eth
Hit any key to stop autoboot:
Pulsamos una tecla y una vez hemos accedido al prompt tecleamos tftpboot dump.bin. Estamos cargando por tftp el backup de la flash (que previamente has sacado de TU flash) en la ram del router
Código:
arv7519rw # tftpboot dump.bin
ltq_phy: addr 0, link 0, speed 10, duplex 0
ltq_phy: addr 17, link 0, speed 10, duplex 0
ltq_phy: addr 18, link 0, speed 10, duplex 0
ltq_phy: addr 19, link 1, speed 100, duplex 1
ltq_phy: addr 20, link 0, speed 10, duplex 0
Using ltq-eth device
TFTP from server 192.168.1.2; our IP address is 192.168.1.1
Filename 'dump.bin'.
Load address: 0x81000000
Loading: * #######################################################
#################################################################
[...]
#################################################################
#################################################################
###########
2.5 MiB/s
done
Bytes transferred = 33554432 (2000000 hex)
Ahora solo falta grabar,en la flash del router, lo que hemos subido a la ram. Tecleamos run write-uboot-nor
Código:
arv7519rw # run write-uboot-nor
Un-Protected 256 sectors
................................. done
Erased 256 sectors
Copy to Flash... 10....9....8....7....6....5....4....3....2....1....doneCuando haya terminado solo faltaría resetear el router. Tecleamos reset
Código:
arv7519rw # reset
ROM VER: 1®
ROM VER: 1.0.5
CFG 01
Tuning DDR begin
DDR Access auto data-eye tuning Rev 0.3a
DDR size from 0xa0000000 - 0xa7ffffff
DDR check ok... start booting...
=======================================================================
Wireless ADSL IAD VR9 Loader v0.70.01 build Mar 26 2012 13:36:53
Arcadyan Technology Corporation
=======================================================================
A1x VR9
0xbe22ff1c : 70240000
0xBf203014 : 70240000
MXIC MX29GL256EL top boot 16-bit mode found
Copying boot params.....DONE
Enter command mode ...
Get Primary to 0.....
Image Check from FLASH_AREA_IMAGE_0 : Passed.
Recordar que si para hacer el backup habeis cambiado algo en el brnboot, hay que dejarlo como estaba al principio.
Nota: para que arranque por defecto sea el fimware de orange hay que teclear 3 en el prompt del vrboot.
Código:
[VR9 Boot]:3
Set to Supertask image done
Métodos de emergencia
Activar UART
"Precauciones iniciales del ARV7519RW22 y casos catastroficos"
erase Flash
conectar vcc
NUNCA conecteis el pin VCC con adaptadores serial USB, ya que no lo necesita y es peligroso.
Modo UART
Usar resistencias
Creditos:
Pteridium, Gmtii, Espeltron, www-www, jmcabgam y alguno más que seguro se me olvida
Configurar los parámetros de uboot después de haberlo flasheado
Podéis configurar las IPs del servidor y del router en el uboot como os dé la gana, pero la MAC es conveniente que la cojáis de la etiqueta que lleva el router.
Código:
setenv ipaddr 192.168.1.3
setenv serverip 192.168.1.2
setenv ethaddr 88:03:55:XX:XX:XX
saveenv
Reflashear el uboot
Código:
tftpboot u-boot.bin
write-uboot-nor
Iniciar una imagen initramfs desde uboot
Para arrancar la imagen initramfs es necesario que modifiquéis las direcciones IP y la MAC tal y como aparece descrito en este mismo post.
Código:
tftpboot openwrt-lantiq-xway-ARV7519RWV1x-uImage-initramfs
bootm
Flashear una imagen squashfs desde uboot
Para arrancar la imagen initramfs es necesario que modifiquéis las direcciones IP y la MAC tal y como aparece descrito en este mismo post.
Código:
tftp openwrt-lantiq-xway-ARV7519RWV1x-squashfs.image
erase B0080000 +$filesize
cp.b 81000000 B0080000 $filesize
Descargas
uboot-lantiq-2013_10-arv7519rw22
Firmwares OpenWrt para R01 y R02
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: 0x32547698, 0xFFFFFFFF0xFFFFFFFF, 0x78563412...). 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:
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: 0x32547698, 0xFFFFFFFF0xFFFFFFFF, 0x78563412...). 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.
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,
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
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...
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 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. en caso de no tener copia de seguridad, adiós router.
Como pueden comprobar, me he apoyado bastante en trabajos hechos por otras personas para otros routers, y he intentado ampliar un poco ese trabajo.
martes, 2 de junio de 2015
Google sigue sin reparar el Issue chrome
Google Chrome introdujo, en el interfaz de usuario gráfico, la opción de bloquear Javascript en determinadas URLs. Esta es una opción que permite evitar problemas de ataques derivados de sitios maliciosos o vulnerados que buscan engañar o atacar al usuario por medio de Javascript. Por seguridad, un usuario puede decidir deshabilitar javascript en un conjunto de URLS. Sin embargo, un compañero en el SOCtano se encontró con esta sencilla forma de saltarselo.
El funcionamiento es el siguiente, supongamos esta URL http://www.android.com/. En ella, se puede comprobar que Javascript está habilitado y funcionando. Basta con pedirla directamente en el navegador y hacer un clic en el botón para comprobar como Javascript funciona
Ahora bien, haciendo uso de la función de deshabilitar Javascript en este sitio procedemos a bloquearlo.
Una vez hecho esto, si se intenta acceder al sitio web bloqueado, se obtiene una página web en la que no se ha activado Javascript.
Ahora cerramos el navegador - esto es importante pues si en la misma sesión se ha bloqueado ya una vez el sitio, no lo habilita más - y abrimos el sitio web dentro de un iframe y lo que se obtiene, a pesar de que la URL está bloqueada, es que se carga la página con Javascript.
en Conclusion el fallo sigue existiendo, y se puede saltar el filtrado de una ejecución de un dominio con meter la llamada en un iframe este bug fue reportado por primera vez por el doctor en informatica chema alonso y hasta la fecha se sigue en espera igual quizas chema hasta olvido esto.
El funcionamiento es el siguiente, supongamos esta URL http://www.android.com/. En ella, se puede comprobar que Javascript está habilitado y funcionando. Basta con pedirla directamente en el navegador y hacer un clic en el botón para comprobar como Javascript funciona
Ahora bien, haciendo uso de la función de deshabilitar Javascript en este sitio procedemos a bloquearlo.
opciones avanzadas /configurar contenido/javascript
Una vez hecho esto, si se intenta acceder al sitio web bloqueado, se obtiene una página web en la que no se ha activado Javascript.
Ahora cerramos el navegador - esto es importante pues si en la misma sesión se ha bloqueado ya una vez el sitio, no lo habilita más - y abrimos el sitio web dentro de un iframe y lo que se obtiene, a pesar de que la URL está bloqueada, es que se carga la página con Javascript.
google aun no ha dado respuesta desde no se hace 5 años
Bueno, pues ahí es nada. Así funciona este filtrado. Al no hacer la comprobación en base a la URL del recurso, cualquier iframe puede saltarse el filtro. Así, una web permitida podrá ejecutar todo el código javascript/cargar plugins/abrir popups/abrir imágenes de cualquier lugar del mundo. Así, si abres el javascript a tu sistema de webmail y alguien te manda un mail en html o entras en una web en la que se ha metido un iframe, no importa si está bloqueado.
Año 2015 que no dice google Es un bug, que afecta a la seguridad, y lo arreglaremos
bug ha sido re-calificado para definirlo comobug, y ahora sí se define como un bug que afecta a la Seguridad, además de que la prioridad ha pasado de 3 a 2, por lo que parece que tiene más posibilidades de ser tratado. Estamos en la versión Google Chrome 43, en el año 2015
Bueno, pues ahí es nada. Así funciona este filtrado. Al no hacer la comprobación en base a la URL del recurso, cualquier iframe puede saltarse el filtro. Así, una web permitida podrá ejecutar todo el código javascript/cargar plugins/abrir popups/abrir imágenes de cualquier lugar del mundo. Así, si abres el javascript a tu sistema de webmail y alguien te manda un mail en html o entras en una web en la que se ha metido un iframe, no importa si está bloqueado.
Año 2015 que no dice google Es un bug, que afecta a la seguridad, y lo arreglaremos
bug ha sido re-calificado para definirlo comobug, y ahora sí se define como un bug que afecta a la Seguridad, además de que la prioridad ha pasado de 3 a 2, por lo que parece que tiene más posibilidades de ser tratado. Estamos en la versión Google Chrome 43, en el año 2015
en Conclusion el fallo sigue existiendo, y se puede saltar el filtrado de una ejecución de un dominio con meter la llamada en un iframe este bug fue reportado por primera vez por el doctor en informatica chema alonso y hasta la fecha se sigue en espera igual quizas chema hasta olvido esto.
Facebook ahora cifrara
Como quería probarlo, configuré el servicio en una de mis cuentas de Facebook, y se tarda bastante poco en tenerlo funcionando. Para ello hay que ir a esta dirección de Facebook para subir tu clave pública PGP o bien escanear el codigo QR y seleccionar la opción de que todas las comunicaciones vayan cifradas a partir de ese momento.
Una vez configurada la comunicación cifrada, se recibirá un mensaje - que por supuesto irá cifrado con la clave pública PGP que acabamos de configurar Este mensaje lleva cifrada la URL de confirmación de la comunicación cifrada para el futuro, por lo que es una buena forma de garantizar que has podido descifrar el mensaje.
Durante el proceso de configuración de la clave pública, aparecen muchas alertas de Facebook en las que te dejan claro que si pierdes la clave PGP y la contraseña deFacebook, entonces no podrás recuperar la cuenta. Esto es porque entre las comunicaciones que van a ir cifradas se encuentran las que envían los códigos de recuperación.
Por supuesto, el que se cifren estos mensajes ayuda a evitar que alguien pueda robar la cuenta además de evitar cualquier man in the middle entre medias. Este sistema de Facebook parece que, añadido al movimiento de poner Facebook directamente en la red TOR
jueves, 21 de mayo de 2015
cursos libres de seguridad informatica
El material parece que es de hace 2 ó 3 años, pero los conceptos son válidos todavía.
Copio y pego el índice por interesa.
General Knowledge – Start here. This knowledge will help you better understand how to go about learning the rest of the courses.
1.1 Purpose
1.2 Hacking
1.3 Programming
1.4 Networking Basics
Password Hacking – All types of password hacking attacks.
Modules
0. Introduction
1. Passwords
2. Password Cracking
3. Password Hash
4. Online vs. Offline
5. Attack Types
a. Dictionary
b. Bruteforce
c. Hybrid
d. Rainbow Tables
e. Salts
6. Alternative
7. Speed
8. Secure Passwords
Examples
1. Hash Types
2. Cracking Windows Passwords
3. Create Rainbow Tables
4. Database Dump
5. Web Form
6. Distributed Cracking
Network Hacking – Learn how to hack networks by going through the five phases starting with Reconnaissance.
1. Reconnaissance
DNS (Domain Name System)
Network Reconnaissance
DNS Cache Snooping
2. Network Scanning
3. Network Mapping
4. Metasploit
Metasploit Intro
Metasploit Basics
Reconnaissance Scanning
Vulnerability Scanners Part 1
Vulnerability Scanners Part 2
Vulnerability Scanners Part 3
5. Nessus
6. ARP Spoofing
Intro to ARP Spoofing
ARP Spoofing Examples
ARP Spoofing with DSNIFF
Web Hacking – Learn about all the different types of attacks against web applications, the most popular form of hacking today.
0. Web Hacking
1. Phishing
Tabnabbing
Tabnabbing Examples
2. Cross Site Scripting (XSS)
Reflected Cross Site Scripting (XSS)
Session Hijacking
Session Hijacking Examples
Stored Cross Site Scripting (XSS)
3. Cross Site Request Forgery (CSRF)
4. SQL Injection
SQL Injection Intro
Mysql Intro
Mysql Injection
Information Schema
5. Clickjacking
Facebook Hacking Course
1. Introduction
2. Phishing
What is phishing?
Creating The Phishing Page
Uploading Files
Uploading Situation
3. Social Engineering
What is Social Engineering?
Telephone Example
Telephone Example Analysis
Spoofing
4. Malware
Introduction
Creating a Keylogger
Binding
Crypting
Keylogger Infecting
Trojans
Trojan Infecting
Spreading
5. Anonymizing
Anonymous Signup
Link Shortener
More Techniques
More Techniques Part 2
Packet Sender algo mas que TCP
Cuando trabajas en redes, desarrollas alguna aplicación cliente/servidor, cuando quieres probar la seguridad de algún servicio mandándole paquetes mal formados, pruebas de estrés, etc, tener las herramientas adecuadas te harán la vida mucho más fácil.
Quizás para los distintos escenarios que he enumerado anterioremente haya herramientas especializadas en cada caso, pero en esta entrada quería comentar Packet Sender.
Packet Sender es una utilidad multiplataforma (Windows, Mac y Linux) que nos permite la definición y el envío de paquetes TCP y UDP. Ésta nos permite definir la dirección IP destino, el puerto, el tipo (TCP o UDP) y el contenido del paquete en sí.
También nos ofrece la posibilidad de crear conexiones TCP persistente (envío de paquetes usando la misma conexión), podemos guardar los paquetes que hemos creado, incluso el tráfico generado. Además lleva integrado un servidor UDP y otro TCP, con el podemos hacer nuestras pruebas.
La aplicación es muy simple, pero muy juguetona. Además podemos interactuar con ella desde la línea de comandos pasándole los parámetros que queramos o si no le pasamos ningún parámetro en la llamada, nos ofrece una interfaz gráfica que nos lo pone todo mucho más fácil.
Como decía antes hay versiones para Windows, Mac OS X y Linux.
La aplicación es Open Source y su código fuente está disponible en Github.
También existe una versión de esta utilidad para Android y iOS, pero ambos proyectos han sido abandonados en detrimento de la versión de escritorio.
A mi personalmente siempre me ha encantado netcat y también ipsend, desde mi punto de vista son mucho más potentes, pero quizás menos amigables.
AIMSICD un proyecto con futuro
Antes de hablar de AIMSICD y StingRays, tenemos que hablar de IMSI-Catcher.
IMSI (International Mobile Subscriber Identity) Catcher es una tecnología de escucha o monitorización del tráfico generado por teléfonos móviles. Es básicamente una torre false de telefonía móvil que se sitúa entre un teléfono y una torre legítima. Lo que se conoce como un man in the middle.
Este tipo de dispositivos es conocido que los usan las fuerzas del orden y agencias de inteligencia en los EEUU, aunque parece que también se usan afuera de las fronteras del país estadounidense.
StingRay es el nombre de un IMSI-Catcher creado por la empresa Harris Corporation, inicialmente para las fuerzas armadas y agencias de inteligencia. Dicho producto fue tan conocido que es StingRay el nombre con el que se referencia a cualquier dispositivo IMSI-Catcher.
Aunque en la definición de IMSI-Catcher hablamos de torre de telefonía, los StingRays pueden llegar a ser bastante pequeños. De hecho, se suelen instalar en coches, aviones o incluso llevar en la mano.
Las fuerzas del orden los suelen usar en protestas o mifestaciones, para no sólo monitorizar el posible tráfico, sino que también podrán saber quién estuvo presente (si vas a una manifestación no te lleves el móvil).
Aquí tienes una lista de charlas/cobertura en las que se ha tocado este tema:
YouTube: StingRay Warrantless Wiretap
DEF CON 18 – Practical Cellphone Spying
StingRays: Biggest Technological Threat
NSA-Killings with IMSI-Catcher drones
Meet the machines that steal your data
Espionage on Norwegian Politicians
Secret U.S. Spy Program on Planes
IMSI-Catcher Live Demonstration
28c3: Defending mobile phones
How easy it is to clone phones
Ahora que ya sabemos que son los StingRays, hablemos de AIMSICD.
AIMSICD (Android IMSI-Catcher Detector), es un proyecto que está orientado en la detección de StingRays y como su nombre índica, es para sistemas Android.
Esta aplicación NO evita que puedas ser interceptado, lo que hace es que te avisa si detecta que tu teléfono se ha conectado a un StingRay.
Los métodos de detección que usa son:
Consistencia de la información de la torre
Previene la instalación silenciosa de aplicaciones
Chequea cambios en la célula y localización del código de área
Cambios en la fuerza de la señal
Detección de SMS silenciosos
Detecta cambios de la estación base
La aplicación no está en Google Play, pero te la puedes descargar en formato zip o tar. Si prefieres el código fuente, lo tienes en Github.
El proyecto está en fase Alpha ahora mismo, con lo que no es 100% fiable.
Suscribirse a:
Entradas (Atom)