以自主代理守護我們的程式碼庫安全

Travis McPeak產品

在過去九個月裡,我們的 PR 速度提升了 5 倍。基於靜態分析或僵化程式碼責任歸屬的安全工具仍然有幫助,但在這樣的規模下仍不足夠。我們透過使用 Cursor Automations 來因應,這讓我們得以快速打造出一批安全代理,持續在程式碼庫中識別並修復漏洞。

安全代理每週審查超過 3,000 個內部 PR,找出 200 多個漏洞安全代理每週審查超過 3,000 個內部 PR,找出 200 多個漏洞

今天,我們推出四個新的自動化範本,完整公開我們認為最有幫助的安全代理藍圖。其他安全團隊可以自訂這些範本,打造能自動解決各類安全議題的代理。

自動化架構

若要讓代理在安全領域發揮實際作用,它們需要具備兩項功能,而 Cursor Automations 同時提供了這兩者。

第一項是開箱即用的整合能力,可用於接收 webhook、回應 GitHub 拉取請求,以及監控程式碼庫變更。這讓在背景中運作的代理能夠知道何時該介入並採取行動。

第二項是完善的代理執行框架與環境。Automations 由雲端代理驅動,因此具備雲端代理可存取的所有工具、技能與可觀測性。

為了讓 automations 更適用於安全相關的特定使用情境,我們建置了一個安全 MCP 工具,並將其部署為無伺服器 Lambda 函式,在需要時即時提供,平時則不會持續執行。

這個 MCP,其參考程式碼可在取得,主要有三個用途:

  1. 持久化資料。 代理使用 MCP 來儲存資料,讓我們能夠長期追蹤並衡量安全影響。我們利用這些資料持續精進觸發 automations 的時機與方式。

  2. 去重。 我們會對每一項變更執行多個審查代理,而由於它們的發現結果是由 LLM 產生,不同代理最後可能會用不同措辭來描述同一個根本問題。為了避免重複作業,MCP 讓代理能部署一個由 Gemini Flash 2.5 驅動的分類器,用來判定兩個語意上不同的發現結果,是否其實是在描述同一個問題。

  3. 一致的輸出。 代理會透過 MCP 回報它們發現的每一項漏洞,而 MCP 會傳送格式一致的 Slack 訊息,並處理後續動作,例如忽略或延後處理某項發現結果。

在這個基礎就緒後,下方詳述的四項安全自動化各自疊加了自己的工作流程與觸發邏輯。我們使用 Terraform 來確保所有對安全工具的變更,都會經過標準的審查與部署流程。

Agentic Security Review

在內部,我們早已使用 Bugbot 來審查 PR(拉取請求)的程式碼品質與一般問題,其中也包含一些安全性發現結果。但通用型審查工具並不適合用於安全性,因為它無法針對我們特定的威脅模型進行提示調校,而且我們需要能夠只在出現安全性發現結果時阻擋 CI,而不是在每一個一般的程式碼品質問題上都阻擋。

因此,我們打造了一套專用的自動化,稱為 Agentic Security Review。起初,我們讓它將發現結果轉送到由安全團隊監看的私人 Slack 頻道。

顯示 Agentic Security Review 安全性發現結果的 Slack 頻道
Agentic Security Review 會將發現結果傳送到由安全團隊監看的私人 Slack 頻道。

當我們確認它能找出真正的問題後,我們便啟用了 PR(拉取請求)留言,接著實作了阻擋式檢查機制。在過去兩個月中,Agentic Security Review 已在數千個 PR(拉取請求)上執行,並阻止了數百個問題進入正式環境。

Vuln Hunter

在 Agentic Security Review 成功應用於新程式碼之後,我們開始讓代理檢查現有程式碼庫。Vuln Hunter 是一項自動化,會將程式碼劃分為邏輯區段,並逐一搜尋其中的漏洞。我們的團隊會先分級處理發現結果,通常也會加以修正,且經常使用 Slack 中的 @Cursor 來產生 PR(拉取請求)。

Anybump

相依套件修補非常耗時,以至於大多數安全團隊最終都會放棄,並把這項工作交給工程團隊,結果往往就被擱置在待辦事項中。我們打造了一套名為 Anybump 的自動化,幾乎已將這整個流程完全自動化。

Anybump 會執行可達性分析,將漏洞範圍縮小到那些真正有影響的項目,接著追蹤相關程式碼路徑、執行測試、檢查是否造成破壞,並在測試通過後開啟 PR(拉取請求)。在 PR(拉取請求)合併之後,Cursor 的金絲雀部署流程會在任何變更進入正式環境前,提供最後一道安全關卡。

Anybump 開啟的 GitHub PR(拉取請求),用於修補有漏洞的相依套件
Anybump 會在測試通過後,自動開啟 PR(拉取請求)來修補有漏洞的相依套件。

Invariant Sentinel

Invariant Sentinel 每日執行,持續監控一組安全與合規屬性是否出現偏移。它會將 repo 劃分為多個邏輯區段,並啟動子代理,依據一份不變條件清單來驗證程式碼。

分析完成後,代理會使用自動化記憶功能,將目前狀態與先前的執行結果進行比對。如果偵測到偏移,它會重新驗證以確保正確性,接著更新其記憶,並向安全團隊傳送 Slack 報告,附上變更說明與作為佐證的具體程式碼位置。

由於這項自動化會在完整的開發環境中執行,代理可以撰寫並執行程式碼來驗證自身的假設,補足傳統的功能測試、單元測試與整合測試。

後續還會有更多自動化功能

安全領域充滿了可應用自動化的機會,而這四項只是我們規劃中工作的起點。我們已經開始將它們擴展到涵蓋漏洞報告受理、隱私合規監控、值班警示分流,以及存取權限佈建。

在每種情況下,代理都能以我們無法靠人工達成的規模,提供一致且全面的覆蓋。

分類: 產品

作者: Travis McPeak

以自主代理守護我們的程式碼庫安全 · Cursor