¿Se puede eludir el SSL Pinning?
1. ¿Qué es SSL Pinning y cómo funciona?
Básicamente, SSL (Secure Sockets Layer) Pinning es una técnica que los desarrolladores aplican en el cliente para evitar ataques man-in-the-middle.
Con esta técnica, los desarrolladores incluyen (o fijan, pin) una lista de certificados de confianza en la aplicación cliente durante el desarrollo, y los usan para compararlos con los certificados del servidor en tiempo de ejecución.
Como el cliente vuelve a validar los certificados del servidor incluso después del handshake SSL, si hay una discrepancia entre el certificado del servidor y la copia local de certificados, la conexión simplemente se interrumpe y ya no se envía ningún dato del usuario a ese servidor.
2. ¿Qué diferencia hay entre tener y no tener SSL Pinning?
Esta medida garantiza que los dispositivos del usuario solo se comuniquen con servidores de confianza.
Por eso, suele usarse para impedir que las aplicaciones man-in-the-middle, que generan su propio certificado autofirmado, analicen el funcionamiento de la app y la forma en que se comunica con el servidor.
Para ilustrarlo, vamos a capturar el tráfico de Product Hunt y Dropbox con Proxyman.
Como puedes ver, Product Hunt no usa SSL Pinning en su cliente. Por eso, Proxyman puede actuar como servidor y cliente a la vez para comunicarse y capturar todos los datos que se transmiten desde y hacia Product Hunt.
Proxyman captura el tráfico de Product Hunt
En cambio, con SSL Pinning todas las solicitudes al servidor se desconectan, porque el cliente de Dropbox detecta que la CA de Proxyman no está en la lista de certificados predefinida.
Proxyman no captura el tráfico de Dropbox
3. ¿Se puede eludir el SSL Pinning?
Ya sabemos que restringir el conjunto de certificados de confianza mediante pinning puede frenar a los atacantes, pero ¿hay alguna forma de eludir este protocolo? La respuesta es sí y no (:
-
Si no somos desarrolladores de la empresa, lo más probable es que no podamos proporcionar el certificado válido para comunicarnos con el cliente de la app.
-
Sin embargo, si somos desarrolladores de la empresa y, por tanto, tenemos el certificado original y la clave privada asociada, podemos añadir esas claves a una app man-in-the-middle para eludir el SSL Pinning.
Dicho esto, no todas las aplicaciones man-in-the-middle permiten añadir claves para eludir este protocolo (:
4. ¿Y ahora qué?
Este artículo breve solo ofrece una base sobre por qué a veces los desarrolladores no pueden inspeccionar el tráfico que entra y sale de una app.
Una forma más segura de probarlo
Primero, abre un sitio HTTPS normal, como https://google.com, desde el mismo dispositivo. Si Proxyman puede leer esa respuesta, pero tu app sigue mostrando un error SSL, es probable que la causa sea el pinning. En una app que sea tuya, usa una build de depuración que desactive el pinning o que confíe en tu certificado de prueba. Proxyman no puede descifrar una app de terceros que mantenga el pinning activado, y no deberías intentar inspeccionar una app sin permiso.
Si quieres más información sobre cómo funciona SSL Pinning y cómo implementar este protocolo en tu app, puedes consultar el curso de RWL aquí.
También puedes usar Proxyman, que actúa como app man-in-the-middle, para probar el SSL Pinning en tu app (:
Proxyman es una app de alto rendimiento para macOS que permite a los desarrolladores ver las solicitudes HTTP/HTTPS de apps y dominios en dispositivos iOS, en el simulador de iOS y en dispositivos Android.
Descárgalo en https://proxyman.com

