判斷框|適合:已經有 Codex Security 發現流程,並需要把復現、補丁、獨立復測和證據歸檔串起來的團隊。不適合:還沒有明確程式庫、測試入口和人工批准責任,卻想先複製完整 Defense Factory 的團隊;先跑通一條高頻工作流,比先堆出大規模平台更容易驗收。

這篇適合需要為 Codex Security 發現建立動態復現與補丁驗證環境的平台工程師;也適合負責限制 Agent 憑證、網路出口和寫入權限的安全團隊。若您還要驗證 iOS、macOS 或跨平台專案,文中的雲端 Mac 分流設計可直接納入 DevSecOps 資源規劃。

最後更新於 2026 年 9 月 4 日;產品狀態、流程與權限邊界已按 OpenAI Defense Factory 官方頁面、Daybreak 公告及 Codex Security 官方文件核對。

先選一條補丁驗證工作流,不要複製整座工廠

OpenAI Defense Factory 補丁驗證環境的第一個決策,不是要準備多少 Agent,而是選出一條可以反覆執行的最小流程。我們建議先限定為單一程式庫、單類發現和可逆補丁,依序完成:

候選發現 → 已重現漏洞 → 待審補丁 → 已驗證修復。

這四個狀態不能混用。候選發現只代表工具或 Agent 指出可疑位置;已重現漏洞必須有實際執行條件和輸出;待審補丁代表修改已產生但尚未獲得獨立驗證;已驗證修復則還要包含新的環境、測試結果及人工批准證據。OpenAI 對 Defense Factory 的公開說明也把隔離、可重現、臨時建立與任務後銷毀放在流程核心,而不是把掃描結果直接等同於修復完成。OpenAI Defense Factory 官方架構說明

部署前先寫一頁工作流契約,至少列出:

  • 固定的程式碼提交或版本識別。
  • 依賴清單與服務設定的來源。
  • 可執行的建置、啟動和安全測試入口。
  • 每個狀態的升級條件與人工批准人。
  • 失敗時回退至哪一個狀態,以及誰可以重試。

Codex Security 的角色是協助發現和分析,業務工單系統負責流轉與責任分派,執行環境則負責建置和測試。三者如果被塞進同一個 Agent 工作區,之後很難判斷「發現不成立」究竟是漏洞不存在,還是環境根本沒有成功啟動。

第一階段:把控制面和執行面拆開

第一小時應先畫出兩條平面,而不是急著寫 Agent 指令。

控制面負責調度、策略、臨時身份、憑證代理、狀態轉換和人工批准;執行面則使用獨立、可銷毀的環境執行程式碼。控制面不應直接取得工作區內的完整長期憑證,執行面也不應擁有建立新身份或修改驗證政策的權限。

我們通常會把權限切成以下幾組:

執行資源 建議責任 預設寫入權限 部署評分(非性能測試)
原始碼庫 讀取固定提交、提交補丁候選 禁止直接合併 ★★★★☆
制品庫 取得必要依賴、上傳隔離測試制品 僅限臨時命名空間 ★★★★☆
工單系統 讀取任務、回寫驗證證據 建立或關閉需批准 ★★★☆☆
通用執行池 一般建置、測試和動態復現 工作區內可寫、任務後銷毀 ★★★★☆
隔離雲端 Mac Xcode、Apple SDK、簽名和打包驗證 僅限任務範圍 ★★★☆☆

表中的評分是我們對治理清晰度、回退難度和污染風險的部署判斷,不是硬體效能或產品承諾。GitHub 官方對以 OIDC 取得雲端短期身份的說明,可作為「工作流不保存長期密鑰」的權限設計參考;但實際政策仍須由團隊按自己的身份系統落地。GitHub OIDC 權限說明

通用執行池和雲端 Mac 池要使用不同調度標籤、不同身份和不同網路政策。只有涉及 Xcode、macOS、Apple SDK、簽名或平台專屬打包的任務,才允許進入 Mac 池;不要因為程式庫最終要交付到 Apple 平台,就把所有靜態分析和一般測試都送進 Mac。

注意:隔離環境不是絕對安全邊界。若控制面仍能把完整憑證、未審核指令和任意網路出口交給 Agent,工作區即使獨立,也只是把風險換了一個位置。

第二階段:先證明環境正常,再載入漏洞候選

首次執行要從鎖定提交重建,而不是複製開發者日常工作區。至少要把以下項目作為環境輸入保存:

  1. 程式碼提交識別與分支策略。
  2. 依賴檔案、鎖定檔和解析結果。
  3. 基礎映像或環境模板版本。
  4. 服務設定、必要的測試資料和啟動方式。
  5. 建置命令、測試命令與預期輸出。

先執行正常建置和健康檢查,再匯入 Codex Security 的候選發現。若應用程式在基線階段已因依賴缺失、服務沒有啟動或設定錯誤而失敗,就不能把後續復現失敗標成「漏洞不存在」。

每次初始化都要留下結果分類,例如「建置失敗」、「服務未就緒」、「測試入口錯誤」、「權限不足」或「基線通過」。這些不是行政欄位,而是下一次重跑時判斷環境是否可比較的依據。Codex Security 的官方文件應作為產品入口、使用方式與目前支援範圍的優先核對來源,不應用社群貼文補足未確認的產品能力。Codex Security 官方文件

第三階段:動態復現只保存必要證據

Agent 可以讀取授權範圍內的程式碼,也可以在臨時隔離環境中執行指定測試;但建立工單、修改主程式庫、推送制品或存取外部系統,應由獨立政策和人工批准控制。

一份可重現證據至少要能回答四件事:

  • 哪一個版本受到影響?
  • 在什麼環境設定和前置條件下觸發?
  • 執行了哪個測試入口,產生什麼輸出?
  • 另一位操作者能否從保存狀態重建相同結果?

靜態程式碼追蹤可以指出資料流或可疑路徑,但不能單獨代替動態驗證。若服務無法啟動、測試資料不完整或結果不穩定,狀態應保留為「不確定」,不要為了提高閉環率而強行升級成已確認漏洞。OpenAI 公開的 Codex System Card 可作為理解安全評估和限制條件的背景資料,但不能被解讀成普通團隊一定能得到相同結果的效率保證。Codex System Card

證據檔案應與執行工作區分離保存。工作區可以銷毀,審計紀錄則保留提交識別、環境版本、命令、輸出摘要、權限事件、人工判斷和補丁雜湊;不要把長期憑證、無關的個人資料或不必要的完整敏感原始碼一併搬進審計存儲。

FAQ:把常見部署疑問放回正確邊界

Defense Factory 是否要為每個 Agent 建立獨立環境?

不需要按 Agent 永久分配一台伺服器或一套工作區。較好的隔離單位是「任務」:控制面按身份、網路出口、程式庫和工具需求建立臨時執行環境,任務完成便撤銷身份並銷毀工作區。只有權限邊界或工具鏈確實不同時,才需要拆分執行池。

Codex Security 發現漏洞後,怎樣保存才方便重現?

保存受影響提交、依賴鎖定結果、設定版本、測試入口、執行輸出和失敗分類,並記錄人工確認的狀態。若只能看到靜態可疑路徑,卻沒有在可啟動應用中得到執行證據,應保存為「不確定」,不能直接寫成漏洞已確認。

安全 Agent 生成的補丁為何要交給另一個環境復測?

同一個工作階段可能保留修改後的檔案、編譯快取或原有上下文,令結果看起來比實際可靠。獨立環境能重新取得提交、解析依賴、建置程式,再執行安全測試和正常功能回歸;因此補丁產生者不能直接替自己簽發通過結論。

iOS、macOS 補丁驗證是否一定要用真實 Mac?

不是所有檢查都需要。一般語言層測試可以留在通用池;但若涉及 Xcode、Apple SDK、簽名、打包或平台執行行為,就應在隔離雲端 Mac 驗證。Apple 的 Xcode Command Line Tools 文件和 Mac 簽名文件,應作為工具鏈與簽名步驟的官方核對依據。Apple Xcode Command Line Tools 文件/Apple Mac 簽名文件

臨時環境銷毀後,哪些日誌仍要留下?

至少保留環境模板、程式碼提交、依賴解析、測試命令和輸出、身份授予與撤銷、人工批准、補丁雜湊、重跑結果和銷毀確認。不要保存可重用的秘密。日誌的目的,是讓團隊在不恢復整個工作區的前提下重新判斷一次驗證是否成立。

第四階段:補丁產生與獨立復測分成兩條狀態線

補丁 Agent 的工作只到「產生待審修改」為止。新的任務必須取得乾淨提交,在新建環境中重新建置,先跑安全測試,再跑正常功能回歸。測試通過也不代表可以直接合併:合併、部署和線上復核應各自設置人工門禁。

這裡最容易被忽略的是「工單已關閉」與「修復已部署」不是同一件事。工單可以記錄驗證結果,但不能代替部署版本識別、發佈紀錄和線上復核證據。若補丁只在開發分支通過,狀態應停在已驗證修復候選,而不是宣稱生產環境已修復。

涉及 iOS 或 macOS 時,將流程拆成兩段更穩妥:

  • 通用池:依賴解析、靜態檢查、一般測試和與平台無關的動態驗證。
  • 隔離雲端 Mac:Xcode 建置、Apple SDK 相容性、簽名、打包和平台專屬回歸。

不要把 Mac 池當成所有安全任務的預設目的地。Mac 資源應由調度標籤明確限制,並採用與通用池不同的短期身份。自託管 Runner 的隔離與清理責任,也可參考官方 Runner 文件中對環境維護和工作執行邊界的說明。自託管 Runner 官方文件

第五階段:用可勾選清單完成銷毀與恢復驗收

第一週不要只觀察成功率,應安排失敗重跑、任務中斷和環境重建演練。下面這份清單可直接交給平台工程師、安全團隊和專案負責人共同驗收:

  • [ ] 已把控制面與執行面分成不同身份、網路政策和權限邊界。
  • [ ] 每項任務都能從鎖定提交、依賴清單和環境模板重新建立。
  • [ ] 基線建置與健康檢查在漏洞候選載入前已完成。
  • [ ] Codex Security 的候選發現、已重現漏洞、待審補丁和已驗證修復沒有混成同一狀態。
  • [ ] Agent 沒有個人長期令牌,外部寫入和工單關閉需要獨立批准。
  • [ ] 補丁產生工作階段不能替自己的結果簽發通過結論。
  • [ ] 涉及 Xcode、簽名或 Apple 工具鏈的任務會被分流到隔離雲端 Mac。
  • [ ] 執行輸出、權限事件、人工批准和補丁雜湊已移到工作區之外。
  • [ ] 任務結束後已撤銷臨時身份、刪除工作區並記錄銷毀結果。
  • [ ] 任務中斷後能從已保存狀態安全恢復,而不是依賴原本的臨時檔案。
  • [ ] 合併、部署與線上復核各有獨立證據和停止條件。

驗收時若任何一項回答是否定,回退動作不是增加更多 Agent,而是縮小工作流範圍。例如先退回「已重現漏洞」,修正環境模板或測試入口,再重新跑基線。只有在恢復流程穩定後,才考慮把更多程式庫或發現類型加入池中。

以任務生命週期決定通用池與雲端 Mac 池

容量規劃應從環境啟動時間、任務占用時長、峰值並發、失敗重跑比例和 Mac 專屬任務比例取得,而不是先假設每個 Agent 都需要固定資源。短時間、可平行的一般驗證,適合放進彈性通用池;需要 Apple 工具鏈但並非持續發生的工作,適合按任務調度雲端 Mac;長期穩定、重負載且必須持有實體介面的團隊,則應另行評估自購設備或專用環境。

雲端 Mac 的價值不在於把所有工作搬到 Mac,而在於讓 Xcode 和 Apple 平台依賴成為可標記、可隔離、可銷毀的少數步驟。若沒有明確的 Mac 任務清單,直接長期保留一批閒置主機,反而會增加身份管理、修補、磁碟清理和環境漂移成本。

對多數試點團隊而言,建議先建立三種調度結果:

  • 通用彈性池:承接與 Apple 工具鏈無關的建置、測試和復現。
  • Mac 峰值池:只承接 Xcode、簽名、打包及平台專屬回歸。
  • 臨時獨占環境:處理需要特別網路出口、特殊依賴或高敏感原始碼的任務,完成後立即銷毀。

這種分流比「每個 Agent 一套固定環境」更容易控制污染範圍,也更符合 OpenAI 公開 Defense Factory 架構所強調的逐步擴展方向;官方參考架構不是所有團隊都必須照抄的強制實施規範。OpenAI Daybreak 公告

若目前方案是把安全 Agent 放在開發者工作站,常見缺點是長期憑證容易殘留、工作區狀態難以重建,還會把個人日常工具與高風險驗證混在一起;若改用沒有 Apple 工具鏈的通用雲端主機,則會在 Xcode、簽名和平台回歸階段再次卡住。對需要短期隔離、彈性並發和真實 Mac 工具鏈的團隊,先整理任務清單,再評估由 zekmac 提供的雲端 Mac 租用環境,通常比長期閒置設備更容易配合這種按任務建立、完成後銷毀的流程。若驗證工作是全年穩定的重負載,或必須連接特定實體裝置,則仍應把自購 Mac 或專用機房列入比較,而不是勉強採用租用模式。

常見問題

Defense Factory 要不要替每個 Agent 都準備一套獨立環境?

不必按 Agent 身分永久配置環境。較穩妥的做法是按任務建立可銷毀的執行工作區,讓控制面集中處理策略與臨時身份;只有需要不同權限、不同網路出口或不同工具鏈的任務,才拆成獨立執行池。

Codex Security 找到疑似漏洞後,哪些資料才足以保存成可重現證據?

至少要保存受影響提交、依賴清單、服務設定、測試入口、執行輸出、失敗分類與人工判定。靜態追蹤只能說明可疑路徑,不能單獨證明漏洞已在可執行環境中重現;無法重跑的結果應標示為不確定。

安全 Agent 自己產生的補丁為什麼不能自己宣布驗證通過?

因為產生補丁的工作階段掌握原有上下文,可能把未完成的修改、快取或環境殘留誤當成修復證據。新工作階段應在全新環境重新建置,執行安全測試與正常功能回歸,再由人工門禁決定是否合併。

iOS 或 macOS 補丁驗證是否一定要用真實 Mac?

若驗證涉及 Xcode、Apple SDK、簽名、打包或平台專屬行為,應把關鍵階段放到隔離的雲端 Mac;純粹的語言層測試和一般伺服器端檢查則可留在通用執行池。是否需要真實 Mac,取決於驗證項目而非專案名稱。

臨時補丁驗證環境結束後,哪些日誌不能跟著工作區一起刪除?

應移出工作區保存提交識別、環境模板版本、依賴解析結果、測試命令、輸出與錯誤、權限授予及撤銷紀錄、人工批准、補丁雜湊與銷毀結果。憑證內容、未授權的敏感原始碼和不必要的個人資料則不應放進審計存儲。

zekmac M4 遠端節點

以 zekmac 建立穩定的補丁驗證環境

透過 zekmac 遠端 Mac,快速分流需要真實 macOS 環境的補丁驗證與回歸測試工作。