Windows ma ukrytą funkcję, która wielu napsuła krew. Przeskakujący zegar sieje spustoszenie
Ten, kto kiedykolwiek posiadał zegar sterowany radiowo, wie, jak problematyczne są nieoczekiwane zmiany czasu w zegarze. Jednak jeden z błędów w systemie Windows podniósł poprzeczkę, zmieniając datę i godzinę na kilka lat do przodu, powodując istny chaos w serwerowni - i to nie jednej. Bo problem istnieje już od 7 lat.
Microsoft zdążył nas już lata temu przyzwyczaić do licznych błędów w swoim sztandarowym produkcie - systemie operacyjnym Windows. Jedne błędy po pospolitym zrywie internautów są naprawiane od razu, inne czekają nawet pięć lat na zaadresowanie. Różna jest także ich skala, bowiem jedne po prostu spowalniają komputer, inne doprowadzają do natychmiastowego zawieszenia urządzenia.
Jednak te przypadki dotyczą komputerów osobistych, gdzie szkody wyrządzone przez błędy są relatywnie małe. Inaczej ma się sprawa z problemami w systemie operacyjnym serwera, gdzie błędy mogą zrujnować firmę.
STS przyprawia serwery i ich właścicieli o ból głowy. Ale czym ono właściwie jest?
W 2016 roku Microsoft wprowadził do systemu Windows funkcję Secure Time Seeding (STS). Celem Secure Time Seeding jest zapewnienie, że zegar komputera poprawnie wskazuje datę i godzinę. Jednocześnie STS ma przeciwdziałać zjawisku, w którym wyczerpanie się specjalnych baterii CMOS (pozwalających na zapis daty i godziny gdy komputer jest wyłączony) doprowadza do desynchronizacji systemu, licencji i certyfikatów. Poprzez wprowadzenie STS, Microsoft zaadresował jeszcze jeden problem: brak bezpiecznego połączenia pomiędzy urządzeniem sprawdzającym datę i godzinę a internetem.
"Możesz zapytać - dlaczego urządzenie nie zapyta najbliższego serwera czasu o aktualny czas przez sieć? Ponieważ urządzenie nie jest w stanie bezpiecznie komunikować się przez sieć, nie może również bezpiecznie uzyskać czasu przez sieć, chyba że zdecydujesz się zignorować zabezpieczenia sieciowe lub przynajmniej zrobić w nich dziury, robiąc wyjątki."
- tłumaczyli ówcześnie inżynierowie Microsoftu
W celu uniknięcia wyjątków bezpieczeństwa Secure Time Seeding ustanawia bezpieczny kanał komunikacji pomiędzy maszyną a zdalnymi serwerami, który jest szyfrowany za pomocą technologii SSL (tzw. SSL handshake). STS do połączenia wykorzystuje przechowywane w systemie Windows certyfikaty SSL, co według inżynierów koncernu "pomogło im przełamać cykliczną zależność między czasem systemowym klienta a kluczami bezpieczeństwa, w tym certyfikatami SSL".
Jednak jak informuje serwis Ars Technica, jest to dość połowiczne zwycięstwo. Choć zdecydowana większość użytkowników nie napotkała problemów w ciągu ostatnich 7 lat - o ile w ogóle miała świadomość, że ich komputery czas systemowy pozyskują poprzez STS, to liczne doniesienia pokazują, że funkcja nie działa tak, jak powinna.
Mały przeskok dla zegara, ale wielki chaos dla ludzkości
STS doprowadza do sytuacji, w których systemowy zegar losowo przeskakuje do przodu lub do tyłu - w przyszłość lub w przeszłość, a różnice w czasie wynoszą od kilku godzin do nawet kilkudziesięciu lat, w jednym z opisanych przypadków aż do roku 2159. Problem w zdecydowanej większości był raportowany przez użytkowników systemów Windows Server odpowiedzialnych za sterowanie serwerami i bazami danych, gdzie pojedyncza zmiana czasu jest dotkliwa dla przetwarzanych przez maszynę danych.
Już na początku 2016 roku na forach Microsoftu można było znaleźć pierwsze wpisy, w których użytkownicy skarżyli się na anomalie związane z czasem systemowym. W kolejnych latach problem zaczął być opisywany także na innych forach oraz podejmowany przez blogerów.
Zauważyliśmy to po raz pierwszy w sierpniu 2022 roku na serwerze z 2019 roku. Zegar był ustawiony na styczeń 2023 r., ale sam się poprawił. Niestety, zostało to wykryte jakiś czas po wyczyszczeniu dzienników, więc nie byliśmy w stanie dalej debugować.
Ale w zeszłym miesiącu doświadczyliśmy tego ponownie, tym razem na serwerze 2016. Zegar był ustawiony na 55 dni w przyszłość.
15 sekund później usługa Time-Service zauważyła, że zegar był inny niż nasz kontroler domeny i że musi cofnąć zegar o -4 454 176 sekund. Wycofuje się, ponieważ uważa, że jest większy niż 4 294 967 295.
15 minut po pierwszej zmianie zegar jest ustawiany ponownie, tym razem na 12h 26m 43s w przyszłość.
15 sekund po drugiej zmianie Time-Service zauważa, że zegar jest wyłączony i tym razem koryguje go, ponieważ mieści się w rozsądnym oknie [czasowym].
- pisał dwa miesiące temu użytkownik forum serverfault Stack Exchange
Serwis Ars Technica dotarł do dwóch inżynierów zajmujących się serwerami prywatnych firm, które ucierpiały w wyniku problemu. Jeden z nich, Simen, pracujący dla centrum danych w Norwegii polegał na serwerze z systemem Windows Server, który pozwalał na śledzenie numerów telefonów komórkowych w czasie rzeczywistym, gdy przenosiły się one od jednego operatora do drugiego. Błąd systemu STS doprowadził do przeskoku zegara o osiem tygodni do przodu, co z kolei sprawiło, że numery, które nie zostały jeszcze przeniesione, zostały oznaczone jako już przeniesione, a numery, które zostały już przeniesione, zostały zgłoszone jako oczekujące. W praktyce doprowadziło to do chaosu, gdyż połączenia wykonywane przez abonentów były przekierowywane do złych operatorów, a w konsekwencji komunikacja z posiadaczami owych numerów telefonów stała się niemożliwa.
Inny inżynier o imieniu Ken pracujący dla innego przedsiębiorstwa poinformował, że podobny problem z przeskokiem czasu pojawił się na 20 serwerach z 5 tysięcy, które nadzoruje jego zespół.
"W sumie mamy około 20 serwerów (maszyn wirtualnych), które tego doświadczyły, z 5000. Nie jest to więc ogromna liczba, ale jest znacząca, zwłaszcza biorąc pod uwagę szkody, jakie wyrządza. Zwykle dzieje się tak z serwerami baz danych. Kiedy serwer bazy danych przeskakuje w czasie, sieje spustoszenie, a kopia zapasowa nie zostanie uruchomiona gdy serwer ma tak duże przesunięcie w czasie. Dla naszych klientów ma to kluczowe znaczenie."
- napisał Ken
Jak informują osoby, które zostały dotknięte błędem, Microsoft nie był pomocny w rozwiązaniu problemu, ani odnalezieniu jego źródła. Zdanie podziela to także Ken.
"Obecnie nie jesteśmy całkowicie pewni, dlaczego tak się dzieje. Jest to tak pozornie losowe, że trudno to zrozumieć. Microsoft również nie był pomocny w próbie śledzenia tego zjawiska. Wysłałem dzienniki zdarzeń i informacje, ale tak naprawdę nie śledzili tego. Wydają się bardziej zainteresowani zamknięciem sprawy".
- podsumował inżynier
Obecnie jedynym sugerowanym rozwiązaniem problemu jest wyłączenie Secure Time Seeding poprzez edytor rejestru systemu Windows.
Zdjęcie główne: Drazen Zigic / Freepik