Guía

Qué sigue bloqueando el certificate pinning

Una app que fija su certificado no se descifra con Busymate DevTools: ni en iOS, ni en Android, ni a través del proxy. Aquí tienes exactamente lo que cada vía de captura puede y no puede ver, cómo reconocer un host con pinning y qué sigue siendo útil.

Toda herramienta de captura que descifra HTTPS funciona igual: presenta al cliente un certificado firmado por ella misma, y el cliente lo acepta porque confía en la autoridad que lo firmó. El certificate pinning es la app diciendo que confiará en un certificado o clave concretos y en nada más. Cuando una app con pinning se encuentra con el certificado sustituto, simplemente rechaza la conexión. Es una propiedad de la app, no un interruptor de la herramienta, y ninguna vía de captura de Busymate lo evita.

Una herramienta que calla esto te hace perder una sesión de investigación con un objetivo que nunca iba a descifrar. Por eso esta guía es un mapa, no un atajo: qué entregan frente a un host con pinning la captura en iOS, la app de Android, el proxy de escritorio, un teléfono rooteado de la granja y el conector de Chrome, cómo lo etiqueta el feed y qué partes del trabajo se siguen haciendo.

Antes de empezar

Lo que necesitas

Esta guía da por hecho que ya llega tráfico a tu dashboard desde al menos una vía de captura.

  • Un teléfono o cliente ya emparejado y capturando: la guía de iPhone o de Android te lleva hasta ahí.

  • Los nombres de host de la app que investigas, añadidos a la lista de SSL proxy para que al menos se intente el descifrado.

  • El feed del dashboard abierto, con su filtro de inspección a mano.

  • Permiso para inspeccionar la app: estas técnicas son para tráfico de apps y sitios que posees o que estás autorizado a depurar.

Paso a paso

Hazlo en orden

Recorre las vías en orden: cada una acota lo que un host con pinning todavía puede contarte.

  1. 01

    Sabe de qué almacén de confianza depende tu vía de captura

    En iOS, el descifrado depende de que el perfil de Busymate esté instalado y tenga confianza total en Ajustes; a partir de ahí, todas las apps del teléfono confían en el certificado que presenta la app, salvo las que fijan el suyo. En Android hay dos almacenes: el de usuario, que desde Android 7.0 solo respetan las apps que lo permiten explícitamente, y el del sistema, que respetan todas las apps pero en el que solo un dispositivo con root puede escribir. El proxy de escritorio usa la confianza que la máquina o el navegador cliente tengan en su autoridad generada.

    El pinning está por encima de los tres. Una app que fija su certificado rechaza el sustituto venga del almacén que venga, así que mover un certificado a un almacén más fuerte nunca ayuda contra un host con pinning. Solo ayuda contra las apps que rechazaban el almacén de usuario.

  2. 02

    Reconoce un host con pinning en el feed

    Un host que no has puesto en la lista de descifrado muestra un candado cerrado con solo el nombre y un contador de peticiones: es por diseño, no pinning. Un host con pinning se ve distinto: está en tu lista, se intentó descifrar, y la conexión falló o la app reintentó y se rindió. El filtro de inspección del feed del dashboard tiene tres opciones —solo descifrados, solo cifrados y solo con SSL pinning— y la última aísla exactamente esas filas.

    La otra señal es de comportamiento: la app deja de funcionar para ese host en cuanto se descifra, y vuelve a funcionar en cuanto quitas el host de la lista. Si se cumplen ambas, has encontrado una conexión con pinning.

  3. 03

    Captura en el iPhone: metadatos, nunca el cuerpo

    La app de iOS captura todo el sistema, por Wi-Fi y datos móviles, y descifra los hosts que listas. Frente a una app con pinning sigue registrando cada conexión —el host, los tiempos, el número y tamaño de las peticiones, el modo de conexión activo— pero no puede producir las cabeceras ni el cuerpo, y no hay interruptor que lo cambie. Activar MITM All Hosts descifra todos los hosts sin pinning; con uno con pinning no hace nada salvo romperlo.

    Lo práctico es quitar el host con pinning de la lista para que la app siga funcionando, mantener el resto de sus hosts en ella y leer lo que revelan los endpoints sin pinning. Muchas apps fijan solo su host de autenticación o de pagos y dejan el resto abierto.

  4. 04

    Android: sin root, con root y dónde queda el pinning

    En un teléfono Android sin root, el certificado generado por la app vive en el almacén de usuario, así que solo se descifran tus propias compilaciones de depuración y otros clientes que lo permiten; el resto de apps se registran como metadatos. En un dispositivo con root el certificado puede instalarse en el almacén del sistema, y el HTTPS se vuelve descifrable en todo el sistema, salvo por el pinning de cada app. La granja de teléfonos ejecuta sus dispositivos Android en ese nivel con root exactamente por eso.

    Así que el root convierte una clase de apps opacas en legibles —las que simplemente ignoraban el almacén de usuario— y deja intacta la clase con pinning. Busymate nunca afirma descifrar todo el sistema en un dispositivo sin root, ni afirma que el pinning se vence en uno con root.

  5. 05

    El proxy: el mismo límite, más hosts que rechaza a propósito

    El proxy de escritorio tiene la misma relación con el pinning que las apps del teléfono: un cliente con pinning rechaza su certificado generado y la conexión falla. Además lleva una lista corta de hosts que nunca intercepta, digan lo que digan tus ajustes de SSL proxy —la PKI y los endpoints de revocación de Apple, los respondedores de estado de certificados que usa la cadena de Apple y el propio backend de Busymate— porque interceptarlos rompería el dispositivo o la conexión en vivo del dashboard. Pasan como túneles en bruto, y es intencional, no una mala configuración.

    Hosts que el proxy deja pasar intactos por diseño
    text
    # Passed through as raw tunnels by the proxy, regardless of your SSL-proxy list:
    pkis.apple.com  ocsp*.apple.com  crl*.apple.com  valid.apple.com  ppq.apple.com
    # the DigiCert OCSP / CRL responders Apple's chain uses
    *.busymate.net   # the dashboard's own backend + Realtime connection
  6. 06

    El conector de Chrome: el pinning no aplica

    Hay una vía de captura en la que el pinning es irrelevante. El conector de línea de comandos lanza una instancia de Chrome y lee su tráfico a través del DevTools Protocol, del lado del navegador de TLS. La conexión cifrada entre Chrome y el servidor nunca se toca: no hay certificado sustituto que rechazar, nada que instalar y nada que el pinning pueda detectar. Los flujos de inicio de sesión de proveedores cuyos certificados fijados un proxy no puede abrir se registran de principio a fin, redirecciones y tokens incluidos.

    La contrapartida es el alcance: cubre lo que se ejecuta dentro de ese Chrome, no una app nativa. Si el flujo que te importa tiene versión web, esta es la vía que lo ve completo.

  7. 07

    Aprovecha lo que un host con pinning todavía te da

    Los metadatos no son nada. Sigues viendo cuándo la app habla con el host con pinning, con qué frecuencia, cuánto pesan los intercambios y cuánto tardan, y puedes correlacionarlo con las llamadas descifradas de alrededor. Las reglas de bloqueo siguen coincidiendo a nivel de host en un host cifrado —la ruta es invisible, pero puedes hacer que la app se comporte como si ese endpoint fuera inalcanzable, que a menudo es justo el modo de fallo que querías probar—. Las pausas dejan que el host evite el proxy por completo para que la app siga funcionando mientras inspeccionas todo lo demás.

    Y cada acción que tomaste queda en el registro de auditoría, así que una sesión de investigación deja constancia de qué se descifró, qué se bloqueó y qué se dejó en paz.

Solución de problemas

Qué puede salir mal

Los errores que más tiempo cuestan son los que parecen fallos de la herramienta y no lo son.

  • La app se rompió en cuanto añadí su host

    Eso es pinning. Quita el host de la lista de SSL proxy —en iOS reinicia después la VPN para que el túnel recoja el cambio— y la app se recupera. Mantén sus otros hosts en la lista.

  • MITM All Hosts no desbloqueó la app

    Nunca iba a hacerlo. Ese interruptor amplía qué hosts sin pinning se descifran; no tiene efecto en un host que la app fija, y hace que todas las demás conexiones con pinning del teléfono fallen también. Vuelve a apagarlo.

  • Rootear el teléfono Android tampoco ayudó

    El root mueve el certificado al almacén del sistema, lo que convence a las apps que ignoraban el almacén de usuario. No toca a una app que compara el certificado con su propio pin.

  • Un host del sistema de Apple nunca se descifra en el proxy

    Está en la lista de hosts que el proxy nunca intercepta porque descifrarlo rompería el dispositivo. No hay nada que arreglar; el filtro lo muestra como cifrado por diseño.

Preguntas frecuentes

Preguntas habituales

¿Busymate incluye alguna forma de saltarse el pinning?

No. Ninguna de las vías de captura modifica la app objetivo, inyecta código ni parchea su lógica de confianza. La respuesta honesta para una app nativa con pinning son los metadatos más lo que revelen sus hosts sin pinning.

¿Cómo distingo el pinning de un host que simplemente olvidé listar?

Un host sin listar muestra un candado cerrado y la app sigue funcionando. Un host con pinning está listado, se intentó descifrar, el filtro de SSL pinning del feed lo aísla y la app falla hasta que lo quitas de la lista.

¿Qué vía elijo para un flujo de autenticación en un proveedor con pinning?

Si el proveedor tiene inicio de sesión web, pásalo por el conector de Chrome: TLS termina dentro del navegador y se registra toda la cadena de redirecciones. Para una app nativa no hay vía descifrada; captura los metadatos y las llamadas sin pinning de alrededor.

Conoce el límite antes de empezar

Acota el descifrado a los hosts que estás probando, deja que el feed te diga cuáles tienen pinning y dedica la sesión a lo que de verdad se puede leer.

Ask your mate