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, 威胁情报, 安全大屏, 实时处理, 密码管理, 开发者工具, 搜索引擎查询, 测试用例, 自动化攻击, 自动化渗透测试, 自定义请求头, 请求拦截