Debian

Debian 軟體包的真實性如何保證?

  • September 14, 2020

有哪些安全系統和流程可以防止惡意第三方入侵/損害 Debian 鏡像中程式碼的安全性,或者驗證我們獲得的軟體包是否確實是維護者認為的那些?

驗證包

鏡像的內容直接或間接使用 PGP 密鑰進行簽名。從 Debian 發行版的“根”開始:

  • Release,使用 中的分離簽名進行簽名Release.gpg,包含所有包索引和安裝程序雜湊的雜湊(MD5、SHA1、SHA256)(InRelease現在將兩者結合起來);
  • 包索引(例如, binary-amd64)包含包的雜湊值(MD5 和 SHA256)。

雜湊和簽名由工具檢查,例如apt-get使用儲存在系統上的 PGP 密鑰(由 管理apt-key)。因此,只要接收系統是健全的,預設情況下,如果沒有通過存檔 PGP 密鑰(間接)簽名,則無法從 Debian 存檔中安裝任何軟體包。如果鏡像上的任何入侵者無法控制相關的 PGP 密鑰,他們將無法替換二進製文件。

控製鏡子

這意味著破壞檔案並不足以真正破壞最終使用者系統;您還需要破壞那些系統已經信任的 PGP 密鑰。(由此推論,向 Debian 系統添加密鑰並不是一件容易的事。)這在一定程度上解決了您的第一個問題,因為存檔的安全性並不那麼重要。然而,關鍵系統(簽名發生的地方)受到嚴格的監控和監督,很少有人可以訪問它們。

維護者的期望

確保這些包“實際上是維護者認為的那些”需要更多的參與。這是包採用的路徑:

  • 軟體包由維護者準備,並使用 Debian 密鑰環中的密鑰簽​​名(屬於上傳的 Debian 開發人員或 Debian 維護者的密鑰,上傳到 Debian 密鑰環伺服器並由密鑰環維護團隊合併);
  • 簽名的包被上傳到存檔,在那裡它被驗證(除其他外,使用的密鑰必須在目前的密鑰環中並且不能過期,簽名必須是有效的,如果包是由 DM 簽名的,那DM必須有包的相關權限);
  • 任何上傳的二進製文件都按原樣推送到最終存檔(我在這裡簡化了一點,但這就是效果);
  • 任何失去的二進製文件都由 buildd 建構並由buildd的 PGP 密鑰簽名,然後推送到最終存檔(它知道哪些 buildd 密鑰是有效的,並根據這些文件驗證文件);
  • 所有這些更新最終都被推送到鏡像網路,並帶有適當的索引更新(如上所述簽名)。

如果維護者將二進製文件與包源一起上傳,這些文件最終會被提供(暫時)。由於上傳二進製文件現在是可選的,跳過它們越來越普遍,最終上傳的二進製文件將被丟棄。(在 Ubuntu 中一直如此。)其他二進製文件是否符合維護者的期望取決於建構的網路;因此,建構也是關鍵系統,受到密切監督,幾乎沒有人進入。由於所有工件都已簽名,因此始終可以驗證文件的完整性:首先針對維護者的密鑰,然後針對建構的密鑰,最後針對存檔的密鑰。

鏡像上沒有原始簽名,任何 DD 都可以上傳失去的二進製文件。但是,從 Debian 11 開始,檔案中的所有新二進製文件都來自建構守護程序;DD 上傳的二進製文件只能從不穩定的、實驗性的或 backports 儲存庫中獲得。可以從debian-devel-changes檔案中檢索原始簽名。

總之,雖然目前系統並不完美,但它確實為您可以從鏡像下載的所有文件提供了可追溯性。有許多努力可以改善這種情況:可重現的建構(這將允許獨立驗證二進製文件與已發布源的對應關係),刪除維護者提供的二進製文件……

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