Skip to content

lzy756/pen-agents

Repository files navigation

PenAgents

基于大语言模型的多Agent协作渗透测试框架。

PenAgents将一次完整的渗透测试拆分为侦察、扫描、利用、验证、报告等阶段,由七个各司其职的Agent在LangGraph状态图上协同完成。框架借鉴了CHYing-agent项目"少即是多"的工具设计理念和"不完全信任LLM"的工程哲学,面向专业安全团队的实际渗透测试场景进行了重新设计。

为什么做这个项目

现有的LLM渗透测试工具大多停留在"单Agent+工具列表"的模式,面对真实目标时往往陷入几个困境:Agent一路试到底不知道换方向,工具选择太多反而频繁出错,长对话导致上下文丢失。

PenAgents尝试用一种更接近真实安全团队分工的方式来解决这些问题:

  • 指挥官负责全局规划和阶段推进,不直接碰工具
  • 安全顾问在关键节点提供策略建议,连续失败时自动介入
  • 四个专业Agent各自只关心自己的领域,工具集保持最小化
  • 独立的验证员角色排除误报,确保每个发现都经过交叉验证

架构

block-beta
  columns 4

  block:cmd:4
    columns 4
    space
    Commander["Commander\nDeepSeek-R1\n全局规划/阶段控制\n任务分发"]
    Advisor["Advisor\nDeepSeek-V3\n策略建议/知识库加载"]
    space
  end

  space:4

  block:spec:4
    columns 4
    Recon["Recon Agent\n信息收集"]
    Scanner["Scanner Agent\n漏洞扫描"]
    Exploit["Exploit Agent\n漏洞利用"]
    Validator["Validator Agent\n结果验证"]
  end

  space:4

  block:exec:4
    columns 3
    Docker["Docker / Kali 容器\nnmap, sqlmap, nuclei ..."]
    Python["Python PoC 沙箱\n自定义脚本执行"]
    Reporter["Reporter\n报告生成"]
  end

  space:4

  block:base:4
    columns 5
    Skills["Skills 知识库"]
    Evidence["证据链管理"]
    Scope["范围管控"]
    State["状态持久化"]
    Audit["审计日志"]
  end

  Commander <--> Advisor
  Commander --> Recon
  Commander --> Scanner
  Commander --> Exploit
  Commander --> Validator
  Recon --> Docker
  Recon --> Python
  Scanner --> Docker
  Scanner --> Python
  Exploit --> Docker
  Exploit --> Python
  Validator --> Python

  style Commander fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f
  style Advisor fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f

  style Recon fill:#d1fae5,stroke:#10b981,color:#064e3b
  style Scanner fill:#d1fae5,stroke:#10b981,color:#064e3b
  style Exploit fill:#d1fae5,stroke:#10b981,color:#064e3b
  style Validator fill:#d1fae5,stroke:#10b981,color:#064e3b

  style Docker fill:#fef3c7,stroke:#f59e0b,color:#78350f
  style Python fill:#fef3c7,stroke:#f59e0b,color:#78350f
  style Reporter fill:#fef3c7,stroke:#f59e0b,color:#78350f

  style Skills fill:#f3e8ff,stroke:#a855f7,color:#581c87
  style Evidence fill:#f3e8ff,stroke:#a855f7,color:#581c87
  style Scope fill:#f3e8ff,stroke:#a855f7,color:#581c87
  style State fill:#f3e8ff,stroke:#a855f7,color:#581c87
  style Audit fill:#f3e8ff,stroke:#a855f7,color:#581c87

  style cmd fill:#eff6ff,stroke:#3b82f6,stroke-width:2px,color:#1e40af
  style spec fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#047857
  style exec fill:#fffbeb,stroke:#f59e0b,stroke-width:2px,color:#b45309
  style base fill:#faf5ff,stroke:#a855f7,stroke-width:2px,color:#7e22ce
Loading

工作流遵循PTES方法论,按阶段推进:

graph LR
  A["授权确认"] --> B["信息收集"]
  B --> C["漏洞扫描"]
  C --> D["漏洞利用"]
  D --> E["后渗透"]
  E --> F["报告"]

  style A fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f
  style B fill:#d1fae5,stroke:#10b981,color:#064e3b
  style C fill:#d1fae5,stroke:#10b981,color:#064e3b
  style D fill:#fef3c7,stroke:#f59e0b,color:#78350f
  style E fill:#fef3c7,stroke:#f59e0b,color:#78350f
  style F fill:#f3e8ff,stroke:#a855f7,color:#581c87
Loading

Commander控制阶段转换的时机。当某个阶段收集到足够信息后才会推进到下一步,而不是机械地按顺序走流程。

核心设计

极简工具集

整个框架只有三个核心执行工具:

工具 用途
execute_command 在Kali Docker容器中执行shell命令
execute_python_poc 在沙箱中执行Python脚本
submit_finding 提交确认的漏洞发现

工具越多,LLM需要匹配的模式就越复杂,出错概率也越高。把复杂度交给LLM的知识(通过Prompt和Skills注入),而不是堆工具数量。

按需知识库

skills/目录下有13类漏洞知识库(SQL注入、XSS、RCE、SSRF、SSTI、XXE、文件上传、认证绕过、IDOR、JWT、API安全、Web侦察、反序列化),每个都包含检测方法、实际payload、工具命令和修复建议。

Advisor Agent会根据当前上下文中的关键词自动匹配并加载最相关的知识库(最多3个),避免一次性塞入全部内容撑爆上下文窗口。

智能止损

连续失败3次后Commander会自动切换攻击方向,连续失败6次触发Advisor介入提供替代策略。这个机制来自CHYing-agent在CTF比赛中的实战经验:一条路走不通就该换路,而不是反复重试。

范围管控

每次执行命令前都会自动校验目标是否在授权范围内。支持IP地址、CIDR网段、域名(含子域名匹配)。同时内置命令黑名单,拦截rm -rf /shutdown等破坏性操作。

消息压缩

长时间运行的渗透测试会产生大量工具输出。框架保留最近15条工具消息的完整内容,更早的工具输出会被压缩为摘要,防止对话历史超出模型的上下文限制。

安装

环境要求

  • Python >= 3.11
  • Docker(用于运行Kali工具容器)
  • DeepSeek API Key

步骤

# 克隆项目
git clone https://github.com/your-org/pen-agents.git
cd pen-agents

# 安装依赖
pip install -e .

# 构建 Kali 工具镜像
cd docker
docker-compose build
cd ..

# 配置环境变量
cp .env.example .env
# 编辑 .env,填入 DeepSeek API Key

.env中需要配置的关键项:

DEEPSEEK_API_KEY=sk-...
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
DEEPSEEK_REASONING_MODEL=deepseek-reasoner
DEEPSEEK_CHAT_MODEL=deepseek-chat

Commander和Exploit Agent使用推理模型(deepseek-reasoner),其余Agent使用对话模型(deepseek-chat)。如果API额度有限,可以在配置中统一指向deepseek-chat。

使用

基本用法

# 对单个目标执行渗透测试
pen-agents scan -t http://192.168.1.100

# 指定额外的授权范围
pen-agents scan -t http://target.com -s 192.168.1.0/24 -s 10.0.0.0/8

# 排除特定目标
pen-agents scan -t http://target.com -x http://production.target.com

# 限制最大迭代次数
pen-agents scan -t http://target.com -m 50

# 指定客户名称(用于报告)
pen-agents scan -t http://target.com -c "ACME Corp"

运行流程

启动后框架会依次执行:

  1. 验证目标是否在授权范围内
  2. Commander进入RECON阶段,派遣Recon Agent进行信息收集
  3. 根据侦察结果推进到SCANNING阶段,Scanner Agent识别潜在漏洞
  4. 发现可利用漏洞后进入EXPLOITATION阶段,Exploit Agent编写并执行PoC
  5. 每个漏洞发现由Validator Agent独立验证
  6. 最终Reporter Agent生成渗透测试报告,保存到evidence/目录

过程中Advisor Agent会在阶段转换、连续失败、高风险操作等关键节点自动介入。

输出

  • 终端实时显示各Agent的执行进度
  • 漏洞发现实时汇总(按严重程度分类)
  • 最终报告以Markdown格式保存在evidence/report_*.md

项目结构

pen_agents/
  main.py                          # 入口
  src/pen_agents/
    cli.py                         # CLI命令定义
    graph.py                       # LangGraph状态图和路由逻辑
    state.py                       # 状态定义和消息压缩
    model.py                       # DeepSeek LLM实例管理
    core/
      config.py                    # 环境变量配置
      constants.py                 # 全局常量、阶段枚举
    agents/
      commander.py                 # 指挥官:规划、分发、阶段控制
      advisor.py                   # 安全顾问:策略建议、知识库加载
      recon.py                     # 侦察员:信息收集
      scanner.py                   # 扫描员:漏洞扫描
      exploit.py                   # 攻击手:漏洞利用
      validator.py                 # 验证员:独立验证、CVSS评分
      reporter.py                  # 报告员:报告生成
    tools/
      shell.py                     # execute_command工具
      python_executor.py           # execute_python_poc工具
      evidence_tools.py            # submit_finding/save_evidence
      scope_tools.py               # check_scope工具
      report_tools.py              # generate_report工具
    executor/
      base.py                      # 执行器抽象基类
      docker_native.py             # Docker CLI执行器
      factory.py                   # 执行器工厂
    skills/
      skill_loader.py              # 按需知识库加载器
      sqli/SKILL.md                # SQL注入知识库
      xss/SKILL.md                 # XSS知识库
      ...                          # 共13类漏洞知识库
    scope/
      manager.py                   # 范围管理(IP/CIDR/域名)
      validator.py                 # 命令安全校验、黑名单
    evidence/
      collector.py                 # 证据收集器
      store.py                     # SQLite持久化存储
    reporting/
      generator.py                 # Jinja2报告生成器
      templates/                   # 报告模板
    prompts/
      prompts_book.py              # 全部Agent的系统提示词
    utils/
      common.py                    # 日志
      rate_limiter.py              # API和目标系统速率限制
      failure_detector.py          # 失败检测和自动止损
      recon.py                     # HTTP自动侦察
  docker/
    Dockerfile                     # Kali工具镜像
    docker-compose.yml             # 容器编排

Agent协作方式

Commander通过结构化的[DISPATCH_TASK]指令向专业Agent分发任务:

[DISPATCH_TASK]
agent: scanner
phase: SCANNING
priority: HIGH
task: |
  对目标 http://target.com/login 执行 SQL 注入检测
  使用 sqlmap 的检测模式,不要进行实际数据提取
  注意 WAF 可能存在,必要时使用 tamper 脚本
[/DISPATCH_TASK]

专业Agent收到任务后调用工具执行,结果回流到Commander进行汇总分析,再决定下一步动作。Advisor不参与执行,只在需要时提供战略层面的建议。

这种模式下,每个Agent的职责边界清晰,不会出现一个Agent试图包揽所有工作的情况。

技术栈

组件 选型 说明
编排框架 LangGraph 状态图驱动的多Agent协作
大模型 DeepSeek-R1/V3 推理模型用于规划,对话模型用于执行
执行环境 Docker+Kali Linux 隔离的渗透测试工具运行环境
状态持久化 SQLite 支持长周期测试的断点恢复
报告生成 Jinja2 模板化的渗透测试报告
可观测性 Langfuse 全链路Trace记录

与CHYing-agent的关系

PenAgents的设计受CHYing-agent启发。CHYing-agent是一个面向CTF比赛的自动化求解系统,在腾讯云黑客松中获得第9名。它的几个核心设计理念被本项目继承:

  • 极简工具集:CHYing-agent全程只用3个工具,证明了"工具越少、LLM决策越稳定"
  • 顾问+主攻手的双Agent模式:模拟真实团队中的指导关系
  • 消息压缩策略:保留近期输出、压缩历史,解决长对话的上下文问题
  • 自动止损机制:连续失败后切换方向,避免在死路上浪费时间

PenAgents在此基础上做了以下调整以适应专业渗透测试场景:

  • 从单目标快速攻击扩展为多阶段全流程管理(PTES)
  • 增加范围管控和授权跟踪
  • 引入独立的Validator角色进行交叉验证
  • 增加证据链管理和专业报告生成
  • 将Agent从2个扩展到7个,覆盖渗透测试的完整分工

局限性

  • 当前版本以Web安全测试为主(OWASP Top 10),内网渗透、域渗透等场景尚未覆盖
  • Agent的表现高度依赖底层大模型的能力,复杂的多步漏洞利用链可能需要人工介入
  • Docker容器中的工具集是预装的,遇到需要特定工具的场景需要手动扩展镜像
  • 速率限制和并发控制还比较基础,高并发场景下可能需要调优

免责声明

本工具仅供经过授权的安全测试使用。使用者必须确保已获得目标系统所有者的明确书面授权。未经授权对计算机系统进行渗透测试属于违法行为,使用本工具造成的一切法律后果由使用者自行承担。

致谢

License

MIT

About

基于大语言模型的多Agent协作渗透测试框架 | Multi-Agent Penetration Testing Framework powered by LLM

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages