當前位置: 華文問答 > 數碼

山衫惠子說智子沒有發現希恩斯改動了思想鋼印程式程式碼中的一個正負號,這可能嗎?

2020-02-19數碼

一個現實的例子。

近期,一個惡意使用者Jia Tan(下稱JiaT),嘗試在xz-utils中開後門,具體的過程可以參考知乎問題「 知名壓縮軟件 xz 被發現有後門,影響有多大?如何應對? 」下的回答,這裏只關註這個大瓜下的一個小「細節」。

背景知識:

landlock,根據 Landlock: unprivileged access control — The Linux Kernel documentation ,

Because Landlock is a stackable LSM (LSM = Linux Security Modules,答主註), it makes possible to create safe security sandboxes as new security layers in addition to the existing system-wide access-controls. This kind of sandbox is expected to help mitigate the security impact of bugs or unexpected/malicious behaviors in user space applications. Landlock empowers any process, including unprivileged ones, to securely restrict themselves.

關乎著沙箱(sandbox)的安全。

而JiaT的一次惡意程式碼送出 git.tukaani.org - xz.git/commitdiff (需要魔法),是這樣的:

JiaT這次惡意送出中存在問題的一個diff。

其中紅色的就是之前的程式碼,綠色的就是JiaT在這次送出中新增的程式碼。

如果你是審查這段程式碼的人,你能發現這段程式碼的問題嗎?

事實上,引入個送出之後,LANDLOCK永遠不會啟用。它直接影響了sandbox的安全性。

現在,你已經知道了這個送出有問題,你能看出來JiaT是怎麽做到的嗎?

非常簡單,在這段程式碼中,check_c_source_compiles語句裏,包含了一個C程式碼。JiaT的送出,表面上看起來是,如果這個C程式碼編譯透過,就讓HAVE_LINUX_LANDLOCK變量為true,否則為false。之後根據HAVE_LINUX_LANDLOCK的正負控制SANDBOX LANDLOCK檢查。

但是,問題就出在,這個C程式碼根本不可能編譯透過,因為一個點。

紅色標出來的,是一個點。

這個點,並不符合C語言的語法,導致這段C程式碼編譯一定失敗,進而導致HAVE_LINUX_LANDLOCK一定為false,所以SANDBOX LANDLOCK檢查一定失效,進而,(可能)導致sandbox的安全問題。

我相信,即使是最優秀的reviewer,也不一定能肉眼看出這裏有問題。我甚至把這個送出給ChatGPT3.5看了下,讓它分析這裏的問題,它看不出來,在我的引導下,雖然它說出了上面分析的邏輯,但是也不能說清楚這塊程式碼為什麽引入安全問題。如果你手頭有別的生成式AI大模型工具,你可以試試,看看它們能不能看出這個問題。

現在回到題主的問題。這種極小程式碼導致巨大的差異不被發現,我認為是可能的。

即使現在還算「智能」的生成式AI大模型之一ChatGPT3.5,都不能看出一個「.」引起的安全問題,三體中的智子,可能也不可以。畢竟原著中,智子並沒有體現超高的人工智能特性。

參考:

  • 知名壓縮軟件 xz 被發現有後門,影響有多大?如何應對?