A2A漏洞扫描器——基于AI的安全分析
一个多代理人工智能系统,扫描网站的安全漏洞。它使用 A2A(代理对代理)协议 用于编排和 MCP(模型上下文协议) 用于工具集成。专业代理协同工作:他们收集威胁情报,抓取网站,分析漏洞,并生成报告。
______________________________________________________________________
目录
______________________________________________________________________
概述
- 多代理设置:在运行时发现5个AI代理(编排器、web_search、web_scanner、漏洞分析器、报告生成器)。
- 精心编排的工作流程:Orchestrator运行管道,并通过以下方式按顺序调用其他代理 A2A.
- 工具:代理,如 网络搜索 使用 主控程序 用于威胁情报的服务器(例如DuckDuckGo、CVE搜索)。
- API:8000端口上的FastAPI网关;扫描和报告端点。
- 前端:Next.js应用程序,带有扫描表单、实时状态、结果和PDF导出。
技术栈
- 后端: Python 3.11、FastAPI、Uvicorn。
- 代理层: A2A(代理对代理)协议 用于代理间通信; MCP(模型上下文协议) 以及用于工具服务器的FastMCP;用于编排的LangChain/LangGraph。
- 前端: Next.js、TypeScript、顺风CSS。
______________________________________________________________________
协议和标准(A2A、MCP)
该项目建立在 A2A 和 主控程序:
- A2A(代理人对代理人) --编排器和所有代理使用A2A协议通过HTTP进行通信。每个代理都公开端点(例如。
/execute,/search,/scan,/analyze,/generate);编排器在运行时发现代理,并按顺序调用它们以运行扫描管道。这使代理保持解耦和可重用。
- MCP(模型上下文协议) --需要外部工具(如网络搜索、CVE查找)的代理连接到 MCP服务器The 网络搜索 代理使用MCP调用DuckDuckGo等工具进行HTML搜索;MCP客户端动态加载工具并且AI决定何时以及如何使用它们。该项目包括
mcp_servers模块和MCP客户端管理。
- 快速MCP --此代码库中的MCP服务器在适用的情况下使用FastMCP实现。
______________________________________________________________________
建筑
特工们互相交谈 A2A 网络搜索 代理使用 主控程序 访问外部工具。
API Gateway (port 8000)
/api/scan, /api/scan/{id}
│
▼
Orchestrator (8001)
Runs the 4-step pipeline
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
Web Search (8005) Web Scanner (8002) Vulnerability Analyzer (8003)
Threat intel, CVE Crawl, subdomains Headers, SSL, XSS, SQLi, etc.
│ │ │
└─────────────────────┼─────────────────────┘
▼
Report Generator (8004)
Summary, findings, PDF-ready report- API网关(8000): 接受
POST /api/scan和GET /api/scan/{scan_id}. - 编曲师(8001): 通过以下方式协调四个步骤 A2A;发现并调用每个代理的HTTP端点。
- 网络搜索(8005): 用途 主控程序 连接到工具服务器(例如DuckDuckGo HTML搜索、CVE搜索)以获取威胁/CVE上下文。
- 网络扫描仪(8002): 获取目标页面和链接页面,可选子域发现。
- 漏洞分析器(8003): 安全标头、SSL、表单、XSS、SQLi、过时的技术。
- 报告生成器(8004): 执行摘要、调查结果、建议、PDF结构。
______________________________________________________________________
扫描管道
当您开始扫描时,编排器按顺序运行四个步骤:
- 网络搜索 --收集有关目标/技术的公共信息和CVE。
- Web扫描仪 --抓取目标URL并发现页面(以及可选的子域)。
- 漏洞分析器 --评估标头、SSL、表单、XSS、SQLi和技术栈。
- 报告生成器 --构建执行摘要、详细调查结果和建议。
前端民意调查 GET /api/scan/{scan_id} 直到 status 是 completed 或 failed,然后显示结果。
______________________________________________________________________
用户界面
UI是一个包含以下部分的单页应用程序(这里没有逻辑,只有结构):
- 头球
- 应用程序名称(例如“SecureScan AI”)、简短标语、小型“安全”和“深度扫描”徽章。
- 信息横幅
- “仅用于教育目的”,并注明只扫描您允许测试的目标。
- 扫描表单(开始新扫描)
- 目标网址 --文本输入,例如。 https://example.com. - 扫描深度 --滑块(例如1-5);低=更快,高=更彻底。 - 包括子域发现 --复选框。 - 启动安全扫描 --提交;运行时显示“正在扫描…”。
- 结果(扫描开始后)
- 正在进行中: - Spinner,“正在扫描”,当前 status,短信,如“正在分析网站…”、“正在检查安全性…”和“正在生成报告…”。 - 失败: - 错误图标和消息。 - 完整的: - 成功标头 --目标URL。 - 漏洞摘要 --按严重程度计数(例如严重、高、中、低、信息)。 - 执行摘要 --文本块。 - 漏洞列表 --每个都有标题、严重程度、描述、受影响的URL、证据、补救措施、CWE(如果存在)。 - 建议 --编号列表。 - 导出PDF --下载报告PDF的按钮(从相同的结果数据在客户端生成)。
- 空状态
- 未启动扫描时显示:“准备扫描”和简短说明。
- 页脚
- 版权、“仅供教育使用”以及隐私、条款、文档的占位符。
______________________________________________________________________
先决条件
- 码头工人 和 Docker Compose (针对AI服务)。
- Node.js 18+及 npm (对于前端,如果您在本地运行它)。
- API密钥
- OPENAI_API_KEY (LLM电话需要)。 - OPENAI_BASE_URL (可选;默认 https://api.openai.com/v1;可以指向Azure/其他)。 - GOOGLE_API_KEY (可选;对于某些代理/工具)。
______________________________________________________________________
如何跑步
1.人工智能服务(后端+代理)
从项目根:
cd ai-service根据示例创建env:
cp .env.example .env编辑 .env 并且至少设置:
OPENAI_API_KEY=your_keyOPENAI_BASE_URL(如果使用自定义端点)GOOGLE_API_KEY(可选)
启动堆栈:
docker compose up- API http://localhost:8000
- 文件: http://localhost:8000/docs
您可能会看到:\ the attribute version is obsolete\ --那是从 version 领域 docker-compose.yml忽略或删除是安全的 version 以清除警告。
2.前端(可选,用于UI)
在另一个终端中,从项目根目录开始:
cd frontend创建env(这样应用程序就知道API在哪里):
cp .env.example .env.local确保 .env.local 有:
NEXT_PUBLIC_API_URL=http://localhost:8000安装并运行:
npm install
npm run dev打开 http://localhost:3000Next.js应用程序重写 /api/* 到 http://localhost:8000/api/*,因此“启动安全扫描”将调用AI服务。
3.运行顺序
- 首先启动AI服务:
cd ai-service && docker compose up - 代理启动后,启动前端:
cd frontend && npm run dev - 使用UI
http://localhost:3000或者直接调用API。
______________________________________________________________________
示例执行
当AI服务启动时,它会加载代理并注册它们:
INFO: Starting Vulnerability Scanner Backend
INFO: Loading and starting agents...
INFO: Discovered 5 agents: ['orchestrator', 'report_generator', 'vulnerability_analyzer', 'web_scanner', 'web_search']
INFO: → orchestrator will run at: http://0.0.0.0:8001
INFO: → report_generator will run at: http://0.0.0.0:8004
INFO: → vulnerability_analyzer will run at: http://0.0.0.0:8003
INFO: → web_scanner will run at: http://0.0.0.0:8002
INFO: → web_search will run at: http://0.0.0.0:8005
INFO: ✓ Started 5/5 agents
INFO: Application started successfully当扫描开始时(例如从UI):
INFO: Started scan for https://www.example.com
INFO: Starting dynamic scan ... for https://www.example.com
INFO: Step 1: Web Search Intelligence
INFO: Calling web_search at http://localhost:8005/search
...
INFO: Search agent completed for https://www.example.com
INFO: Step 2: Web Scanner
INFO: Calling web_scanner at http://localhost:8002/scan
...
INFO: Web scanner completed for https://www.example.com: 50 pages discovered
INFO: Step 3: Vulnerability Analyzer
INFO: Calling vulnerability_analyzer at http://localhost:8003/analyze
...
INFO: Vulnerability analysis completed: 8 vulnerabilities found
INFO: Step 4: Report Generator
INFO: Calling report_generator at http://localhost:8004/generate
...
INFO: Report generation completed for scan
INFO: Scan completed successfullyAPI返回关于 GET /api/scan/{scan_id} 当 status 是 completed.
______________________________________________________________________
配置
人工智能服务(.env 在 ai-service/)
| 变量 | 必填 | 描述 |
|---|---|---|
OPENAI_API_KEY | 是 | OpenAI(或兼容)API密钥 |
OPENAI_BASE_URL | 否 | 聊天API的基本URL(默认值: https://api.openai.com/v1) |
GOOGLE_API_KEY | 否 | 适用于使用Google API的代理 |
LOG_DIR | 否 | 日志目录(默认: logs) |
API_GATEWAY_HOST | 否 | 绑定主机(默认值: 0.0.0.0) |
API_GATEWAY_PORT | 没有 | API端口(默认值: 8000) |
前端(.env.local 在 frontend/)
| 变量 | 描述 |
|---|---|
NEXT_PUBLIC_API_URL | 后端基本URL,例如。 http://localhost:8000 |
______________________________________________________________________
项目结构
Vulnerability Scanner/
├── ai-service/
│ ├── agents/ # A2A agents (orchestrator, web_search, web_scanner, etc.)
│ │ ├── orchestrator/ # Runs the 4-step pipeline via A2A
│ │ ├── web_search/ # Threat intel via MCP (DuckDuckGo, CVE, etc.)
│ │ ├── web_scanner/ # Crawling, subdomains
│ │ ├── vulnerability_analyzer/
│ │ └── report_generator/
│ ├── mcp_servers/ # MCP client manager, tool servers (FastMCP)
│ ├── api/ # FastAPI app, /api/scan routes
│ ├── shared_utils/ # Base agents, models, tools
│ ├── main.py # Uvicorn app entry
│ ├── docker-compose.yml
│ ├── Dockerfile
│ └── .env.example
├── frontend/
│ ├── app/ # Next.js pages (page.tsx, layout, globals.css)
│ ├── components/ # ScanForm, ResultsDisplay, PDFExport
│ ├── next.config.ts # /api/* → backend
│ └── .env.example
└── README.md______________________________________________________________________
MCP服务器
- MCP配置已在
ai-service/mcp_servers/servers.json
自定义MCP服务器添加:
示例:天气MCP:
{
"Weather": {
"command": "python",
"args": ["-m", "a2a_server.mcp.servers.weather"],
"transport": "stdio"
},
"Weather (UV)": {
"command": "uv",
"args": ["run", "python", "-m", "a2a_server.mcp.servers.weather"],
"transport": "stdio"
}
}外部MCP服务器:
示例DuckDuckGo(MCP):
这 网络搜索 代理使用DuckDuckGo MCP服务器进行威胁和CVE搜索:
"ddg-search": {
"command": "uvx",
"args": ["duckduckgo-mcp-server"],
"transport": "stdio"
}- 运行时间:
uvx duckduckgo-mcp-server--要求uv在环境中(Docker镜像安装它)。uvx获取并运行duckduckgo-mcp-server首次使用时包装。 - 没有API密钥 --使用DuckDuckGo HTML搜索;没有密钥或环境变量。
- 自定义: 要更改命令或参数,请编辑
mcp_servers/servers.jsonTheweb_search代理加载ddg-search该文件中的条目。
许可证
这个项目是为了 仅限教育和授权测试。仅扫描您拥有或有权测试的系统。
请参阅 LICENSE 条款文件。该项目的部分内容可能使用Apache License 2.0和其他开源许可证(如A2A、LangGraph、MCP、FastMCP)下的代码。
