Linux xz後門的破壞可能比想像的更大

原创 岱军 云云众生s
一位神秘的貢獻者植入了後門,在過去兩年中幫助維護了廣泛使用的 xz 壓縮庫。那麼,還有什麼隱藏在裡面?

譯自Linux xz Backdoor Damage Could Be Greater Than Feared,作者 Joab Jackson。

當你的家被闖入時,你可能最初無法理解被拿走了什麼,或造成了什麼傷害。這就是Linux 社群目前對最近發現的 xz 後門安全漏洞的擔憂。

「這種上游供應鏈安全攻擊是多年來人們一直稱之為歇斯底里的噩夢場景,」Kubernetes 安全主席Ian Coldwater在X 上寫道。 “這是真的。”

一名 Microsoft 工程師首先偵測到後門,他將其追溯到 xz 壓縮庫的最近更新。庫更新是最近的一次,但它已經出現在某些 Linux 發行版的滾動和高級“快速”版本中。

後門需要滿足某些條件和依賴項才能觸發。然而,一旦觸發,攻擊者就可以在完全沒有身份驗證的情況下進入你的系統。

錯誤的程式碼已被迅速清除,但現在的問題是這個後門已經造成的潛在損害——以及是誰植入了這個詭計,他們的目的是什麼。

更令人擔憂的是,這個庫中可能還存在其他尚未發現的後門,或者已經植根於更多伺服器仍在使用的庫的早期版本中。

如果不是愛管閒事的工程師…
感謝那些足夠極客的工程師,他們在SSH 會話中調試緩慢的登入時間。

Microsoft 原理軟體工程師(Principle Software Engineer)Andres Freund注意到他的遠端 ssh 登入比應有的時間長 500 毫秒。他將延遲追溯到 SSH 對liblzma壓縮函式庫發出的系統調用,原因是該函式庫包含在 Freund 的Debian sid安裝中嵌入的xz 實用程式中。

他在安裝過程中用於 Debian 的 xz 實用程式 tarball 中追蹤到了後門程式碼——儘管它們不在庫的原始 GitHub 原始程式碼中。

額外的包袱是一個混淆腳本,它將在 tarball 的配置設定結束時執行。

Freund 向 Debian 安全部門報告了錯誤的 tarball,然後向經銷商管道報告。 Red Hat 將此問題提交為CVE-2024-3094,嚴重性為 10。

對 Freund 來說,這種看似惡意的程式碼注入發生在 Linux 發行週期的上游,這讓他很擔心。

「考慮到數週的活動,提交者要么直接參與其中,要么他們的系統遭到了一些非常嚴重的破壞。不幸的是,鑑於他們在各種列表中就上述’修復’進行了交流,後者似乎不太可能,」他寫道。

Jia Tan 是誰?
Red Hat工程師Richard WM Jones一直與後門的明顯作者聯繫,他在 Hacker News 上轉發。

這位名為 Jia Tan 的貢獻者一直“試圖將 xz 5.6.x 添加到 Fedora 40 和 41”,因為它“‘有很棒的新功能’”。

來自 Jia Tan 的 GitHub 帳號。

「他加入 xz 專案已有 2 年,添加了各種二進位測試文件,老實說,有了這種複雜程度,我什至會懷疑更早版本的 xz,直到有相反的證據,」Jones 寫道。

發現包含後門的 XZ Utils5.6.0和5.6.1版本 tarball。兩者均由 Jia Tan(JiaT75)創建並簽署。

安全專家Michal Zalewski指出,Jia Tan 可能是一個化名,解釋說這個角色顯然在 2021 年憑空出現。

JiaT75 於 2021 年在 GitHub 上註冊,此前沒有任何活動記錄,並立即開始處理xz 實用程式專案。該帳戶除了一個 gmail 位址外,沒有其他識別資訊。

xz 首席維護者是 Lasse Collin(Larhzu),自該計畫成立以來一直參與其中。他通常會對 xz tarball(多個檔案的捆綁包)進行簽名以進行分發。然而,他讓 Tan 處理了最近的幾個版本。

Collin 對 Tan 了解多少並未明確。就在這場混亂之前,Collin 已下線,處在網路休假中,只上網一次,在專案網站上發布了一條簡短的回應。

Zaleski 的偵查發現,在過去幾年中,Collin 一直受到網路騷擾者的糾纏,要求他辭去 xz 管理員的職務。

網路騷擾者要求 xz 維護者下台

在一條訊息中,Collin 承認他最近幾乎沒有時間跟進不斷增加的 Backlog。 「從長遠來看,必須做出一些改變,」他寫道,並補充說,隨著時間的推移,他希望 Tan 承擔更多職責。

Zaleski 懷疑 JiaT75 的工作,鑑於其總體的高質量,並非業餘愛好者的工作。

Zaleski 推測,“所有跡像都表明這是一項專業且有償的工作”,甚至可能是外國政府所為。

其他安全專家似乎也同意注入程式碼的整體複雜性:

「這可能是我們見過的描述最詳細的供應鏈攻擊,這是一個噩夢般的場景:惡意、有能力、在廣泛使用的庫中獲得上游授權,」開源維護者Filippo Valsorda在BlueSky 上寫道。

Jia Tan 只能存取託管在 GitHub 上的 xz 檔案;Collin 保留對網站的控制權。出於安全考慮,GitHub 已停用所有 xz 實用程式儲存庫,並暫停了 Tan 和 Collin 的帳戶。

如果您運行 Linux 或 macOS 系統,您很可能擁有 xz 和 liblzma 依賴項的某個版本,這些依賴項是解壓縮軟體包以進行安裝和更新所必需的。

到目前為止,主要是滾動發布和快速更新發行版引入了 XZ Utils 5.6.0 和 5.6.1,例如 Fedora Linux 40 和 Fedora Rawhide 以及Debian 高級發行版。

Ubuntu 24.04 LTS(Noble Numbat)也包含受感染文件,現已刪除。 Arch和openSUSE也發布了公告。

Red Hat 已報告沒有任何 Red Hat Enterprise Linux 版本受到損害。

後門似乎僅透過一組特定條件觸發:根據 Gentoo Linux 開發者Sam James發布的za-utils 後門常見問題解答,透過「連接到公共 SSH 連接埠的遠端非特權系統」。

除了安裝 5.6.0 或 5.6.1 tarball 之外,漏洞還必須是在 AMD64 硬體上運行的 Linux 發行版,並使用glibc庫(例如所有那些 Debian 和 Red Hat 衍生版本)。

systemd和已修補的openssh的組合似乎也是後門的要求。

payload 由/usr/sbin/.中執行的sshd守護程式觸發。惡意程式碼實際上被嵌入到sshd本身中,這要歸功於最近的 sshd 補丁,以支援systemd-notify,允許其他服務(包括 liblzma)在 sshd 運行時收到警報。

一旦進入sshd,有效載荷會將 sshd 的解密功能重新導向以繞過使用者驗證。

「其他系統此時可能存在漏洞,但我們不知道,」James 寫道。

Red Hat警告其用戶妥協的嚴重性:

“在適當的情況下,這種幹擾可能會讓惡意行為者有機會繞過 sshd 身份驗證,並遠端獲得整個系統的未授權存取權限。”

xz後門有多少?
鑑於上面列出的這些條件,如果你正在運行一個可公開訪問的 SSH 的伺服器實例,James 建議你應該“立即立即立即更新。”

他強調,目前已知的關於後門觸發器及其感染版本的資訊非常有限。

「雖然不是危言聳聽,但明確一點很重要,在這個階段,我們很幸運,而且受感染的 liblzma 可能會產生其他影響,」James 寫道。

一方面,JiaT75 可能會在他任職期間(至少可以追溯到 v5.3.1)在 xz 的早期版本中植入其他隱藏得更好的後門?

當然,這意味著Linux 發行版池更大可能會受到影響。

根據 Red Hat 的說法,美國網路安全和基礎設施安全局 (CISA) 目前正在進一步調查後門。

好消息是情況本可以更糟:原始上游 OpenSSH 不會受到影響——除非liblzma被添加為依賴項。

儘管如此,OpenSUSE 建議其 Tumbleweed 用戶為面向公眾的伺服器重新安裝 SSH,因為無法判斷這些伺服器是否已被入侵。

無論如何,後門是如何如此接近如此多的生產系統的,這可能是對網路基礎設施狀態的一個警示故事。

「不過,我認為這意味著應該結束手動構建上游 tarball 而非直接提取 git 源的慣例,例如 debian 等發行版所支持的慣例,」一位評論員在 LXN.net 上指出。

“這是唯一一個在其他相當可複製的管道中很少有人關注的薄弱環節,而這實際上只是時間問題,直到有人利用它。”

單模光纖和多模光纖有什麼區別?各自有哪些特點

單模光纖(Single-mode Fiber, SMF)和多模光纖(Multimode Fiber, MMF)是光纖通信中常用的兩種類型。它們之間有多方面的區別,包括結構、傳輸特性、應用場景等。以下是詳細介紹:

單模光纖(Single-mode Fiber, SMF)
結構特點
纖芯直徑:約8-10微米。
包層直徑:125微米(與多模光纖相同)。
光模式:僅允許單一光模式傳輸(通常是基模)。
傳輸特性
帶寬:極高帶寬,適合超高速數據傳輸。
衰減:低衰減,適合長距離傳輸。
色散:低色散,傳輸質量高。
優點
適合長距離通信(超過數十公里到數百公里)。
支持超高速數據傳輸,適用於高帶寬需求。
低衰減和低色散,提供高質量的信號傳輸。
缺點
安裝和維護成本較高。
光源(如激光器)和接收器成本較高。
典型應用
城域網(Metro Networks)和長途通信(Long-haul Transmission)。
互聯網骨幹網(Internet Backbone)。
高速骨幹網絡和超大型數據中心。
多模光纖(Multimode Fiber, MMF)
結構特點
纖芯直徑:50或62.5微米。
包層直徑:125微米。
光模式:允許多個光模式傳輸。
傳輸特性
帶寬:相對較低的帶寬。
衰減:相對較高的衰減,適合短距離傳輸。
色散:較高的模式色散,影響傳輸質量。
優點
安裝和維護成本較低。
光源(如LED)和接收器成本較低。
適合短距離應用(數百米到幾公里)。
缺點
帶寬和傳輸速率較低,較難支持超高速數據傳輸。
衰減和色散較高,影響傳輸質量和距離。
典型應用
局域網(Local Area Networks, LANs)和數據中心內部連接。
建築內部布線和短距離光纖連接。
校園網絡和企業網絡。
主要區別總結
纖芯直徑:

單模光纖:纖芯直徑較小(8-10微米)。
多模光纖:纖芯直徑較大(50或62.5微米)。
傳輸距離:

單模光纖:適合長距離傳輸。
多模光纖:適合短距離傳輸。
帶寬和速率:

單模光纖:高帶寬,支持超高速數據傳輸。
多模光纖:較低帶寬,支持中速數據傳輸。
光源和接收器:

單模光纖:通常使用激光器,成本較高。
多模光纖:通常使用LED,成本較低。
應用場景:

單模光纖:長途通信、城域網和高速骨幹網。
多模光纖:局域網、數據中心和短距離布線。
這些區別決定了單模光纖和多模光纖在不同應用場景中的適用性和優勢。根據實際需求,選擇合適的光纖類型可以有效提升通信系統的性能和成本效益。

Linux中策略路由實作原理

轉自ToToSun 协议森林
概念

Linux中策略路由實作原理
傳統路由只使用一張路由表,但在某些情況下,需要使用多路由表(multiple Routing Tables)。策略路由指對IP包根據特定策略進行路由,例如“所有來自網路A的包,選擇X路徑;其他選擇Y路徑”,或者是“所有TOS為A的包選擇路徑X;其他選號路徑Y” 。
規則是策略路由關鍵概念,什麼樣的包,將應用本規則(RULE),符合本規則的包將對其採取什麼動作(ACTION);本規則優先級別越高,規則越先匹配,數值越小優先等級越高。
iproute2工具

實作策略路由配置工具一般用iproute2工具包。 Linux最多可以支援255張路由表,其中有3張表是內建的:

表255:本地路由表(Local table)本地介面位址,廣播位址以及NAT位址都存放在這張表。此路由表由系統自動維護,管理員不能直接修改。

表254:主路由表(Main table)如果沒有指明路由所屬表,所有的路由都預設放在這個表裡,一般來說,舊路由工具(如route)所新增的路由都會加到這個表。一般是普通路由。

表253:預設路由表(Default table)一般來說預設路由都放在這張表。

root:/# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
root:/#
root:/# ip route show table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.1.0 dev enp9s0f0 proto kernel scope link src 192.168.1.182
local 192.168.1.182 dev enp9s0f0 proto kernel scope host src 192.168.1.182
broadcast 192.168.1.255 dev enp9s0f0 proto kernel scope link src 192.168.1.182
broadcast 192.168.2.0 dev enp9s0f1 proto kernel scope link src 192.168.2.182 linkdown
local 192.168.2.182 dev enp9s0f1 proto kernel scope host src 192.168.2.182
broadcast 192.168.2.255 dev enp9s0f1 proto kernel scope link src 192.168.2.182 linkdown
broadcast 192.168.3.0 dev enp9s0f2 proto kernel scope link src 192.168.3.182 linkdown
local 192.168.3.182 dev enp9s0f2 proto kernel scope host src 192.168.3.182
broadcast 192.168.3.255 dev enp9s0f2 proto kernel scope link src 192.168.3.182 linkdown
broadcast 192.168.6.0 dev enp52s0f1 proto kernel scope link src 192.168.6.183 linkdown
local 192.168.6.183 dev enp52s0f1 proto kernel scope host src 192.168.6.183
broadcast 192.168.6.255 dev enp52s0f1 proto kernel scope link src 192.168.6.183 linkdown
root:/
root:/
root:/# ip route show table main
192.168.1.0/24 dev enp9s0f0 proto kernel scope link src 192.168.1.182
192.168.1.0/24 dev enp9s0f0 proto kernel scope link src 192.168.1.182 metric 101
192.168.2.0/24 dev enp9s0f1 proto kernel scope link src 192.168.2.182 linkdown
192.168.3.0/24 dev enp9s0f2 proto kernel scope link src 192.168.3.182 linkdown
192.168.6.0/24 dev enp52s0f1 proto kernel scope link src 192.168.6.183 linkdown
规则配置

在添加规则时,必须先确定好“条件”、“优先级别”及“路由表”,此后才可执行添加规则操作。条件是用来决定哪类数据包可以符合这项规则,而可用来匹配的字段为Source IP、Destination IP、Type of Service、fwmark及dev等,这些字段的使用方式如下:
#根据源IP
ip rule add from 192.168.1.10 table 100
ip rule add from 192.168.2.0/24 table 200

#根据目的IP
ip rule add to 10.0.2.1 table 100
ip rule add to 10.0.2.0/24 table 200
将fwmark作为匹配条件时,必须搭配Netfilter一起使用。某公司对外有三种路由,希望所有HTTP协议经由第一条ADSL ,SMTP及POP3经由第二条VDSL,其余流量则经由第三条ETH。可以使用如下命令实现策略路由:

iptables -t mangle -A FORWARD -i adsl -p tcp –dport 80 -j MARK –set-mark 1
iptables -t mangle -A FORWARD -i vdsl -p tcp –dport 25 -j MARK –set-mark 2
iptables -t mangle -A FORWARD -i vdsl -p tcp –dport 110 -j MARK –set-mark 2
iptables -t mangle -A FORWARD -i eth3 -j MARK –set-mark 3
ip rule add fwmark 1 table 1
ip rule add fwmark 2 table 2
ip rule add fwmark 3 table 3

由eth2接口送入的数据包都由eth0接口转发出去,由eth3接口送入的数据包都由eth1接口转发出去,可以使用如下命令实现策略路由:

ip rule add dev eth2 table 1
ip rule add dev eth3 table 3
ip rule show命令所显示内容的第一个字段就是优先级别,数字越小,代表优先级别越高,也代表这条规则可以排得越靠前,如此数据包在进行条件匹配时,就会越早匹配到这条规则。

[root@localhost ~]# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
[root@localhost ~]#
[root@localhost ~]# ip rule add from 192.168.1.0/24 table 1 prio 10
[root@localhost ~]# ip rule add from 192.168.2.0/24 table 2 prio 20
[root@localhost ~]#
[root@localhost ~]# ip rule show
0: from all lookup local
10: from 192.168.1.0/24 lookup 1
20: from 192.168.2.0/24 lookup 2
32766: from all lookup main
32767: from all lookup default
ip命令提供的删除规则的方式十分灵活,例如,要删除下列第2条规则,可以分别使用“优先级别”、“条件”及“路由表”当中任何一个唯一的值来设置所需删除的规则。

ip rule del prio 10
ip rule del from 192.168.1.0/24
ip rule del table 1
ip rule del from 192.168.1.0/24 table 1 prio 10