cyr6x/ccorp-sirts
GitHub: cyr6x/ccorp-sirts
面向 SOC 团队的全栈安全事件响应与工单管理系统,提供结构化的事件生命周期管理、角色权限控制和 CVE 漏洞增强,解决安全运营中事件追踪混乱、协作低效的问题。
Stars: 0 | Forks: 0
# CCorp SIRTS
**安全事件响应与工单系统** — 网络安全与网络工学学士(荣誉)| 毕业设计项目
## 项目背景
安全运营中心常常被大量非结构化的事件数据所淹没。分析师们把时间浪费在电子邮件线程和电子表格中追踪状态更新,而真正的威胁却在不断升级。CCorp SIRTS 以现实世界的 IR 工作流为模型,用一个结构化、感知角色的工单系统取代了这种混乱局面——为 SOC 团队提供了从检测到关闭的统一视图,每一次操作都被记录,每一个决策都可追溯。
## 在线演示

## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ BROWSER │
│ React 18 + Vite + Tailwind CSS + Recharts │
│ LoginPage │ Dashboard │ Incidents │ Detail │ Admin Panel │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP/REST (JWT Bearer Token)
┌──────────────────────▼──────────────────────────────────────┐
│ EXPRESS.JS API (Port 5000) │
│ Auth Middleware → Role Guard → Controllers → Prisma ORM │
│ │
│ /api/auth /api/incidents /api/users /api/dashboard │
└──────────────────────┬──────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────┐
│ PostgreSQL Database (via Prisma ORM) │
│ Users │ Incidents │ Comments │ AuditLogs │ Sessions │
└─────────────────────────────────────────────────────────────┘
│
┌────────────▼────────────┐
│ NVD CVE API (External) │
│ CVE enrichment on │
│ incident creation │
└─────────────────────────┘
```
## 技术栈
| 层级 | 技术 |
|---|---|
| **Frontend** | React 18, Vite, Tailwind CSS, React Router v6, Recharts |
| **Backend** | Node.js, Express.js (ES Modules) |
| **Database** | PostgreSQL via Prisma ORM |
| **Auth** | JWT (jsonwebtoken), bcryptjs |
| **External API** | NVD CVE API (漏洞增强) |
| **API Style** | RESTful JSON |
## 核心功能
- **基于角色的访问控制** — 包含 ADMIN、SOC_LEAD、ANALYST、VIEWER 角色及受保护的路由
- **事件生命周期管理** — 创建、更新、上报、解决和关闭事件
- **SOC 仪表盘** — 柱状图(按天统计事件)、饼图(按类别)、统计卡片、最近事件动态
- **事件详情视图** — 完整的事件元数据、状态更新、评论/笔记、审计日志时间线
- **CVE 增强** — 事件可以关联到 CVE ID,并从 NVD API 拉取实时数据
- **管理面板** — 在选项卡界面中进行用户角色管理和事件分配
- **审计日志** — 每次状态更改和操作都会记录时间戳和操作者
- **JWT 身份验证** — 考虑了 HTTP-only 的无状态认证
- **暗色网络安全 UI** — Tailwind CSS 暗色主题,带有严重程度/状态的颜色编码徽章
## 项目结构
```
ccorp-sirts/
├── client/ # React frontend (Vite)
│ └── src/
│ ├── api/ # Axios instance
│ ├── components/ # Navbar
│ ├── context/ # AuthContext (JWT)
│ └── pages/ # All page components
│ ├── LoginPage.jsx
│ ├── DashboardPage.jsx
│ ├── IncidentsPage.jsx
│ ├── IncidentDetailPage.jsx
│ ├── NewIncidentPage.jsx
│ └── UsersPage.jsx
│
└── server/ # Express backend
├── controllers/ # Business logic
├── middleware/ # Auth + Role guards
├── prisma/
│ ├── schema.prisma # DB schema
│ └── seed.js # Demo data seeder
└── routes/ # API routes
```
## 快速开始
### 前置条件
- Node.js >= 18
- PostgreSQL 数据库
- npm 或 yarn
### 1. 克隆并安装
```
git clone https://github.com/cyr6x/ccorp-sirts.git
cd ccorp-sirts
# 安装服务器依赖
cd server && npm install
# 安装客户端依赖
cd client && npm install
```
### 2. 配置环境
```
# server/.env(以 .env.example 作为参考)
DATABASE_URL="postgresql://USER:PASSWORD@localhost:5432/ccorp_sirts"
JWT_SECRET="your-super-secret-jwt-key"
PORT=5000
DIRECT_URL="postgresql://USER:PASSWORD@localhost:5432/ccorp_sirts"
# client/.env
VITE_API_URL=http://localhost:5000/api
```
### 3. 数据库设置
```
cd server
# 运行 migrations
npx prisma migrate dev --name init
# 生成 Prisma 客户端
npx prisma generate
# 填充 demo 数据
npx prisma db seed
```
### 4. 运行开发服务器 (Frontend)
```
# 终端 1 — Backend(端口 5000)
cd client && npm run dev
# 终端 2 — Frontend(端口 5173)
cd client && npm run dev
```
在浏览器中打开 http://localhost:5173。
## 演示凭据
| 角色 | 邮箱 | 密码 | 权限 |
|---|---|---|---|
| Admin | `admin@ccorp.local` | `Admin@1234` | 完整系统访问权限 |
| SOC Lead | `lead@ccorp.local` | `Lead@1234` | 管理事件,分配分析师 |
| Analyst | `analyst@ccorp.local` | `Analyst@1234` | 创建并处理事件 |
| Viewer | `viewer@ccorp.local` | `Viewer@1234` | 只读访问权限 |
## API 参考
### 身份验证
| 方法 | 端点 | 描述 |
|---|---|---|
| POST | `/api/auth/login` | 登录,返回 JWT |
| POST | `/api/auth/register` | 注册新用户 |
| GET | `/api/auth/me` | 获取当前用户 |
### 事件
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | `/api/incidents` | 列出所有事件 |
| GET | `/api/incidents/:id` | 获取事件 + 评论 + 审计日志 |
| POST | `/api/incidents` | 创建新事件 |
| PATCH | `/api/incidents/:id` | 更新事件 |
| DELETE | `/api/incidents/:id` | 删除(仅限 Admin) |
| POST | `/api/incidents/:id/comments` | 添加评论 |
### 用户
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | `/api/users` | 列出所有用户 (Admin) |
| PATCH | `/api/users/:id` | 更新用户角色 (Admin) |
### 仪表盘
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | `/api/dashboard/stats` | 用于仪表盘图表的事件统计 |
## 事件类别
`PHISHING` `MALWARE` `UNAUTHORIZED_ACCESS` `DDoS` `DATA_BREACH` `INSIDER_THREAT` `OTHER`
## 严重程度级别
| 级别 | 颜色 | SLA |
|---|---|---|
| CRITICAL | 🔴 红色 | 要求立即响应 |
| HIGH | 🟠 橙色 | 在 1 小时内响应 |
| MEDIUM | 🟡 黄色 | 在 4 小时内响应 |
| LOW | 🟢 绿色 | 在 24 小时内响应 |
## 学术与专业背景
本项目作为网络安全与网络工学学士(荣誉)的毕业设计项目开发。展示了以下方面的实际应用:
- **事件响应** — 符合 NIST SP 800-61 的结构化 IR 工作流(识别 → 抑制 → 根除 → 恢复 → 经验教训)
- **网络安全** — JWT 身份验证、基于角色的授权、无状态 API 设计
- **SOC 运营** — 分析师工作流、上报路径、审计追踪、CVE 关联增强
- **安全开发** — 密码哈希、受保护的 API 路由、输入验证、环境变量隔离
## 路线图
- [ ] 添加演示 GIF (`docs/demo.gif`)
- [ ] 导出 draw.io 架构图 (`docs/architecture.drawio`)
- [ ] 扩展 CVE API 集成并显示 CVSS 评分
- [ ] 创建 CRITICAL 级别事件时添加电子邮件通知
- [ ] Docker 化全栈以实现一键部署
## 许可证
MIT — 允许学术使用,但需注明出处。
标签:CMS安全, Express, GNU通用公共许可证, JavaScript, JWT, MITM代理, Node.js, Prisma ORM, React, Recharts, RESTful API, Syscalls, Tailwind CSS, TypeScript, Vite, 单页面应用, 安全告警管理, 安全插件, 安全管理平台, 安全运营中心, 实战演练, 工单系统, 提示词优化, 毕业设计, 测试用例, 网络威胁, 网络安全, 网络映射, 网络研究, 自定义脚本, 角色权限控制, 隐私保护