Ventajas y riesgos del ‘pinning’ en aplicaciones móviles

El ‘pinning’ es un mecanismo opcional que puede utilizarse para mejorar la seguridad de las comunicaciones que se apoyan en conexiones que utilizan certificados, como las conexiones HTTPS utilizadas por las aplicaciones móviles.  El ‘pinning’ permite especificar la identidad del otro extremo de una conexión y utilizarla para permitir únicamente conexiones desde la app a los servidores conocidos y prefijados al desarrollarla. 

Es un mecanismo sencillo que puede incorporarse en el desarrollo de las aplicaciones móviles que requieran un nivel adicional de seguridad en la información intercambiada de forma que esta no pueda ser interceptada por ataques de man-in-the-middle. Es transparente para los usuarios y no penaliza ni la velocidad de las comunicaciones ni la experiencia de uso de la aplicación. 

Puede ser muy útil pero debe tenerse en cuenta que, para ser efectivo y evitar otros problemas, su uso no debe realizarse de forma independiente en la app, sino que debe involucrarse también a los servidores a los que se conecta la aplicación móvil.

¿Cómo se realizan las conexiones seguras desde las apps?

Las aplicaciones que utilizamos en los dispositivos móviles están diseñadas para proporcionar comunicaciones encriptadas a través de un canal seguro que las cifra.  Cada vez que se realiza una conexión de este tipo se realiza un proceso complejo que involucra a los dos extremos.

Cuando una aplicación móvil intenta conectarse a un servidor, éste responde presentando su certificado digital. Si el dispositivo móvil reconoce ese certificado como válido se establece la conexión segura entre los dos extremos. A partir de ese momento, los datos intercambiados entre la aplicación y el servidor viajan por esa conexión segura. 

Para poder realizar ese proceso, los sistemas operativos de los dispositivos móviles disponen de un almacén seguro de certificados. Cada versión de sistema operativo del móvil lleva incluido un conjunto de certificados que son de confianza y  que vienen preinstalados en el almacén seguro. Estos ‘certificado de confianza’ no son más que la clave pública de un ‘certificado’ que identifica a una ‘Autoridad Certificadora’ (CA – Certificate Authority) de la que el móvil tiene confianza.  Cuando se actualiza la versión de sistema operativo del móvil, es frecuente que también se produzca la actualización de los certificados raíz de ese almacén seguro. 

En la práctica, los certificados que presenta un servidor para establecer la conexión no están directamente firmados por las CA de orden superior (son aquellas que firman ellas mismas sus certificados), sino que existe una jerarquía de certificados intermedios entre el más bajo (el del dominio del servidor al que se conecta la app) y el superior de la cadena (el certificado raíz de la CA). Esta cadena de certificados es lo que se denomina una cadena de confianza’ (chain of trust) y que se utiliza en el proceso de verificación.  

Para establecer una conexión segura,  el servidor presenta al móvil una cadena de firma de certificados, incluyendo el certificado de su dominio y también alguno de los certificados intermedios. Por su parte,  el móvil va recorriendo esa cadena de firmas comenzando por el nivel más bajo, el certificado del servidor, y subiendo en la jerarquía hasta que encuentra un certificado intermedio que coincide con alguno de los presentes en su ‘almacén de certificados’. Es en ese momento en el que valida al servidor y se establece el canal seguro entre los dos extremos.

¿Hasta dónde llega la validación de la conexión segura?

El mecanismo anterior ocurre para todas y cada una de las conexiones seguras que se realizan desde el móvil. Es un proceso automático para las apps y rápido , porque se realiza desde las librerías de comunicaciones de cada Sistema Operativo Móvil.  

Pero este proceso de validación de certificados no llega a diferenciar unos servidores ‘válidos’ de otros. Esto se debe a que únicamente se tiene en cuenta que el certificado que presenta un servidor es válido en base a la ‘cadena de confianza’, es decir, la CA que ha firmado el certificado que se presenta. No se tiene en cuenta otra información asociada como el dominio o el host del servidor al que intenta conectarse.

Tampoco tiene en cuenta el hecho de que es posible incorporar de forma manual nuevos certificados en el móvil y añadir así nuevas Autoridades Certificadoras que se incorporan a ese mecanismo automático de validación y que pueden alterar esa ‘cadena de confianza’.   

La incorporación de nuevos certificados al móvil es una tarea que involucra tanto al usuario como a su móvil en un proceso de varios pasos que deja constancia visible en el dispositivo. También es necesario utilizar una configuración específica en la conectividad del móvil para utilizarlo. Por este motivo su uso principal está relacionado con tareas de ingeniería inversa de aplicaciones móviles para monitorizar cómo se comunican con sus servidores.

¿Cómo funciona el pinning?

El ‘pinning’ asocia la clave pública que presenta un servidor con el dominio o el host de ese servidor.

De esta forma, el proceso estándar de validación de la cadena de firmas de los certificados, se ve completado con un proceso particular y adicional para verificar si la clave pública del certificado del servidor al que se conecta la app es la esperada.  Es decir, para que se establezca la conexión con un servidor, es necesario que la cadena de firmas de certificados sea la correcta, pero también el servidor sea el adecuado.

Una aplicación móvil suele conectarse a más de un servidor o dominio, por lo que es habitual que la aplicación disponga de una lista de pares de clave/valor que utiliza a modo de ‘lista blanca’ para comprobar los certificados de los servidores con los que puede establecer una conexión segura.  Cualquier otra conexión desde un servidor que no esté en la lista blanca, será rechazada.

Para realizar esta verificación adicional de ‘pinning’ las aplicaciones tienen que interceptar el proceso de establecimiento de la conexión. Todas las plataformas proporcionan mecanismos de desarrollo para hacerlo al construir la aplicación.

¿Cuándo utilizar el ‘pinning’?

El ‘pinning’ es útil cuando la aplicación tiene certeza de los servidores a los que se va a conectar, y este es el caso habitual que sucede con la mayoría de las aplicaciones móviles.  

Pero la utilización correcta del pinning supone una relación pre-existente entre aplicación móvil  y servicio al que se conecta. La lista blanca que incorpora la app en su desarrollo presupone esta relación y hace necesaria una coordinación adicional en la organización que implanta aplicaciones móviles con pinning:   cualquier cambio en los certificados de servidor que afecte al mecanismo de pinning afecta también a la app; es decir, el ciclo de vida de los certificados de servidor (sus cambios, renovaciones, etc) pasan a estar ligados con el ciclo de vida de actualizaciones de las aplicaciones móviles, puesto que en estas actualizaciones es la forma adecuada desplegar esa ‘lista blanca’ de servidores con los que la aplicación puede conectarse.

Luis del Ser, Co-fundador de Movilok

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

TE PUEDE GUSTAR

RECIBE LA NEWSLETTER

*Email: *Nombre apellidos: *Empresa: Cargo: Sector:

 
Please don't insert text in the box below!

ARTÍCULOS MÁS RECIENTES

ESCUCHA NUESTRO PODCAST

SÍGUENOS EN RRSS

MÁS COMENTADOS

Scroll al inicio