xz back door原理
在xz壓縮命令從5.6.0版本開始,裏面被發現了一些惡意程式碼。這些惡意程式碼在源碼層面進行了一系列的混淆 ,導致難以辨認。在liblzma的構建過程中從源碼中包含的 測試檔進行有條件的編譯,用於修改liblzma庫中特定的函式,這樣就會產生一個被修改了的liblzma庫檔,當所有使用 liblzma庫 的軟體與修改了的liblzma庫進行數據互動的時候,使用者數據就會被遭到攔截和竊取。
大致的流程圖如下:
避免
實際上這個後門的執行極為嚴苛,可以多方面避免它。xz的5.6.0和5.6.1庫惡意程式碼只有toolbar下載包中才有,所以盡量避免用toolbar下載即可。Git目前的發行版並沒有M4這個build惡意程式碼的宏,所以Git第二階段的計畫不合並到構建中,也會避開這個惡意程式碼。另外xz後門還影響了OpenSSH守護行程。原理是OpenSSH與systemd通 信, 而systemd 連結到 liblzma,這是透過一個中間手段產生的惡意程式碼。
受影響的系統
因為後門是在xz Utils的惡意版本被添加到Linux的生產版本之前發現的。
目前的 情況表明,只有Redhat生態系中的Fedora41和Fedora Rawhide 存在這些包。Red Hat Enterprise Linux不受任何影響。Debian測試 表 明,最近釋出的測試版至少使用了其中一個有後門的版本。 Arch Linux 的穩定版本也會受到影響。 但是,該發行版未用於生產系統
惡意更改是由 JiaT75 送出的,JiaT75 是 xz Utils 的兩個主要開發人員之一,多年來一直為該計畫做出貢獻。
xz壓縮
此次xz壓縮軟體爆出後門,對於xz壓縮和二進制修補程式屬於比較熟悉的範疇。比如linux內核壓縮包和qemu用的就是xz壓 縮,二進制修補程式用於安全方面大量案例。本篇嘗試綜合網上的各種分析,簡要概述下此次後門的發現過程。
大部份人可能聽過zip,rar,7z等壓縮,對於xz壓縮可能不太熟悉。但其實這個壓縮是透過LZMA2演算法,比 gzip,bzip2 壓縮演算法體積更小,效能更快。廣泛套用於各種開源軟體中,比如上面提到的linux內核壓縮包等,它一般是用於二次壓縮。比如tar壓縮包再次進行壓縮,即可形成xz格式。一般的用xz -d解壓成tar。
起因
此
次後門的
起因發現其實非常簡單,一位測試人員(Andres Freund)發現登陸SSH CPU占用率比較高。
他嘗試著分析是哪個程式導致這種情況,一般的來說。
透過源碼Debug定位是最快速的方式,結果這個測試人員透過定位的過程中,發現一些二進制執行的數據不能對應上源碼的偵錯符號。
這種情況其實也很好理解,一般的對於惡意註入程式碼的程式來說,二進制修補程式是最直觀和隱藏較深的操作。
測試人員不明白這段二進制程式碼是幹嘛用的,可能是責任心作祟,也可能是對於程式碼的執著。然後這位測試人員把這個事情給暴了出來,經過驗證,提取分析。這後門最終定位在了xz-utils壓縮軟體上。透過分析,xz最近提的幾個pr以及issuse,commit 等軌跡,判斷和還原出了真正的植入這個後門的幕後黑手。過程就比較復雜。簡單點來說,就是攻擊者註冊兩到三個帳號,用不同身份切換。一個送出pr,一個取得xz-units信任,可能還有一個用於編譯指令碼裏面的特殊模組編譯。簡單來說,就是當觸發到某個編譯條件, 當編譯 鏈 接到xz-utils的時候。 上面說的那段二進制程式碼就會被植入到 libl zma5裏面去 。讓SSH不需要有密碼即可進入,性質極為惡劣。
可以看見攻擊者的良苦用心,但它後門造成的CPU超高,最終也導致了他的精心攻擊被一朝擊破。
目前為止,據悉Debian已經把xz並入了testing,xz-utils版本號是5.6.0和5.6.1,需要註意這兩個版本。漏洞編號CVE-2024-3094,CVSS v3分數是10分,什麽級別的呢?也即是滿分木馬。
題外話
題外話,據悉此次事情的始作俑者的時區是UTC+8 。這個時區在蒙古,中國,新加坡這一帶。
參考如下:
https://access.redhat.com/security/cve/CVE-2024-3094.
https://arstechnica.com/security/2024/03/backdoor-found-in-widely-used-linux-utility-breaks-encrypted-ssh-connections/