完成 Runbook 目录建设: - 05-config-update.md: 配置更新流程和回滚 - 06-security-incident.md: 安全事件分级和响应流程 - 07-incident-response.md: 服务事件分级和应急响应
224 lines
4.7 KiB
Markdown
224 lines
4.7 KiB
Markdown
# 安全事件响应 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 <admin_token>" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"status":"suspended"}'
|
|
|
|
# 撤销可疑设备信任
|
|
curl -X POST http://localhost:8080/api/v1/devices/{device_id}/untrust \
|
|
-H "Authorization: Bearer <admin_token>"
|
|
```
|
|
|
|
#### 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 <admin_token>" \
|
|
-d '{"status":"suspended"}'
|
|
```
|
|
|
|
## 联系人
|
|
|
|
- 安全团队:[填写]
|
|
- 运维负责人:[填写]
|
|
- 开发团队:[填写]
|
|
- 法务/合规:[填写]
|
|
|
|
## 事后复盘
|
|
|
|
事件响应完成后,需要:
|
|
1. 编写详细事件报告
|
|
2. 分析根本原因
|
|
3. 制定长期改进措施
|
|
4. 更新安全 Runbook
|
|
5. 进行团队培训
|