操作系統大神制造的木馬,到底有多可怕?
Unix的作者Ken Thompson有種神奇的本事,他大搖大擺地走到公司任何一臺Unix電腦前,輸入自己的用戶名和密碼,就可以以root身份登錄系統,為所欲為。
圖片
貝爾實驗室人才濟濟,看到Ken這么“囂張”,另外一些大牛發誓要把這個漏洞給找出來,他們通讀了Unix源碼,終于找到了Ken安放的登錄的后門,清理后編譯Unix,再次運行,可是Ken Thompson還能以root身份登錄。
圖片
既然源碼沒問題,那肯定是編譯的過程出了問題!
編譯器一定被Ken動了手腳,在編譯Unix時植入后門!
于是,大牛們重新寫了一個干凈的編譯器,用這個干凈的編譯器去編譯干凈的Unix,這下世界清凈了吧?
可依然不管用,Ken像上帝一般,照樣以root身份登錄。
這實在是太讓人崩潰了!
后來,還是Ken Thompson本人解開了這個秘密。
原來,問題在于Ken寫的第一個C編譯器,它在編譯Unix源碼時,會植入后門。
圖片
但這還不夠,更牛的是,當其他人寫了編譯器,肯定也需要編譯成二進制的代碼,用什么來編譯呢?當然是Ken寫的那第一個編譯器,于是,這個新的編譯器也被污染了。
再用新的編譯器去編譯Unix,也會植入后門。
圖片
所以,這就是Ken在1984年獲得圖靈獎演講時,提出的關鍵問題:
如果你沒有編寫全部的代碼,那你自己寫的代碼是不能被信任的。
無論多少源代碼級別的審核都不能保證安全性,因為你依賴的軟件和系統中還是可能有后門。
Ken選擇了C編譯器做手腳,但實際上他還可以選擇匯編器,load程序,甚至硬件級別的微代碼,隨著程序級別越來越低,這些錯誤越來難以被檢測到。
相比而言,相信編寫軟件的人更加重要。
那么這個后門僅僅局限于貝爾實驗室,還是外界也能用?
開源先鋒Eric S. Raymond提到過,有兩份獨立的報告展示,那個帶后門的Unix版本確實從貝爾實驗室“泄露了”,進入了BBN公司。
BBN即雷神公司,曾經深度參與互聯網的前身——ARPANET——的構建。
圖片
報告稱,有人在深夜通過網絡用“kt”這個登錄名進行了登錄BBN的Unix,kt很可能就是Ken Thompson的縮寫。
如果BBN的電腦被感染,那么其他地方的電腦被感染的可能性也非常高。
你可能會好奇,Ken的密碼是什么?知道了它不就可以登錄任意一臺Unix電腦了?
2014年,一個叫leah的網友在BSD 3 源碼樹的文件轉儲中發現了一個/etc/passwd 文件。
這真是一個寶藏,因為里邊包含的都是Unix前輩的密碼,每一個人都大名鼎鼎,如雷貫耳!
如Dennis Ritchie, Brian W. Kernighan, Steve Bourne and Bill Joy,當然,Ken Thompson的密碼也在內。
圖片
由于該密碼用基于 DES 的 crypt(3) 算法加密后的散列hash值,而 crypt(3) 是一種弱加密算法(最多限于 8 個字符),Leah 覺得破解起來應該比較容易,所以決定嘗試。
很快,那些簡單的密碼就被破解了,但是Ken Thompson的密碼卻如同一座高山,一直巋然不動。
Leah花了好幾天,用小寫字母和數字不斷組合,徹底搜索,也不管用。
更有趣的是,這個crypt算法就是Ken Thompson和另外一位密碼學家Robert Morris編寫的,也許Ken在算法中弄了手腳?
嘗試無果的Leah把這個消息發到了郵件列表中,讓全球的黑客一起想辦法。
5年以后,澳大利亞人 Nigel Williams 宣稱終于破解 Ken Thompson 的密碼,他的密碼是:p/q2-q4!
圖片
猛一看,這像一個數學公式。而實際上是一種古老的符號,代表國際象棋中棋子的走位,意思是“線上的棋子向前移動 2 個方格(Pawns in the line move forward 2 squares”)。q 代表 Queen,p 代表 Pawn,這種走棋記法屬于國際象棋的代數記譜法。
圖片
Ken Thompson為什么用這個當密碼呢?
因為Ken熱愛國際象棋,也是個國際象棋的高手,他在PDP-11上寫了一個國際象棋程序,后來又制作了加速運算的特殊硬件, 最終形成了一臺叫Belle的國際象棋計算機。
圖片
Belle戰績驕人,在于人類的常規比賽中,獲得了2200等級分,成為第一臺榮升國際象棋大師的計算機,還獲得了1980年世界計算機國際象棋大賽的冠軍。
當然了,p/q2-q4!不一定是那個后門的密碼,即使是,那個到后門的Unix版本估計也找不到了。