# 安全事件响应 Runbook ## 触发条件 - 发现未授权访问 - 收到安全漏洞报告 - 发现异常登录行为 - 遭受 DDoS 攻击 - 发现数据泄露 ## 紧急程度 | 级别 | 说明 | 响应时间 | |------|------|----------| | P0 | 数据泄露、服务器被入侵 | 立即 | | P1 | 账户被盗用、疑似入侵 | 1小时内 | | P2 | 暴力破解、异常行为 | 4小时内 | | P3 | 潜在漏洞、配置风险 | 24小时内 | ## 响应步骤 ### P0/P1 紧急响应(数据泄露、服务器被入侵) #### 1. 立即隔离 ```bash # 立即停止服务(保持证据) docker compose kill # 阻止外部访问(防火墙) sudo ufw deny 8080/tcp # 不要删除任何日志或数据 - 这是证据 ``` #### 2. 通知相关人员 ```bash # 通知运维负责人 # 通知开发团队 # 通知安全团队 # 如有数据泄露,通知法务/合规团队 ``` #### 3. 保留证据 ```bash # 导出当前日志 docker compose logs > incident_logs_$(date +%Y%m%d_%H%M%S).txt # 备份数据库(包含时间戳) cp ./data/user_management.db ./data/user_management.db.incident.$(date +%Y%m%d) # 记录当前系统状态 docker compose ps > system_status_$(date +%Y%m%d_%H%M%S).txt ``` #### 4. 评估影响 ```bash # 检查未授权操作 grep -E "unauthorized|failed login|invalid token" ./logs/app.log | tail -100 # 检查异常 IP 访问 grep "client_ip" ./logs/app.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -20 # 检查账户异常 sqlite3 ./data/user_management.db "SELECT username, created_at, last_login FROM users WHERE status='suspended';" ``` #### 5. 恢复服务(在隔离后) ```bash # 在确定原因并修复后,以最小权限重新启动 docker compose up -d # 监控系统异常 docker compose logs -f | grep -E "error|warning|unauthorized" ``` ### P2 响应(账户被盗用、疑似入侵) #### 1. 确认事件 ```bash # 检查登录日志 docker compose logs | grep -E "login|logout" | tail -50 # 检查失败登录尝试 grep "login.*failed" ./logs/app.log | tail -20 # 检查异常 IP grep "192.168.1.1" ./logs/app.log # 替换为可疑IP ``` #### 2. 锁定可疑账户 ```bash # 暂停可疑账户 curl -X PUT http://localhost:8080/api/v1/users/{user_id}/status \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"status":"suspended"}' # 撤销可疑设备信任 curl -X POST http://localhost:8080/api/v1/devices/{device_id}/untrust \ -H "Authorization: Bearer " ``` #### 3. 重置相关凭证 ```bash # 强制用户重置密码 # 通过管理员后台操作 # 撤销所有活跃 token # 需要开发团队介入清理 Redis/session 存储 ``` ### P3 响应(潜在漏洞、配置风险) #### 1. 记录漏洞 ```bash # 创建漏洞记录 cat > vulnerability_report_$(date +%Y%m%d).md << EOF # 漏洞报告 日期:[填写] 发现人:[填写] 漏洞描述:[详细描述] 影响范围:[评估影响] 复现步骤:[如何复现] 修复建议:[建议的修复方案] EOF ``` #### 2. 验证漏洞 ```bash # 如果是配置问题,检查当前配置 cat ./configs/config.yaml | grep -E "jwt|secret|password" # 如果是代码漏洞,在测试环境复现 ``` #### 3. 修复验证 ```bash # 在测试环境验证修复 # 确认修复有效后,在维护窗口更新生产环境 ``` ## 安全检查清单 ### 立即检查 - [ ] 服务已隔离或已停止(如需要) - [ ] 防火墙规则已更新 - [ ] 相关人员已通知 - [ ] 证据已保存 ### 事件评估 - [ ] 确认受影响账户/数据范围 - [ ] 确认攻击向量 - [ ] 评估业务影响 ### 恢复步骤 - [ ] 已修复漏洞/攻击向量 - [ ] 已重置受影响凭证 - [ ] 已加强监控 - [ ] 服务已恢复正常 ### 事后处理 - [ ] 编写事件报告 - [ ] 更新安全措施 - [ ] 安排复盘会议 - [ ] 更新 Runbook ## 常用命令参考 ```bash # 查看活跃登录 docker compose logs | grep "login.*success" # 查看失败登录 docker compose logs | grep "login.*failed" # 查看 Token 验证失败 docker compose logs | grep "invalid token" # 查看账户创建 docker compose logs | grep "user.*created" # 查看权限变更 docker compose logs | grep "permission" # 踢出指定用户所有会话 curl -X POST http://localhost:8080/api/v1/users/{user_id}/logout-all # 禁用账户 curl -X PUT http://localhost:8080/api/v1/users/{user_id}/status \ -H "Authorization: Bearer " \ -d '{"status":"suspended"}' ``` ## 联系人 - 安全团队:[填写] - 运维负责人:[填写] - 开发团队:[填写] - 法务/合规:[填写] ## 事后复盘 事件响应完成后,需要: 1. 编写详细事件报告 2. 分析根本原因 3. 制定长期改进措施 4. 更新安全 Runbook 5. 进行团队培训