Windows Server 2019 change aléatoirement l'heure et la date vers des valeurs incorrectes

Au cours des deux derniers mois, nous avons eu pas mal de problèmes avec l’heure et la date du serveur qui changent occasionnellement vers des valeurs absolument aléatoires. Parfois c’est quelques jours dans le futur ou le passé, parfois même plusieurs mois.

Nous avons rencontré le problème sur plusieurs VM, donc ce n’est malheureusement pas un problème lié à une seule VM.

Nous utilisons Windows Server 2019 (Version 1809 OS Build 17763.3406) sur Amazon EC2.
Nous avons synchronisé l’heure en utilisant le point de terminaison par défaut AWS 169.254.169.123, puis nous sommes passés à un Active Directory géré par AWS. Le provisionnement est fait avec Ansible, je ne sais pas si cela a de l’importance.

Tous les événements de changement d’heure sont consignés dans le système et se ressemblent, comme celui-ci :

L’heure système a changé à ‎2022‎-‎12‎-‎23T01:10:04.150070300Z depuis ‎>2022‎-‎09‎-‎14T12:22:57.146781800Z.

Raison du changement : Une application ou un composant système a changé l’heure.
Processus : ‘\Device\HarddiskVolume1\Windows\System32\svchost.exe’ (PID 372).

Comme vous pouvez le voir, le changement est très significatif et par conséquent, affecte les applications web exécutées sur le serveur IIS de ces VM.

Savez-vous quelle peut en être la raison, et où nous devrions regarder pour résoudre le problème ?

Modification : ajout de détails selon le commentaire de @Greg :

C:\Windows\system32>w32tm /query /status /verbose Leap Indicator: 0(no
warning) Stratum: 6 (secondary reference - syncd by (S)NTP) Precision:
-23 (119.209ns per tick) Root Delay: 0.0643878s Root Dispersion: 7.8759466s ReferenceId: 0x0A050C5D (source IP: 10.3.15.74) (edited) Last Successful Sync Time: 11/2/2022 11:05:39 PM Source:
WIN-BOLJH2K6OOL.companydomain.cloud (edited) Poll Interval: 6 (64s)

Phase Offset: -0.0023147s ClockRate: 0.0156250s State Machine: 1
(Hold) Time Source Flags: 8 (SignatureAuthenticated ) Server Role: 0
(None) Last Sync Error: 0 (The command completed successfully.) Time
since Last Good Sync Time: 8.5343114s


Source : [Server Fault](Windows feature that resets system clocks based on random data is wreaking havoc - Ars Technica](Windows feature that resets system clocks based on random data is wreaking havoc - Ars Technica)

Il semble que le problème soit causé par un paramètre que Microsoft a activé en 2016 appelé UtilizeSSLTimeData. Voici une bonne explication de la situation… https://arstechnica.com/security/2023/08/windows-feature-that-resets-system-clocks-based-on-random-data-is-wreaking-havoc/

Voici la solution de Microsoft… https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/windows-server-2016-improvements#secure-time-seeding

Amorçage temporel sécurisé (Secure Time Seeding)

W32time dans Server 2016 inclut la fonctionnalité d’amorçage temporel sécurisé. Cette fonctionnalité détermine l’heure courante approximative à partir des connexions SSL sortantes. Cette valeur temporelle est utilisée pour surveiller l’horloge système locale et corriger toute erreur grossière. Vous pouvez en savoir plus sur cette fonctionnalité dans cet article de blog. Dans les déploiements avec une ou plusieurs sources de temps fiables et des machines bien surveillées incluant la surveillance des décalages temporels, vous pouvez choisir de ne pas utiliser la fonctionnalité d’amorçage temporel sécurisé et de vous appuyer sur votre infrastructure existante à la place.

Vous pouvez désactiver la fonctionnalité avec ces étapes :

Définissez la valeur de configuration du registre UtilizeSSLTimeData à 0 sur une machine spécifique…

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

Si vous ne pouvez pas redémarrer la machine immédiatement pour une raison quelconque, vous pouvez notifier le service W32time de la mise à jour de la configuration. Cela arrête la surveillance et l’application du temps basées sur les données temporelles collectées à partir des connexions SSL.

W32tm.exe /config /update

Le redémarrage de la machine rend le paramètre effectif immédiatement et arrête également la collecte de données temporelles à partir des connexions SSL. Cette dernière partie a un impact très faible et ne devrait pas être une préoccupation de performances.

Pour appliquer ce paramètre dans un domaine entier, veuillez définir la valeur UtilizeSSLTimeData dans le paramètre de stratégie de groupe W32time à 0 et publier le paramètre. Lorsque le paramètre est récupéré par un client de stratégie de groupe, le service W32time est notifié et il cessera la surveillance et l’application du temps utilisant les données temporelles SSL. La collecte de données temporelles SSL s’arrêtera au redémarrage de chaque machine. Si votre domaine dispose d’ordinateurs portables et tablettes fins et portables, vous voudrez peut-être exclure ces machines de ce changement de politique. Ces appareils finiront par être à court de batterie et auront besoin de la fonctionnalité d’amorçage temporel sécurisé pour initialiser leur heure.