LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA]系統時間隨機跳到 55 天后,程序出 Bug,開發者:這是 Windows 系統功能搞得鬼!...

freeflydom
2023年8月22日 8:51 本文熱度 972


整理 | 屠敏

出品 | CSDN(ID:CSDNnews)


 


一直以來,操作系統的「時間、日期、時區」,是讓很多程序員在開發程序時比較敏感與特別關注的問題。


還記得即將步入 2000 年的“千年蟲”(Year 2000 Problem,簡稱“Y2K”)事件,由于早期的計算機配置比較低,那時為了節省空間就把年份只用后兩位數表示,如 1999 就表示為 99,導致新千年時電腦把 2000 年認為是 1900 年,出現 Bug,進而引發各種各樣的系統功能紊亂甚至崩潰。


2012 年,有用戶發現低內核版 Linux 開啟 NTP 服務器會遇到閏秒 Bug,導致服務器重啟。

2016 年,很多網友“作了一把”,將 iPhone 的日期設置到 1970 年 1 月 1 日,無意中觸發系統 Bug,一時間導致 iPhone 重啟失敗,手機直接變板磚。

就在近日,一個新的關于時間 Bug 出現在 Windows 系統中。據 Ars Technica 報道,有一位挪威數據中心的工程師 Simen 遇到了一個令人費解的時間 Bug, 它會導致 Windows Server 突然將系統時鐘重置到未來 55 天。

時間 Bug 帶來的混亂


事實上,這并不是 Simen 第一次遇到這個問題。


在去年 8 月,Simen 曾遇到過類似的錯誤,當時一臺運行 Windows Server 2019 的機器將時鐘重置到了 2023 年 1 月,但過了沒多久又自動跳回來了。

后來,直到事件日志被清除后才發現這一問題,但那時無法分析具體是什么原因導致的。

現在,他又在一臺運行 Windows Server 2016 的機器上遇到了這個問題。


對于普通用戶而言,時間的錯亂帶來的短暫影響也許可以忽略不計。但是對于工程師而言,卻是一個讓人崩潰的存在。

Simen 的主要工作是在 Windows Server 維護一個路由表(存儲在聯網計算機中的電子表格(文件)或類數據庫),這個路由表實時跟蹤手機號碼從一個運營商轉到另一個運營商的過程。

當服務器出現時間 Bug 時,系統時鐘跳到八周后,這就帶來一個不可估量的后果,譬如,此前尚未遷移的號碼被列入已經遷移、已經轉移的號碼被列為待處理狀態,整個都亂掉了。


無獨有偶

本來以為這只是一個特例,但是搜索一下,網絡上遇到這個問題的工程師不在少數。

去年,有一位名叫 Ken 的工程師也發現了類似的“時間跳躍”現象,當時在 2-3 臺服務器上,時鐘時不時會跳躍到幾周后,甚至有一次直接跳到了 2159 年。


據 Ars Technica 披露,Ken 在一封郵件中寫道:“受此影響的服務器呈指數增長,越來越多。在 5000 臺服務器(虛擬機)中,我們總共有 20 臺左右的服務器(虛擬機)遇到過這種情況。這種情況通常發生在數據庫服務器上。當數據庫服務器在時間上發生跳躍時,就會造成嚴重破壞,只要服務器在時間上有如此大的偏移,備份也就無法運行。對于我們的客戶來說,這一點至關重要。”


除了 Simen 和 Ken 之外,追溯到 2017 年,一位 Reddit 用戶 zanatwo 發帖稱他在一所大學工作,某一天,其發現校園內的幾臺 Windows 10 計算機開始出現錯誤的時間。這些計算機上顯示的時間 Bug 完全是隨機的,在某些情況下,他的設備時間直接跳到了 31 個小時之前。


通過深入分析,當時 Reddit 用戶發現,時間變化與 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\SecureTimeLimits 中的 Windows 注冊表鍵相關。進一步的調查顯示,當一些人試圖訪問大學網站時,這些錯誤報告稱網站使用的有效 SSL 證書無效。


Windows 官方發布的功能惹了禍?


經過排查之后,以上幾位工程師將罪魁禍首統一定位到了 Windows 上一個鮮為人知的功能—— Secure Time Seeding(簡稱 STS)中。

這是微軟在 2016 年引入 Windows 的功能,主要作用就是在 Windows 設備無法通過安全連接與時間服務器通信的情況下,改進對正確時間的記錄。簡單來看,這也是設備在斷電情況下也能保證準確的時間。默認情況下,這一功能在 Windows 系統及服務器下是打開的。


從工作原理來看,為確定當前時間,STS 會調用 SSL(Secure Sockets Layer)握手過程中包含的一組元數據。具體來說,這些數據包括:

ServerUnixTime,日期和時間表示法,顯示自 1970 年 1 月 1 日 00:00:00 UTC 時起已過去的秒數。

從遠程服務器 SSL 證書中獲取的加密簽名數據,顯示該證書是否已根據所謂的 "在線證書狀態協議 "機制被撤銷。


在發布這一功能時,微軟工程師在官方文檔中寫道,他們使用 ServerUnixTime 數據是 "假定它在一定程度上是準確的",但在同一句話中又承認它 "也可能是不正確的"。


為了防止 STS 根據單個不同步遠程服務器提供的數據重置系統時鐘,STS 會隨機穿插 SSL 連接到多個服務器,以得出當前時間的可靠范圍。

然后,該機制會將 ServerUnixTime 與 OCSP(Online Certificate Status Protocol,在線證書狀態協議 )有效期合并,以產生盡可能小的時間范圍,并為其分配置信度分數。

當分數達到足夠高的閾值時,Windows 就會將數據歸類為 STSHC(Secure Time Seed of High Confidence,高置信度安全時間種子)。然后,STSHC 用于監控系統時鐘是否存在 "嚴重錯誤",并對其進行糾正。


盡管 STS 內建了檢查和平衡機制,以確保其提供準確的時間估計,但長期以來工程師遇到的“時間跳躍”事件表明,該功能有時會做出誤差數天、數周、數月甚至數年的胡亂猜測。


在 Ars Technica 報道的文章中,其分享了來自工程師 Ken 遇到時間跳躍時的具體截圖。

第一張圖片中的選定行上方的 "預計安全時間 "條目顯示,Windows 預計當前日期為 2023 年 10 月 20 日,比系統時鐘顯示的時間晚四個多月。然后,STS 會更改系統時鐘,使其與"目標系統時間 "中顯示的錯誤的預計安全時間相匹配。


第二張圖片顯示了類似的情況,其中 STS 將日期從 2023 年 6 月 10 日改為 2023 年 7 月 5 日。


 

在遇到這一問題后,Ken 和 Simen 都向微軟進行了反饋,遺憾的是,他們并沒有得到實質性的回應與解決方案。

微軟工程師個人曾發出警告:主動關閉 STS 功能


那要問有沒有解決方法,其實去年一位微軟 Windows 高級工程師 Ryan Ries 發過推文提供過用戶,其寫到“大家好,如果你們管理 Active Directory 域控制器,我想給你們一些非官方的建議,這完全是我的個人意見:在您的 DC 上禁用 w32time 的 STS。”


當有網友進一步詢問原因時,Ryan Ries 表示,「因為在它咬你的屁股之前,這只是一個時間問題」。


這也不禁讓人好奇,連微軟自家工程師都覺得這個功能有問題,為什么官方還有做保留。

就在眾人存疑時,微軟在給 Ars Technica 的一份聲明中寫道:

STS 功能是一種基于啟發式的計時方法,在某些軟件/固件/硬件計時失效的情況下也有助于校正系統時間。該功能已在所有默認 Windows 配置中默認啟用,并已證明在默認配置中發揮了預期功能。


每次部署的時間分配都是獨一無二的,客戶通常會根據自己的特殊需求來配置機器。鑒于 "STS"的啟發式性質以及客戶可能使用的各種部署,我們提供了禁用該功能的選項,以滿足客戶的需求。我們的理解是,在客戶遇到 STS 問題的部署中,很可能存在獨特、專有、復雜的因素,而這些客戶并不能從目前實施的這一功能中受益。在這些個別情況下,我們只能建議在部署中禁用該功能。


具體來看,要禁用 STS,可以在受影響的機器上設置一個注冊表項。這是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config 目錄中的 UtilizeSslTimeData 密鑰,其類型為 REG_DWORD。如果設置為 0,則停用 STS。如果設置為 1,則可以重新激活該功能。


STS 的異常,有沒有解決方案?

截至目前,似乎除了關閉此功能之外,并沒有太過合適的解決方案,因此,很多人對于微軟的回應并不買賬。在 HN 上,網友也展開了激烈的討論,甚至有人吐槽:是時候應該買塊手表來核對服務器上的時間了!


另外,有網友 @theqmann 分析認為,「這聽起來像是一種統計方法,如果在給定時間內收到 N 個時間戳相似的數據包/連接,就會改變時鐘。我可以看到這樣一個問題:一臺 Windows Server 每分鐘全天候提供數千或數百萬個 OpenSSL 數據包,而它恰好隨機接收到 N 個數據包,這些數據包彼此非常接近,足以滿足統計閾值的要求。通過隨機跳轉,連續跳轉十多次時間都是有可能的」。


@jmuguy 則表示:

在我做 IT 人員的這些年里,Windows Time 是我處理過的最煩人的事情之一。注冊和取消注冊 w32time,嘗試不同的 NTP 服務器。試圖弄明白為什么域系統無法從 DC 獲取時間。這總讓人感覺很......愚蠢。在設備上設置正確的時間肯定沒那么復雜。事實證明,并不復雜,除非你使用的是 Windows 系統。有點諷刺的是,如今我唯一需要處理的 Windows 系統就是我的游戲電腦。它拒絕與 time.windows.com 同步。


除了 Windows 系統之外,還有人稱在 Linux 中也遇到了同樣的問題。

@nicolaslem 表示: 

我的 Linux 筆記本電腦有時也會遇到類似的問題,把電腦從睡眠中喚醒時,時間會跳到 2077 年。我猜這是硬件故障,因為它并不經常發生,但一旦發生就會造成很大影響。我無法想象在生產服務器上發生類似情況會有多大影響。



你是否遇到過類似的問題?


原文鏈接:https://blog.csdn.net/csdnnews/article/details/132373095

————————————————

版權聲明:本文為CSDN博主「CSDN資訊」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/csdnnews/article/details/132373095



該文章在 2023/8/22 8:55:04 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日本不卡在线视频 | 亚洲一区二区三区精品视频 | 日韩欧美亚洲国产精品影视在线 | 日本久久精品免费观看 | 免费国产精品专区 | 中文字幕国内一区二区三区 |