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, 企业级应用, 后端开发, 安全事件管理, 安全团队工具, 安全漏洞, 审计日志, 用户认证, 票务系统, 网络测绘, 网络空间测绘, 资产跟踪, 软件开发