shan-silvestrece/AegisDesk
GitHub: shan-silvestrece/AegisDesk
AegisDesk:基于NIST框架的企业级安全事件管理系统。
Stars: 0 | Forks: 1
# AegisDesk
基于Django的基于NIST 4阶段事件响应框架的事件管理系统,用于跟踪和管理安全事件。AegisDesk帮助安全团队高效地报告、跟踪和解决组织资产中的安全事件。
## 功能
- **事件工单管理**:创建和跟踪具有详细描述的安全事件
- **NIST框架集成**:通过NIST事件响应阶段跟踪事件:
- 1. 准备
- 2. 检测与分析
- 3. 隔离、清除与恢复
- 4. 事件后活动
- 5. 已解决/已关闭
- **严重性分类**:按严重性(低、中、高、严重)对事件进行分类
- **资产管理**:跟踪针对特定组织资产的事件(服务器、工作站、网络设备、云存储库)
- **速率限制**:通过速率限制的工单提交来防止滥用(每分钟每IP地址5个工单)
- **用户认证**:安全的登录以进行认证事件报告
- **REST API**:JWT认证的RESTful API端点,用于程序性访问
- **审计日志**:事件创建和修改的全面日志记录
## 项目结构
```
AegisDesk/
├── AegisDesk/ # Main Django project settings
│ ├── settings.py # Django configuration
│ ├── urls.py # URL routing configuration
│ ├── wsgi.py # WSGI application
│ └── asgi.py # ASGI application
├── incident_core/ # Main application
│ ├── models.py # Database models (Asset, IncidentTicket)
│ ├── views.py # View functions
│ ├── api_views.py # REST API views
│ ├── serializers.py # DRF serializers
│ ├── forms.py # Django forms
│ ├── urls.py # App URL patterns
│ ├── admin.py # Django admin configuration
│ ├── templates/ # HTML templates
│ │ └── incident_core/
│ │ ├── base.html # Base template
│ │ ├── submit_ticket.html # Incident submission form
│ │ └── success.html # Success message
│ └── management/ # Custom management commands
│ └── commands/
│ └── populate_incidents.py # Sample data loader
├── requirements.txt # Python dependencies
├── manage.py # Django CLI tool
├── db.sqlite3 # SQLite database (development)
└── README.md # This file
```
## 架构概述
AegisDesk作为一个Django Web应用程序构建,具有独立的UI和API层:
- **Web UI**:Django视图和模板提供员工和管理员仪表板、事件提交和工单详细工作流程。
- **员工仪表板**:最终用户提交事件并跟踪他们自己的工单。
- **管理员仪表板**:IT/SecOps人员对事件进行分类、更新NIST响应阶段和管理事件队列。
- **API层**:Django REST Framework公开JWT保护的端点,用于远程监控工具和程序性事件摄取。
- **数据模型**:`IncidentTicket`捕获事件详细信息、严重性、NIST阶段、类别、报告者和受影响资产关系。
- **认证**:Web用户的Django会话认证和API客户端的Simple JWT。
- **安全**:CSRF保护、安全cookie、速率限制、审计日志和基于`is_staff`的角色访问控制。
- **HTML_IMAGE_BLOCK_0/**
## 设置过程
按照以下步骤在本地安装和运行AegisDesk:
1. 克隆仓库。
2. 创建并激活Python虚拟环境。
3. 从`requirements.txt`安装依赖项。
4. 使用`python manage.py migrate`应用数据库迁移。
5. 使用`python manage.py createsuperuser`创建Django超级用户。
6. 可选地使用`python manage.py populate_incidents`填充示例数据。
7. 使用`python manage.py runserver`启动开发服务器。
## 要求
- Python 3.9或更高版本
- pip(Python包安装程序)
- 虚拟环境(推荐)
## 安装
### Windows设置
1. **克隆仓库**:
git clone https://github.com/shan-silvestrece/AegisDesk.git
cd AegisDesk
2. **创建虚拟环境**:
python -m venv venv
3. **激活虚拟环境**:
# 命令提示符
venv\Scripts\activate
# PowerShell
.\venv\Scripts\Activate.ps1
4. **安装依赖项**:
pip install -r requirements.txt
5. **应用数据库迁移**:
python manage.py migrate
6. **创建超级用户(管理员帐户)**:
python manage.py createsuperuser
按照提示输入您的用户名、电子邮件和密码。
7. **加载示例数据(可选)**:
python manage.py populate_incidents
8. **运行开发服务器**:
python manage.py runserver
应用程序将在`http://localhost:8000`可用。
### macOS设置
1. **克隆仓库**:
git clone https://github.com/shan-silvestrece/AegisDesk.git
cd AegisDesk
2. **创建虚拟环境**:
python3 -m venv venv
3. **激活虚拟环境**:
source venv/bin/activate
4. **安装依赖项**:
pip install -r requirements.txt
5. **应用数据库迁移**:
python manage.py migrate
6. **创建超级用户(管理员帐户)**:
python manage.py createsuperuser
按照提示输入您的用户名、电子邮件和密码。
7. **加载示例数据(可选)**:
python manage.py populate_incidents
8. **运行开发服务器**:
python manage.py runserver
应用程序将在`http://localhost:8000`可用。
### Linux设置
1. **克隆仓库**:
git clone https://github.com/shan-silvestrece/AegisDesk.git
cd AegisDesk
2. **创建虚拟环境**:
python3 -m venv venv
3. **激活虚拟环境**:
source venv/bin/activate
4. **安装依赖项**:
pip install -r requirements.txt
5. **应用数据库迁移**:
python manage.py migrate
6. **创建超级用户(管理员帐户)**:
python manage.py createsuperuser
按照提示输入您的用户名、电子邮件和密码。
7. **加载示例数据(可选)**:
python manage.py populate_incidents
8. **运行开发服务器**:
python manage.py runserver
应用程序将在`http://localhost:8000`可用。
## 如何使用应用程序
### 访问应用程序
1. **管理员仪表板**:
- 导航到`http://localhost:8000/admin`
- 使用超级用户凭据登录
- 在此处可以管理资产、事件和用户
2. **用户仪表板**:
- 导航到`http://localhost:8000/`(或您配置的URL)
- 使用您的凭据登录
- 访问事件提交表单并查看您报告的事件
### 提交事件工单
1. 登录到应用程序
2. 导航到事件提交页面
3. 填写事件详细信息:
- **标题**:事件的简要描述
- **描述**:关于事件的详细信息
- **受影响资产**:选择受事件影响的具体资产
- **严重性级别**:从低、中、高或严重中选择
- **NIST阶段**:选择当前的事件响应阶段
4. 点击“提交工单”
5. 您将看到成功确认
### 管理资产
1. 前往Django管理面板`http://localhost:8000/admin`
2. 在“事件核心”下点击“资产”
3. 点击“添加资产”以创建新资产
4. 填写以下内容:
- **名称**:资产标识符(例如,“Server-01”,“Router-Main”)
- **资产类型**:从以下选项中选择:
- 企业服务器
- 员工工作站
- 网络路由器/交换机
- 云存储库
- **IP地址**:资产的IPv4或IPv6地址
5. 点击“保存”
### 查看和更新事件
1. 前往`http://localhost:8000/admin`
2. 在“事件核心”下点击“事件工单”
3. 使用以下信息查看所有报告的事件:
- 严重性级别
- NIST响应阶段
- 报告用户
- 受影响资产
- 创建和最后修改时间戳
4. 点击事件以更新其NIST阶段或其他详细信息,随着事件响应过程的进行
### 使用REST API
应用程序提供REST API端点以进行程序性访问:
**认证**:
```
curl -X POST http://localhost:8000/api/token/ \
-H "Content-Type: application/json" \
-d '{"username": "your_username", "password": "your_password"}'
```
**创建事件工单(认证)**:
```
curl -X POST http://localhost:8000/api/incidents/ \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Security Breach Detected",
"description": "Suspicious activity on server",
"affected_asset": 1,
"severity": "HIGH",
"nist_stage": "DETECTION_ANALYSIS"
}'
```
**检索事件**:
```
curl http://localhost:8000/api/incidents/ \
-H "Authorization: Bearer YOUR_TOKEN"
```
## 依赖项
- **Django 5.0.6**:Web框架
- **Django REST Framework 3.15.1**:REST API工具包
- **djangorestframework-simplejwt 5.3.1**:JWT认证
- **django-ratelimit 4.1.0**:API端点的速率限制
- **crispy-forms & crispy-bootstrap5**:增强表单渲染
## 速率限制
应用程序包括速率限制以防止滥用:
- **限制**:每分钟每IP地址5个工单
- **应用**:`submit_ticket`端点
- **行为**:当超出限制时返回403禁止响应
## 安全注意事项
- **仅限开发**:当前的`SECRET_KEY`是不安全的。对于生产部署:
- 生成一个新的`SECRET_KEY`
- 设置`DEBUG = False`
- 配置`ALLOWED_HOSTS`为您的域名
- 使用环境变量设置敏感设置
- 使用生产数据库(推荐使用PostgreSQL)
## 环境变量
对于生产部署,以下是在生产中推荐的配置环境变量。当前存储库使用静态设置进行开发,但在上线之前应切换到环境驱动设置。
- `DJANGO_SECRET_KEY` – 用于加密签名的密钥
- `DJANGO_DEBUG` – 生产中为`False`
- `DJANGO_ALLOWED_HOSTS` – 以逗号分隔的主机名
- `DATABASE_URL` – 生产数据库URL(例如,PostgreSQL)
- `REDIS_URL` – 如果使用Redis,则用于缓存和速率限制的后端URL
- `EMAIL_HOST` – SMTP服务器主机名
- `EMAIL_PORT` – SMTP服务器端口
- `EMAIL_HOST_USER` – SMTP用户
- `EMAIL_HOST_PASSWORD` – SMTP密码
- `SECURE_SSL_REDIRECT` – 在生产中强制HTTPS为`True`
- `SENTRY_DSN` – 如果使用Sentry,则可选的错误监控DSN
### 推荐的生产配置
1. 不要在生产中保留`DEBUG = True`。
2. 用`os.environ.get('DJANGO_SECRET_KEY')`替换`AegisDesk/settings.py`中的硬编码`SECRET_KEY`。
3. 将`ALLOWED_HOSTS`设置为实际域名或IP地址。
4. 使用生产数据库,如PostgreSQL,而不是SQLite。
5. 如果需要高吞吐量,则使用Redis进行缓存和速率限制。
## 故障排除
### 问题:“端口8000已被占用”
**解决方案**:在另一个端口上运行服务器:
```
python manage.py runserver 8001
```
### 问题:“没有模块名为django”
**解决方案**:确保您的虚拟环境已激活且已安装依赖项:
```
pip install -r requirements.txt
```
### 问题:“数据库表不存在”
**解决方案**:运行迁移:
```
python manage.py migrate
```
### 问题:无法登录到管理员面板
**解决方案**:确保您已创建超级用户:
```
python manage.py createsuperuser
```
## 贡献
欢迎贡献!请按照以下步骤操作:
1. 分叉仓库
2. 创建功能分支(`git checkout -b feature/AmazingFeature`)
3. 提交您的更改(`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支(`git push origin feature/AmazingFeature`)
5. 提交拉取请求
## 许可证
此项目是开源的,可在MIT许可证下使用。
## 支持
有关问题、问题或建议,请在GitHub仓库中创建问题。
## 作者
**AegisDesk开发团队**
GitHub:https://github.com/shan-silvestrece/AegisDesk
标签:Django, IT支持, JWT认证, NIST框架, REST API, 企业级应用, 后端开发, 安全事件管理, 安全团队工具, 安全漏洞, 审计日志, 用户认证, 票务系统, 网络测绘, 网络空间测绘, 资产跟踪, 软件开发