Сказка о потерянном системном времени


Почему в Windows может внезапно меняться системное время и как сделать, чтобы этого не происходило.

Внезапные скачки системного времени в Windows: возможная причина

Периодически в Интернете появляются сообщения пользователей и администраторов Windows 10, которые недоумевают, по какой причине время у них в системе неожиданно скакнуло на несколько недель, месяцев или даже лет (время может скакать как вперед, так и назад).

С чем могут быть связаны такие внезапные изменения системного времени в Windows? Журналисты Ars Technica провели небольшое расследование и выяснили, что возможная причина — функция Secure Time Seeding. Рассказываем, как это, судя по всему, работает — и что можно сделать, чтобы предотвратить такие неожиданные скачки.

Что такое Secure Time Seeding

Функция Secure Time Seeding была добавлена в Windows 10 в 2015 году. Предназначена данная функция для исправления очень больших расхождений между временем, установленным в системе, и фактическим. В первую очередь для тех случаев, когда в компьютере села батарейка, питающая встроенные энергонезависимые часы, и время сбилось по-настоящему сильно. Основной особенностью Secure Time Seeding, по задумке ее создателей, является возможность поправить время в системе, не обращаясь к серверам текущего времени.

Зачем это вообще надо? Как ни странно, для безопасности. Обычно обмен данными между клиентом и сервером (в том числе и подключение системы к серверам текущего времени) защищается с помощью криптографических протоколов SSL и TLS. Чтобы установить такое соединение с сервером, клиенту нужно первым делом проверить его цифровой сертификат, а у этих сертификатов имеется определенный срок действия. Поэтому, если время в системе выставлено с существенной ошибкой, сертификат может определиться как просроченный и безопасное подключение не будет установлено.

Получается замкнутый круг: для того чтобы узнать текущее время, компьютеру нужно знать текущее время. Не обязательно прямо идеально точное — примерное тоже может подойти. Но чем больше разница между системным временем и фактическим, тем больше шанс, что сертификат будет признан просроченным.

Соответственно, Secure Time Seeding — опять-таки, по замыслу разработчиков — добавляет в систему способ автоматически выявлять и исправлять существенные расхождения даже в том случае, когда не получается установить безопасное соединение с каким-либо сервером. Для этого используются отметки текущего времени, а также сроки годности цифрового сертификата, которые содержатся в данных, отправляемых серверами клиенту в процессе начальной процедуры установления безопасного соединения (так называемых SSL- и TLS-рукопожатий).

Точный алгоритм действия Secure Time Seeding неизвестен. Но общая суть состоит в том, что на основе данных, полученных в ходе SSL-рукопожатия, Windows вычисляет некий вероятный интервал текущего времени и присваивает ему какое-то значение правдоподобности. По мере получения новых данных эта правдоподобность постепенно может увеличиваться. И после достижения определенного уровня функция Secure Time Seeding принимает решение об изменении системного времени на среднее значение из того интервала, который она признала вероятным. По идее, такой точности должно хватить для получения возможности установить безопасное соединение, подключиться к серверу текущего времени и получить от него уже точное значение.

Почему стоит отключить Secure Time Seeding

Основная проблема в том, что функция Secure Time Seeding включена в Windows 10 по умолчанию и работает всегда — вне зависимости от того, сбивались ли вообще в компьютере встроенные часы. Таким образом, переставить время эта функция может в любой момент, когда неведомые алгоритмы Microsoft решат, что в системе накопилось достаточно признаков неправильной настройки часов и пора эту проблему исправить.

Причина таких сбоев в работе Secure Time Seeding не до конца понятна. Есть предположение, что это связано со значительным ростом популярности реализаций протоколов SSL и TLS, которые в ходе рукопожатия отправляют неправильную отметку времени. Одним из главных подозреваемых тут является часто используемая библиотека OpenSSL (вместо текущего времени сервера она подставляет в отметку времени случайные значения).

Причем такой сбой может произойти и в серверных версиях данной операционной системы — Windows Server 2016, Windows Server 2019 и Windows Server 2022. Если для пользователя обычного компьютера это станет лишь досадной неприятностью, то для сервера это может оказаться катастрофой — ведь от правильно выставленного времени нередко напрямую зависит его работоспособность.

По этому поводу есть неофициальный совет от высокопоставленного сотрудника технической поддержки Microsoft для администраторов контроллеров доменов Active Directory:

«Привет, народ, если вы управляете контроллерами домена Active Directory, я хочу дать вам НЕОФИЦИАЛЬНЫЙ совет, который является исключительно моим личным мнением: отключите функцию Secure Time Seeding для w32time на ваших контроллерах домена».


Неофициальный совет выключить Secure Time Seeding от высокопоставленного сотрудника техподдержки Microsoft

Неофициальный совет выключить Secure Time Seeding от высокопоставленного сотрудника техподдержки Microsoft

Как отключить функцию Secure Time Seeding в Windows

Чтобы отключить функцию Secure Time Seeding, найдите в реестре Windows следующий раздел:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

В нем вам нужно значение UtilizeSslTimeData. Присвойте ему 0.

Как отключить Secure Time Seeding в реестре Windows

Как отключить Secure Time Seeding в реестре Windows

В качестве альтернативы можно в CMD выполнить от имени администратора следующую команду:

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

После того как значение изменено, необходимо перезагрузить систему. Если это сложно или невозможно сделать, нужно вручную «протолкнуть» внесенное изменение в сервис времени Windows с помощью следующей команды:

W32tm.exe /config /update

Ну вот и все, после этого функция Secure Time Seeding вас больше не побеспокоит. Теперь остается только позаботиться о том, чтобы системные часы всегда оставались точными. В конце статьи Ars Technica есть пара полезных советов по этому поводу для администраторов серверов.

Советы