如何評價 Ken Thompson 在 C 編譯器里植入了後門這件事?

Sina Visitor System
以下引用自微博:
「據說當年 Ken Thompson 走到任何一台 UNIX 機器,都能用自己的用戶名密碼登錄。後來其它人去掉了 UNIX 內核的後門,又有人重寫了編譯器,均不管用。後來 Ken Thompson 揭秘,後門在世界上第一個 C 語言編譯器里,之後所有的 C 程序都受影響。他之後發了篇論文:ACM Classic: Reflections on Trusting Trust via @愛開源魅影」
這算事情是真的么,如果是真的,如何評價?


Partly true.

Ken Thompson 的確做了這件事,但是並非在「第一個 C 語言編譯器」,更沒有誇張到「任何一台 UNIX 機器」的程度。一個 demo 、 proof of concept 而已。這個鏈接指向的文章也不是什麼論文,而是 Ken 因為 UNIX 獲得圖靈獎後的演講時提出的。

怎麼評價?

人家就是牛啊!

這件事情從現在挺火的「可信計算」角度來說是很有意義的。到底怎麼樣算是安全可信呢?閉源不可信,那開源就可信了么?工具鏈可信了么?底層操作系統、甚至硬體可信了么?

參見這個:https://bojieli.com/2014/11/insert-backdoor-into-compiler/
(感謝 USTC 李博傑同學的好文章!)


Ken那個很老,貼個最近的:
PoC||GTFO是最近幾年深受0ld sch00l黑客喜愛的電子雜誌,最近的一期(第8期)里
有一篇名為Deniable Backdoors Using Compiler
Bugs(利用編譯器Bug的可抵賴後門)的文章,作者向我們展示了一種可能的威脅,這個威脅模型是需要兩個條件:1)一個可利用的編譯器
miscompilation bug; 2) 向目標的開源社區提交看起來不怎麼像後門的patch。作者修改了Sudo 1.8.13的少量代碼去利用Clang/LLVM 3.3的一個bug,最終導致提權。相比傳統的編譯器後門和傳統軟體後門(比如疑似NSA對Linux內核代碼的植入),這種方式更加的隱蔽,因為它是針對特定版本的編譯器下手。

作者也對自由軟體社區的不同角色給出了對於這種後門植入的防禦性建議:

編譯器開發者

  • * 優先修復miscompilation bugs
  • * 考慮miscompilation bug針對維護版本的backport修復
  • * 使用fuzz工具(文章中提到了Csmith和afl)

開源包的維護人員

  • * 謹慎的接收代碼提交
  • * 考慮重新實現一些patch

GNU/Linux發行版打包人員

  • * 評估編譯器的可靠性
  • * 在所有的平台上測試編譯的程序後再進行部署
  • * 對系統編譯器進行"trusting trust"測試

終端用戶

  • * 使用不同的編譯器或者編譯器版本對源代碼進行重新編譯
  • * 對預編譯的程序進行你自己定製的測試(比如針對某些程序功能的回歸測試)

研究人員

  • * 開發可被證明對這種利用方式免疫的編譯器
  • * 開發可檢測miscompilation的驗證模式
  • * 開發可檢測後門執行的多版本編程系統

這叫跪舔,偷人家admin許可權這種事情很多人都干過,但大部分都是會被罵的。


推薦閱讀:

有沒有什麼好的C++視頻教程?
《The C++ Programming Language》這本書真的適合初學者嗎?

TAG:信息技術IT | C編程語言 | 信息安全 | Unix | 編譯器 |