漏洞扫描器

一个基于多代理AI系统的漏洞扫描器,用于检测网站安全漏洞,支持A2A协议和MCP协议。

  • by khaleddeissa
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Khaledayman9/A2A-Vulnerability-Scanner

使用说明

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结构。

扫描管道

当您开始扫描时,编排器按顺序运行四个步骤:

  1. 网络搜索 --收集有关目标/技术的公共信息和CVE。
  2. Web扫描仪 --抓取目标URL并发现页面(以及可选的子域)。
  3. 漏洞分析器 --评估标头、SSL、表单、XSS、SQLi和技术栈。
  4. 报告生成器 --构建执行摘要、详细调查结果和建议。

前端民意调查 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_key
  • OPENAI_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.运行顺序

  1. 首先启动AI服务: cd ai-service && docker compose up
  2. 代理启动后,启动前端: cd frontend && npm run dev
  3. 使用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 <scan_id> 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 <scan_id>
INFO: Scan <scan_id> completed successfully

API返回关于 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.jsonThe web_search 代理加载 ddg-search 该文件中的条目。

许可证

这个项目是为了 仅限教育和授权测试。仅扫描您拥有或有权测试的系统。

请参阅 LICENSE 条款文件。该项目的部分内容可能使用Apache License 2.0和其他开源许可证(如A2A、LangGraph、MCP、FastMCP)下的代码。