Tunelizar e Interceptar el tráfico de un dispositivo – Pentesting Android

El objetivo de este post es aprender a configurar nuestro entorno para poder interceptar el tráfico de red generado por el dispositivo Android y poder analizarlo y modificarlo. Para ello necesitaremos emplear un servidor proxy HTTP que sirva de intermediario entre el smartphone y un servidor web. En nuestro caso vamos a emplear uno de los software más conocidos en el sector del pentesting: Burp Suite.

Burp Suite y Certificados en Android

Creo que no necesita presentación, pero por si acaso, Burp Suite es una herramienta empleada para las pruebas de seguridad de las aplicaciones web. Intercepta las peticiones HTTP realizadas por un servidor web o aplicación para poder analizarlas, modificarlas, aceptarlas, rechazarlas y tantas otras opciones.

Existen dos versiones de este software: Burp Suite Community Edition (versión gratuita) y Burp Suite Professional (versión de pago). Aunque la versión de pago sea muchísimo mejor y más completa que la gratuita, con esta última podremos trabajar perfectamente en cualquier escenario. Eso sí, la herramienta funcionará más lenta y no podremos utilizar los muchos complementos de la de pago. Podéis descargarlas a través de los siguientes enlaces:

Si ya habéis empleado este software anteriormente sabréis que es necesario instalar un certificado de confianza para que el navegador no genere errores al trabajar bajo el protocolo HTTPS. Pues bien, para interceptar el tráfico de nuestro dispositivo Android también tendremos que instalar dicho certificado (como era de esperar).

En todos los dispositivos existen dos tipos de almacenes de credenciales o Credenciales de Confianza (Trusted Credentials) los cuales son: Sistema y Usuario. En estos dos paneles se almacenan los certificados en los que el móvil confía. Para acceder a dichos paneles, dentro del dispositivo entraremos en:

  • Ajustes → Contraseñas y seguridad → Cifrado y credenciales → Credenciales de confianza

Si un usuario instala un certificado, este se almacena en la parte de Credenciales de Usuario. Anteriormente, una persona importaba el certificado generado por Burp Suite y lo instalaba en su Android y ya podía interceptar el tráfico sin ningún tipo de problema. Sin embargo, a partir de la versión Android 7 (Nougat) se cambió la forma en la que Android confía en los certificados, y solo lo hace en aquellos instalados en el Sistema (salvo que haya una configuración especial en el certificado del usuario). Es por ello por lo que vamos a ver cómo podemos instalar el certificado generado por nuestro servidor proxy en el lugar que corresponde para su correcto uso.

Instalación del certificado en el sistema

Para comenzar con el proceso, tendremos que haber iniciado nuestro dispositivo Android con Android Studio junto con Burp Suite. Si no sabes a qué me refiero puedes revisar mi anterior artículo:

Cuando tengamos iniciado el dispositivo, el siguiente paso será, dentro del servidor proxy, acceder a las pestañas:

  • Proxy → Proxy Settings → Import/Export CA Certificate → Certificate in DER format

Guardaremos este certificado bajo el nombre de cacert.der en la misma carpeta de platform-tools (por comodidad, para tenerlo todo en la misma carpeta). Los certificados que se encuentran en el sistema del dispositivo tienen la nomenclatura subject_hash_old.0 por lo que habrá que modificarlo empleando el software OpenSSL que lo podéis encontrar en el siguiente enlace:

Este programa tiene un paquete de herramientas con funciones y algoritmos para crear sistemas criptográficos y certificados digitales. Una vez realizada la instalación, los pasos a seguir serán los siguientes:

  1. Modificar el formato del certificado de DER a PEM.
    • openssl x509 -inform DER -in cacert.der -out cacert.pem
  2. Obtener el valor del hash subject_hash_old del certificado generado.
    • openssl x509 -inform PEM -subject_hash_old -in cacert.pem
  3. Renombrar el certificado con la nomenclatura previamente mencionada subject_hash_old.0.
    • move cacert.pem <hash>.0

En mi caso, el proceso queda de la siguiente manera:

Bien, después de estas operaciones ya tenemos la mitad del camino hecho con el certificado en el formato necesario para moverlo al dispositivo. Lo siguiente que haremos será empezar a trabajar con la herramienta adb siguiendo el siguiente procedimiento:

  1. Iniciar adb y asegurarnos de que estamos operando como root.
    • adb.exe
    • adb root
  2. Establecer la partición /system en modo escritura, ya que por defecto se encuentra en modo lectura. Este paso es muy importante.
    • adb remount
      • Al final de este artículo explico alternativas a este comando, por si tuvieses algún error.
  3. Copiar el certificado dentro de nuestro Android.
    • adb push <cert>.0 /sdcard/
    • adb shell
  4. Modificar los permisos de dicho certificado.
    • chmod 644 /sdcard/<cert>.0
  5. Copiarlo en la carpeta donde se encuentran los certificados verificados por el sistema.
    • mv /sdcard/<cert>.0 /system/etc/security/cacerts/

Resultaría una cosa tal que así:

Si ahora accedemos en los ajustes del dispositivo al apartado Trusted Credentials podemos encontrar en system cómo se ha agregado el certificado de PortSwigger:

Listo! Vamos a rematar el proceso 🙂.

Configuración del proxy Android – Burp Suite

Para finalizar con el proceso, en la misma pestaña donde se encontraba la exportación del certificado en Burp Suite, editaremos el listener que vamos a emplear y seleccionaremos la dirección IP local principal, en mi caso la IP del adaptador Wifi para emplearla en el proxy:

Ahora haremos lo mismo en el dispositivo Android, seleccionaremos la red Wifi y la configuraremos para añadir un proxy manual como se muestra en las siguientes imágenes:

Una vez tengamos realizada esta configuración, ya es posible interceptar el tráfico de nuestro móvil a través de Burp Suite:

Posibles errores al configurar las particiones Android en modo escritura

Decidí escribir este apartado para intentar ahorraros a cada uno de vosotros la desesperación y frustración que he experimentado durante mi aprendizaje en auditorías Android (que por supuesto aún continua) con los innumerables errores que me he encontrado a la hora de configurar el modo escritura en la partición /system.

Además del método mencionado anteriormente empleando el comando adb remount, otra alternativa igual de conocida que la anterior es la siguiente:

adb shell mount -o rw,remount,rw /system // Establece en modo escritura la partición

adb shell mount -o ro,remount,rw /system // Devuelve la partición a modo lectura

Sin embargo, me ha sucedido en algunas ocasiones que dependiendo de la versión Android empleada o bien por el dispositivo que se emulaba, me aparecían una serie de errores que impedían realizar este paso. Algunos de estos con los que me he topado son los siguientes:

  • ‘/dev/block/pci/pci0000:00/0000:00:03.0/by-name/system’ is read-only
  • mount: ‘/system’ not in /proc/mounts
  • ‘/dev/root’ is read-only
  • /system/bin/sh: avbctl: not found
  • remount of the / superblock failed: Permission denied
  • mount: ‘/dev/block/pci/pci0000:00/0000:00:03.0/by-name/system’->’/system’: Device or resource busy
  • mount: Device or resource busy

Estos fallos han sido obtenidos empleando distintos comandos desde la cmd y desde la shell interna de Android (la mayoría en esta última).

Tras haber realizado diferentes pruebas y haberlo comprobado en distintos dispositivos y versiones de Android, he encontrado una solución que hasta la fecha me ha funcionado en todas las ocasiones. El proceso consiste en ejecutar el emulador Android desde la cmd y añadir una opción para que desde su ejecución las particiones tengan permiso de escritura. De esta manera no se tiene que modificar el emulador una vez iniciado porque la opción está implementada desde su puesta en marcha. El proceso para llevarlo a cabo será el siguiente:

  1. Acceder a la carpeta Android_SDK donde se encuentran los dispositivos emulados de Android Studio.
    • cd C:\Tools\Android_SDK\emulator // Buscar el directorio en tu PC
  2. Listar los emuladores creados para saber cual ejecutar.
    • emulator -list-avds
  3. Ejecutar el emulador con la flag -writable-system
    • emulator -avd -writable-system

El resultado sería el mostrado a continuación:

Una vez hecho esto y se haya iniciado el emulador, ya es posible realizar todos los pasos para copiar el certificado en la carpeta especificada.

Espero que os sirva de ayuda y no tengáis problemas!

Referencias

3 comentarios en “Tunelizar e Interceptar el tráfico de un dispositivo – Pentesting Android

  1. Buenas tardes:

    Muchísimas Gracias , un articulo que de verdad ayuda y funciona cosa que no pasa con tantos. lleva dos meses peleando con Android estudio para poder hacer esto del criticado.

    Muchas gracias.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Subir para arriba