Introducción al Hackeo de Routers. Puerto Serie
HACKING
Introducción al Hackeo de Routers. Puerto Serie
2016-12-23
Por
Mike Anic

Muchos de los routers Wifi de bajo coste esconden misterios en su interior... Bueno, lo que queremos decir es que muchos de ellos ofrecen un puerto serie con el que acceder a la consola del sistema GNU/Linux que utilizan. En este artículo os vamos a contar localizarlos y acceder a ellos.
Antes de comenzar, aquí va el mensajillo obligatorio cada vez que os contamos como, potencialmente, destruir vuestros dispositivos o incluso haceros daño... Básicamente esto quiere decir que si la liáis es vuestro problema.

Ni el autor de este artículo, ni la Revista On-line Occam's Razor se hacen responsable de cualquier daño que se pueda causar derivado del contenido de este artículo
    Se responsable, aprende y presta atención para no hacerte daño y para no destruir tu equipo.

    Normalmente, una vez que desmontes el dispositivo habrás perdido la garantía. Utiliza dispositivos viejos fuera de garantía o atente a las consecuencias.

    Los routers deben conectarse a la red eléctrica principal. Ten mucho cuidado si manipulas el dispositivo cuando está encendido. Intenta hacer todas las comprobaciones/conexiones posibles con el dispositivo apagado

    En general conectar el pin Vcc puede dañar el dispositivo. Enseguida sabrás de lo que hablamos... Avisado estás

Finalmente comentaros que el contenido de este artículo es una versión en castellano extendida del siguiente artículo en inglés.

http://papermint-designs.com/dmo-blog/2016-12-hardware-hacking-box--serial-access-to-routers

Sin más preámbulos... amo allá

La Víctima

Nuestra víctima va a ser un TP-Link WR841N. Se trata de un router un poco viejo (uno que utilizábamos para pruebas) y de bajo coste (unos 20 euros).

Lo bueno de este router es que hay cantidad de información sobre él, de tal forma que si nos quedamos atascados en algo, será fácil encontrar la solución en Internet. Además sabemos seguro que este ofrece un puerto serie con el que aplicar nuestros conocimientos (además de un puerto JTAG... pero eso es para otro artículo).

Nuestro WR841N lo hemos reflasheado con el firmware OpenWRT (https://openwrt.org/). Esto lo hicimos hace algunos años, así que no podemos daros muchos detalles del firmware original del router. Sin embargo, el proceso de reflasheo, tanto de OpenWRT como de DD-WRT es muy sencillo y altamente recomendable.

En caso de que no encontréis o dispongáis de uno de estos, y realmente queráis juguetear con un router, nuestra recomendación es que consultéis la base de datos on-line de OpenWRT antes de comprar uno y os aseguréis que, esos interfaces en los que estáis interesados están disponibles en el modelo que queréis adquirir. En el caso de que sea necesario hacer alguna modificación a la placa, ahí también os lo contarán y podréis decidir si os veis capaces o mejor lo intentáis con otro dispositivo.

Preparación

Antes de ponernos a hurgar en las tripas de los cacharros, vamos a necesitar algún material. Además de algunas herramientas, las cuales variarán dependiendo del dispositivo que queráis abrir, vamos a necesitar un adaptar Serie-TTL.

La mayoría de los puertos serie que ofrecen los routers no utilizan los +12/-12 V típicos de los interfaces serie RS-232C.. Normalmente utilizan niveles TTL (5V o 3.3V) para transmitir la información. De tal forma que tenemos un par de opciones para poder hablar con nuestro router:

La primera es construir nuestro propio adaptador. Hay mucha información en Internet sobre el tema y no vamos a discutir esta opción aquí. Podéis consultar esta página para conseguir más detalles:

https://wiki.openwrt.org/doc/hardware/port.serial.cables

La siguiente opción es usar uno de esos adaptadores USB-Serie baratos. Nosotros solemos utilizar uno basado en el PL2303, como el que aparece en la página del enlace anterior. Cuesta unos poco euros y la verdad que es bastante útil. En general, cualquiera de estos adaptadores suelen funcionar bien.

La última opción es utilizar un dispositivo intermedio capaz de hablar con nuestro ordenador (Arduino) o que sea un ordenador en si mismo (Rpi, BBB, Olinuxino, BananaPi) y que además sea capaz de conectarse a un puerto Serie-TTL. Cualquiera de las opciones anteriores es perfectamente válida. Es una cuestión de que tenéis a mano y de cuanto dinero os queréis gastar.

En concreto nosotros hemos utilizado un adaptador USB-Serie PL2303 y una Raspberry Pi para este artículo. Ambos funcionan perfectamente, si bien, en el caso de la Rpi es necesaria alguna configuración. Volveremos sobre esto en un momento cuando hablemos del SW.

Abriendo el TP-Link WR841N

Vamos a comenzar a destripar nuestra plataforma de referencia, el TP-Link WR841N.

Nuestra Víctima. TP-Link WE841N

Si tenéis uno de estos, podéis encontrar todos los detalles sobre el cacharro, en los siguientes enlaces:

https://wiki.openwrt.org/toh/tp-link/tl-wr841nd
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=627915
https://giannoug.gr/unbricking-a-tp-link-tl-wr841nd/

Este router es bastante fácil de abrir... sólo hay que quitar unos tornillos y tirar. Los tornillos se encuentra bajo las almohadillas en la parte inferior del dispositivo. Al abrirlo intentad tener cuidado, nosotros rompimos una de las pestañas de plástico que mantienen unidas las dos partes de la carcasa.

Las entrañas del TP-Link WE841N

Una vez abierto es muy fácil identificar dos conectores que no se han instalado. Podéis verlos realzados en la siguiente imagen.

Ubicación de las conexiones para los conectores Serie y JTAG del TP-Link WE841N

Como lo sabemos todo sobre este router, no necesitamos hacer nada especial para localizar el conector con el puerto serie y la función de cada una de las conexiones. Pero bueno, en general, cuando veáis un conector de 4 pines en la placa... bueno, ese suele ser el que nos interesa.

Ahora, dependiendo de las herramientas que tengáis, podréis conectar cables a las conexiones de la placa de distintas formas. Podéis soldar los cables directamente, usar algunos PogoClips, o soldar unos PINs para conectar esos prácticos jumpers que utilizamos con las placas de prototipos. Nosotros nos decantamos por esta última solución.

Nuestra Víctima. TP-Link WE841N

Puertos Serie. Una breve Introducción

Si ya sabes como funciona un puerto serie, te puedes saltar esta sección. Si eso de 8N1 te suena a chino, entonces sigue leyendo.

Cuando quieres conectar dos dispositivos digitales para que intercambien información, tienes básicamente dos opciones. Puedes enviar los datos en serie o en paralelo. En principio, la unidad mínima de información que podemos intercambiar es un byte (8 bits en general, desde el punto de vista de la CPU), así que tenemos dos opciones.

  • Utilizamos 8 cables y enviamos un bit por cada cable, de forma que podemos transmitir nuestro byte de una sola tacada. Esto es lo que hace un puerto paralelo. El antiguo interfaz centronics de las impresoras, o el bus GPIB utilizado en instrumentación, funcionan de esta manera.
  • La otra opción es utilizar un solo cable y enviar los bits de nuestro byte, uno detrás del otro en bloques. El dispositivo en el otro lado, lee los bits y los junta de nuevo en un byte que se envía al programa principal que recibe/transmite los datos. Los puertos serie clásicos (RS-232C, RS-485,... etc) funcionan de esta forma. En la actualidad, los puertos USB, I2C o SPI también funcionan así.

Cada método, tiene sus ventajas e inconvenientes. En la actualidad la transmisión en paralelo no se utiliza para dispositivos externos. Los buses internos de los ordenadores siguen transmitiendo datos en paralelo, ya que es mucho más rápido, pero a un coste.

El principal problema de la transmisión en paralelo es que cuesta más. En lugar de un cable, necesitamos 8, 16 o 32 (dependiendo del tipo de interfaz). Además, cuando más rápido queramos enviar los datos, nuestro enlace será más sensible a errores de fase. En otras palabras, cuando más rápido sea nuestro enlaces, pequeñas diferencias en la longitud de los cables puede hacer que unas señales lleguen antes que otras y que se produzcan errores (eso puede producir un error de fase). Hay otros problemas, pero esos son quizás los más evidentes.

Cuando utilizamos un sistema de transmisión serie, también nos vamos a encontrar problemas similares (normalmente de sincronización de reloj, jitter y cosas de esas), así que no basta con simplemente enviar los 8 bits uno tras otro y ya está. En su forma más sencilla, los puertos serie de toda la vida, envían unos cuantos bits extra para, entre otras cosas detectar errores en la transmisión y saber donde empieza y donde termina un byte...

En general, un enlace serie va a enviar:

  • Un bit de comienzo conocido como START BIT. Este bit indica el comienzo de un dato
  • Los bits de datos que pueden ser 5, 6, 7 u 8. Normalmente utilizamos 8 bits, pero, recordemos que el código ASCII original utilizaba solo 7 bits
  • A continuación se suele incluir un bit extra llamado de PARIDAD. En su forma más sencilla el bit de paridad indica si el número de "UNOS" en los datos es par o impar. Así, la paridad puede ser PAR o IMPAR. Este bit es una rudimentaria forma de detectar errores en los datos. En conexiones directas de corta distancia, este bit no se suele utilizar.
  • Uno o dos bits indicando el fin del dato. Estos bits se conocen STOP bits o bits de parada ;).

Así, los parámetros de comunicación de un determinado puerto serie se suelen expresar como la velocidad de transmisión seguido de una cadena del tipo DPS donde:

  • D indica los bits de datos que vamos a utilizar
  • P indica el tipo de parida. Los valores posibles son N (None, sin parida), E (Even, paridad par) u O (Odd, paridad impar). Existen otros tipos de paridad pero son menos comunes.
  • S indica el número de bits de parada (STOP). Este valor puede ser 1 o 2.

Con todo esto, la inmensa mayoría de dispositivos serie en la actualidad utilizan una configuración 8N1. Es decir 8 bits de datos, son paridad y un bit de parada.

Cada vez que queremos comunicarnos a través de un puerto serie con otro dispositivo, necesitamos ponernos de acuerdo en el formato de las secuencias de bits que vamos a intercambiar. Para el caso concreto de nuestro router la configuración es:

115200 8N1

Accediendo Al WR-841N

Ahora ya podemos acceder al puerto serie. Solo tenemos que conectar los cables a nuestro adaptador (ya sea un USB-Serie o un pequeño ordenador -Arudio, Rpi,...-). Si consideramos que el pin 1 es el que se encuentra más cerca de los conectores Ethernet del router, los pines en el router tienen las siguientes funciones:

PIN 1 Vcc
PIN 2 GND
PIN 3 Rx
PIN 4 Tx

En principio, el PIN 1 no se suele conectar. Sin embargo para este modelo, y la versión específica que nosotros tenemos es necesario. Antes de conectar nada, comprobad la documentación. Hay varias versiones de este router y cada una tiene sus peculiaridades con respecto al puerto serie.

En general, NUNCA conectéis el pin Vcc de primeras. Si no conseguís acceder al dispositivo, intentad buscar información en Internet primero, y si eso no funciona, y realmente queréis acceder a ese puerto cueste lo que cueste, pues probad, pero bajo vuestra única y exclusiva responsabilidad. Tenéis muchas papeletas para romper el puerto serie... el router quizás siga funcionando... depende.

La conexión específica al adaptador que hayáis elegido será diferente en cada caso. Sin embargo, existen unas reglas generales:

  • Conectad siempre todas las tierras (Pines GND) juntas y conectadlas antes que ningún otro pin. Si no lo hacéis... bueno, un montón de cosas raras pueden pasar. O dicho de otra forma: cuando pasen cosas muy raras que no tengan ningún sentido... Comprobad que todos los pines GND están conectados juntos
  • Los pines Tx/Rx deben conectarse en lo que se conoce como una configuración de modem nulo. Esto significa que el pin Tx del router debe conectarse al pin Rx de nuestro adaptador y el pin Rx del router debe conectarse al pin Tx de nuestro adaptador. Esto suele requerir un poco de prueba y error, ya que ciertos adaptador marcan los pines desde su propio punto de vista y otros desde el punto de vista del dispositivo que se conecta al adaptador...

Una breve pincelada sobre identificar pins

Nuestra recomendación fue empezar con un router del que dispongáis la información, pero si eso no es posible, tendréis que obtener esa información vosotros mismos. La siguiente página ofrece una descripción detallada del proceso para localizar los PINes en la placa del router (la información interesante está al final de la página).

https://wiki.openwrt.org/doc/hardware/port.serial

Para los que no queráis leer la página en inglés (que deberíais ya que contiene muchísima información muy útil), este es un resumen de como proceder si solo disponemos de un multímetro.

  • Activar el test de continuidad (o medidor de resistencia).
  • Para localizar el PIN de tierra (GND), poned una de las pruebas del multímetro en un punto que sepáis que es tierra y comprobad que pin está conectado con tierra. Un buen punto de partida es utilizar uno de los pines en el conector de alimentación.... Haced este test con el cacharro apagado
  • Para localizar el pin de alimentación, colocad una de las pruebas en el pin de tierra que habéis encontrado y cambiad el multímetro para medir voltaje, en una escala de al menos 5V. Luego, con la otra prueba del multímetro, comprobad los pines, y buscad uno con unos 3.3V o 5V estables. Esto hay que hacerlo con el router encendido... así que mucho cuidadín.
  • En esta misma configuración, comprobaremos los otros pines. Una vez que tengáis las pruebas del multímetro conectadas a GND y al pin a comprobar, encenderemos el router. Esto provoca que el router envíe todos esos mensajes de arranque y por tanto, el pin Tx será aquel en el que el la lectura varíe más.
  • El pin que queda es Rx
En la realidad las cosas no son tan fáciles, pero el proceso que acabamos de describir funciona en la mayoría de los casos. Si disponéis de un analizador lógico u osciloscopio, probablemente el proceso sea todavía más sencillo.

Software

Ahora que ya estamos conectados necesitamos algún programa para poder recibir y enviar datos por el puerto serie. Tenemos varias opciones:
  • Minicom. Minicom es la mejor opción. Es un programa diseñado para trabajar con puertos serie y lo hace de forma correcta. Además nos permitirá, de forma sencilla, probar distintas configuraciones del puerto serie, para encontrar la que le guste a nuestro router. Para iniciar minicom contra un determinado puerto utilizad el comando:
    minicom -D /dev/TuDispositivo
    

    Luego podéis utilizar los menús para cambiar la configuración cuando lo necesitéis.

  • screen. Este programa se utiliza normalmente para ejecutar sesiones en background, de forma que nuestros programas sigan ejecutándose cuando nosotros ya no estemos conectados. Además de eso, screen nos permite conectarnos a puertos serie con un comando como este:
    screen /dev/ttyS0 115200
    

    Donde el número final es la velocidad del puerto serie al que nos queremos conectar.

  • NetKitty. Esta es mi versión reducida de Netcat a la que le he añadido soporte para acceder a puertos serie estándar (8N1). La ventaja de Netkitty is que podéis descargar una versión estática compilada para las principales plataformas (podrías utilizar bustro teléfono android para acceder al router por ejemplo) y que nos permite acceder al puerto serie de forma remota.
    nk -c S,/dev/ttyS0,115200
    

    Si además de acceder al puerto serie localmente, queremos acceder a él a través de una conexión TCP al puerto 5000 de la máquina conectada al router, solo tenemos que escribir algo como esto.

    nk -hub -s T,5000 -c S,/dev/ttyS0,115200
    

    Netkitty ofrece muchas más opciones. Echadle un ojo a este tutorial.

Una vez que hayáis elegido vuestro software y os hayáis conectado al router, lo más probable es que el programa solo muestra caracteres extraños. Necesitamos determinar la velocidad a la que se ha configurado el puerto serie. Bien, la única forma de hacer esto es probando... cambiando la velocidad hasta que lo que recibamos tenga sentido. Hay algunos programas para automatizar el proceso, pero en la práctica son solo 4 o 5 valores que debemos probar. Empezaremos por el máximo 115200 he iremos bajando... En general, la consola se configura a la máxima velocidad posible, por eso sugerimos empezar por el valor más alto... pero cualquier otra estrategia funcionará igual

Aquí podéis ver un pequeño video que muestra el acceso a un WR-841N conectado al puerto serie de una Raspberry Pi y accediendo a él utilizando NetKitty y habilitando el acceso remoto. Una tercera máquina se conecta al puerto 5000 de la Raspberry Pi y consigue acceso inmediato al puerto serie y por tanto al router.

Liberando el puerto serie de la RPI

A diferencia de otras tarjetas de desarrollo, la RPI tiene un solo puerto serie accesible (en principio) que, por defecto se utiliza como consola del sistema. Es decir, durante el arranque es adquirido por el programa (mgetty o equivalente) para proporcionar un login al sistema. Normalmente esto se configuraba en el fichero /etc/inittab pero en versiones recientes, la versión de DEbian en la que se basa Raspbian a comenzado a utilizar systemd.

En cualquier caso, si vais a utilizar una Rpi con una versión reciente de Raspbian, seguid los siguientes pasos en caso de que no consigáis acceder al puerto serie de la tarjeta.

  • Utilizando la herramienta de configuración de la tarjeta (raspi-config) acceded al menu de las opciones avanzadas y luego seleccionad Serial. El programa os preguntará si queréis acceso shell a través del puerto serie. Responded que no
  • Luego comprobad que el ficherto /boot/config.txt contiene la linea
    enable_uart=1
    
  • Reiniciar
Esto debería liberar el puerto serie para poder conectar nuestro router, o cualquier otro cacharro. Recuerda que el puerto serie en la Rpi es de 3.3V. Conectar algo con mayor voltaje puede dañar tu tarjeta.

Esto esto. Esperamos que hayáis encontrado interesante este artículo y no dudéis en comentar sobre vuestros proyectos. Hasta la próxima.

QUIZÁS TAMBIÉN TE INTERESE
Como Instalar una Puerta Trasera en un Router Casero
Construye tu fuente de 3.3V


SOBRE Mike Anic
Mike es nuestro experto en las cosas reales. Todo eso que puedes tocar... Microcontroladores... chupao. El internet de las cosillas.... menuda tontería...Condensadores de Fluzo... estamos trabajando en ello.

 
Tu publicidad aquí :)