新「千年蟲」漏洞!出事嘅竟然係 Microsoft? ICT 新聞速報(#001, 2022)

Willis WAN, Chun Yu | 2022-01-03

🖊 新聞重點

  • Microsoft 嘅 on-premise 嘅 Exchange 伺服器係轉換日期時發生了整數上溢錯誤(Integer Overflow Error),導致 Exchange 中的電郵過濾服務無法啟動,令伺服器無法傳送電郵。

🗞 ICT News: 新「千年蟲」漏洞!出事嘅竟然係 Microsoft?

係 2022 年 1 月 1 日,有唔少嘅系統管理員(System Administrators)向報告,表示由 Microsoft 供應嘅在地(On-premise)Exchange 電郵伺服器停止發送電子郵件。係傳送電郵之前,Exchange 伺服器會透過一個叫 FIP-FS (Filtering Management Service)嘅程式去檢查電郵,確保電郵數據格式正確,同埋電郵無任何嘅病毒。但係,喺 2022 年 1 月 1 日嘅時候,FIP-FS 無法正確咁將電郵嘅發送日期儲低做檢查,令所有郵件無法通過 FIP-FS 嘅檢查,無法傳送。結果,大家係 1 月 1 日都收唔到電郵,被迫放假👏

(可惜嘅係,)Microsoft 已經為受影響嘅伺服器提供修補程式(Patch),解決咗呢個問題。

ICT 重點

係講 Microsoft 嘅 Exchange Server 點解會遇到呢個問題之前,Wilis 想先講下「千年蟲」呢個 term。(因為 Willis 知道睇得呢篇文嘅同學仔應該都係 00 後 😢 Willis 身為一個 90 後有責任傳承歷史)

係 1970s / 1980s 嘅時候,唔少電腦為作節省成本,都會諗盡辦法去用少啲嘅位元去儲存數據。其中一個「開刀」嘅地方,就係年份嘅表示:Instead of 儲低成年份個 4 個數字,我哋淨係儲低年份嘅最尾兩個字。So instead of 1984, we store 84 to save space。(如果同學仔從上年開始睇 Willis 寫「每周速報」嘅話,可能會有印象呢件事叫做最低有效優先 Least Significant First。

All is well until the 1990s hit. 當大家都發現地球有機會唔係 1990s 期間玩完,世界未末日嘅時候,大家就望向自己電腦上面嘅日期,然後心諗:大獲!當我哋去到 2000 年嘅時候,部電腦咪會以為係 1900 年囉!咁所有 compare 日期嘅 function 咪會錯曬囉!世界末日啦(!)所以嗰個年代買電腦,會見到部電腦上面痴住一張 label,上面會寫住:

Turn off your computer before midnight on 31/12/99.
(在 99 年 12 月 31 日的凌晨前關掉電腦。)

按我去睇啲 labels

關於 2000 年 1 月 1 日呢個日期嘅儲存同顯示嘅問題,我哋稱之為「千年蟲問題 Y2K Problem」。而今次 Microsoft Exchange Server 出現嘅問題,我哋就叫佢做 Y2K22 Problem。

點解今次 Exchange 伺服器會出事呢?Exchange 伺服器會將 2022 年 1 月 1 日呢個日期以「2,201,010,001」嘅形式儲低(可能係「年份/月份/日期/秒數」咁解,但係將四項資訊當做一個整儲存係幾奇怪下)。FIP-FS 會以 32 位元非帶號整數嘅數據類型表示。心水清嘅同學仔可能已經知道咩事:32 位元下,非帶號可表示嘅最大值係 2331=2,147,483,647<2,201,010,0012^{33} - 1 = 2,147,483,647 < 2,201,010,001,所以發生咗上溢錯誤。所以 FIP-FS 咪會報錯話個日期唔啱,唔俾 send email 囉!

最慘嘅係,呢啲嘅 bugs 其實真好難預防:就算 Programmers 寫定幾多 test cases 都好,都好難期將來嘅某一日會突然間某個 variables 會報錯,尤其係當個 functions 會隨時間改變而傳回唔同結果。所以,重要嘅數據一定要做好備份,因為電腦程式係由唔完美嘅人類設計,所以電腦同電腦程式本身唔係完全可靠。

相關課題

  • 必修部分第 3 課:關於數字表示

新聞來源/詳細閱讀

問題回顧

  • 點解 Exchange 伺服器認為 2022 年 1 月 1 日唔係一個正確嘅日期?

鐘意篇文嘅話,麻煩係下面個 IG Post 上面俾個 Like ❤️ 感謝感謝

更多內容