PentestAgent:讓 LLM 自己生出子代理來做滲透測試
PentestAgent is an AI agent framework for black-box security testing, supporting bug bounty, red-team, and penetration testing workflows.
秒懂
- 它是什麼?
- PentestAgent 是一個以 Python 撰寫的 AI 代理框架,目標是黑箱安全測試。它最特別的地方在於代理能自行 spawn 子代理,形成階層式分工,不需要外部編排系統。
- 適合誰用?
- PentestAgent 適合已有授權測試範圍的滲透測試者、紅隊成員與 bug bounty 獵人,尤其是那些想用 LLM 加速偵察與重複性任務的人。不適合完全不懂安全的人,因為它仍需要你判斷目標範圍與工具輸出,而且它依賴外部 LLM API,等於把測試過程的敏感資料交給第三方。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 9 天前。
- 用什麼語言寫的?
- 主要是 Python(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它解決的是哪一層的問題
安全測試領域的工具多如牛毛,nmap、sqlmap、metasploit 各自擅長一件事,但把它們串成一個流程,通常要靠工程師手寫腳本或記住一堆指令。PentestAgent 想解決的正是這種「編排」問題。它把 terminal、browser、web_search 等工具包進一個代理框架,讓 LLM 決定下一步要呼叫哪個工具。這不是新的點子,很多專案都試過,但 PentestAgent 的差異在於它把「代理自己生出子代理」當作核心機制。當一個代理碰到範圍太廣的任務,它可以呼叫 spawn_mcp_agent 工具,產生一個子代理,把特定 CIDR 或主機交給它處理,子代理擁有獨立的 runtime、LLM client、對話歷史與 notes store。這種階層式架構讓它能應付需要平行掃描多個網段的情境,而不需要你事先架設任何外部編排系統。
從安裝到第一個指令的實際路徑
安裝過程不算複雜,但有一些前置條件。你需要 Python 3.10 以上,以及 OpenAI、Anthropic 或其他 LiteLLM 支援的 API key。README 提供 setup.sh 或 setup.ps1 腳本,會建立 venv 並安裝依賴。手動安裝則是先建立虛擬環境,然後執行 pip install -e ".[all]"。要注意的是,如果你要用 browser 工具,還得另外跑 playwright install chromium,這一步常常被忽略,導致代理無法操作瀏覽器。設定檔是 .env,放在專案根目錄。以 Anthropic 為例,你需要設定 ANTHROPIC_API_KEY 與 PENTESTAGENT_MODEL=claude-sonnet-4-20250514。如果使用 OpenAI,就是 OPENAI_API_KEY 與 PENTESTAGENT_MODEL=gpt-5。比較有意思的是,它支援透過 OPENAI_API_BASE 指向任何 OpenAI 相容的 relay,這對那些不想直接把流量送給官方 API 的人來說,是一個務實的選項。啟動 TUI 的方式是直接執行 pentestagent,加上 -t 參數可以指定目標,例如 pentestagent -t 192.168.1.1。
四種模式,四種不同的控制程度
PentestAgent 在 TUI 裡提供四種操作模式,差別在於你願意把多少控制權交給代理。Assist 模式是單次指令,代理執行一次就結束,適合你已經知道要做什麼、只是需要它跑工具的情境。Agent 模式則是讓代理自主執行單一任務,它會自己決定要呼叫哪些工具、按什麼順序。Crew 模式是多人代理,由 orchestrator 生成專門的 worker 來處理不同子任務。Interact 模式則是你跟代理對話,它會引導你進行滲透測試。這四種模式其實反映了不同使用者的需求。如果你只是想要一個能幫忙下指令的助手,Assist 就夠了。如果你想要的是自動化掃描,Agent 或 Crew 才有意義。但這裡有個關鍵點:模式愈自主,你對流程的掌握就愈低。README 沒有詳細說明 Crew 模式裡 orchestrator 怎麼決定 worker 的數量或分工,這在實際使用上可能是一個黑箱。
spawn_mcp_agent:讓代理自己長出幫手
這個專案最值得注意的機制是 spawn_mcp_agent。它不是一個外部工具,而是內建在代理裡的能力。當代理在執行任務時,它可以呼叫這個工具,產生一個子代理,子代理是以 MCP server 的形式透過 stdio 連線。子代理完全隔離,有自己的 runtime、LLM client、對話歷史與 notes store。spawn 完成之後,子代理的工具集(例如 run_task、run_task_async、await_tasks)會被注入到父代理的工具清單裡,但要注意,這些工具要到下一次 tool call 才會生效,不是立即就能用。子代理的 server name 是自動分配的,像是 child_agent_1。參數方面,target 是傳給子代理的目標,scope 是允許子代理觸及的 CIDR,model 可以覆寫 PENTESTAGENT_MODEL,no_rag 與 no_mcp 則是用來關掉子代理的 RAG 引擎或外部 MCP 連線。預設 no_mcp 是 true,代表子代理不會去連外部 MCP server,這其實是合理的預設,因為你通常不會想讓每個子代理都重複建立外部連線。這個設計的意義在於,它讓代理可以動態調整自己的規模,遇到大範圍目標時,先 spawn 兩個子代理去平行偵察,而不是自己慢慢掃。
Playbooks 與 Docker:把流程固定下來的兩種方式
除了互動模式,PentestAgent 也提供 Playbooks,這是預先定義好的攻擊流程,針對特定類型的評估。執行方式很直接,例如 pentestagent run -t example.com --playbook thp3_web。Playbook 的好處是讓你可以把常用的測試流程寫成檔案,重複使用,不需要每次都在 TUI 裡手動下指令。但 README 只示範了 thp3_web 這個名稱,沒有列出有哪些內建 playbook,也沒有說明 playbook 的格式或如何自訂,這對進階使用者來說是一個資訊缺口。另一個重要的部分是 Docker 隔離。因為代理可以直接用 terminal 工具執行指令,這在安全上是有風險的,萬一代理下了錯誤的指令,可能影響本機。Docker 提供兩條路徑:一條是直接 pull 預建映像,ghcr.io/gh05tcrew/pentestagent:latest 包含 nmap、netcat、curl,而 :kali 標籤則包含 metasploit、sqlmap、hydra 等更完整的工具。另一條是用 docker compose build 自己建。容器內的代理可以直接使用這些工具,這對於想要限制代理行為範圍的人來說,是比較安全的選擇。不過要注意,容器只是隔離工具執行,代理的 LLM 呼叫還是會連到外部 API。
限制與潛在的失敗模式
PentestAgent 有幾個明顯的限制,第一個是它完全依賴外部 LLM API。沒有 API key,整個框架就無法運作,而且你的測試目標、掃描結果、甚至 notes 內容都會傳給第三方。對於涉及敏感資產的紅隊作業,這可能是一個無法接受的風險。第二個限制是版本成熟度。README 顯示版本是 0.2.0,而且沒有列出任何 release,代表這個專案還在早期開發階段,API 或行為可能隨時改變。第三個限制是它對使用者的要求其實不低。它不會自動判斷一個目標是否在你的授權範圍內,也不會阻止你對不該掃的對象下手。scope 參數只是告訴子代理哪些目標是 in-scope,但並不代表代理會嚴格遵守,最終還是要靠你把關。第四個限制是 browser 工具需要額外安裝 playwright chromium,如果你跳過這一步,代理就無法操作瀏覽器,而很多黑箱測試(例如檢查登入流程或 DOM 注入)都需要瀏覽器。這些限制不是致命傷,但代表它不是一個開箱即用、不需要動腦的工具。
替代方案與架構上的差異
市場上已經有幾個類似的 AI 安全代理框架,例如 Google 的 Project Naptime 或是其他以 ReAct 模式為基礎的滲透測試代理。以 Project Naptime 為例,它的做法是讓 LLM 透過一組專門設計的工具(例如程式碼執行器與瀏覽器)來分析漏洞,重點放在「理解」而非「執行」。PentestAgent 的走向不同,它擁抱 terminal 工具,讓代理直接呼叫 nmap、sqlmap 這些現成工具,而且它把多代理架構內建在框架裡,透過 MCP 協定讓代理自己 spawn 子代理。相比之下,其他框架多半需要你事先定義好 agent 的數量與角色,或者依賴外部的 agent 編排平台。PentestAgent 的設計哲學是讓代理自己決定什麼時候需要幫手,這在動態的滲透測試情境中可能比較靈活,但也帶來不確定性,因為你無法預測代理會在什麼時候、以什麼方式 spawn 子代理。如果你偏好完全掌控代理的決策過程,這種自主性可能反而是缺點。
維護成本與授權考量
從維護的角度來看,PentestAgent 的依賴不算少。它使用 LiteLLM 來抽象化不同 LLM provider,這代表你要跟著 LiteLLM 的更新節奏走。另外,playwright 與 Docker 都是額外的依賴,升級時可能互相影響。由於沒有 release 歷史,你無法從 changelog 判斷升級是否安全,只能直接看 git log。授權方面,這個專案採用 MIT License,這是一個寬鬆的授權,允許你修改、商用、甚至閉源使用,只要保留原始著作權聲明。對於企業內部要整合這個框架,MIT 授權的彈性很高,沒有 copyleft 的包袱。但要注意,MIT 授權不包含任何擔保,專案作者不對使用造成的損害負責,這在安全工具領域是常見的免責聲明,但你在實際用於客戶測試前,還是要自己評估風險。整體來說,維護成本取決於你多常更新,以及你是否願意追蹤上游的變動。
編輯結論
PentestAgent 適合已有授權測試範圍的滲透測試者、紅隊成員與 bug bounty 獵人,尤其是那些想用 LLM 加速偵察與重複性任務的人。不適合完全不懂安全的人,因為它仍需要你判斷目標範圍與工具輸出,而且它依賴外部 LLM API,等於把測試過程的敏感資料交給第三方。採用前你應該先確認三件事:你的 API 提供者是否允許傳送目標網段與掃描結果、你的測試目標是否在授權範圍內、以及你是否能接受代理在 Docker 容器外直接執行 terminal 工具所帶來的風險。最後,這個專案目前版本為 0.2.0,沒有釋出任何 release,代表 API 與行為可能隨時變動,不建議在正式紅隊作業中直接依賴它,先在小範圍、低風險的靶機上驗證它的穩定度再說。
社群筆記