一直以來,操作系統的「時間、日期、時區」,是讓很多程序員在開發程序時比較敏感與特別關注的問題。
還記得即將步入 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://arstechnica.com/security/2023/08/windows-feature-that-resets-system-clocks-based-on-random-data-is-wreaking-havoc/
https://news.ycombinator.com/item?id=37151220
https://www.reddit.com/r/sysadmin/comments/61o8p0/system_time_jumping_back_on_windows_10_caused_by/
2018年的微軟在跌宕起伏,今年Windows 10升級遇到各類問題、Edge瀏覽器還出現漏洞,雖然現在改用谷歌引擎來救火算是救回了半個場子。雖然在軟件問題上遇到挫折,微軟今年的硬件卻跑贏了,憑借Super Surface系列首次殺入美國前五大PC制造商,完勝宏碁和華碩。而微軟一直堅持的云服務也沒有讓人失望,商業云收入同比增長47%,達到85億美元,Azure的收入增長達76%。
Win10升級問題多
(圖片來源:微軟官網)
今年微軟在科技領域最重的一筆就是Windows 10的重大升級。
然而悲劇的是,2018年10月的更新可以算得上是微軟操作系統問題最多的一次升級,甚至超過了評價最低的“周年紀念更新”。Windows 10出現了包括PC凍結和網絡攝像頭的問題。
2018年10月的更新也成為第一個實際上必須完全停止的更新,同時微軟也在努力解決刪除文件和內容之類的小問題。最后,更新暫停了一個多月。
在11月恢復的時候,又出現了另一個Windows Media Player的問題,然后是英特爾驅動程序問題。
這真是一次多災多難的更新過程,然而微軟一直在大肆宣傳系統的優秀和簡化,以及AI的應用,不過事實并不是這樣。
Edge瀏覽器被迫換引擎
在2018年微軟最終承認Windows 10的默認網絡瀏覽器出了問題。公司很長一段時間都一直在努力推廣Edge瀏覽器,但無濟于事。事實上,在市場份額方面微軟的瀏覽器今年在倒退。
實際上,Edge瀏覽器從一開始評價就不高,由于缺少擴展等關鍵元素而之后也沒能很好地補充。
而微軟也沒有繼續堅持,Edge瀏覽器采用谷歌的Chromium渲染引擎,放棄專有的Edge HTML瀏覽器引擎。
在此之前,微軟一直在調查Windows 10測試人員使用Chrome而不是Edge的原因,以及他們喜歡谷歌瀏覽器的功能。
最終結果是Edge提供更好的網站和服務兼容性,可以跟Chromium更好地配合,因為Chrome是長期以來運行最好的網絡瀏覽器。
微軟的目標是,提高Edge瀏覽器的性能,讓Windows 10用戶越來越多采用操作系統默認瀏覽器。由于Edge將會登陸其他版本的Windows系統,而macOS等平臺以及更新版本也會更頻繁地推廣。因此,瀏覽器本身的改進應該有助于推動采用率。
Edge要占據一定的市場份額還有很長的路要走,但如果這個瀏覽器能夠打開知名度,或許谷歌都要開始有點擔心了。谷歌的Chrome瀏覽器雖然好評不錯,但還是有待提升,比如內存占用過大問題、規格較低的設備運行流暢程度比不上Edge等。
因此,雖然微軟承認Windows 10存在問題,但至少公司已經開始改變,從長遠來看它可能會有很好的效果。
Super Surface系列獲勝
微軟今年在硬件方面完勝,Surface設備有史以來第一次使得該公司進入前五大美國PC制造商行列,領先宏碁和華碩,雖然全球范圍內沒有達到這種程度,但是在美國也是了不起的成績了。
微軟最新的財政業績(截至9月底的季度)顯示,Surface收入同比增長14%,銷售額在上一季度增長了16%,顯然成績非常好。
毫無疑問,Surface Go是Surface系列長期以來首次推出的優惠價格產品,有助于推動銷售。而Surface Pro 6盡管在某些方面差強人意,但也有分析公司表示它剛開始似乎已經賣得很好。
Surface Pro 6比起前一代產品并沒有太大的進步,雖然提高了性能,但這是任何硬件升級的最低基準。
事實上,微軟也沒有增加USB-C端口,仍然堅持用舊款的USB 3.0。就算這樣,Surface Pro 6仍然是一款出色的Windows混合設備,跟去年推出的平板電腦差不多。
云服務覆蓋率大增
微軟今年取得的另一項成功就是云服務。在該公司的最新財務業績中,首席財務官Amy Hood指出:“我們的云產品需求持續增長。”其中,2019財年第一季度,商業云收入同比增長47%,達到85億美元(約合67億英鎊,或118億澳大利亞元)。Azure的收入增長也達到驚人的76%。
雙屏設備還不會來
據傳微軟正在開發雙屏手機或“便攜式計算機”Andromeda。不過,這項產品已經被微軟推遲。
推遲原因大概是因為微軟不僅要花時間準備好硬件,還要專注操作系統,畢竟對于公司來說最重要的是軟件生態系統。推出一個新設備但是沒有帶上相應的應用程序明顯不利于微軟。
延遲的另一個原因是微軟顯然要優先考慮新款雙屏平板電腦Surface Centaurus,這可能市場價值更大。
有消息稱公司似乎正在嘗試更大屏幕的設備,可以提供計算靈活性而在第二個顯示器上使用虛擬鍵盤,或者就是一個大屏幕的平板電腦。
總結
微軟今年也算跌宕起伏。即使Surface Pro的最新版本在很多方面也沒太多新意,設計方面也沒有太多亮點。但是Surface系列有很強的優勢,而微軟也憑借這個系列首次打入美國前五大PC廠商,而云服務也取得了重大進展。
然而,Edge瀏覽器也遇到嚴重困境。最終微軟決定將瀏覽器的引擎轉換為Chromium來解決兼容性問題,并將瀏覽器打造成一系列平臺而不是把Edge跟Windows 10綁定。這不失為一個聰明的做法。
而Windows 10今年混亂的更新卻是微軟的硬傷,這么重要的產品出問題很容易打擊消費者對它的信心。
展望2019年,軟件的更新對于公司來說顯得更重要,我們只能期待明年的更新會顯示出軟件的可靠性以及微軟的內部設計和測試流程。