過去一週,在Linux或是Open-source(開源)社群有一單很轟動的新聞。就是一個名為XZ Utils的開源軟體被植入Backdoor後門程式。事件嚴重的原因,除了是這個軟體被很多大型的Linux分支所採用外,這次事件的元兇被非在重新上傳或在分發時動手腳,而是在源頭做手腳。
一個在Github名稱為JiaT75的程式編寫員,以潛伏在社群多年,建立了一定的可信度,從而晉身為XZ Utils的維護者之一。繼而開始他發放後門程式的野心。
與很多捨難取易或是急功近利的駭客不同。這次的黑手是以年月計的潛伏,而且中間他還投入了很多時間去「塑造」他是一個可信任的開源社群的一員。而元兇亦透過很多不同的方式,如斬件式將有惡意的編程碼漸進加入,而且也巧妙地取得XZ Utils原創始人的信任而避開了一些有機會出現的審查。可見這個代號JiaT75展現了高難度也非常專業的手法。
事情的發展很戲劇化(也帶有一點天網恢恢,疏而不漏),是因為另一位軟體工程師在測試中無意中發現了額外使用了的CPU效能覺得有異常,順藤摸瓜的找出了這個本來無人發現的後門。
而這個後門的嚴重性,也可以從Red-hat在2024年3月29日發佈Common Vulnerability Scoring System (CVSS)分數為10最嚴重的公佈。
礙於Github對於社群會員的私隱保護,找出JiaT75的真實身份似乎不大可能。而且相信他亦有一些分身帳號繼續潛伏在不同的Linux和開源社群裡。
從這件事情上,可以看到開源軟體的一些好處與壞處。好處,當然是因為開源,每個人都可以看到源代碼並一起改進軟體,也因此如有一些潛在問題,就算不是編寫維護者也能去做檢視,更快地找出問題。
如果這是一個封閉的軟體,要偵測到回饋,再到發出警告和修補檔可能花費的時間會更多。而且封閉軟體往往由一家公司持有,如果元兇本身就在擁有話語權的位置,他更能阻礙修補檔的發出。
但同時間,開源社群一直就是透過一種「基本互相信任,互相監篤」的模式。雖然有些編寫員心懷不軌,但不能抹殺全球有很多有心又無無私付出的編寫員每一日都透過本身擁有的知識和技能,去貢獻開源社群。
開源社群本身有一套機制,如Fuzz-testing這類可以幫助揪出錯誤和問題的方式。而這次元兇甚至早就在前幾個版本中部署了其他「小問題」從而令Fuzz-testing排除了掃描XZ Utils。
筆者要強調的是,這次發現後門程式的情況並非固定的合規測試,而是真的一個偶然!當然也是有賴那位微軟測試員的求真精神,如果換着其他人,可能未必會察覺有異。所以這次真的有點天網恢恢外,也真的是全個Linux社群的好運氣。
如果沒有及早發現,隨着更多Linux分支開始滾動更新而令有後門的版本進入了生態圈,那真的是不堪設想和極具破壞性的後果!
對於開源社群是否需要實名,向來是其中一個爭議。而事實上隨着開源軟體的成熟和其功用顯注,進而走進了一些商用Linux分支並成為核心功能之一,的確開源社群的安全性是非常值得審視的。