 |
| Figura 1: Atacar la seguridad de HTTPs con un Delorean en Python |
Sí, el uso de un
Delorean es una forma de hacer entender a todo el mundo que el ataque tiene que ver con las medidas de seguridad que dependen de la fecha del sistema operativo y que, por
fallos de seguridad en el protocolo NTP, pueden ser manipuladas para hacer viajar en el tiempo al sistema. Si cuando hablamos de
Leap Seconds vimos lo mal que le podía venir a al sistema un segundo introducido, os podéis imaginar si hacemos viajar en el tiempo a los sistemas informáticos durante más tiempo.
 |
| Figura 2: Saltar la seguridad de HSTS con un Delorean |
Implementaciones de NTP en sistemas operativos
En la lista de sistemas operativos que ha analizado
José Selvi se encuentran
Ubuntu,
Fedora,
OS X y
Windows. Todos ellos hacen uso de una forma u otra del protocolo
NTPv3 o
NTPv4 con configuraciones susceptibles de sufrir un
ataque de man in the middle. Esto quiere decir que, un atacante, podría interceptar la petición de sincronización
NTP emitida por el sistema operativo y darle una hora arbitraria para configurar de forma maliciosa la hora del sistema operativo.
 |
| Figura 3: Petición NTPv4 de Ubuntu vulnerable a man in the middle |
Para hacer esto, hay que utilizar algún
esquema de man in the middle en redes IPv4 o IPv6 que permita interceptar la petición
NTP del cliente. Aceptando que en una red insegura - sin
IPSec o sin posibilidad de bloquear los ataques de
man in the middle - el protocolo
NTP es vulnerable, las medidas de mitigación que tienen los sistemas operativos se basan por tanto en reconocer si alguna de estas peticiones puede reconocerse como maliciosa.
En las diferentes implementaciones Fedora es que más fácil lo pone, ya que hace una petición cada minuto y por tanto se le pueden hacer cambios en la fecha del sistema constantemente. En el caso de Ubuntu la sincronización es cuando se levanta la conexión de una nueva red o se produce un reinicio. En OS X se hace cada ciertos minutos, pero en las últimas versiones depende de la carga de trabajo que tengo el sistema. Windows es el que lo pone más complicado, ya que tarda días en hacer las peticiones, además de que no permite cambios muy grandes en los tiempos, desechando las peticiones que vienen con grandes saltos, dejando una ventana muy pequeña de ataque.
 |
| Figura 4: Cuatro de los cinco modos de funcionamiento que tiene Delorean para viajar en el tiempo |
Visto esta primera parte, el resumen sería que, con mayor o menor grado de exposición, si un equipo se conecta a una red insegura, su fecha del sistema puede ser alterada de forma maliciosa por medio de una
herramienta escrita en Python, que
José Selvi ha bautizado como
Delorean.
Ataques a HSTS con el Delorean
Visto esto, que un equipo tenga una fecha maliciosa puede ser aprovechado por un atacante para hacerle mucho daño a un equipo. Uno de los ejemplos que propone
José Selvi es el de atacar el protocolo
HSTS. Este protocolo cierra la posibilidad de ataques
Man in The Middle que se producen cuando se utilizan conexiones
HTTP, ya que con
HSTS se fuerza al navegador a que la conexión sea siempre por
HTTPs cuando un dominio esté en la lista. Esto se hace mediante la configuración del
HTTP Header HSTS que envía el servidor web en la primera conexión. A partir de ese momento se le impide al navegador conectarse a un dominio por
HTTP mientras el
TTL configurado por el
HSTS sea mayor que cero. Es decir, que no haya caducado.
Desde las
URLs internas de
Google Chrome, puedes consultar el estado de la política
HSTS que tiene tu navegador para cada dominio, así como los datos del certificado que se espera encontrar al otro lado para que no le den uno falso. Es decir, no solo la política de
HSTS, sino también cuál es el certificado del que se está haciendo
Certificate Pinning.
 |
| Figura 5: Configuración de HSTS para el dominio www.gmail.com en Google Chrome |
A día de hoy esto no es posible con todos los dominios, ya que algunos navegadores tienen listas preconfiguradas en el código, es decir,
hardcodeadas, de conexiones
HSTS que no van a realizarse nunca por
HTTP - ni la primera vez -. Esta lista la gestiona
Google Chrome y la utilizan otros navegadores. Además, cualquiera puede solicitar estar en esa lista mediante
este sitio web.
 |
| Figura 7: Configuración de política de expiración en lista precargada de certificados |
Por suerte o por desgracia, los certificados de esa lista también dependen del tiempo y expiran - y no tardando mucho ya que algunos son horas, otros como
Google Chrome 10 semanas -, así que es posible hacer caducar la lista precargada en los navegadores y forzar la conexión
HTTP a un sitio web para lograr interceptarla y hacer un
man in the middle a esa conexión.
Usando certificados digitales expirados
Otra de las cosas curiosas que se pueden hacer es la de llevar con el Delorean la fecha del sistema a un tiempo en el pasado, con el objeto de lograr que los certificados que hubieran expirando antaño o que hayan sido marcados como caducados, vuelvan a ser válidos.
 |
| Figura 8: Certificado de Diginotar firmado para Google.com que se bloqueó |
Así, por ejemplo,
José Selvi explica cómo se puede engañar a un navegador para que vuelva a dar por válidos los
certificados robados a Diginotar que se hicieron para firmar dominios como Google.com o Live.com. Pero también para conseguir que certificados de las listas
CRL que han sido marcados como caducados vuelvan a poder usarse.
Los planificadores de tareas y las actualizaciones de seguridad
Por último, una de las cosas más curiosas que se producen es que, si un equipo cambia su fecha y su hora, todo su planificador de tareas puede dejar de funcionar. Esto hace que las tareas de mantenimiento puedan no realizarse a tiempo o incluso no hacerlo nunca. En el caso de Windows, una de las cosas que se puede hacer es llevar la fecha del sistema a un tiempo en el futuro, y cuando se planifique la siguiente actualización de software mediante Windows Update, volver a llevar el sistema a su hora actual. Esto, como efecto lateral dejaría a un equipo sin actualización de parches de seguridad.
 |
| Figura 9: Configuración de Windows Update para febrero de 2016 |
Mis más sinceras felicitaciones a José Selvi por este trabajo. De que forma tan sencilla ha enlazado los ataques de man in the middle, las debilidades NTP - que ya eran conocidas - con la seguridad de HTTPs para lograr, con una herramienta sencilla escrita en Python cargarse su seguridad en ciertos entornos. Me encanta.
Saludos Malignos!