Hace unos días os comentaba la posibilidad de incluir en nuestra lista de certificados de servidores de nuestro navegador el certificado del host concreto para evitar que tras conseguir instalarlos el certificado de una RogueCA, un intruso pueda emitir certificados de cualquier host que sean confiables para nosotros.
Pues bien, como dice el título del post, la solución (que os dije que probaría) ha resultado fallida, parece ser que al menos el navegador testeado da más credibilidad a las CA que tiene instaladas que a las excepciones (algo que por cierto no entiendo, se supone que cuanto más "concreto" más credibilidad debería darle).
Las pruebas las realicé montándome una CA en mi equipo a la que denominé RogueCA. Depués de eso generé un certificado para www.banco.com y lo firmé con esta CA. Una vez con el certificado en la mano, lancé un webmitm (herramienta del paquete dsniff) utilizando este certificado y conectando hacia la IP de este banco, tras lo que edite mi propio fichero /etc/hosts para simular un ataque de envenenamiento DNS mediante el cual me hicieran dirigir las conexiones a www.banco.com contra el proxy formado por webmitm.
Efectivamente, conecto y me sale el aviso de que el certificado no está firmado por una CA reconocida. Esto sería lo que pasaría habitualmente si alguien nos quisiera hacer un ataque de MitM a través de HTTPS.
Para "simular" la realización del ataque de RogueCA, incluimos a mano en nuestro navegador la CA que acabamos de crear, haciendo como si, de alguna manera, el intruso consiguiera incluirla (que es lo que hace realmente el ataque), así podemos probar la solución sin tener que buscar ninguna colisión MD5.
Una vez incluida, visitamos de nuevo la web y podemos observar como ya no nos aparece el error, sino que entramos sin ningún tipo de aviso a la web de nuestro banco (como era de esperar). Mientras tanto, podriamos estar grabando todas las transacciones y contraseñas que está realizando el usuario contra su banco.
Ya está comprobado que de esta manera tenemos el mismo efecto que si nos realizaran el ataque. Ahora volvemos hacia atrás hasta el momento en el que aún no se había producido el ataque (eliminamos la línea del /etc/hosts y la entrada de la rogueCA en la lista de autoridades confiables).
Una vez tenemos de nuevo la web auténtica sin MitM de por medio en pantalla, accedemos a su certificado y lo guardamos:
Ya tenemos el certificado .pem de la web de nuestro banco, ahora incluimos este certificado como certificado de servidor aceptado en nuestro navegador:
Una vez hecho todo esto, volvemos a repetir los dos ataques anteriormente mencionados, y volvemos a probar a acceder a la web para comprobar si el certificado de host prevalece sobre el de la CA y estamos a salvo empleando este método.
Por desgracia, seguimos entrando sin ningún tipo de mensaje ni aviso a la web del banco. Observamos el certificado que estamos usando y efectivamente se trata del certificado malicioso.
Esto demuestra que esta solución que en principio parecía que iba a funcionar no lo hace, por lo que habrá que pensar otras soluciones.
Lo que sí funcionó es crearme otro usuario y eliminar absolutamente todos los certificados de las CAs y añadiendome a mano los certificados de los hosts críticos (mis bancos, el correo, etc). Es una solución incómoda pero al menos tenemos la certeza de que estaremos visitando lo que queremos visitar, al menos hasta que todas las CAs dejen de utilizar MD5 o los desarrolladores de navegadores implementen algún tipo de popup avisando que el certificado aceptado está utilizando hash MD5 (es una de las soluciones propuestas por los descubridores de la vulnerabilidad).
Por último, me gustaría comprobar en otros navegadores si esta solución funciona de la misma manera o si puede que resulte efectiva. Estoy pensando en Internet Explorer, Safari, Opera, Chrome, ...
Si alguien lo prueba con alguno de estos navegadores que lo deje como comentario o que nos mandé un correo y lo publicaré (o si lo publicas en tu propia web pondremos el enlace, claro).
No hay comentarios :
Publicar un comentario