錯誤的系統時間和不安全的Secure Time Seeding

Windows 10的用戶和管理員可能會覺得奇怪,為何系統的時間每突然改變?與現實時間可能相差數星期、數月甚至數年,原來是關於一個名為Secure Time Seeding的功能,下文將會講解這功能如何運作,及如何防止時間亂跳。

甚麼是Secure Time Seeding?

Secure Time Seeding (STS)在2015年加入Windows 10之內,這功能的原意是修正系統時間與真實時間之間的差別,道致差異的原因主要時供應給內置實時時鐘的電腦電池失靈,最重要的是,STS能不存取當前時間伺服器就能修正系統時間。而它的存在意異就是為了保安,典型例子是客端伺服器數據分換(包括系統連線到互聯網的時間伺服器)受到SSL/TLS加密協議保護,要與伺服器建立連線,客端首先要核實具數碼證書,而這些證書有特定的有效期,因此如果系統內的時間設定有明顯錯誤,證書就可能被認定為已過期,安全連線將不能建立。

然後惡意循環出現,為了確定當前時間,電腦需要知道當前時間,這無需完美地準確,大約時門也能完成工作,但系統時間與真實時間越大差典,越大機會證書被認定為過期。STS開發者的概念是尋求一種方法,即使不能與任何伺服器建立安全連線下,令系統自動辨別和修正重大差異,結論就是把當前時間戳與數碼證書到期日包含在伺服器與客端的初始建立安全連線上,(SSL和TLS的 handshake)。

STS的運算法不明,但整體的概念是Windows從SSL handshake取得數據,藉此用來計算可靠範圍內的當前時間和給它分配一個概率,當接收到新數據,範圍就會被更新,概率可以逐潮增加,當到達某個點時STS決定更改系統時間到認為可信範圍內的中間點,理論上這個精準度應該足以建立安全連線,連線到當前時間伺服器去取得精確的時間。

為甚麼應該關閉Secure Time Seeding?

最主要的問題是STS功能在Windows 10預設開啟,無論電腦內置的時鐘有否失去同步,結果當Microsoft的秘密演算法決定有足夠跡象顯示時間錯誤需要修正時,STS便可以隨時重設時間。有可能導致失常的原因還未完全清楚,有一種說法是產生自SSL/TLS的人氣急升,在handshake時發送了錯誤的時間戳,當中懷疑涉及常用的OpenSSL library(把隨機數值放入時間戳代替當前伺服器時間)。

此外,這錯誤也發生在伺服器版操作系統:Windows Server 2016、Windows Server 2019和Wubdiws Server 2022,當普通電腦用戶對此只是一個小麻煩,對伺服器而言可能引發大災難,因為伺服器正常運作通常倚賴準確的時間,因此有一名資深的Microsoft技術支援非官方地建議Active Directory Domain Controller管理員關閉Secure Time Seeding。

在Windows中關閉Secure Time Seeding

要關閉STS,找出以下的Windows registry:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

把UtilizeSslTimeData的數值設定為0

另一個方法是以管理員身份於Windows command prompt(CMD)執行以下指令

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

在更改數值後需要重啟系統,如果無法進行則可執行以下指令強行更新:

W32tm.exe /config /update

從此之後STS功能就不會再產生影響,但要謹記確保系統時間維持準確。

資料來源:Kaspersky Blog