Hora incorrecta en el sistema e inseguridad con el Secure Time Seeding

¿Por qué el sistema de Windows puede cambiar de repente la hora y cómo evitar que esto suceda?

Cada cierto tiempo los administradores y usuarios de Windows 10 se preguntan por qué la hora de su sistema se ve modificado durante varias semanas, meses e incluso años (unas veces adelantándose y otras retrasándose).

¿Cuál puede ser la causa de estos saltos? Los periodistas de Ars Technica hicieron una pequeña investigación y descubrieron que podría estar relacionado con la función Secure Time Seeding. En este artículo voy a explicar cómo esta función actúa y qué se puede hacer para evitar esos saltos de hora imprevisibles.

¿Qué es Secure Time Seeding?

Secure Time Seeding (STS) se añadió a Windows 10 en 2015. Esta función pretende corregir las discrepancias entre la hora que da el sistema y la real, especialmente para cuando la batería del ordenador se agota y el reloj en tiempo real muere provocando que los ajustes de hora no tengan nada que ver con la realidad.

Pero ¿por qué es tan necesaria que esta discrepancia en la hora se corrija? Curiosamente, por seguridad. Por lo general, el intercambio de datos cliente-servidor (incluida la conexión del sistema con los servidores de hora de internet) están protegidos con protocolos encriptados SSL/TLS. Para establecer una conexión real con el servidor, el cliente primero tiene que verificar el certificado digital, el cual tiene un periodo de validez determinado. Por ello, si la hora del sistema tiene un error significativo, el certificado puede considerarlo caducado y no establecerá una conexión segura.

Es un círculo vicioso: el ordenador para fijar la hora actual debe saber cuál es. No tiene por qué ser una hora totalmente precisa, una hora aproximada también puede funcionar. Pero cuánto mayor sea la diferencia entre la hora del sistema y la hora real, mayor será la posibilidad de que el certificado sea identificado como caducado.

STS introduce, al menos desde el punto de vista de sus desarrolladores, una manera de que el sistema pueda automáticamente identificar y corregir las grandes discrepancias, incluso cuando no se puede establecer una conexión segura con ningún servidor. Para conseguirlo usan las marcas de tiempo y las fechas de caducidad que contienen los certificados digitales en los datos enviados a los servidores de cliente durante el establecimiento inicial de una conexión segura (los handshakes de SSL y TLS).

El algoritmo de STS es desconocido. Pero la idea general es que Windows extrae los datos del handshake de SSL y los usa para calcular un rango fiable de la hora actual, asignándole una probabilidad. A medida que dispone de nuevos datos, el rango se actualiza y la probabilidad puede aumentar gradualmente. Cuando alcanza un determinado umbral, el STS decide cambiar la hora del sistema a la hora media del rango que considera fiable. En teoría, esa precisión debería de ser suficiente para establecer una conexión segura, conectarse a un servidor de hora actual y obtener la hora exacta.

¿Por qué deberías desactivar Secure Time Seeding?

El principal problema es que la función está activada por defecto en Windows 10 y funciona independientemente a si el reloj integrado en el ordenador ha sido sincronizado alguna vez. Como consecuencia, STS puede reestablecer la hora cada vez que el algoritmo secreto de Windows decida que hay demasiadas señales que le indiquen que la hora del reloj no es la correcta y que debe solucionarlo.

No se saben aún la razón por la que Secure Time Seeding falla. Una posible causa es que aumento significativo de las implementaciones SSL/TLS que envían una marca de tiempo incorrecta durante el handshake. El principal sospechoso de esto sería el uso frecuente de la biblioteca OpenSSL que, en lugar de la hora actual del servidor, pone valores aleatorios en la marca del tiempo.

Además, este fallo puede ocurrir en cualquier versión del sistema operativo: en Windows Server 2016, en Windows Server 2019 y también en Windows Server 2022. Y mientras que para los usuarios habituales de ordenador el problema es poco más que una molestia, para los servidores puede ser catastrófico, ya que su correcto funcionamiento depende a menudo de que la hora sea exacta.

Existe un consejo no oficial al respecto de un trabajador sénior del soporte del servicio técnico oficial de Microsoft para administradores de controladores de dominio Active Directory:

“Hola gente, si administras controladores de dominio Active Directory, quiero darte un consejo NO OFICIAL que es únicamente mi opinión personal: desactiva Secure Time Seedind para V32time en tus CDs.”

Consejo no oficial de un ingeniero sénior especializado en Windows: desactiva Secure Time Seeding.

Consejo no oficial de un ingeniero sénior especializado en Windows: desactiva Secure Time Seeding.

Desactiva Secure Time Seeding en Windows

Para desactivar STS localiza, localiza la siguiente clave de registro de Windows:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

Encuentra el valor UtilizeSslTimeData y ponlo a 0.

Desactivación de Secure Time Seeding en el registro de Windows.

Desactivación de Secure Time Seeding en el registro de Windows.

También puedes ejecutar el siguiente comando como administrador en el símbolo del sistema de Windows (CMD).

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v UtilizeSslTimeData /t REG_DWORD /d 0 /f

Es necesario reiniciar el sistema después de haber cambiado el valor. Si esto es complicado o imposible, puedes forzar la actualización con este comando:

W32tm.exe /config /update

Hecho esto, la función STS dejará de molestarte. Ahora solo queda asegurarse de que el reloj del sistema siempre sea preciso. Respecto a esto, el artículo de Ars Technica da un par de consejos útiles para los administradores de servidores.

Consejos