ThirdKeyAI/symbi-redteam

GitHub: ThirdKeyAI/symbi-redteam

基于 Symbiont 的受治理自主渗透测试平台,通过 Cedar 策略引擎和多智能体编排解决渗透测试中范围控制、证据完整性和报告自动化三大核心问题。

Stars: 2 | Forks: 0

# symbi-redteam

symbi-redteam

由 [Symbiont](https://github.com/ThirdKeyAI/symbiont) 驱动的受治理的自主渗透测试平台。一个 AI 交互控制器在一个精心策划的攻击性工具链中编排多阶段的渗透测试,其中每个工具都有不同的风险级别,每个操作都受 Cedar 策略门控,每个发现都与证据链相连。 ## 问题背景 渗透测试公司面临四个长期存在的问题: 1. **范围蔓延** — 测试人员意外触及范围外的资产 2. **证据链完整性** — 发现结果存在被篡改的风险 3. **初级测试人员监督** — 在无人监督下使用高风险工具 4. **报告开销** — 40% 的测试时间用于编写报告 ## 解决方案:ORGA 治理的多智能体渗透测试 七个专门的智能体执行基于 PTES 方法论的渗透测试。每次工具调用都会经过带有 Cedar 策略执行的 Symbiont ORGA(观察-推理-门控-行动)循环: ``` engagement-controller ├── recon agent → nmap, whois, dig, whatweb, amass ├── enum agent → nikto, gobuster, enum4linux, smbclient, snmpwalk ├── vuln-assess agent → nmap NSE, nuclei, sqlmap (detect), searchsploit ├── exploit agent → hydra, metasploit, sqlmap (exploit) [human-gated] ├── post-exploit agent → impacket, pypykatz, chisel, ligolo [human-gated] └── reporter agent → executive, technical, remediation reports ``` **关键洞察:** Gate(门控)在 LLM 的影响之外运作。AI 可以规划 Metasploit 的使用,但必须由人类批准每一次漏洞利用尝试。Cedar 策略无法通过 prompt 注入、社会工程学或创造性推理来绕过。 ## 架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Engagement Controller │ │ Maintains state · Enforces methodology · Orchestrates│ └───────┬───────┬───────┬───────┬───────┬───────┬─────────┘ │ │ │ │ │ │ ┌────▼──┐ ┌─▼───┐ ┌─▼───┐ ┌▼────┐ ┌▼────┐ ┌▼────────┐ │ Recon │ │Enum │ │Vuln │ │Expl.│ │Post │ │Reporter │ │ │ │ │ │ │ │ │ │Expl.│ │ │ └───┬───┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └────┬────┘ │ │ │ │ │ │ ┌───▼────────▼───────▼───────▼───────▼──────────▼─────┐ │ ToolClad Manifests (19 .clad.toml) │ │ Typed args · MCP schema · Evidence · Cedar metadata │ ├─────────────────────────────────────────────────────┤ │ MCP Tool Layer (31 tools) │ │ Rust implementations · Cedar-gated · Audit-logged │ ├─────────────────────────────────────────────────────┤ │ Shell Wrappers (19 scripts) │ │ Arg validation · Timeout · JSON output · Defense │ ├─────────────────────────────────────────────────────┤ │ Offensive Toolchain (Kali) │ │ nmap · nikto · nuclei · sqlmap · hydra · metasploit│ │ impacket · pypykatz · chisel · ligolo · gobuster │ └─────────────────────────────────────────────────────┘ ``` ## 分层风险工具授权 | 风险级别 | 工具 | 授权方式 | |------------|-------|---------------| | Low(低) | nmap, whois, dig, whatweb, amass | 在范围内自动允许 | | Medium(中) | nikto, gobuster, enum4linux, smbclient, snmpwalk | 限速 | | Medium-High(中高) | nmap NSE, nuclei, sqlmap (detect), searchsploit | 仅限非生产环境 | | High(高) | hydra, metasploit, sqlmap (exploit) | 需人工批准 | | Highest(极高) | impacket, pypykatz, chisel, ligolo | 需人工批准 + 范围重新验证 | ## Cedar 策略模型 七个策略文件在各个层面执行治理: | 策略 | 用途 | |--------|---------| | `scope.cedar` | 目标 CIDR 执行,排除资产 | | `tool-authorization.cedar` | 按工具划分的分层风险授权 | | `phase-gates.cedar` | PTES 方法论执行 | | `rate-limits.cedar` | 按目标和全局的频率限制 | | `escalation.cedar` | 具有时限的人工批准 | | `evidence.cedar` | 证据链完整性要求 | | `time-bounds.cedar` | 测试窗口期执行 | ## 数据层 **SQLite** 存储结构化的测试数据:发现、工具运行、重新测试。 **LanceDB** 提供跨发现的语义搜索,用于跨工具关联和重新测试比较。一个从端口 8080 迁移到 8443 的服务仍然会被匹配。一个被不同扫描器以不同方式描述的发现仍然会被关联。 **Evidence store(证据存储)** 使用 SHA-256 完整性哈希归档所有工具输出,创建一条从发现到报告的防篡改证据链。 ## 快速开始 ### 前置条件 - Docker - 一个 Anthropic API 密钥 ### 使用预构建镜像 ``` # 从 GitHub Container Registry 拉取 docker pull ghcr.io/thirdkeyai/symbi-redteam:latest # 设置所需的环境变量 export ANTHROPIC_API_KEY=your-key export SYMBIONT_MASTER_KEY=$(openssl rand -hex 32) # 启动运行时 docker run --rm --network host --privileged \ -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \ -e SYMBIONT_API_TOKEN="your-api-token" \ -e SYMBIONT_MASTER_KEY="$SYMBIONT_MASTER_KEY" \ ghcr.io/thirdkeyai/symbi-redteam:latest \ up -p 9080 --http-port 9081 --http.token "your-webhook-token" ``` ### 从源代码构建 要在本地构建(例如,自定义智能体、策略或工具): ``` # Clone 代码仓库 git clone https://github.com/ThirdKeyAI/symbi-redteam.git cd symbi-redteam # 构建容器(首次构建由于 Rust 编译约需 15 分钟) docker compose build # 启动并挂载本地目录以进行实时编辑 docker run --rm --network host --privileged \ -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \ -e SYMBIONT_API_TOKEN="your-api-token" \ -e SYMBIONT_MASTER_KEY="$SYMBIONT_MASTER_KEY" \ -v ./policies:/app/policies:ro \ -v ./scope:/app/scope:ro \ -v ./agents:/app/agents:ro \ -v ./scripts:/app/scripts \ -v ./templates:/app/templates:ro \ symbi-redteam:latest \ up -p 9080 --http-port 9081 --http.token "your-webhook-token" ``` ### 通过 API 交互 ``` # 健康检查 curl -s http://localhost:9080/api/v1/health # 列出已加载的 agents(来自 agents/ 目录的 7 个 agents) curl -s -H "Authorization: Bearer your-api-token" \ http://localhost:9080/api/v1/agents # 执行一个 agent curl -s -X POST -H "Authorization: Bearer your-api-token" \ -H "Content-Type: application/json" \ http://localhost:9080/api/v1/agents/{agent-id}/execute \ -d '{"input": "Scan 10.0.1.0/24 for open services"}' # Swagger API 文档 open http://localhost:9080/swagger-ui/ ``` ### 测试单个工具 可以直接在容器内测试工具包装器,而无需完整的运行时环境: ``` docker run --rm --network host --privileged --user root \ --entrypoint bash symbi-redteam:latest -c \ '/app/scripts/tool-wrappers/nmap-wrapper.sh 10.0.1.5 service "" test-001' ``` ### 配置范围 编辑 `scope/scope.toml` 来定义您的测试目标,并更新 `policies/scope.cedar` 使其匹配。在此演示中,范围已被嵌入到 Cedar 策略中。 ### 环境变量 | 变量 | 必填 | 描述 | |----------|----------|-------------| | `ANTHROPIC_API_KEY` | 是 | 用于 LLM 推理的 API 密钥 | | `SYMBIONT_API_TOKEN` | 是 | 运行时 REST API(端口 9080)的 Bearer token | | `SYMBIONT_MASTER_KEY` | 是 | 用于加密的 256 位十六进制密钥 (`openssl rand -hex 32`) | | `SYMBI_LOG_LEVEL` | 否 | 日志级别:debug、info、warn、error(默认:info) | ### 端口 | 端口 | 用途 | 认证方式 | |------|---------|----------------| | 9080 | 运行时 REST API(智能体、状态、执行) | 通过 Bearer 头的 `SYMBIONT_API_TOKEN` | | 9081 | HTTP 输入 webhook(智能体调用) | 通过 Bearer 头的 `--http.token` | | 4317 | OTLP gRPC(Jaeger 追踪收集器) | 无(仅限本地) | | 16686 | Jaeger UI | 无(仅限本地) | ### 可观测性 #### 审计日志 每次工具调用都会以 JSONL 格式记录到 `.symbiont/audit/` 中,并带有 SHA-256 哈希链(在 `symbi.toml` 中配置)。在 Docker 中,这些文件通过 `audit-logs/` 卷挂载持久化到宿主机: ``` # 查看最近的审计条目 cat audit-logs/*.jsonl | jq . # 按工具名称筛选 cat audit-logs/*.jsonl | jq 'select(.tool == "nmap_scan")' # 按 Cedar 决策筛选 cat audit-logs/*.jsonl | jq 'select(.cedar_decision == "deny")' ``` #### 使用 Jaeger 进行分布式追踪 Symbiont 1.9.0+ 通过 OpenTelemetry 支持 W3C traceparent 传播。追踪显示每个智能体的完整 ORGA 循环(Observe、Reason、Gate、Act),并通过 `ask()` 调用实现跨智能体传播。 **1. 启动 Jaeger:** ``` docker run -d --name jaeger \ -p 16686:16686 \ -p 4317:4317 \ jaegertracing/all-in-one:latest ``` **2. 在 `symbi.toml` 中添加遥测配置:** ``` [telemetry] enabled = true otlp_endpoint = "http://localhost:4317" ``` **3. 查看追踪:** 打开 `http://localhost:16686` 并选择 `symbi-redteam` 服务。每次测试运行会产生涵盖所有阶段智能体的追踪,其 span 包括: - 智能 ORGA 循环迭代 - Cedar 策略评估(允许/拒绝) - 工具执行(wrapper 调用 + 持续时间) - 智能体间 `ask()` 调用(controller → 阶段智能体) - 人工批准门控(批准耗时) #### 日志详细级别 ``` # 增加日志详细信息以进行调试 SYMBI_LOG_LEVEL=debug RUST_LOG=symbi=debug,cedar=info ``` ### 已知限制 - **Gobuster** 需要针对所有路径都返回 200 的 SPA 目标(如 Juice Shop)使用 `--exclude-length`。智能体的推理阶段会自动处理此问题。 - **Nuclei** 在容器内首次运行时会下载模板。模板已在 Docker 构建期间预下载,但更新模板需要重新构建。 - **Metasploit** 首次运行初始化需要 30-60 秒来加载框架。 - **非 root 执行**:容器默认以 `symbi` 用户运行。需要原始套接字的工具(nmap SYN 扫描、chisel 隧道)在测试时需要 `--cap-add NET_RAW --cap-add NET_ADMIN` 或 `--privileged`。 - **MCP 工具注册**:`tools/` 中的 ToolClad 清单通过 `toolclad schema` 自动生成 MCP schemas。`src/` 中的 Rust MCP 工具定义提供了运行时注册层。Symbiont 运行时的 ToolCladExecutor 从 `tools/` 发现清单并将它们自动注册为 MCP 工具。 ## 仓库结构 ``` symbi-redteam/ ├── agents/ # 7 Symbiont DSL agent definitions │ ├── engagement-controller.dsl # Orchestrator │ ├── recon.dsl # Reconnaissance │ ├── enum.dsl # Enumeration │ ├── vuln-assess.dsl # Vulnerability assessment │ ├── exploit.dsl # Exploitation (human-gated) │ ├── post-exploit.dsl # Post-exploitation (human-gated) │ └── reporter.dsl # Report generation ├── tools/ # 19 ToolClad manifests (.clad.toml) ├── toolclad.toml # Project-level custom type definitions ├── policies/ # 7 Cedar policy files ├── src/ # Rust MCP tool definitions │ ├── recon_tools.rs # 5 recon tools + parse + CVE lookup │ ├── enum_tools.rs # 5 enumeration tools │ ├── vuln_tools.rs # 4 vulnerability tools │ ├── exploit_tools.rs # 4 exploitation tools │ ├── postexploit_tools.rs # 4 post-exploitation tools │ ├── evidence_tools.rs # 5 evidence management tools │ ├── reporting.rs # 4 reporting tools │ └── db.rs # SQLite + LanceDB layer ├── scripts/ │ ├── tool-wrappers/ # 19 sandboxed tool wrappers │ └── parse-outputs/ # 9 output parsers ├── scope/ # Engagement scope definition ├── db/ # Database schema ├── templates/ # Report templates ├── Dockerfile # Multi-stage: Rust builder + Kali runtime ├── docker-compose.yml # Security-hardened container config └── symbi.toml # Symbiont runtime configuration ``` ## ToolClad 集成 所有 19 种攻击性工具在 `tools/` 中都有声明式的 [ToolClad](https://toolclad.org) 清单。每个 `.clad.toml` 定义了: - **带验证的类型化参数**(scope_target, port, enum, credential_file, msf_options 等) - **用于策略评估的 Cedar 元数据**(resource, action, risk_tier, human_approval) - **MCP schema 生成** — 从清单自动生成 `inputSchema`/`outputSchema` - **带有 SHA-256 哈希和结构化输出的 Evidence envelopes** 清单使用 **executor escape hatch(执行器逃生舱)** 委托给现有的 shell 包装器,在增加 ToolClad 类型化验证层的同时保留了纵深防御: ``` Agent fills typed parameters → ToolClad validates → Shell wrapper executes → Evidence envelope ``` `toolclad.toml` 中的**自定义类型**定义了项目特定的枚举和约束: `hydra_service`, `nmap_scan_type`, `severity_level`, `dns_record_type`, `scan_rate`, `msf_module_path`, `impacket_tool` ``` # 验证所有工具 manifests(symbi tools CLI,v1.9.0+) symbi tools validate # 为工具生成 MCP schema symbi tools schema nmap_scan # Dry-run 一个工具 symbi tools test nmap_scan --arg target=10.0.1.5 --arg scan_type=service # 列出所有已发现的工具 symbi tools list ``` ## 关键设计决策 **Kali 基础镜像** — 通过 apt 提供攻击性工具链。镜像体积较大,但与从源代码构建相比,极大地简化了工具安装和依赖管理。 **分层多智能体** — 交互控制器通过 `ask()` 委托给阶段智能体。同一时间只有 2 个智能体处于活动状态(控制器 + 当前阶段)。这自然地映射到 PTES 方法论,并保持 Cedar 策略按阶段确定范围。 **Cedar 而非内联检查** — Cedar 策略在形式上可验证,无需更改代码即可更新,并且在 LLM 影响之外进行评估。Gate 无法被 prompt 注入。 **SQLite + LanceDB** — 结构化数据放在 SQLite 中用于查询,嵌入数据放在 LanceDB 中用于语义搜索。带有类型鉴别器的单一 LanceDB 集合避免了运行时更改。 **通过 CLI 的人工批准** — Symbiont 的 HumanCritic 挂起 ORGA 循环并提示操作员。批准令牌具有可配置的有效期(30-60 分钟),由 Cedar 强制执行。 ## 对比 | 能力 | 原始工具 | symbi-redteam | |------------|-----------|---------------| | 范围执行 | 人工自觉 | Cedar 策略 — 自动 | | 阶段方法论 | 测试人员判断 | 策略门控的转换 | | 工具授权 | 信誉系统 | 分层风险的 Cedar 策略 | | 速率限制 | 手动 | 按目标 + 全局自动 | | 人工批准 | 口头/电子邮件 | 具有定时有效期的 CLI 提示 | | 证据完整性 | 基于信任 | SHA-256 哈希链 | | 审计追踪 | 手写记录 | 加密且防篡改的 | | 报告生成 | 占用 40% 的测试时间 | 从证据数据库自动生成 | | 重新测试对比 | 人工分析工作 | 语义匹配 + 差异报告 | ## 许可证 Apache 2.0 — 详见 [LICENSE](LICENSE)。
标签:AES-256, AI智能体, Cedar, DevSecOps, DLL 劫持, FTP漏洞扫描, IP 地址批量处理, MetaSploit, Nmap, ORGA架构, PTES方法论, PyRIT, SQLMap, Symbiont, XXE攻击, 上游代理, 人工智能, 侦察枚举, 反取证, 可视化界面, 多智能体系统, 大语言模型, 安全编排, 安全评估, 实时处理, 密码管理, 插件系统, 权限控制, 渗透测试框架, 漏洞评估, 用户代理, 用户模式Hook绕过, 策略引擎, 红队工具链, 红队自动化, 网络安全, 网络安全审计, 网络安全挑战, 自主渗透测试, 自动化报告, 虚拟驱动器, 证据链管理, 请求拦截, 通知系统, 防御, 隐私保护, 风险配置