El SSL Pinning, o Certificate Pinning, es una técnica de seguridad utilizada para garantizar
que la aplicación establezca conexiones seguras solo con servidores previamente
autorizados, mediante la verificación del certificado digital o de la clave pública
presentada durante la negociación SSL/TLS. Este enfoque añade una capa extra
de validación, independientemente del almacén de certificados del sistema operativo,
reduciendo significativamente el riesgo de ataques del tipo Man-in-the-Middle (MITM),
incluso en escenarios donde certificados raíz falsos estén instalados en el dispositivo.
El pinning de SSL asegura que únicamente la identidad criptográfica previamente
configurada sea aceptada por la aplicación, impidiendo la intercepción, el análisis o la modificación
de las solicitudes intercambiadas con el backend y protegiendo la confidencialidad y la integridad
de los datos transmitidos.
Mecanismo Técnico: En lugar de confiar exclusivamente en la cadena de certificados del
sistema operativo, el MAD valida el certificado presentado por el servidor comparándolo
con uno o más pins criptográficos incrustados en la aplicación. Esos pins corresponden
a hashes previamente definidos y almacenados de forma segura, y la conexión se
considera válida solo cuando coincide con al menos uno de los
valores configurados.
Para la configuración de Public Key Pinning, esta opción define las reglas de pinning para los
dominios especificados. El MAD soporta dos métodos de pinning, definidos por el atributo
type en el elemento <pin>
a. Public Key Pinning (type="publicKey")
Este es el método recomendado y por defecto. En este modo, se fija el hash del
Subject Public Key Info (SPKI) del certificado. Este enfoque es más
flexible, ya que permite que el certificado caduque y sea renovado sin la
necesidad de actualizar la aplicación, siempre que se mantenga el mismo par de
claves pública y privada.
b. Certificate Pinning (type="certificate")
En este método, se fija el hash del certificado digital completo. Se trata de
un enfoque más restrictivo, ya que cualquier cambio en el certificado,
incluidas renovaciones simples, exigirá la actualización de la aplicación para
evitar fallos de conexión.
La configuración del certificate pinning se realiza mediante el XML de la aplicación. El modo
de operación puede definirse como strict o permissive. En modo strict, la conexión será
bloqueada si ningún pin válido coincide. En modo permissive, las fallas de
pinning solo se reportan, siendo indicado para pruebas o entornos controlados.
Cada host define reglas específicas de pinning para un dominio determinado. Es posible
utilizar comodines, como *.example.com, para abarcar subdominios. Cuando múltiples
pins se configuran para un mismo host, la conexión se considerará válida si al menos
uno de ellos coincide, permitiendo estrategias seguras de rotación de certificados.
Ejemplo de configuración:
<certificatePinning>
<!-- Habilita la funcionalidad de certificate pinning -->
<enabled>false</enabled>
<!--
El modo puede ser 'strict' o 'permissive'.
- 'strict': La conexión solo tendrá éxito si al menos un pin coincide. Esto significa que si
el host no está configurado o el pin no coincide, la conexión fallará.
- 'permissive': Solo los hosts configurados aplicarán el certificate pinning.
-->
<mode>permissive</mode>
Nota: Los valores de pin deben proporcionarse en Base64, correspondientes al hash SHA
-256 del certificado o de la clave pública.