從運作中的機群出貨,但不洩露其秘密
運送
我們的套件源自驅動我們自家機群的程式碼,其設定檔中存有 API 金鑰、權杖、信箱密碼與帳號 ID。若套件洩露其中一項,將比沒有套件更糟,因此在三台機器上的三個掃描器都未發現任何問題之前,不會進行打包。
納入內容
打包程式僅複製套件清單(manifest)中指定的檔案,絕不複製整個資料夾,並排除快取、備份與版本控制歷史。範例與測試使用虛構的產品與數據,絕不使用我們的真實資料。
掃描流程
- 在建置機器上:搜尋暫存檔案中是否含有機群秘密的實際值(上次建置時為 132 個),以及來自我們工作站的 16,259 個秘密字串的 SHA-256 指紋。僅傳輸指紋;工作站的秘密絕不離開該機器。
- 在另外兩台機器上:將相同的檔案傳送至每台機器,並針對該機器持有的秘密進行搜尋(分別為 498 與 129 個值),然後刪除檔案。
- 在所有地方:檢查金鑰格式、私人位址與個人資料的模式。
- 在任何結果生效之前:每個掃描器必須先在植入的誘餌(canaries)上執行,並必須找出全部誘餌(每次執行 23 個),否則建置將停止。
一旦發現問題,建置即停止。某個版本一旦售出,便永不重建:修正將以新版本出貨,因此買家下載的檔案就是經過掃描的那個檔案。
教會我們最多的誤報
- 一則以「Each pass ends with」開頭的註解被標記為 Gmail 應用程式密碼。這類密碼由四組四個字母組成,而那句話也是。我們改寫了該註解。
- 共用位址範圍 100.64.0.0/10(由電信級 NAT 與 Tailscale 使用)被標記為私人位址。
- 類似
[email protected]的 systemd 單元名稱看起來像電子郵件地址,而類似9NXXXXXXXXXX的佔位商店 ID 看起來像真實產品。
我們改寫了該註解;其餘三個誤報僅針對該特定套件與該特定模式被允許,絕非全域允許,因此下一個套件仍會像第一個套件一樣嚴格掃描。誤報只損失一分鐘,而漏掉一個金鑰的代價則高得多。
每個在售套件都經過此流程,且在每次發布時均為零發現。