Introducción
Una de las fases del análisis dinámico de aplicaciones Android es la interceptación de las conexiones realizadas por parte de la aplicación a los servidores remotos. En el caso de que utilicen el protocolo HTTP podrán ser fácilmente interceptadas y manipuladas con un servidor proxy ya que el protocolo no utiliza cifrado. Pero en el caso de que utilice el protocolo HTTPS necesitaremos instalar un certificado de Autoridad de Certificación en nuestro dispositivo ya que la conexión será cifrada con éste. Adicionalmente, algunas aplicaciones usan la técnica de SSL Pinning, que consiste en confiar únicamente en determinador certificados embebidos en la aplicación.
Configuración del Proxy Web y del certificado
Para la interceptación, podemos utilizar cualquier proxy que soporte SSL Proxy, como Burp Suite, ZAP, mitmproxy, Charles Proxy, o HTTP Toolkit. Cada uno de ellos tiene su propia configuración, por lo que habrá que leer su documentación correspondiente. Al final lo que necesitamos es un proxy HTTP y un certificado de una Autoridad de Certificación. En este caso se va a utilizar Charles Proxy que crea un proxy HTTP escuchando en el puerto TCP 8888 y que permite exportar el archivo del certificado a un formato PEM.
Para configurar el proxy HTTP en el emulador de Android Studio, pulsaremos en el último botón de la barra lateral que abrirá la ventana Extended Controls. Posteriormente seleccionaremos Settings > Proxy, desmarcaremos Use Android Studio HTTP proxy settings, seleccionaremos Manual proxy configuration, introduciremos los datos de nuestro proxy web y pulsaremos en Apply. Si la conexión es correcta se mostrará Proxy status: Success.
Para importar el certificado en Android 14, lo descargaremos en la máquina y lo añadiremos en Ajustes Seguridad y privacidad > Más seguridad y privacidad > Cifrado y credenciales > Instalar un certificado > Certificado AC y pulsaremos en el botón INSTALAR DE TODAS FORMAS. Finalmente lo seleccionamos y se nos indicará que se ha importado correctamente. Comprobaremos que se ha instalado desde la opción en el menú anterior Credenciales de confianza > Usuario.
Después hay que desactivar el DNS privado desde Ajustes Redes e Internet > DNS privado.
Instalación de la aplicación de pruebas
La aplicación android-ssl-pinning-demo [Descarga] nos permite comprobar si es posible saltarse las protecciones SSL Pinning que incluyen la mayoría de las aplicaciones. Al ejecutarlo y probar las diferentes opciones, podremos comprobar que no es posible realizar las conexiones.

Instalar certificados en el almacén del sistema
El módulo MagiskTrustUserCerts [Descarga] nos permitirá instalar certificados de Autoridades de Certificación en el almacén de certificados del sistema (desde el almacén del usuario). Esto nos permitirá interceptar las comunicaciones cifradas HTTPS de las aplicaciones que no confíen en los certificados del usuario. En el caso de Android 14 es necesario modificar el archivo post-fs-data.sh del archivo ZIP añadiendo la siguiente línea a continuación de MODDIR=${0%/*}.
$ mount -o bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
Al reiniciar el sistema podemos encontrar el certificado importado anteriormente en el almacén de certificados del sistema. Tras este paso, y volviendo a la aplicación de Demo, podemos comprobar que la Unpinned Request se ha interceptado correctamente en nuestro proxy web.
El resto de las opciones de la aplicación Demo continúan fallando debido al uso por parte de la aplicación de diferentes técnicas de SSL Pinning.
Saltarse las protecciones SSL Pinning con frida-multiple-unpinning
En este punto solo hay dos opciones para saltarse esta protección: decompilar la aplicación, buscar el código que realiza la acción, eliminarlo y recompilar la aplicación. O utilizar Frida con un script que modifique la aplicación en tiempo de ejecución. Elegimos la segunda opción utilizando el script de frida-multiple-unpinning.
Necesitamos tener el servidor de Frida instalado en el dispositivo y el cliente en nuestro sistema. Especificaremos en la terminal tanto el script como el identificador de la aplicación, en este caso tech.httptoolkit.pinning_demo.
$ frida -U --codeshare akabe1/frida-multiple-unpinning -f tech.httptoolkit.pinning_demo
En este caso es posible saltarse todas las protecciones excepto las de Appmatus.
Saltarse las protecciones SSL Pinning con frida-interception-and-unpinning
Por otro lado, existe otro script que automatiza las acciones que hemos realizado anteriormente y que se salta las protecciones de Appmatus, Frida Mobile Interception Scripts [Descarga]. En primer lugar desactivaremos el proxy de Android Studio desde la configuración y redirigiremos el puerto del proxy a un puerto interno de la máquina virtual con ADB, por ejemplo, 1234.
$ adb reverse tcp:1234 tcp:8888
Este script necesita la modificación de su configuración desde el archivo config.js. Modificaremos las variables CERT_PEM con el certificado en formato PEM, PROXY_PORT con el puerto redirigido del proxy web (puerto 8888), y PROXY_HOST con la dirección IP localhost.
// Local testing certificate for now
const CERT_PEM = `-----BEGIN CERTIFICATE-----
MIIFLjCCBB...
-----END CERTIFICATE-----`;
if (CERT_PEM.includes("Put your CA certificate data here")) {
throw new Error('No certificate was provided' +
'\n\n' +
'You need to set CERT_PEM in the Frida config script ' +
'to the contents of your CA certificate.'
);
}
// Default emulator address for now:
const PROXY_HOST = '127.0.0.1';
const PROXY_PORT = 1234;
Ejecutamos el conjunto de scripts.
$ frida -U -l ./config.js -l ./native-connect-hook.js -l ./android/android-proxy-override.js -l ./android/android-system-certificate-injection.js -l ./android/android-certificate-unpinning.js -l ./android/android-certificate-unpinning-fallback.js -f tech.httptoolkit.pinning_demo
Finalmente nos habremos saltado las restricciones restantes.

Conclusión
Aunque se han revisado las opciones más comunes de SSL Pinning, la aplicación puede implementar protecciones personalizadas, lo que requerirá la creación de un script de Frida haciendo ingeniería inversa a ese método.