wanglinsaputra/SentinelAI

GitHub: wanglinsaputra/SentinelAI

一个集被动侦察、主动 DAST 扫描、威胁情报查询和 AI 自动报告生成于一体的应用安全测试平台。

Stars: 0 | Forks: 0

# SentinelAI **AI 安全平台** — 自动化安全扫描、威胁情报、AI 驱动的报告。 基于 Next.js 15、NestJS 11、PostgreSQL、Redis、BullMQ、Prisma 和 Docker 构建。 ## 核心功能 | 功能 | 描述 | |-------|-----------| | **被动扫描器** | DNS 侦察、子域名枚举、技术栈检测、安全 headers、SSL 检查 | | **主动 DAST** | Fuzzing、XSS、SQLi、SSRF、IDOR、文件上传、CSRF、依赖项漏洞检查 | | **威胁情报** | 通过 NVD API 查询 CVE、OWASP CWE 分类 | | **AI 报告生成器** | 由 OpenAI 驱动的执行摘要、修复路线图、技术报告 | | **仪表盘** | 安全评分仪表、严重程度分布、趋势图表、近期扫描 | | **监控** | Prometheus 指标、Grafana 仪表盘、系统健康状态 | | **集成** | Slack webhook、Jira issue 创建器、自定义 webhook | | **多租户** | 组织、项目、团队角色(Owner/Admin/Member) | | **认证** | JWT 登录/注册、Passport、bcrypt | ## 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Next.js 15 (apps/web) │ │ Dashboard · Reports · Monitoring │ └──────────────────────┬──────────────────────────────────────┘ │ HTTP ┌──────────────────────▼──────────────────────────────────────┐ │ NestJS 11 API (apps/api) │ │ Auth · Projects · Scans · Findings · Reports · Webhook │ └──────┬──────────────────────┬───────────────────┬───────────┘ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │PostgreSQL│ │ Redis │ │ Prometheus │ │ Prisma │ │ BullMQ │ │ Grafana │ └──────────┘ └──────┬───────┘ └──────────────┘ │ ┌────────┴────────┐ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │passive-scanner│ │active-scanner│ │ DNS · Recon │ │ DAST · XSS │ │ Tech Detect │ │ SQLi · SSRF │ └──────────────┘ └──────────────┘ └────────┬────────┘ ▼ ┌──────────────┐ │ ai-worker │ │ OpenAI GPT │ │ Reports │ └──────────────┘ ``` ## 系统要求 - **Node.js** >= 22.0.0 - **pnpm** >= 9.0.0 - **Docker** & **Docker Compose**(用于 PostgreSQL、Redis、Prometheus、Grafana) - **Git** ## 完整安装指南 ### 1. 克隆仓库 ``` git clone cd security-vuln ``` ### 2. 安装依赖 ``` pnpm install ``` ### 3. 设置环境变量 ``` # 复制 example env cp .env.example .env ``` 根据需要编辑 `.env`: ``` DATABASE_URL="postgresql://postgres:postgres@localhost:5432/sentinelai?schema=public" REDIS_URL="redis://localhost:6379" JWT_SECRET="your-super-secret-key-change-in-production" OPENAI_API_KEY="sk-your-openai-key" # Optional, untuk AI report ``` ### 4. 设置数据库 ``` # 生成 Prisma client pnpm db:generate # 将 schema 推送至 database(不使用 migrasi) pnpm db:push # 或使用 migrasi(production) pnpm db:migrate # (可选)打开 Prisma Studio 查看数据 pnpm db:studio ``` ### 5. 启动基础设施 ``` # 运行 PostgreSQL, Redis, Prometheus, Grafana docker-compose up -d postgres redis prometheus grafana ``` ### 6. 启动 API 服务器 ``` # 终端 1:API Server pnpm --filter @sentinelai/api dev ``` API 运行在 `http://localhost:3001`。 - Swagger 文档:`http://localhost:3001/api/docs` - 健康检查:`http://localhost:3001/api/v1/health` - 指标:`http://localhost:3001/metrics` ### 7. 启动前端 ``` # 终端 2:Next.js Frontend pnpm --filter @sentinelai/web dev ``` 前端运行在 `http://localhost:3000`。 ### 8. 启动 Workers ``` # 终端 3:Passive Scanner Worker pnpm --filter @sentinelai/worker-passive dev # 终端 4:Active DAST Worker pnpm --filter @sentinelai/worker-active dev # 终端 5:AI Worker(需要 OPENAI_API_KEY) pnpm --filter @sentinelai/worker-ai dev ``` ### 9. 初始设置(首次运行) 1. 打开 `http://localhost:3000` 2. 注册新账号 3. 创建组织 4. 创建项目(输入目标域名) 5. 开始扫描 — 选择被动或主动扫描 ## Docker 生产环境 运行所有服务(包括 workers): ``` # 构建所有 service docker compose build # 运行所有 docker compose up -d # 查看 logs docker compose logs -f api worker-passive worker-active worker-ai ``` ## 监控 | 服务 | URL | 凭证 | |---------|-----|-------------| | Prometheus | http://localhost:9090 | - | | Grafana | http://localhost:3000 | admin / admin | | API 指标 | http://localhost:3001/metrics | - | Grafana 已自动配置 Prometheus 数据源。您可以添加自己的仪表盘,或从 Grafana 仪表盘 ID `1860` (Node.js) 导入。 ## 技术栈 ### 前端 - **Next.js 15** — App Router、RSC、Server Actions - **React 19** — Server Components - **Tailwind CSS 3.4** — Utility-first CSS - **Framer Motion 11** — 动画 - **TanStack Query 5** — 数据获取 - **shadcn/ui** — UI 组件(Radix primitives) - **Lucide React** — 图标 - **Sonner** — Toast 通知 ### 后端 - **NestJS 11** — 框架 - **Prisma 6** — ORM - **PostgreSQL 16** — 数据库 - **Redis 7** — 队列与缓存 - **BullMQ 5** — 任务队列 - **Passport JWT** — 身份验证 - **Swagger** — API 文档 - **Helmet** — 安全 headers - **Throttler** — 频率限制 ### Workers - **passive-scanner** — DNS、子域名、技术检测、安全 headers - **active-scanner** — 使用 Puppeteer 进行 DAST(XSS、SQLi、SSRF、fuzzing) - **ai-worker** — 使用 OpenAI GPT-4o-mini 生成报告 ### 监控与可观测性 - **Prometheus** — 指标收集 - **Grafana** — 仪表盘可视化 - **Pino** — 结构化日志(通过 NestJS) ## API Endpoints ### 认证 | 方法 | 路径 | 描述 | |--------|------|-------------| | POST | `/api/auth/register` | 注册用户 | | POST | `/api/auth/login` | 登录,返回 JWT | ### 项目 | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/api/projects` | 项目列表 | | POST | `/api/projects` | 创建项目 | | GET | `/api/projects/:id` | 项目详情 | | PATCH | `/api/projects/:id` | 更新项目 | | DELETE | `/api/projects/:id` | 删除项目 | ### 扫描 | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/api/scans` | 扫描列表 | | POST | `/api/scans` | 创建扫描(被动/主动) | | GET | `/api/scans/:id` | 包含发现结果与步骤的扫描详情 | ### 发现结果 | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/api/findings` | 发现结果列表(`?scanId=&severity=`) | | GET | `/api/findings/:id` | 发现结果详情 | | PATCH | `/api/findings/:id/status` | 更新状态 | | POST | `/api/findings/:id/enrich` | 利用威胁情报进行补充 | ### 报告 | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/api/reports` | 扫描报告列表 | | GET | `/api/reports/:id` | 报告详情 | | POST | `/api/reports/generate/:scanId` | 生成 AI 报告 | ### 集成 | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/api/integrations/webhooks` | Webhook 列表 | | POST | `/api/integrations/webhooks` | 创建 Webhook | | PATCH | `/api/integrations/webhooks/:id` | 更新 Webhook | | DELETE | `/api/integrations/webhooks/:id` | 删除 Webhook | | POST | `/api/integrations/webhooks/:id/test` | 测试 Webhook | ### 监控 | 方法 | 路径 | 描述 | |--------|------|-------------| | GET | `/metrics` | Prometheus 指标 | | GET | `/api/v1/health` | 健康检查 | ## 项目结构 ``` security-vuln/ ├── apps/ │ ├── api/ # NestJS backend │ │ └── src/ │ │ ├── auth/ # JWT login/register │ │ ├── organizations/ # Multi-tenant orgs │ │ ├── projects/ # Project CRUD │ │ ├── scans/ # Scan management + queue │ │ ├── findings/ # Findings + threat intel │ │ ├── reports/ # AI report generation │ │ ├── assets/ # Asset management │ │ ├── dashboard/ # Dashboard stats API │ │ ├── integrations/ # Webhooks + Slack/Jira │ │ ├── monitoring/ # Prometheus metrics │ │ └── health/ # Health check │ └── web/ # Next.js frontend │ ├── public/ # Static assets (favicon, etc.) │ └── src/ │ ├── app/dashboard/ # Dashboard pages │ └── components/ # UI components ├── workers/ │ ├── passive-scanner/ # Recon worker │ ├── active-scanner/ # DAST worker (Puppeteer) │ └── ai-worker/ # AI report worker (OpenAI) ├── packages/ │ └── database/ # Prisma schema + client ├── docker/ │ ├── Dockerfile.api │ ├── prometheus.yml │ └── grafana-datasources.yml ├── docker-compose.yml └── package.json ``` ## 环境变量 | 变量 | 默认值 | 必需 | 描述 | |----------|---------|----------|-------------| | `DATABASE_URL` | - | ✅ | PostgreSQL 连接字符串 | | `REDIS_URL` | `redis://localhost:6379` | ✅ | Redis 连接字符串 | | `JWT_SECRET` | - | ✅ | 用于 JWT 签名的 Secret key | | `OPENAI_API_KEY` | - | ❌ | OpenAI key(AI 报告) | | `NODE_ENV` | `development` | ❌ | 环境模式 | ## ⚠️ 免责声明 **SentinelAI 专为网络安全的学习和研究目的而创建。** 本平台仅可用于: - 自有的系统 - 已获得所有者书面许可的系统 - 隔离的实验室/实践环境 **严禁使用 SentinelAI 进行以下操作:** - 未经许可扫描系统 - 非法利用漏洞 - 任何违法活动 作为创建者,我**不对**本平台的滥用行为负责。 用户须对遵守适用法律负全部责任。 ## 许可证 该项目基于 **Apache License 2.0** 授权。 有关完整的许可证详情,请参阅 [LICENSE](LICENSE) 文件。
标签:CISA项目, DAST扫描, GitHub, 威胁情报, 安全大屏, 实时处理, 密码管理, 开发者工具, 搜索引擎查询, 测试用例, 自动化攻击, 自动化渗透测试, 自定义请求头, 请求拦截