跳到內容
Crystal CodeDocs
繁繁體中文

安全

每個模型產生的工具呼叫都會被分類,然後由實作 Crystal.Tools.ToolInvocationPolicy 的 ApprovalPolicy 決定。副作用不會繞過該執行器被呼叫。

風險值是 read、write、privileged 和 forbidden。權限值是 workspace、outside_workspace、network 和 privileged_escalation。

呼叫只有在以下全部成立時才無需審查即放行:

  • 分類不要求提示;
  • 風險不是 Forbidden 或 Privileged;
  • 權限是 Workspace;
  • 並且工具在自動工具集中,或風險是 Read,或風險是 Write 且核准模式允許該寫入。

寫入自動放行因模式而異。Full 允許通過了上述檢查的任何 Workspace 寫入,包括保持 Write + Workspace 的已載入外部工具。Edit 和 Review 只允許內建 write 和 edit。Default 不自動放行寫入。Bash、bash_start 和 bash_stop 只在 Full 中自動放行,且僅當它們被分類為 Workspace 寫入時(網路、特權或禁止的命令不會)。

Forbidden 和 Privileged 從不完全自動放行。工作區外和網路權限從不完全自動放行。分類不允許可複用授權時,該授權也會被跳過。Review 可以允許一次呼叫,但 Forbidden 分類或必需的提示仍會回退到你。審查者對 Forbidden 的 Allow 不會執行。

未知工具名稱,包括沒有任何外掛分類器認領的名稱,是 Privileged,權限為 PrivilegedEscalation,摘要為 Unknown tool。

路徑在任一片段是 .ssh 或 .gnupg(不區分大小寫),或 .crystal 片段緊接著 credentials.json 時,是憑證路徑。檢查前會展開 ~。檢查在參數上執行,並再次在解析後的完整路徑上執行。

這些路徑對 read、list、tree、glob、grep、search、describe_image、view_image、write 和 edit 分類為 Forbidden / PrivilegedEscalation。目錄遍歷跳過解析目標是憑證路徑的檔案。工作階段目錄規則不能授予憑證路徑。匯出拒絕它。

缺失或無法解析的路徑參數不會變成 Forbidden。無法讀取的必需 path 分類為工作區讀取。路徑無法解析的寫入或編輯分類為工作區寫入。工作區無法規範化的路徑同樣如此。規範化後位於可存取工作階段目錄之外的路徑是帶 OutsideWorkspace 的 Read 或 Write,不會自動放行。

bash 和 bash_start 使用同一個命令分類器。匹配不區分大小寫。超過一秒的匹配視為命中,因此逾時會失敗關閉。

類別 模式(簡化) 風險 權限
Forbidden \bsudo\b forbidden privileged_escalation
Forbidden 同時帶遞迴和強制旗標、目標為 /、~、$HOME 或 ${HOME} 的 rm forbidden privileged_escalation
Forbidden 輸出管道到 sh 或 bash 的 curl 或 wget forbidden privileged_escalation
Forbidden 帶 -f 或 --force 的 git push forbidden privileged_escalation
Forbidden 命令文字中的 .ssh、.gnupg 或 .crystal/credentials.json 路徑 forbidden privileged_escalation
Privileged chmod 777、chown、mkfs、dd 、kill -9、shutdown、reboot privileged privileged_escalation
Network 尚未被禁止時的 curl、wget、ssh、scp、nc、nmap write network
Other 任何其他非空命令 write workspace

先測試 Forbidden,然後是特權,然後是網路。什麼都不匹配、或無法從參數讀取的命令,是名為 Workspace shell command 的工作區寫入。

bash_status 和 bash_logs 是工作區讀取(Read background shell task)。bash_stop 是工作區寫入(Stop background shell task),不會根據命令字串重新分類。

  • 不允許離開根目錄的工作區工具會拒絕離開它的路徑。可讀工具可以解析外部路徑,然後把它分類為 OutsideWorkspace。
  • 寫入或編輯唯讀工作階段目錄會在分類之前被拒絕。模型看到:Writing to a read-only session directory is not allowed. Change its access with /access.
  • 在 Plan 中,edit、write、bash、bash_start 和 bash_stop 在分類之前被拒絕:Plan mode does not allow <name>.
  • 外掛鉤子可以提高核准風險。它們不能降低它。原始鉤子不受該限制,並在載入時被點名。見外掛。
  • 執行時文字是純英文。例外、日誌或介面裝飾中沒有表情符號。
  • 秘密不得出現在原始碼、日誌、診斷或提交中。credentials.json 在 Unix 上是擁有者讀寫(0600)。Windows 不改變檔案 ACL。