NTP (Network Time Protocol, puerto 123 UDP y TCP) es
un protocolo utilizado para sincronizar relojes de máquinas de una forma muy
precisa; a pesar de su sofisticación no fué diseñado con una idea de
robustez ante ataques, por lo que puede convertirse en una gran fuente de
problemas ([Bis90]) si no está correctamente configurado o si no
utilizamos versiones
actualizadas de nntpd, el demonio que ofrece este servicio.
Son muchos los problemas de seguridad relacionados con un tiempo correcto; el
más simple y obvio es la poca fiabilidad que ofrecerá nuestro sistema de
log a la hora de determinar cuándo sucedió determinado evento:
aunque se registrara que alguien hizo un telnet a las tres de la tarde,
no podríamos ni siquiera asegurar que la hora es correcta. Otro problema
típico radica en las facilidades que ofrece Unix para la planificación
de tareas: si el reloj tiene problemas, es posible que ciertas tareas no se
lleguen a ejecutar, que se ejecuten varias veces, o que se ejecuten cuando no
han de hacerlo; esto es especialmente peligroso para tareas de las que depende
nuestra seguridad, como la rotación de logs. Si hablamos de problemas
más sofisticados, podemos pensar en sistemas distribuidos, en los que una
correcta sincronización entre nodos es básica para garantizar el correcto
funcionamiento del sistema global ([Tan95], [CDK94]...); la
sincronización es muy importantes en modelos de autenticación como Kerberos, que utiliza marcas de tiempo como pruebas de frescura para evitar
ataques por reenvío.
Como hemos visto, una correcta sincronización del reloj de nuestro equipo
es vital para la seguridad; no obstante, muy pocos sistemas necesitan la
precisión de NTP, por lo que es habitual tener este servicio
deshabilitado. En la mayoría de ocasiones el propio reloj de la máquina,
o un protocolo mucho más simple, como time, es más que suficiente para
sincronizar equipos.
© 2002 Antonio Villalón Huerta