踏入 2022 年,很多企業採用的 Microsoft Exchange Server 爆出「千年蟲」問題,導致電郵系統無法收發信件。 Microsoft 已經發佈緊急修正檔緩解問題。
據 Windows 的事件日誌紀錄顯示,問題出在 Exchange Server 在 FIP-FS 防惡意軟件掃描引擎的版本與簽名檔作比對時,嘗試儲存日期失敗。原來 Exchange Server 嘗試將日期「 2201010001 ( 2022 年 1 月 1 日 0 時 1 分)」以有正負號的 32-bit 整數( signed int32 )來儲存,不過實際上有正負號的 32-bit 整數的上限是 2,147,483,647 , 2,201,010,001 顯然已超出上限,導到掃描引擎崩潰,導致電郵阻塞在佇列中。這種錯誤,原理上是與千年蟲相似的。
Microsoft 發現問題後,隨即推出緊急修正。該修正名為「Reset-ScanEngineVersion.ps1.」,需要技術人員在 PowerShell 裡執行有關腳本程式。執行後腳本程式會停止 Microsoft Filtering Management 和 Microsoft Exchange Transport 服務,移除舊的防惡意軟件引擎,並下載新的引擎,然後重啟上一述服務。
解決 2038 年問題
今次事件提醒技術人員「 2038 年問題」,該問題主要發生在 Unix 類型電腦系統上。由於 Unix 類系統的日期是以由 1970 年 1 月 1 日起的秒數來計算,同樣是 32-bit 整數,所以上限也是 2,147,483,647 ,將會在 2038 年 1 月 19 日到達上限,如果不加以修正的話,屆時系統時間將會歸零,重新開始計算。
近十年來,電腦業界已經逐步將系統升級至 64-bit 系統,可望解決有關問題。而今次 Microsoft 所採用的「 2201010001 」標示方法,也是其中一種迴避 2038 年問題的手法,不過就忘了將資料格式轉為「無符號的 32-bit 整數」或直接使用 64-bit 整數。