Good-Security/shadowpulse

GitHub: Good-Security/shadowpulse

结合大语言模型与多种安全扫描器的自动化渗透测试与侦察指挥平台,提供 AI 交互式测试和确定性流水线两种工作模式。

Stars: 0 | Forks: 0

SHADOWPULSE

AI 原生安全渗透测试指挥中心

由 LLM 和 12 款集成安全扫描器驱动的智能侦察自动化平台。

功能 · 截图 · 快速开始 · 架构 · 技术栈 · 贡献

Python 3.11 Next.js 14 FastAPI PostgreSQL 16 Docker License: MIT

## 什么是 SHADOWPULSE? SHADOWPULSE 将大语言模型的智能与久经沙场的安全工具相结合,打造出一个自主的渗透测试助手。只需将其指向一个目标,它就能枚举子域名、扫描端口、探测 Web 服务并发现漏洞——这一切既可以通过 AI 驱动的聊天界面完成,也可以通过确定性的侦察 pipeline 来实现。 **两种运行模式:** | | 聊天模式 | 侦察模式 | |---|---|---| | **工作原理** | 会话式 AI 代理通过工具调用编排扫描 | 具有持续监控的确定性多阶段 pipeline | | **最适用于** | 探索性测试、临时查询、针对性深入分析 | 系统化的攻击面映射、计划性监控 | | **输出** | 通过 WebSocket 流式传输的实时发现 | 具有变更检测的结构化清单 | ## 功能 **AI 驱动的侦察** - 通过 LiteLLM 支持,使用 Claude 或 GPT-4 驱动的会话式聊天界面 - LLM 通过工具调用循环自主编排 12 款扫描器 - 通过 WebSocket 提供流式响应和实时扫描更新 **确定性侦察 Pipeline** - 多阶段 pipeline:Subfinder → DNS → Nmap → httpx → Nuclei - 可配置的扫描参数(最大主机数、目标、超时时间) - 运行取消和进度跟踪 - 选项卡式仪表板:概览、资产浏览器、服务浏览器和图表视图 **持续监控与变更检测** - 跨多次侦察运行跟踪资产 - 检测新资产、新服务、确认的下线状态以及未解决的变更 - 验证作业用于确认资产是否真正离线 **资产清单 (ReconGraph)** - 发现的子域名、IP、URL 和主机,并附带首次/最后一次看到的时间戳 - 服务枚举,跟踪端口、协议、产品和版本 - 资产之间的关系映射(DNS 解析、重定向) - 可过滤的资产和服务浏览器,支持搜索、类型/状态过滤以及可展开的详情行 - 单次运行的变更查看器:新发现、待验证、确认下线、未解决项目 **作业队列与调度** - 基于数据库的作业队列 — 无需 Redis - 计划性的定期扫描,具有可配置的时间间隔以及启用/禁用切换 - 调度管理:通过 UI 和 API 创建、更新和删除计划任务 - 使用 PostgreSQL `SKIP LOCKED` 实现并发 worker 执行 **安全加固** - 作用域强制校验:根据允许的域名、CIDR 和 URL 前缀验证每个扫描目标 - 并发限制:对同时进行的作业设置全局和单目标上限(可通过环境变量或单目标作用域进行配置) - 保留策略:自动清理旧的原始扫描输出和已完成的运行记录 - 审计跟踪:`run_events` 表记录 pipeline 启动、扫描执行、作业生命周期和用户操作 - 会话持久化:聊天会话通过 localStorage 在页面导航和浏览器刷新后依然存在 **12 款集成的安全扫描器** | 类别 | 工具 | |---|---| | 子域名枚举 | Subfinder, dnsx | | 端口扫描 | Nmap | | Web 探测 | httpx, Katana (爬虫), ffuf (模糊测试工具) | | 漏洞扫描 | Nuclei, Nikto, testssl.sh | | 自定义扫描器 | API 安全, OWASP Top 10 | ## 截图
指挥中心 — 聊天模式
侦察模式 — 目标仪表板
发现面板
## 快速开始 ### 前置条件 - [Docker](https://docs.docker.com/get-docker/) & Docker Compose - 来自 [Anthropic](https://console.anthropic.com/) 或 [OpenAI](https://platform.openai.com/) 的 API 密钥 ### 一条命令启动 ``` # 克隆仓库 git clone https://github.com/your-org/shadowpulse.git cd shadowpulse # 配置环境 cp .env.example .env # 编辑 .env 并添加你的 API key(s) # 启动所有服务 make docker-up ``` 就这样。打开 [http://localhost:3000](http://localhost:3000) 即可开始扫描。 ``` SHADOWPULSE is running: Frontend: http://localhost:3000 Backend: http://localhost:8000 API Docs: http://localhost:8000/docs Logs: make docker-logs Stop: make docker-down ``` ### 本地开发 ``` # 安装依赖 make install # 启动数据库 make db-up # 运行 backend + frontend(独立终端,或同时运行) make dev ```
环境变量参考 | 变量 | 描述 | 默认值 | |---|---|---| | `LLM_MODEL` | LLM 模型标识符 | `claude-sonnet-4-5-20250929` | | `ANTHROPIC_API_KEY` | Anthropic API 密钥 | — | | `OPENAI_API_KEY` | OpenAI API 密钥 | — | | `BACKEND_HOST` | 后端绑定地址 | `0.0.0.0` | | `BACKEND_PORT` | 后端端口 | `8000` | | `NEXT_PUBLIC_API_URL` | 前端 → 后端 URL | `http://localhost:8000` | | `NEXT_PUBLIC_WS_URL` | 前端 → WebSocket URL | `ws://localhost:8000` | | `TOOLS_CONTAINER` | Docker 工具容器名称 | `shadowpulse-tools` | | `DATABASE_URL` | PostgreSQL 连接字符串 | `postgresql+asyncpg://...` | | `MAX_CONCURRENT_JOBS_GLOBAL` | 最大并发作业数(所有目标) | `5` | | `MAX_CONCURRENT_JOBS_PER_TARGET` | 单个目标的最大并发作业数 | `2` | | `RETENTION_RAW_OUTPUT_DAYS` | 保留原始扫描输出的天数 | `30` | | `RETENTION_COMPLETED_RUNS_DAYS` | 保留已完成运行的天数 | `90` |
## 架构 ``` ┌─────────────────────────────────────────────────────┐ │ Frontend (Next.js) │ │ Chat UI · Recon Dashboard · Graph │ └──────────────┬──────────────────┬───────────────────┘ │ REST/HTTP │ WebSocket ▼ ▼ ┌─────────────────────────────────────────────────────┐ │ Backend (FastAPI) │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌───────────┐ │ │ │ AI Agent │ │ Recon │ │ Job Queue │ │ │ │ Orchestrator│ │ Pipeline │ │ & Scheduler│ │ │ └──────┬──────┘ └──────┬───────┘ └─────┬─────┘ │ │ │ │ │ │ │ └────────┬───────┘ │ │ │ ▼ │ │ │ ┌──────────────────────────┐ │ │ │ │ Scanner Interface │◄─────────────┘ │ │ │ (12 security scanners) │ │ │ └────────────┬─────────────┘ │ └───────────────┼─────────────────────────────────────┘ │ Docker exec ▼ ┌─────────────────────────────────────────────────────┐ │ Tools Container (Alpine) │ │ subfinder · nmap · httpx · nuclei · nikto · ffuf │ │ katana · dnsx · testssl · dig · nslookup │ └─────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────┐ │ PostgreSQL 16 │ │ targets · assets · services · edges · findings │ │ runs · scans · jobs · schedules · sessions │ │ run_events │ └─────────────────────────────────────────────────────┘ ``` ### 数据流 1. **聊天模式**:用户消息 → LLM 决定调用哪个扫描器 → 扫描器在工具容器中运行 → 结果被解析为发现项 → 通过流式传输返回给 UI 2. **侦察模式**:触发 pipeline → 各阶段按顺序执行(subfinder → DNS → nmap → httpx → nuclei) → 资产/服务被录入清单 → 针对前几次运行检测变更 ## 技术栈 | 层级 | 技术 | |---|---| | **前端** | Next.js 14, React 18, TypeScript, Tailwind CSS, Cytoscape.js | | **后端** | FastAPI, SQLAlchemy 2.0 (异步), Alembic, LiteLLM, Pydantic v2 | | **数据库** | 通过 asyncpg 连接 PostgreSQL 16 | | **实时通信** | 使用 WebSockets 进行实时扫描更新和聊天流式传输 | | **AI/LLM** | 通过 LiteLLM 抽象层使用 Claude (Anthropic) 或 GPT-4 (OpenAI) | | **安全工具** | Subfinder, Nmap, httpx, Nuclei, Nikto, Katana, ffuf, dnsx, testssl.sh | | **基础设施** | Docker Compose, 多架构 (ARM64 + x86_64) | ## 项目结构 ``` shadowpulse/ ├── backend/ │ ├── main.py # FastAPI application entry point │ ├── config.py # Environment & settings │ ├── database.py # SQLAlchemy models │ ├── agent/ # LLM orchestrator, tools, prompts │ ├── scanners/ # 12 scanner implementations │ ├── pipeline/ # Deterministic recon pipeline │ ├── recongraph/ # Asset inventory & normalization │ ├── routers/ # API endpoints │ ├── jobqueue/ # DB-backed job queue │ ├── scheduler/ # Recurring scan scheduler │ ├── worker/ # Job execution worker │ ├── websocket/ # WebSocket connection manager │ └── alembic/ # Database migrations ├── frontend/ │ ├── app/ # Next.js pages & routing │ ├── components/ # React components (chat, findings, recon) │ ├── lib/ # API client & TypeScript types │ └── hooks/ # Custom React hooks ├── docker/ # Dockerfiles (backend, frontend, tools) ├── docker-compose.yml # Multi-service orchestration ├── Makefile # Development commands └── .env.example # Environment template ``` ## API 概览 SHADOWPULSE 提供了一个 REST API,并在 `/docs` 路径下提供了交互式的 Swagger 文档。
端点 | 方法 | 端点 | 描述 | |---|---|---| | `POST` | `/api/targets` | 创建新目标 | | `GET` | `/api/targets` | 列出所有目标 | | `GET` | `/api/targets/{id}` | 获取目标详情 | | `POST` | `/api/targets/{id}/pipeline` | 启动侦察 pipeline 运行 | | `GET` | `/api/targets/{id}/assets` | 列出发现的资产 | | `GET` | `/api/targets/{id}/services` | 列出发现的服务 | | `GET` | `/api/targets/{id}/edges` | 列出资产关系 | | `GET` | `/api/targets/{id}/changes` | 获取变更检测结果 | | `GET` | `/api/targets/{id}/events` | 列出审计跟踪事件 | | `POST` | `/api/targets/{id}/schedules` | 创建定期扫描计划 | | `PATCH` | `/api/schedules/{id}` | 更新计划任务 | | `DELETE` | `/api/schedules/{id}` | 删除计划任务 | | `POST` | `/api/sessions` | 创建聊天会话 | | `POST` | `/api/sessions/{id}/chat` | 发送聊天消息 | | `WS` | `/ws/{session_id}` | 用于实时更新的 WebSocket |
## Makefile 命令 | 命令 | 描述 | |---|---| | `make docker-up` | 构建并启动所有服务 | | `make docker-down` | 停止所有服务 | | `make docker-logs` | 持续查看所有服务的日志 | | `make install` | 在本地安装后端和前端依赖 | | `make dev` | 以开发模式启动后端和前端 | | `make dev-backend` | 启动后端并开启热重载 | | `make dev-frontend` | 启动 Next.js 开发服务器 | | `make db-up` | 仅启动 PostgreSQL | | `make db-psql` | 打开 psql shell | | `make db-reset` | 销毁并重建数据库 | | `make tools-build` | 构建安全工具容器 | | `make tools-shell` | 进入工具容器的 shell | ## 路线图 - [x] 基于 PostgreSQL 的目标优先数据模型 - [x] 12 款集成的安全扫描器 - [x] 具备 LLM 工具调用编排能力的 AI 聊天模式 - [x] 确定性侦察 pipeline(subfinder → DNS → nmap → httpx → nuclei) - [x] 带有变更检测的资产清单 - [x] 基于数据库的作业队列和调度器 - [x] 完整的侦察模式 UI(资产清单浏览器、变更查看器、调度管理) - [x] 作用域强制校验和速率限制 - [x] 审计跟踪和保留策略 - [x] 跨页面导航的会话持久化 - [ ] 多用户身份验证 - [ ] 导出报告(PDF、JSON、CSV) - [ ] 用于自定义扫描器的插件系统 - [ ] 用于计划性安全检查的 CI/CD 集成 ## 免责声明 SHADOWPULSE 仅供**授权的安全测试**使用。在扫描任何目标之前,请务必确保您已获得明确的书面许可。未经授权的扫描是非法且不道德的。对于滥用此工具的行为,作者不承担任何责任。 ## 许可证 本项目基于 MIT 许可证授权 — 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。

由 Good Security 团队使用咖啡因和 Claude 构建。

标签:AV绕过, DLL 劫持, FastAPI, GitHub, 大语言模型, 实时处理, 密码管理, 测试用例, 版权保护, 自动化侦察, 逆向工具