Hace algunos días se publicó la versión final de LibreSSL, el primer fork serio de OpenSSL que garantiza una mayor seguridad de cara a establecer las conexiones entre servidores. Aunque LibreSSL aún no se utiliza en códigos de producción, muchos usuarios han decidido revisar su código y probarlo en entornos privados para comprobar la seguridad que el nuevo protocolo nos ofrece. Descubre cómo puedes cifrar archivos usando OpenSSL.
Tras un estudio en profundidad, Andrew Ayer ha publicado un artículo en el que demuestra que el módulo PRNG de LibreSSL flaquea bastante en cuanto a seguridad y ofrece en Linux bastante menor seguridad que su rival OpenSSL.
Para poder comprobar la seguridad de este módulo se ha utilizado el programa fork_rand, diseñado específicamente para probar la aleatoriedad del cifrado.
OpenSSL
$ cc -o fork_rand fork_rand.c -lcrypto
$ ./fork_rand
Grandparent (PID = 2735) random bytes = f05a5e107f5ec880adaeead26cfff164e778bab8e5a44bdf521e1445a5758595
Grandchild (PID = 2735) random bytes = 03688e9834f1c020765c8c5ed2e7a50cdd324648ca36652523d1d71ec06199de
LibreSSL
$ cc -o fork_rand fork_rand.c libressl-2.0.1/crypto/.libs/libcrypto.a -lrt
$ ./fork_rand
Grandparent (PID = 2728) random bytes = f5093dc49bc9527d6d8c3864be364368780ae1ed190ca0798bf2d39ced29b88c
Grandchild (PID = 2728) random bytes = f5093dc49bc9527d6d8c3864be364368780ae1ed190ca0798bf2d39ced29b88c
Como podemos ver, LibreSSL muestra en las 2 llamadas a RAND_bytes el mismo resultado, por lo que el cifrado no varía ni en un solo byte, sin embargo, en OpenSSL devuelve 2 códigos diferentes en cada llamada a RAND_bytes, aumentando notablemente la seguridad del protocolo.
Otro fallo que también se ha detectado en LibreSSL está relacionado con chroot. Cuando OpenSSL intenta acceder a /dev/urandom y no lo consigue devuelve un código de error que, posteriormente, debe ser analizado por el correspondiente programador. LibreSSL sin embargo no devuelve ningún código de error, por lo que los desarrolladores no saben exactamente el por qué del error y eso puede suponer un fallo de seguridad. También OpenSSL permite ejecutar la función RAND_poll evitando tener que acceder al archivo anterior y permitiendo que sus cifrados sean independientes, sin embargo, en LibreSSL este método no funciona correctamente y puede derivar también en un fallo de seguridad.
La vulnerabilidad de PRNG ya ha siso solucionada por parte de los desarrolladores, sin embargo, aún no hay respuesta sobre el problema de chroot, por lo que habrá que esperar. Es posible que LibreSSL aprenda de sus errores y que en futuras compilaciones ofrezca una seguridad mucho mayor que le permita establecerse como una verdadera alternativa a OpenSSL. Debemos tener en cuenta que aún se encuentra en fase de desarrollo, por lo que aprender de sus errores es sin duda un buen paso y una oportunidad de mejorar.
Podéis consultar más información técnica sobre la seguridad de LibreSSL en agwa.name
¿Crees que LibreSSL mejorará su seguridad y será una verdadera alternativa más segura que OpenSSL?