22 abril 2010

Gestión de Certificados Digitales en Windows Vista y 7

Hoy vamos a explicar algo curioso sobre los 'pequeños' cambios que ha sufrido la gestión de certificados digitales en Windows.

En concreto me estoy refiriendo a la forma en la que Windows gestiona los certificados de CAs Raíz (root) en Vista y 7.

Tradicionalmente la gestión de CAs en Windows era similar a la que hace, por ejemplo, Firefox. Se dispone de un contenedor donde se almacenan las CAs raíz que Mozilla o Microsoft han designado como fiables tras procesos varios de aprobación, y el usuario final simplemente se desentiende. Esta gestión estática de certificados tiene sus cosas buenas y sus cosas malas, la parte buena es que tu, como usuario final, puedes revisar la lista y desinstalar cualquiera de esos certificados a tu criterio. La parte mala viene a la hora de incorporar nuevas CAs, normalmente es necesario liberar un parche o una actualización de software con las nuevas CAs.

Alguien en Microsoft debió decidir que esa forma tan estática de gestión no es optima y la cambiaron. Si observamos la lista de certificados de CAs raíz que vienen 'by default' en Windows observaremos que apenas hay unos pocos certificados (solo 12).



¿Microsoft se ha vuelto paranoica? Nada de eso, como prueba de concepto podemos navegar hacia la web de la AEAT https://www.agenciatributaria.gob.es/ y... ¡ Sorpresa ! podemos acceder vía SSL sin ningún warning porque el certificado, (emitido por la FNMT) ha sido considerado valido. ¿Que ocurre si volvemos a mirar el contenedor de certificados?


Vaya ! ahora aparece en el contenedor el certificado de la CA de la FNMT, y todo esto sin intervención alguna del usuario. De hecho apenas se puede encontrar rastro del suceso en el visor de eventos:


Si probamos a eliminar manualmente el certificado del repositorio y volvemos a navegar sobre la web de la AEAT, el proceso se repite y el certificado se carga en el contenedor.

Googleando y preguntando lo cierto es que no encontré información sobre este cambio en modo detallado, así que me puse a investigar un poco. Tirando de Wireshark vi esto:


Muy elocuente el UserAgent, sin duda. El caso es que parece que cuando a Explorer se le muestra un certificado que no es capaz de validar, descarga ese fichero Cab. ¿Y que hay dentro de ese fichero? Otro llamado authroot.stl que, tal y como vemos en MSDN, se trata de una lista de certificados de confianza firmada digitalmente por una CA de Microsoft. Así que el proceso está claro. Microsoft tiene una lista de certificados validos que gestiona dinámicamente a su aire y que va suministrando al usuario final cuando este encuentra un certificado que no puede validar. Si buscamos en el fichero authroot.stl


Podemos ver la lista completa de certificados que en ese momento Microsoft da por validos y entre ellos, el de la FNMT.

Particularmente creo que con algo tan serio como los certificados digitales que, no dejan de ser sobre lo que se articula la seguridad en Internet, merecen la máxima transparencia y rigor. Ya hemos visto que la lista de CAs válidas es consultable en un momento determinado, pero el hecho de que esa lista se modifique dinámicamente y sin visibilidad no es buena idea. Y mas cuando se escuchan algunas voces que siembran bastantes dudas. A eso hay que sumarle que, aunque se eliminen los certificados, Windows los volverá a cargar amablemente.

Realmente se puede deshabilitar la auto-actualización de certificados usando el editor de políticas de Windows:


Pero obviamente, la idea de tener que ir aprobando certificados a nivel de usuario, es menos recomendable si cabe.

No obstante, en aras de al menos tener cierto control sobre lo que sucede en nuestro almacén de certificados, he programado una pequeña herramienta llamada CertMon que monitoriza el almacén de certificados en Windows y, cuando detecta que se ha cargado un nuevo certificado, informa al usuario dando los datos de la CA.


La herramienta está disponible aquí

9 comments :

primolarry dijo...

La verdad es que si fuera usuario de windows no me haría ni pizca de gracia. Gran post!

un saludo

fossie dijo...

Para el usuario inexperto lo verá como una ventaja pero ciertamente tampoco me parece buena idea que Microsoft decida por nosotros los certificados confiables y los que no.

¿La página desde la que microsoft descarga ese cab es fija? ¿la podra modificar algun virus? imagino que la url estará en el registro y si alguien la modifica podria hacer gestionar los certificados por nosotros :(

Yago Jesus dijo...

@primolarry muchas thx a ver si concretamos algo que podamos colaborar juntos !

@fossie No es tan fácil, el fichero que va dentro del cab está firmado digitalmente por Microsoft de forma que no puedes cambiarlo por otro a las buenas porque no podrías repetir la firma sobre el. No lo he probado pero asumo que si cambias ese fichero por otro cuya firma digital no pertenezca a una CA de Microsoft no debería aceptarse. Con tiempo lo probaré

Rigolox dijo...

Donde se puede conseguir el código fuente? He estado mirando en vuestro repositorio de google pero nada.

Solo puede se obtener a través de svn?

NaCl u2

Yago Jesus dijo...

@Rigolox No lo he publicado porque dudo del interés real de 'pegarse en windows' con código fuente. Si te interesa ejemplos de como trabajar con certificados de forma nativa en Windows puedes ojear el código de CertDump http://www.security-projects.com/?CertDump Y si tienes interés específico por este programa puedo intentar enviar por mail

knx dijo...

Certificate Spoofing by YJesus. Qué genial :)

deese dijo...

Querido Yago, quiero que sepas que me ha impresionado el soft. Muy buen approach, como siempre.

Un 10 ;)

Dreg dijo...

Muy wapo yago.

vierito5 dijo...

Genial post Yago, muchas gracias por tu herramienta :)