Anteriormente se dio a conocer una vulnerabilidad sobre los routers D-link DIR-300 y DIR-600. En su momento, realicé un análisis sobre esta vulnerabilidad descubierta por Michael Messner en We Live Security, mostrando con ejemplos prácticos cuál podía ser el alcance de la misma. Sin embargo, en esta ocasión vamos a avanzar un poco más profundo aplicando ingeniería reversa sobre el firmware del router D-link DIR-300 para demostrar como analizar el mismo y ver en mayor detalle la vulnerabilidad a nivel de código.
Extracción del firmware
Una vez que se descargó el firmware del sitio web de D-link (versión vulnerable - 2.12 build 18.01.2012), se requiere un análisis previo ya que el mismo no puede legible por el formato que posee.
Cómo primer paso, se utiliza binwalk, una herramienta ampliamente utilizada a la hora de analizar diferentes tipos de firmware. Ejecutando binwalk sobre el archivo del firmware, se obtiene la siguiente respuesta:
La herramienta identificó diferentes tipos de cabeceras. En este caso, la que realmente nos importa es la última de ellas, la cual es un filesystem Squashfs (muy común en sistemas embebidos en routers). El paso siguiente es extraer la misma para luego analizarla. Para ello utilizaremos la herramienta dd, la cual es capaz de llevar adelante esta tarea.
A dd se le debe brindar cierta información para que realice la extracción correcta y no obtengamos un archivo corrupto (esto suele ser un dolor de cabeza en más de una ocasión).
- if: Archivo de origen.
- bs: Cantidad de bytes que se leerán de forma simultánea.
- skip: Establece el offset en cantidad de bytes. Este valor es el obtenido con binwalk.
- of: Archivo de salida.