安全審計
尋找違反實際信任邊界的漏洞,然後提供給擁有者來源證據、安全重現方式、優先級以及最小有效修復方案。這是一個防禦性、以來源為優先的工作流程。沒有具體受影響主體、資源或安全結果的候選項目不算是已確認的發現。
操作模式
此技能預設為指導模式。載入此技能不代表授權執行完整的審計工作流程或建立檔案。
- 指導模式:針對安全問題、聚焦審查、方法論、分類調查或特定發現的調查,僅使用此技能的相關部分。不要自動執行全部六個階段、建立輸出目錄或寫入審計產出。必要時可啟動聚焦代理;它們會將結果返回目前任務。
- 完整審計模式:當使用者明確要求審計或滲透測試程式碼庫、要求完整全面或端到端的安全審查,或要求報告產出時,才使用完整工作流程。執行全部六個階段並寫入下方定義的檔案。
如果請求可能對應兩種模式中的任一種,在建立檔案或開始完整工作流程前,先提出一個聚焦問題。
平台術語
此技能為代理中立:
- 父代:協調執行並擁有共享狀態的代理。
- 任務工具:平台的委派或子代理機制。
research代理:用於聚焦來源探索和事實驗證的委派代理。general代理:用於廣泛調查和有限本地執行的委派代理。subagent_type:標題中的名稱指定哪個委派代理角色執行該工作。
使用等效的平台功能,同時保持角色、寫入隔離、提示和獨立性的邊界。
通用執行安全
這些規則在兩種操作模式中都適用。來源檢查為唯讀。僅在作業系統強制限制的沙箱中執行目標控制的建置、測試、程序、瀏覽器、模擬器、模糊測試器和固定測試處理,且沙箱必須提供以下所有控制:
- 無外部網路;僅當檢查需要本地用戶端/伺服器流量時,才使用隔離的回環命名空間;
- 空的環境,由明確的允許清單填入安全值,包括沙箱本地的
HOME、暫存目錄和快取; - 唯讀的目標和工具鏈,目標控制的程序僅能寫入其指定的
scratch/目錄;以及 - 明確的 CPU、記憶體、程序、檔案大小、磁碟和牆壁時間限制。
在目標控制程序之外的代理,可在指定的 scratch/ 目錄中建立可拋棄的來源副本,當建置必須在來源旁寫入時。在指導模式下,不保留目標控制的檔案。在完整審計模式下,僅信任的父代端程式碼可根據寫入隔離程序,將最少量的非機密結果提升至保留的 artifacts/。絕不將保留的輸出目錄(代理自身指定的 scratch/ 除外)、其他代理的目錄、主機家目錄、憑證、通訊端或共享服務暴露給目標程式碼。不安裝依賴項或讓建置過程擷取它們。僅使用已在本地可用的工具和依賴項。如果無法強制執行所有控制,則不要執行目標程式碼:回報缺少的沙箱功能為需要驗證的阻擋項目,並提供安全的驗證計畫。
使用虛擬主體、固定測試和機密。不要探測已部署的端點、外部服務、共享基礎設施、生產身分、其他用戶的資料或即時控制平面。不要測試即時或共享程序的可用性、發布產出、修改發行版本、花費付費 API 配額,或超出建立缺陷所需的最小本地影響範圍。如果決定性的事實不在來源或沙箱固定測試中,則將其報告為需要驗證。
完整審計設定
在完整審計模式下,在偵察前解析這些值:
- 技能目錄:包含此
SKILL.md的絕對目錄。 - 目標:正在審查的儲存庫絕對根目錄。
- 儲存庫名稱:從目錄或本地 Git 遠端獲得的穩定儲存庫識別碼。
- 輸出目錄:目標之外的新可寫入目錄,預設為
~/security-audit-skill/<repo-name>/run-<N>,其中<N>是下一個未使用的整數。僅當使用者明確選擇且父代驗證版本控制忽略整個目錄時,才使用目標內的目錄。否則停止並請求外部路徑。 - 來源參考:審查的提交以及工作樹是否為髒狀態。不要將未審查的生成或修改檔案視為另一個版本。
寫入隔離
父代建立共享執行檔案且是唯一的寫入者:
run-metadata.jsonarchitecture.mdcoverage-ledger.jsonfindings.jsonREPORT.mdFINDINGS-DETAIL.mdNEEDS-VALIDATION.md
每個獵人或驗證者都會在 <output-dir>/agents/<agent-id>/ 下收到唯一的根目錄,並有各自的 scratch/ 和 artifacts/ 目錄。規範代理 ID 符合 ^[a-z0-9][a-z0-9_-]{0,63}$ 且不得等於 Windows 裝置名稱,例如 con、prn、aux、nul、com1 到 com9 或 lpt1 到 lpt9。小寫 ID 可防止大小寫衝突。代理和每個目標控制的程序僅可寫入 scratch/;保留的 artifacts/ 由父代擁有,絕不暴露給沙箱,僅可由受信任的父端提升程式碼寫入。代理不得更改共享檔案、目標來源、保留的產出或其他代理的目錄。不要使用 /tmp 或主機家目錄作為可寫入的備用方案。
在執行前,父代開啟並保留代理的 scratch/ 和 artifacts/ 根目錄的受信任、不可繼承的目錄描述符,並記錄預期的 scratch 相對產出檔案允許清單以及明確的每個檔案和累計位元組限制。絕不將這些描述符傳遞給代理或沙箱。當沙箱及其所有程序終止後,受信任的父端程式碼分別提升每個允許清單中的檔案:
- 驗證已宣告的相對路徑:拒絕絕對、空白、
.、..或符號連結元件。 - 從保留的 scratch 根描述符以無跟隨的目錄相對操作遍歷每個父元件;絕不透過路徑重新開啟。
- 以無跟隨和非阻塞方式開啟葉節點。
- 使用
fstat驗證它是一個常規檔案,連結計數正好為一,且不超過記錄的每個檔案和累計位元組限制。 - 在從該描述符讀取時再次強制執行這些限制。
- 複製正好驗證的大小,重複
fstat,並拒絕變更的身分、類型、連結計數或大小。 - 對於目標,從保留的 artifacts 根描述符以無跟隨的目錄相對操作遍歷每個父元件;要求每個現有元件為真實目錄,並在重新開啟和驗證其無跟隨之前,獨佔建立任何缺少的目錄。
- 在不跟隨連結的情況下獨佔建立葉節點,驗證開啟的目標是連結計數正好為一的常規檔案,並從驗證的來源描述符複製,而不重新開啟任一路徑。
- 在非 POSIX 系統上使用等效的競爭安全 API。
- 絕不遞迴複製或 glob scratch、將壓縮檔解壓縮到 artifacts、或開啟或提升符號連結、FIFO、通訊端、裝置、目錄、硬連結檔案、正在變更的檔案或超過其限制的檔案。
- 如果任何檢查不可用、無法強制執行或失敗,則丟棄 scratch 條目;如果是決定性證據,則保留 `needs_v