Certificate pinning. El qué, el cómo y el porqué (II)

miércoles, 28 de agosto de 2013

Después de aclarar conceptos en la entrada anterior sobre las debilidades de las PKI, el TLS/SSL en general y las soluciones propuestas, veamos cómo han implementado el concepto los diferentes fabricantes.

El cómo... de Microsoft.

Quizás una de las soluciones más interesantes, por simples y sencillas para el usuario. No precisan de cambios en ninguna aplicación o protocolo, y está integrada en una herramienta tan "necesaria", que para los paranoicos no implica instalar nuevo software. Lo que ha hecho Microsoft es integrar la funcionalidad de "certificate pinning" en EMET, una de las herramientas de seguridad más interesantes (en el plano defensivo) que existen. En su versión 4.0, añadieron la posibilidad de "unir" dominios con certificados raíz del repositorio de certificados de confianza del usuario. Fundamentalmente esa es la idea.

El funcionamiento es como el de EMET "de siempre". Internamente inyecta una DLL (EMET_CE.DLL) en el proceso de Internet Explorer (que debe estar protegido por EMET a su vez) y comprueba que el dominio del certificado coincide con la regla establecida. Si no es así, muestra un mensaje. El resto de opciones disponibles permiten no ser tan restrictivo. Por ejemplo, se puede bloquear por algoritmo de hash (si es menor que MD5), o a un país concreto (sería extraño que China fuese el país final en el que confía un certificado emitido para Google, por ejemplo) y así no tener que unirlo a un certificado concreto. En cualquier caso, lo más restrictivo es unirlo a un certificado concreto.

Para añadir reglas, se debe comprobar la cadena de certificación de dominio, buscar el adecuado y efectuar la asociación. Las asociaciones quedarán configuradas en un XML junto al programa. Ya viene preconfigurado con algunos dominios populares. Curiosamente, no aparece Google como regla preestablecida, pero sí Facebook y Twitter. Quedan empate en esta tontería, porque Google (aunque puede solicitarlo cualquiera) tampoco preconfigura nada de Microsoft en el sistema de pinning de Chrome.

Los "problemas"

El hecho de unir certificados raíz con dominios, deja un hueco en los certificados intermedios. Si son modificados, EMET no protegerá la conexión. Esta es su principal desventaja. También que todo ocurre en local y de forma manual. No hay espacio para la actualización dinámica de los dominios u otros certificados. Aunque es cierto que los certificados raíz de la mayoría de los dominios no cambian a menudo.

La alerta que propone EMET no bloquea el sitio, sino que muestra una pequeña ventana emergente. Algo poco apropiado para el usuario final. Los certificados raíz que se pueden enganchar en un dominio para crear reglas, solo se toman del repositorio del usuario, no de la máquina. Esto no es grave pero en entornos corporativos puede complicar la administración.

Es importante señalar que una misma clave pública puede estar firmada por diferentes certificados. Es una práctica habitual de las CA que podría provocar falsos positivos. Pero lo solucionan determinando los certificados por dos vías: una tupla de [emisor, número de serie] (que según el RFC debería ser única) o por el campo "SubjectKey" que es el SHA1 de la clave pública "desnuda" del certificado. Es una decisión diferente a la tomada por Chrome, por ejemplo, que los identifica de otra manera argumentando que usar SubjectKey no es del todo acertado.

También es necesario tener en cuenta que dependiendo del país o de la conexión, la cadena de certificación que "ve" el usuario final puede variar. Por tanto unirlo exclusivamente a un certificado raíz puede dar pie a falsos positivos.

La configuración

Es sencilla. Esta imagen resume la secuencia necesaria para añadir Google. Hay que consultar el certificado, comprobar cuál es el raíz en el que confía finalmente la conexión, mirar su huella digital y añadirla como regla encontrando el certificado en el repositorio.

Resumen de la configuración de una regla para Google.es
En caso de error, la ventana que aparece es la siguiente:
Pequeña ventana emergente que aparece cuando no casan los certificados y dominios definidos. También se registra un evento en el sistema.
La apuesta de Microsoft es simple y fácil de implementar pero queda fuera de su navegador, en un programa externo muy útil pero francamente poco popular hoy en día (aunque personalmente creo que evolucionará hasta formar parte integral del sistema operativo). Teniendo en cuenta que otros han elegido integrarla directamente en el navegador, no se sabe si esto quiere decir que se trata de una "tímida" apuesta por el "pinning" en Microsoft, o que han sacado esta solución mientras preparan algo más elaborado integrado en Internet Explorer
Sergio de los Santos

No hay comentarios:

Publicar un comentario