日前,開源軟件XZ被植入“后門”事件,引發了網絡安全界的軒然大波。研究人員發現,在包括Red Hat和Debian在內的多個流行Linux版本中,一款壓縮工具被悄悄植入了惡意代碼,這樣攻擊者即使沒有有效賬號,也可以通過SSHD(一個負責SSH連接工作的關鍵二進制文件)訪問系統了。
據了解,Lasse Collin在2005年使用LZMA壓縮算法設計了.xz文件格式。久而久之,這種壓縮格式被廣泛用于壓縮tar文件、Linux內核映像及許多其他用途。值得慶幸的是,這個后門及時被發現,且目前還未收到其被實際利用的報告。GitHub也以違反服務條款為由,立即禁用了Tukaani項目維護的XZ Utils代碼庫。如果這個后門的植入技術更加隱秘高超,那么當XZ被廣泛引入各Linux發行版后,后果將不堪設想,甚至是災難級別的。
通過進一步的深入分析,研究人員認為本次爆出的“后門”事件是一次典型的軟件供應鏈投毒事件。因為相關的惡意代碼是由一位名為Jia Tan(JiaT75)的項目維護人員,通過多次代碼變更的方式,植入到了Tukaani項目中。在近三年的時間里,Jia Tan一直為XZ項目貢獻高質量代碼,最終才獲得了該項目的提交訪問權和維護權。以下總結梳理了一個詳細的時間軸,對本次意義深遠的后門攻擊事件進行復盤回顧:
2021年10月29日:Jia Tan向xz-devel郵件列表發送了第一個無害補丁,添加“.editorconfig”文件。
2021年11月-2022年4月:Jia Tan向xz-devel郵件列表發送了多個無害補丁,對項目中存在的構建問題進行了修復,這些補丁看起來質量很高。
2022年4月22日:Jigar Kumar向Jia Tan發送了首封郵件,希望他提交的補丁能夠被合并。此時,Lasse Collin已經合并了Jia Tan的四個補丁,并在提交信息中標注了“感謝Jia Tan”。
2022年5月19日:一個名為“Dennis Ens”的開發者向xz -devel發送了施壓郵件,詢問XZ for Java是否得到及時的維護。Lasse Collin為自己回復慢道歉,同時表示,Jia Tan在XZ Utils方面幫助了我,未來他可能扮演更重要的角色。因為我精力有限,從長遠來看需要有所變化。
2022年6月7日:另一個名為“Jigar Kumar”的開發者向Java主題帖發送施壓郵件。“除非有新的維護者,否則該項目不會有進展。XZ for C的提交日志也寥寥無幾。當前的維護者失去了興趣,或者不再關心維護。看到代碼庫出現這樣的局面,我很難過。”
2022年6月8日:Lass Collin回復稱,我正在與Jia Tan進行溝通交流,希望他將來會扮演更重要的角色。盡管這是沒有報酬的業余項目。
2022年6月10日:Lasse Collin在git元數據中合并了Jia Tan作為作者的首次提交。
2022年6月14日:Jigar Kumar再次發送施壓郵件。“以你目前的速度,我很懷疑今年能不能看到5.4.0版本。自4月份以來,唯一的進展是測試代碼出現了小小的修改。你忽略了這個郵件列表中無人注意的許多補丁。為什么等到5.4.0才換維護者?為什么遲遲未合并你的代碼庫需要的補丁?”
2022年6月21日:Dennis Ens也再次發送了施壓郵件。“我知道這是所有貢獻者的業余項目,但社區需要更多。為什么不放棄XZ for C的維護工作,這樣可以對XZ for Java給予更大的關注?或者把XZ for C交給別人維護、專注于XZ for C?試圖維護兩個項目意味著兩者都得不到精心的維護。”
2022年6月29日:面對多次的郵件催促,Lasse Collin進行了統一回復:Jia Tan已幫了很多忙,實際上他已經是這個項目的共同維護者。在git代碼庫中,一些小的修改一直在進行。至少對于XZ Utils來說,維護方面已出現了一些變化。
2022年7月:在各種郵件施壓下,Lasse開始與Jia Tan更密切地合作。但是現在看來,Jigar Kumar和Dennis Ens的郵箱地址nameNNN@mailhost從未出現在網絡上的其他地方,也沒有再出現在xz-devel,看起來很可能是為了迫使Lasse為Jia賦予更大的控制權而偽造的。在隨后時間里,Jia開始在xz-devel上回復關于即將發布的5.4.0版本的帖子。
2022年9月27日:Jia Tan作為項目主要維護者發布了5.4.0版本的摘要。
2022年11月30日:Lasse Collin將bug報告郵箱修改為屬于他和Jia Tan的別名,并在README文件中指出“可以通過xz@tukaani.org聯系項目維護者Lasse Collin和Jia Tan”。
2022年12月30日:Jia Tan將第一個提交直接合并到xz代碼庫中。此時我們知道他們有提交權限。
2023年1月1日:Lasse Collin標記并構建了他的最終版本v5.4.1。
2023年3月18日:Jia Tan標記并構建了他的第一個版本v5.4.2,并在兩天后更新了Google oss-fuzz配置,向他們發送bug。
2023年6月22日:Hans Jansen發送了一對補丁(由Lasse Collin合并),使用“GNU間接函數”特性在啟動時選擇快速CRC函數。最后的提交由Lasse Collin改動,并由Jia Tan合并。這個更改很重要,因為它提供了一個鉤子(hook)后門代碼,可以通過這個鉤子在全局函數表被重新映射為只讀之前修改它們。
2023年7月7日:Jia Tan在oss-fuzz構建期間禁用ifunc支持,聲稱ifunc與地址消毒程序不兼容。這本身可能是無害的,不過這為以后使用ifunc奠定了基礎。
2024年1月19日:Jia Tan將網站移至GitHub頁面,得以控制XZ Utils網頁。Lasse Collin為指向GitHub頁面的xz.tukaani.org子域創建了DNS記錄。攻擊被發現后,Lasse Collin刪除了這條DNS記錄,回到了他控制的tukaani.org。
2024年2月23日:Jia Tan將隱藏的后門二進制代碼合并到一些二進制測試輸入文件中。README表明“該目錄包含一堆文件,用于測試解碼器實現中的.xz、.lzma (LZMA_Alone)和.lz(lzip)文件的處理。對于這類庫而言,擁有這些類型的測試文件司空見慣。Jia Tan趁機添加了不會被仔細審查的幾個文件。
2024年2月24日:Jia Tan標記并構建v5.6.0,并發布帶有額外惡意build-to-host.m4的xz-5.6.0.tar.gz發行版,構建deb/rpm軟件包時該文件添加后門。這個m4文件不存在于源代碼庫中,但打包過程中另外其他合法文件也被添加了,因此它本身并不可疑。但腳本已被改動,添加了后門。
2024年2月24日:Gentoo在5.6.0中開始出現崩潰。這似乎是一個真正的ifunc漏洞,而不是隱藏的后門中的漏洞,因為這是附有Hans Jansen的ifunc更改的第一個xz。
2024年2月28日:Jia Tan在一個用來檢查landlock支持的C程序中添加了不易發現的誤拼(typo),破壞了配置腳本中的landlock檢測。配置腳本嘗試構建并運行C程序以檢查landlock支持,但由于C程序有語法錯誤,根本不會構建和運行,腳本會始終認為沒有landlock支持。Lasse Collin被標為提交者,他可能未發現這個誤拼,因為Jia Tan在他的許多其他更改中沒有費心去偽造提交者。這個補丁似乎是為sshd更改之外的操作而精心準備的,因為landlock支持(而不是liblzma)是xz命令的一部分。
2024年3月4日:RedHat發行版開始在liblzma的_get_cpuid(進入后門的入口)中看到Valgrind錯誤。工作人員開始竭力解決這個問題。
2024年3月5日:libsystemd合并請求被合并,以移除libzma。攻擊者在發行版完全杜絕這種方法之前竭力給libzma植入后門;Debian將xz-utils 5.6.0-0.2添加到測試版;Jia Tan提交了兩個ifunc錯誤修正版。這些似乎是對實際ifunc錯誤的真正修復。一個提交鏈接到Gentoo bug。
2024年3月8日:Jia Tan提交了所謂的Valgrind修正版。這是一種遮眼術,但很有效。在第二天,Jia Tan又提交了更新后的后門文件。這是實際的Valgrind修正版,更改了含有攻擊代碼的兩個測試文件。Jia Tan還故意作了說明,“原始文件是在我的機器上隨機生成的。為了在將來更好地再現這些文件,使用了constant種子來重建這些文件。”
2024年3月9日:Jia Tan標記并構建v5.6.1,并發布xz 5.6.1發行版,含有新的后門。
2024年3月20日:Lasse Collin向LKML發送了補丁集,用他自己和Jia Tan作為內核中xz壓縮代碼的維護者替換了他的個人郵件。沒有任何跡象表明Lasse Collin在這里行為不端,他只是澄清自己是唯一維護者。
2024年3月25日:Hans Jansen回來,提交了Debian bug,將xz-utils更新到5.6.1。就像在2022年的施壓活動中一樣,出現了更多的name###@mailhost地址以示支持。
2024年3月28日:Jia Tan提交了Ubuntu bug,從Debian將xz-utils更新到5.6.1。就在當天,Andres Freund發現了風險隱患,私下通知Debian和distros@openwall。Debian回退5.6.1,引入了5.6.1+really5.4.5-1。
2024年3月29日:Andres Freund在公開的oss-security@openwall列表上發布后門警告,稱他“在過去幾周”發現了后門。當天,RedHat宣布發布的Fedora Rawhide和Fedora Linux 40測試版中有植入后門的xz。
2024年3月30日:Debian關閉構建版本,使用Debian穩定版重建構建系統,可能是為了防止惡意軟件xz逃離沙箱。