Ataques de colisiones, así se lo monta Flame
Tenía pendiente escribir una serie de artículos sobre criptografía y su evolución y por unas cosas u otras al final no saco tiempo. Vamos a empezar la casa por la ventana y dado que se ha descubierto un virus que utiliza un ataque criptográfico para hacer de las suyas lo utilizaré de excusa para explicar como funcionan las firmas digitales.
Hace poco se ha descubierto un virus informático que llevaba suelto campando a sus anchas unos dos años y nadie se había percatado.
El angelito se llama Flame y ataca sistemas windows en Oriente Medio especialmente en Irán.
Este virus puede activar la webcan, micrófono, bluetooth para grabar imagen, sonido, datos de dispositivos cercanos al ordenador como puedan ser móviles, realizar capturas de pantalla, teclado etc
Este virus se instala ya que ha logrado “usurpar” la identidad de Microsoft y se instala en los ordenadores como software de confianza ya que “tiene el visto bueno de Microsoft”.
Microsoft, como otros muchos fabricantes, firma digitalmente software para certificar que es legítimo. Por este motivo cualquier software firmado por Microsoft es confiable.
Los mecanismos de firma digital se basan en criptografía asimétrica. En dicho tipo de criptografía cada usuario tiene dos claves:
- Una privada que se utiliza para encriptar información.
- Otra pública que se utiliza para desencriptar información.
Ambas claves están relacionadas matemáticamente de tal forma que conocida la clave pública es “computacionalmente imposible” conocer la privada.
En realidad lo que hagamos con la clave pública lo podemos deshacer con la privada y viceversa. Es decir si encriptamos con la pública podemos desencriptar con la privada y si encriptamos con la privada podemos desencriptar con la pública.
Supongamos que Alicia tiene sus claves y quiere que Benito le envie cierta información sensible. Para ello Alicia debe mantener su clave privada, tal y como indica su nombre, privada y no compartirla con nadie. Por el contrario su clave pública debe hacerla pública a todos aquellos que quiere que le envien información encriptada.
Esto no supone ningún peligro ya que dicha clave se utiliza unicamente para encriptar información, una vez encriptada la única forma de recuperarla es utilizar la clave privada que Alicia guarda celosamente.
Este sistema elimina una problemática de los sistemas simétricos, la distribución de la clave. En los sistemas simétricos tanto Alicia como Benito comparten la misma información, la clave. Para poder compartirla deben comunicarsela el uno al otro y en este proceso se puede comprometer la clave. En los sistemas asimétricos Alicia y Benito no comparten la misma información ya que la clave para desencriptar sólo la conoce una de las partes, a la que va dirigida el mensaje.
Dado que la clave para encriptar es pública y es del dominio público cualquiera, supongamos que Carlos, puede utilizar la clave pública de Alicia para encriptar un mensaje y enviárselo diciendo que es Benito. Carlos proporcionará una clave pública a Alicia diciendo que es Benito y Alicia le enviará información con esa clave destinada a Benito y que recibirá Carlos. Dado que dicha información estará encriptada con la clave pública que Carlos le hizo creer a Alicia que era de Benito sólo Carlos podrá desencriptar esa información. Este ataque se llama “Man in the Middle“.
Para evitar este problema existen las entidades de confianza que emiten un certificado digital que asegura que cuando Alicia quiere enviar un mensaje a Benito puede verificar que la clave que va a utilizar para encriptar la información es la de Benito y no la de Carlos.
Para poder utilizar certificados digitales Benito debe, a su vez, generar sus propias claves pública/privada y necesita que una entidad de confianza le genere el certificado.
Existen empresas dedicadas a esto y que te generan tu certificado digital por un “módico” precio (Thawte,Verisign,FNMT). Se expiden diferentes tipos de certificados según la seguridad que se necesite. Los requisitos y precio varian.
Para certificar algo lo que se hace es utilizar funciones de un sentido o resumen (hash o one way functions) estas funciones cumplen:
- Producen una salida de longitud fija, 128 bits, 256 bits, … independientemente del tamaño de la información a firmar.
- La probabilidad de que dos conjunto de datos tengan el mismo resultado por la función hash ha de ser practicamente nulo. Es imposible que sea nulo ya que si utilizamos n bits los resultados posibles son
. Cuando
es grande el número posible de hashes es enorme pero aún así finito.
- Si en la información cambiamos un único bit el hash resultante ha de cambiar sustancialmente.
- Dado un hash ha de ser “computacionalmente” imposible recuperar la información que generó ese hash.
El certificado no es ni más ni menos que información de la persona o entidad correspondiente incluyendo su clave publica, se genera un hash de esta información y la entidad de confianza lo “encripta” con su clave privada. Esta “encriptación” sólo la puede hacer la entidad de confianza ya que es la única que tiene acceso a su clave privada.
Por el contrario todo el mundo puede desencriptar el certificado para verificar la clave pública del certificado y de esta forma asegurarnos de que la clave privada de Benito es la correcta. Para desencriptar el certificado lo haremos con la clave pública de la autoridad que lo emitió.
Ahora que hemos introducido de forma resumida como funcionan la firmas digitales volvamos a Flame.
Flame falsifica la firma digital para simular que Microsoft ha certificado el software y de esta manera instalarse sin levantar sospechas.
Por lo que hemos visto la única forma de hacer esto es utilizar la clave privada de Microsoft. ¿Ha sido comprometida la clave privada de Microsoft? La respuesta es no.
Flame utiliza un ataque por colisiones. Estos ataques se basan en encontrar dos conjuntos de datos que tengan el mismo hash.
El algoritmo de hash que Flame ha roto es MD5.
En 2007 se publicó un ataque por colisiones sobre MD5 que se consideraba no aplicable en la practica, un ataque teórico. Lo malo de estos ataques es que demuestran vulnerabilidades en los algoritmos que aunque no sean aplicables en la práctica terminarán descubriéndose otros si aplicables en la práctica.
A finales de 2008 utilizando 200 Playstation 3 se logró un ataque práctico sobre MD5 logrando falsificar un certificado digital.
Flame se ha verificado que utiliza un ataque por colisiones a MD5, pero es un ataque desconocido hasta ahora y que los especialistas que lo han revisado clasifican como de un altísimo nivel matemático. Es decir que detrás de Flame se encuentran, muy probablemente, los servicios de inteligencia de algún país que obviamente no ha reconocido su autoría ni va a hacerlo.
Flame utiliza este ataque por colisiones contra MD5 para falsear el certificado y hacer ver que Microsoft ha firmado el software con lo cual se considera software de confianza.
Dado que Flame lleva campando por internet unos dos años podemos sacar varias conclusiones:
- Definitivamente MD5 ya no es seguro.
- Dado que MD5 genera hashes de 128 bits deberíamos utilizar funciones hash que generen hashes significativamente mayores.
- Si este angelito hace estas cosas y fue liberado hace dos años. ¿Que otras “herramientas” existen?
Microsoft ya ha sacado parche y se ha declarado esta vulnerabilidad como de máximo riesgo.
Mas información sobre Flame:
- Flame crypto breakthrough.
- Flame wields rare collision crypto attack.
- Worlds best cryptography brains behind flame spy virus.
Muchas gracias a @rrey por proporcionarme enlaces al respecto.
