Linux

如何從頭編譯 C 編譯器,然後從頭編譯 Unix/Linux

  • December 9, 2015

假設我在美國/英國以外的一家大型服務機構工作。我們廣泛使用 UNIX 和 Linux 伺服器。

通讀這篇文章,它提到在 C 編譯器中插入後門很容易,然後使用該編譯器編譯的任何程式碼也將包含後門。現在鑑於最近有關 NSA/GCHQ 授權在所有加密方法、硬體和軟體中放置後門/弱點的洩漏,編譯器現在是一個關鍵的故障點。可能所有標準的 UNIX/Linix 發行版都可能受到損害。我們不能讓我們的系統、數據和我們的客戶數據受到流氓政府的損害。

有了這些資訊,我想從頭開始建構一個受信任的編譯器,然後我有一個安全的基礎可以建構,這樣我就可以使用該編譯器從原始碼建構作業系統和應用程序。

問題

從原始碼編譯編譯器(看似雞蛋的場景)然後從頭開始編譯受信任的 Unix/Linux 發行版的正確(和安全的方法)是什麼?

您可以假設我或其他人有能力閱讀和理解原始碼的安全漏洞,因此在編譯之前將首先審查原始碼。我真正追求的是一份工作指南,可以安全地從頭開始生成此編譯器,並可用於編譯核心、作業系統的其他部分和應用程序。

如果我們要對作業系統或在該堆棧上執行的應用程序有任何信心,安全堆棧必須從基礎級別開始。是的,我知道可能存在硬體後門,它們可能會在編譯器正在建構時將一些微程式碼插入到編譯器中。目前我們對此無能為力,除非可能使用非美國設計的晶片。讓我們先對這一層進行排序,並假設我可以在插入任何後門之前在一台舊電腦上建構它。

正如 Bruce Schneier 所說:“我對工程師說:我們建立了網際網路,我們中的一些人幫助顛覆了它。現在,我們這些熱愛自由的人必須修復它。”

額外連結:

AFAIK 完全確定安全性的唯一方法是用彙編語言編寫編譯器(或自己直接修改磁碟)。只有這樣,您才能確保您的編譯器沒有插入後門 - 這很有效,因為您實際上完全消除了編譯器。

從那裡,您可以使用從頭開始的編譯器來引導例如 GNU 工具鏈。然後,您可以使用您的自定義工具鏈來編譯Linux From Scratch系統。

請注意,為了讓您自己更輕鬆,您可以使用第二個中間編譯器,用 C(或任何其他語言)編寫。因此,您將在彙編中編寫編譯器 A,然後在 C/C++/Python/Brainfuck/whatever 中重寫該編譯器以獲得編譯器 B,您將使用編譯器 A 進行編譯。然後您將使用編譯器 B 來編譯 gcc 和朋友。

引用自:https://unix.stackexchange.com/questions/89897