11.10.1 安全威胁模型与风险评估
安全威胁模型与风险评估需从数据、可用性与权限边界三个维度建立,并落地到可操作的资产清单、攻击面与控制措施。ZooKeeper承担配置、选举与分布式锁,常见威胁包括未授权访问、数据篡改、会话劫持、明文传输中间人攻击、节点被入侵导致配置泄漏、DoS导致不可用、错误配置引发选举风暴与集群降级。
原理草图(资产与边界):
风险评估闭环方法:威胁 → 脆弱性 → 影响,输出风险等级与整改优先级。示例:
- 未启用认证/ACL → 未授权读写 → 配置被篡改/业务中断 → 高风险
- 明文传输 → 中间人攻击 → 凭据泄露 → 高风险
- 单点/选举配置不当 → 集群不可用 → 高风险
- 运维账号共享/缺少审计 → 难追溯 → 中高风险
- 客户端重试风暴 → 资源耗尽 → 中高风险
量化评分(机密性/完整性/可用性):
评分范围:1-5(影响)× 1-5(概率)
风险等级:>=16 高;9-15 中;<=8 低
示例:未启用认证 -> 影响5 概率4 = 20(高)
资产与边界识别示例清单:
高敏资产:/zookeeper/config、/zookeeper/security 节点数据
高可用关键资产:选举与仲裁节点(含leader)
高暴露面资产:客户端连接入口(2181)
边界:客户端通道、服务端内网通道、运维管理通道、备份通道
评估落地示例(用命令验证当前风险面):
# 1) 检查是否开启认证与ACL(未开启即高风险)
echo "getAcl /" | zkCli.sh -server 127.0.0.1:2181
# 预期:看到有 'world:anyone' 则为开放读写风险
# 2) 检查是否启用SASL/TLS(示例为配置文件存在性验证)
grep -E "authProvider|requireClientAuthScheme|ssl" /opt/zookeeper/conf/zoo.cfg
# 3) 检查集群连通性与选举状态
echo "stat" | nc 127.0.0.1 2181
# 预期:Mode: leader/follower,若长期为 standalone 说明高可用风险
最小化控制措施映射(示例输出清单):
高风险项:未启用ACL
优先级:P0
控制措施:启用SASL/Digest认证、最小权限ACL、TLS加密、堡垒机与审计
验证方式:getAcl / 输出不含 world:anyone;客户端需认证才可读写
排错示例(评估过程中常见问题与定位):
# 问题:stat 返回 Connection refused
# 排查:确认进程与端口
ps -ef | grep zookeeper
ss -lntp | grep 2181
# 问题:集群状态异常(长期无leader)
# 排查:查看选举端口与myid
ss -lntp | egrep "2888|3888"
cat /opt/zookeeper/data/myid
grep "server\." /opt/zookeeper/conf/zoo.cfg
练习与验收:
1. 以当前集群为对象完成资产清单与边界标注,输出风险矩阵(机密性/完整性/可用性评分)。
2. 用 getAcl / 验证是否存在 world:anyone;若存在,记录为高风险并写出整改措施。
3. 执行 stat 输出并判断当前模式,评估单点风险;给出减少单点的改进建议。
4. 形成“高风险项清单 + 控制措施映射 + 验证命令”,作为本节评估报告模板。