Files
user-system/docs/runbooks/06-security-incident.md
long-agent 128efbc09f docs: 新增 3 个 Runbook - 配置更新、安全事件响应、事件响应
完成 Runbook 目录建设:
- 05-config-update.md: 配置更新流程和回滚
- 06-security-incident.md: 安全事件分级和响应流程
- 07-incident-response.md: 服务事件分级和应急响应
2026-04-08 22:52:14 +08:00

4.7 KiB

安全事件响应 Runbook

触发条件

  • 发现未授权访问
  • 收到安全漏洞报告
  • 发现异常登录行为
  • 遭受 DDoS 攻击
  • 发现数据泄露

紧急程度

级别 说明 响应时间
P0 数据泄露、服务器被入侵 立即
P1 账户被盗用、疑似入侵 1小时内
P2 暴力破解、异常行为 4小时内
P3 潜在漏洞、配置风险 24小时内

响应步骤

P0/P1 紧急响应(数据泄露、服务器被入侵)

1. 立即隔离

# 立即停止服务(保持证据)
docker compose kill

# 阻止外部访问(防火墙)
sudo ufw deny 8080/tcp

# 不要删除任何日志或数据 - 这是证据

2. 通知相关人员

# 通知运维负责人
# 通知开发团队
# 通知安全团队
# 如有数据泄露,通知法务/合规团队

3. 保留证据

# 导出当前日志
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. 评估影响

# 检查未授权操作
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. 恢复服务(在隔离后)

# 在确定原因并修复后,以最小权限重新启动
docker compose up -d

# 监控系统异常
docker compose logs -f | grep -E "error|warning|unauthorized"

P2 响应(账户被盗用、疑似入侵)

1. 确认事件

# 检查登录日志
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. 锁定可疑账户

# 暂停可疑账户
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. 重置相关凭证

# 强制用户重置密码
# 通过管理员后台操作

# 撤销所有活跃 token
# 需要开发团队介入清理 Redis/session 存储

P3 响应(潜在漏洞、配置风险)

1. 记录漏洞

# 创建漏洞记录
cat > vulnerability_report_$(date +%Y%m%d).md << EOF
# 漏洞报告

日期:[填写]
发现人:[填写]
漏洞描述:[详细描述]
影响范围:[评估影响]
复现步骤:[如何复现]
修复建议:[建议的修复方案]
EOF

2. 验证漏洞

# 如果是配置问题,检查当前配置
cat ./configs/config.yaml | grep -E "jwt|secret|password"

# 如果是代码漏洞,在测试环境复现

3. 修复验证

# 在测试环境验证修复
# 确认修复有效后,在维护窗口更新生产环境

安全检查清单

立即检查

  • 服务已隔离或已停止(如需要)
  • 防火墙规则已更新
  • 相关人员已通知
  • 证据已保存

事件评估

  • 确认受影响账户/数据范围
  • 确认攻击向量
  • 评估业务影响

恢复步骤

  • 已修复漏洞/攻击向量
  • 已重置受影响凭证
  • 已加强监控
  • 服务已恢复正常

事后处理

  • 编写事件报告
  • 更新安全措施
  • 安排复盘会议
  • 更新 Runbook

常用命令参考

# 查看活跃登录
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. 进行团队培训