rakshit9/RedHive

GitHub: rakshit9/RedHive

基于 LLM 多 Agent 架构的自主 Web 渗透测试平台,能端到端地发现、验证、修复漏洞并自动发起修复 PR。

Stars: 0 | Forks: 0

# 🐝 RedHive ### 自主多 Agent 渗透测试 —— 端到端地发现、证明并**修复**漏洞。 将一个 AI Agent 团队指向 Web 目标。它们会映射攻击面,派遣**并行的专业 Agent 集群**进行测试,验证每个发现以消除误报,编写 PoC + 复现步骤 + 修复方案,并发起一个带有修复代码的 **GitHub pull request**。 [架构](#-architecture) · [快速开始](#-quickstart) · [工作原理](#-how-an-engagement-runs) · [测试数据](#-the-numbers-measured) · [API](#-api)
## ⚠️ 仅限授权使用 **RedHive 是一款攻击性安全工具。请仅将其指向您拥有或明确获得授权测试的系统。** 每个 Agent 和工具都通过一个统一的 scope guard(`redhive/scope.py`)进行路由。除非目标是内置的练习主机**或者**是组织**已证明其拥有**(通过 DNS TXT / HTTP 文件验证)的域名,否则**在发送任何数据包之前**就会拒绝该目标。开箱即用时,仅练习目标在允许范围内——内置的漏洞演示应用、`localhost` 和 OWASP Juice Shop。在大多数司法管辖区,未经授权扫描系统是非法的。 ## 简介 RedHive 是新兴的**“自主渗透测试”**类别的一个可运行的多租户 SaaS 实现——与 [MindFort](https://www.mindfort.ai)、XBOW 和 Horizon3.ai 处于同一产品领域。其核心理念是:软件发布的速度超过了安全团队审查的速度,因此安全测试必须变得**持续、自主且自我修复**。 它自动化完成了人类红队会执行的完整闭环: ……并且每次重新扫描时都会变得更聪明(它会记住之前的发现,并报告哪些是**新增的 / 复发的 / 已修复的**)。 ## ✨ 核心亮点 | | | |---|---| | 🧠 **分层多 Agent 系统** | 一个基于 LangGraph 的状态机:LLM **Lead** 规划,集群执行,LLM **Validator** 进行分类,最后由 Reporter / Patch / Strategist agent 完成任务。 | | ⚡ **并行 Agent 集群** | Lead 通过 LangGraph 的 `Send` map-reduce 为**每个(endpoint × 漏洞类别)**分发一个专业 agent —— **数十个 Agent 并发运行**(实测:每次扫描 50–115 个,比顺序执行快约 10 倍)。 | | 🛡️ **有证据支撑的发现** | 每个发现都附带证据、复现步骤和由 LLM 生成的修复方案 —— 经过验证以保持低误报率。 | | ⚔️ **漏洞利用链 + 风险评分** | Strategist agent 会推理各项发现如何串联成真实的攻击路径,并计算出 0–100 的风险评分。 | | 🔧 **自动修复 → GitHub PR** | 为首要发现草拟修复方案,并在已连接的仓库中发起真实的 pull request(token 在静止时加密)。 | | 🧗 **HillClimb 记忆** | 跨扫描差异比对会将发现标记为 `new` / `recurring` / `fixed`,因此平台运行次数越多越有用。 | | 🔐 **第一天就支持多租户** | 支持组织、用户、API 密钥、按组织进行**域名所有权验证**以及配额计划。 | | 💸 **Token + 成本追踪** | 每次扫描都会准确报告其消耗的 LLM token 数量和预估的 USD 成本。 | | 🏗️ **为扩展而生** | API 仅负责*入队*;一个独立的 worker 池通过 Postgres 队列(`FOR UPDATE SKIP LOCKED`)拉取任务 —— 添加 worker 即可实现水平扩展。 | ## 🖥️ 仪表盘 一个带有实时扫描功能的 Next.js 仪表盘:**实时 Agent 集群可视化工具**(观看 agent 点亮并并行解决),风险仪表,可展开的发现列表,攻击链和 patch-diff 视图,目标/所有权管理,API 密钥以及 GitHub 集成。 ## 🏛️ 架构 ``` ┌──────────────┐ out of scope target ────▶│ Orchestrator │──────────────▶ END └──────┬───────┘ │ in scope ▼ ┌────────┐ ┌──────┐ ┌─────────────┐ ══ Send × N ══▶ ┌───────┐ │ Recon │──▶│ Lead │──▶│ plan_probes │ ─────────────────▶ │ probe │ ┐ └────────┘ └──────┘ └─────────────┘ │ probe │ ┤ (parallel crawl + LLM plan fan out one agent per │ probe │ ┘ swarm, path-disc. (endpoint × vuln class) └───┬───┘ ≤12 concurrent) ▼ reduce ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ Strategist│◀──│ Patch │◀──│ Reporter │◀── finish ─│ lead_review│◀── ┌───────────┐ │ chains + │ │ fixes + │ │ remediation│ ▲ loop └───────────┘ │ aggregate │ │ risk score│ │ GitHub PR │ └───────────┘ │ deepen ▲ └─────┬─────┘ └─────┬─────┘ └───────────┘ └───────────────┘ │ ▼ ┌───────────┐ │ END │ Validator │◀──────────┘ └───────────┘ confirm / dedupe ``` **测试阶段是一个 map-reduce 集群。** `plan_probes` 将攻击面扩展为 N 个任务;`fan_out_probes` 为每个任务发出一个 LangGraph `Send`,以便探测 agent(HeadersAgent、XSSAgent、SQLiAgent、TLSAgent、CVEAgent 等)**在一个超级步骤中并发运行**;结果通过 `operator.add` reducer 通道合并;`aggregate` 将它们重新汇总。信号量限制了同时访问目标的数量。探测集群使用**零 LLM token** —— 只有编排 agent(Lead、Validator、Reporter、Patch、Strategist)会调用模型 —— 因此成本随*发现数量*而不是扫描规模而扩展。 ## 🔁 执行流程 1. **Recon** — 爬取目标*并*探测常见路径的字典文件,以映射更广泛的攻击面;对技术栈进行指纹识别。 2. **Lead (LLM)** — 对攻击面进行推理并决定测试内容。 3. **集群** — 为每个(endpoint × 检查项)并行分派一个专业 agent。 4. **Validator** — 确认真实发现,合并重复项/全站问题。 5. **Lead 审查 (LLM)** — 决定是否循环进行更深层次的扫描(更广泛的覆盖)或结束。 6. **Reporter (LLM)** — 为每个发现编写可操作的修复方案。 7. **Patch (LLM)** — 为首要发现草拟修复方案;可选择发起 GitHub PR。 8. **Strategist (LLM)** — 将发现串联成攻击路径并对整体风险进行评分。 结果通过 SSE 实时流式传输并持久化到 Postgres;重新扫描时会与历史记录进行比对 (HillClimb)。 ## 🧱 技术栈 | 层级 | 技术 | |---|---| | Agent 编排 | **LangGraph** + LangChain(提供商灵活:支持 OpenAI **或** Anthropic Claude) | | API | **FastAPI** + SSE,API 密钥和会话身份验证,多租户 | | 持久化 | **PostgreSQL** + SQLAlchemy 2.0 ORM + **Alembic** 迁移 | | Worker | 基于 Postgres 的任务队列(`FOR UPDATE SKIP LOCKED`) | | 前端 | **Next.js** (App Router) + Tailwind | | 基础设施 | **Docker Compose**;通过 GitHub Actions 进行 CI | | 扫描 | httpx + BeautifulSoup | ## 🚀 快速开始 **前置条件:** Python 3.12+,Node 18+,可访问的 Postgres,以及一个 LLM 密钥。 ``` # 1. 安装 python -m venv venv && source venv/bin/activate pip install -r requirements.txt cd ui && npm install && cd .. # 2. 配置 cp .env.example .env # set OPENAI_API_KEY (or LLM_PROVIDER=claude + ANTHROPIC_API_KEY) # 3. 使用单条命令启动一切 make dev # or: ./scripts/dev.sh ``` 这将启动 **API** (`:8000`)、一个 **worker**、**仪表盘** (`:3000`) 以及内置的**漏洞演示目标** (`:8780`),并应用数据库迁移。 然后打开 **http://localhost:3000**,注册,并扫描 **`http://localhost:8780`** —— 您将看到约 50 个 agent 并行展开,并返回约 28 个发现(XSS、SQLi、暴露的 `.env`、缺失的 headers 等)、攻击链以及建议的修复方案。 ### 全部在 Docker 中运行 ``` docker compose up -d --build # db + api (migrates on start) + worker + demo-target + juiceshop ``` ### 通过 API 驱动 ``` # 注册 -> session token + 一次性 API key curl -s -X POST localhost:8000/auth/signup -H 'content-type: application/json' \ -d '{"org_name":"Acme","email":"you@acme.com","password":"password123"}' # 加入扫描队列 curl -s -X POST localhost:8000/scans -H "authorization: Bearer rh_..." \ -H 'content-type: application/json' -d '{"target":"http://localhost:8780"}' # 关注实时 agent 日志 (SSE),然后读取结果 curl -N localhost:8000/scans//log -H "authorization: Bearer rh_..." ``` ## 📊 测试数据(实测) 针对内置演示目标的一次真实扫描(`make dev` → 扫描 `http://localhost:8780`): | 指标 | 数值 | |---|---| | 分发的并行 agent | **115**(分两轮执行) | | 确认的发现 | **28**(17 个高危,8 个中危,2 个低危,1 个信息) | | 攻击链 | **3** | | 建议的补丁 | **6** | | LLM token | 跨越 37 次调用 **10,655** 个 | | 预估成本 | **~$0.05** | 该集群比顺序执行检查快约 10 倍,并且由于只有编排 agent 使用 LLM,无论它运行了多少个 endpoint/agent,一次扫描的成本只需**几美分**。 ## 🔌 API 所有 endpoint 都限定于已通过身份验证的组织。 | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/auth/signup` · `/auth/login` | 创建组织 + 所有者 / 登录;返回一个会话 token(注册时附带一个一次性 API 密钥)。 | | `GET`/`POST` | `/auth/keys` | 列出 / 生成 API 密钥。 | | `GET`/`POST` | `/targets` · `POST /targets/{id}/verify` | 注册目标;证明所有权(DNS/HTTP)。 | | `POST` | `/scans` | 将扫描任务入队(除非是练习或已验证的目标,否则返回 403)。 | | `GET` | `/scans` · `/scans/{id}` | 列表 / 完整详情(发现、链、补丁、用量、日志)。 | | `GET` | `/scans/{id}/log` | 实时 agent 日志 (SSE)。 | | `GET` | `/scans/{id}/report` | 导出报告(`?format=markdown\|json`)。 | | `POST` | `/scans/{id}/pr` | 发起一个带有修复的 GitHub PR。 | | `GET`/`POST`/`DELETE` | `/integrations/github` | 连接 / 列出 / 断开仓库。 | 交互式文档位于 `http://localhost:8000/docs`。 ## 🧪 测试与 CI ``` make test # pytest: scope guard, security, ownership, swarm, GitHub PR, usage, API auth + tenancy ``` GitHub Actions 会在每次 push 时针对 Postgres 服务运行 lint 和完整的测试套件。 ## 📁 项目布局 ``` redhive/ agents/ orchestrator, recon, lead, probe (swarm), validator, lead_review, reporter, patch, strategist, graph tools/ crawl, discover (path probing), security_headers, tls, exposed_files, injection (xss/sqli), cors, csrf, open_redirect, outdated api/ FastAPI app + routers (auth, targets, scans, integrations) worker.py background scan executor (SKIP LOCKED queue) github_pr.py open remediation pull requests usage.py per-scan token + cost tracking scope.py the safety brake demo_target/ bundled intentionally-vulnerable practice app ui/ Next.js dashboard migrations/ Alembic tests/ pytest suite ``` ## 🗺️ 路线图 - 持续 / 定时扫描(通过 cron 重新扫描并显示随时间变化的趋势) - Slack / Jira / Linear 报警;CI/CD webhook 在部署时触发扫描 - 带身份验证的扫描(测试登录后区域)+ IDOR / SSRF 覆盖 - 运行时漏洞验证;微调的攻击性安全模型
作为自主渗透测试类别的一个可用切片而构建。仅限授权的练习目标。
标签:CISA项目, DLL 劫持, Splunk, Web安全, 多智能体, 大语言模型, 密码管理, 数据展示, 测试用例, 版权保护, 红队, 自动化漏洞扫描, 蓝队分析, 运行时操纵, 逆向工具, 配置审计