Linux之父怒噴谷歌安全工程師為哪般?
上周五,Linux 之父 Linus Torvalds 在內(nèi)核郵件列表上用很犀利的言辭抨擊了 Google Pixel 安全團(tuán)隊的開發(fā)者 Kees Cook,引起了大家廣泛地討論。
事情的起因在于 Google Pixel 安全團(tuán)隊的開發(fā)者 Kees Cook 向 Linus 遞交了加固 usercopy 的 pull request,但是 Linus Torvalds 認(rèn)為這種請求是極其愚蠢的,因為他認(rèn)為此類的加固觸及到了 Linux 的核心,會導(dǎo)致內(nèi)核出現(xiàn)混亂。而且他認(rèn)為安全人員的很多行為都是讓人難以接受的,解決安全問題的核心在于調(diào)試和修復(fù) bug,而不是應(yīng)該像安全人員那樣靠殺死機(jī)器或終止運(yùn)行來解決問題。
對此,Rober Graham 對 Linus torvalds 的言論表示贊同,他認(rèn)為我們應(yīng)該關(guān)注郵件的中心思想而不是激烈的言辭,他表示 Linus Torvalds 在郵件中要表達(dá)的意思有兩點(diǎn):
對內(nèi)核進(jìn)行大的改動應(yīng)該在小的迭代步驟中進(jìn)行,而且每一次都應(yīng)該徹底調(diào)試;
次要的安全問題不是重大的緊急情況,他們不允許繞過的規(guī)則比 bug 或功能多。
去年曾經(jīng)有一些安全固化的代碼被添加到內(nèi)核中,以防止一類緩沖區(qū)溢出 / 越界的問題,此代碼沒有解決任何特定 0day 的漏洞,但它能預(yù)防一類未來的潛在漏洞,這個代碼可以說是有 bug 的,但是不能說它是罪惡的,因為所有的代碼都會有 bug。
在 Linus Torvalds 看來,當(dāng)檢測到溢出 / 越界訪問時,代碼將終止用戶模式進(jìn)程或內(nèi)核,那么可以說這個代碼罪惡的。Linus 認(rèn)為它應(yīng)只產(chǎn)生警告,讓有問題的代碼繼續(xù)運(yùn)行。但殺死這些東西將會使得 bug 變得更加糟糕,它會導(dǎo)致內(nèi)核的災(zāi)難性故障,如果我們的車上運(yùn)行著 Linux 的 多個副本,那么這種災(zāi)難將會危及我們的生命,而警告雖然會把這些 bug 顯示出來,但不會造成災(zāi)難性的后果。在經(jīng)過僅僅一年之后,當(dāng) bug 得到修復(fù)時,代碼的默認(rèn)行為會被改變并消除錯誤的代碼,從而防止 bug 被利用。
簡而言之,在內(nèi)核中進(jìn)行大的改變應(yīng)該在小而可管理的步驟中進(jìn)行,固化代碼在 Linux 的 25 年歷史中都沒有出現(xiàn)過,所以在非緊急的情況下,沒必要立即進(jìn)行,更不用說繞過 Linus 提出的開發(fā)流程了。
再者,大多數(shù)的安全人員不是開發(fā)人員,他們實際上并不知道很多事情是如何運(yùn)行的,邊界檢查被他們定義為一種用來防止緩沖區(qū)溢出的安全功能,但實際上它是一種調(diào)試功能,開發(fā)人員都知道知道這一點(diǎn),但是安全“專家”往往不知道,而做出這些內(nèi)核變化的往往是不懂這一點(diǎn)的安全人員,他們沒有意識到內(nèi)核的變化會在現(xiàn)有的代碼產(chǎn)生大量的 bug,而且殺死錯誤代碼也是極其不恰當(dāng)?shù)男袨椤?/p>
由此可見,雖然 Linus 的語氣有點(diǎn)不友善,但是他的說法是合理的,他是一個講道理的人,他并沒有試圖阻止對內(nèi)核的改變,也并沒有阻止在安全上的提升,他只是想告訴人們,對內(nèi)核進(jìn)行大的改動需要用傳統(tǒng)的方式,而不是采取一刀切的方法,與功能和 bug 相比,安全的地位并沒有比他們高。