比XcodeGhost更邪惡的手段30年前就出現了
最近在開發者圈里討論最多的莫過于 XcodeGhost。其實在 20 年前,更高明的手段就出現了。
1984 年的時候,UNIX 創造者之一 Ken Thompson 獲得了 ACM 圖靈獎。他的獲獎演講叫做 Reflections on Trusting Trust(反思對信任的信任)。
1984 年圖靈獎得主 Ken Thompson
在這個稿子只有三頁紙的演講中他分三步描述了如何構造一個非常難以被發現的編譯器后門。這后來被稱為 the Ken Thompson Hack(KTH),有人說它是 the root password of all evil。
在第一步里,Thompson 展示了一個可以輸出自己的源代碼的 C 程序。這需要一定技巧,但很多人作為編程練習都做過。
在第二步里,Thompson 在 C 的編譯器里增加了一段代碼(后門),讓它在檢測到自己在編譯 UNIX 的 login 命令時在輸出里插入一個后門。這個后門會允許作者用特定密碼以 root 身份登錄系統。
在第三步里,Thompson 在第二步的編譯器里使用第一步的方法加入另一段代碼(后門生成器),使得這個編譯器在檢測到它在編譯自己時自動把第二步的后門和第三步的后門生成器插入到輸出里。
在得到一個第三步的編譯器后,就可以把第二、三步新增的代碼從源代碼里刪除,因為這個新的編譯器在編譯它自己原來「干凈」的源代碼時會自動把后 門和后門生成器加上。很多語言的編譯器都會使用「自舉」的方式編譯,也就是會用一個編譯器的舊版本可執行文件來編譯新版本的源碼,所以這樣一個高危的后門 完全可以在一個開源項目里存在。通過閱讀這個編譯器的源碼是無法發現這個后門的。
KTH 還可以被加強,讓它更難被察覺。比如這個編譯器可以污染它編譯的調試器、反編譯器等開發過程中使用的工具,使得即使程序員反編譯這個編譯器后看到的仍是干 凈的代碼,除非他使用的是 KTH 注入前的版本。所以當這個帶有 KTH 注入的編譯器來自于官方渠道時,它的后門是幾乎不會被發現的,而且會影響所有用戶。
最近的 XcodeGhost 最多只能算是 the Ken Thompson Hack 的一個簡化版本,沒有試圖隱藏自己,并且修改的不是編譯器本身,而是 Xcode 附帶的框架庫。
Thompson 在演講里的結論是:
即使開源項目也無法保證安全。在不考慮硬件或 microcode 后門的情況下,只有當運行的每一個程序都完全是自己寫的時才能確保安全。可是誰的電腦上能只運行自己寫的程序呢?恐怕只有 Ken Thompson 和 Dennis Ritchie 能在用自己發明的語言寫的操作系統上用自己寫的編譯器編譯自己寫的操作系統吧。
</blockquote>Ken Thompson 從貝爾實驗室退休幾年之后加入了 Google。在 Google,他和原來貝爾的老同事一起發明了 Go 語言。Go 從 1.5 版開始以自舉的方式編譯。
;-)
來自: medium.com本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!