9. 安全考虑事项
9. 安全考虑事项 (Security Considerations)
本文档描述 SNMP 框架的架构. 该架构旨在提供一个框架, 用于实现包括认证, 隐私和访问控制在内的安全服务.
9.1. 安全威胁 (Security Threats)
该架构处理以下安全威胁:
-
Masquerade: 未授权实体冒充授权实体.
- 通过认证处理.
-
Modification of Information: 未授权地修改传输中的消息.
- 通过消息完整性检查 (认证) 处理.
-
Message Stream Modification: 对消息重新排序, 延迟或重放.
- 通过及时性检查和消息标识符处理.
-
Disclosure: 未授权访问消息内容.
- 通过加密 (隐私) 处理.
-
Denial of Service: 阻止授权用户访问服务.
- 通过访问控制和资源管理进行部分处理.
9.2. 安全服务 (Security Services)
该架构为以下安全服务提供设施:
-
Data Integrity: 确保消息未被修改.
- 由认证协议提供, 例如 HMAC-MD5-96, HMAC-SHA-96.
-
Data Origin Authentication: 确认发送方身份.
- 由认证协议提供.
-
Message Replay Protection: 防止旧消息被重放.
- 由使用 engine boots 和 engine time 的及时性检查提供.
-
Data Confidentiality: 保护消息内容不被泄露.
- 由隐私协议提供, 例如 CBC-DES, CBC-AES.
-
Access Control: 限制对托管对象的访问.
- 由 Access Control Models 提供, 例如 VACM.
9.3. 未处理的威胁 (Threats Not Addressed)
该架构未专门处理以下威胁:
-
Traffic Analysis: 从消息模式推断信息.
- 即使使用加密, 观察者仍可看到通信正在发生, 并可分析其模式.
-
Denial of Service through Resource Consumption: 使用请求压垮 SNMP engine.
- 实现者应考虑速率限制和资源管理.
9.4. 安全模型要求 (Security Model Requirements)
与该架构一起使用的 Security Models 必须提供以下能力:
- Authentication: 验证发送方身份.
- Privacy: 保护消息内容不被泄露.
- Timeliness: 检测被重放或延迟的消息.
- Key Management: 安全地管理密码密钥.
RFC 3414 定义的 User-based Security Model (USM) 提供这些服务, 是 SNMPv3 的主要 Security Model.
9.5. 密码学考虑事项 (Cryptographic Considerations)
SNMP 的安全性关键依赖所使用的密码算法和协议. 实现者必须:
-
使用强算法: 只使用被认为安全的密码算法.
- 避免已弃用算法, 例如短密钥 DES.
- 优先使用经过安全审查的算法, 例如 AES, SHA-2.
-
正确的密钥管理: 密码密钥必须:
- 使用足够的随机性生成.
- 防止泄露.
- 定期更换.
- 安全分发.
-
避免弱密钥: 某些算法存在应避免使用的弱密钥.
-
考虑密钥长度: 使用与数据敏感性相匹配的密钥长度.
9.6. 访问控制考虑事项 (Access Control Considerations)
访问控制对 SNMP 的安全性至关重要. 该架构提供 Access Control Models, 用于确定是否允许操作.
访问控制的考虑事项包括:
- 最小权限原则 (Principle of Least Privilege): 用户只应被授予必要的最小访问权限.
- 职责分离 (Separation of Duties): 不同用户应具有不同角色.
- 定期审查 (Regular Review): 应定期审查访问控制策略.
- 审计日志 (Audit Logging): 应记录访问尝试, 尤其是失败尝试.
9.7. 配置安全 (Configuration Security)
SNMP 部署的安全性取决于正确配置:
- 安全初始配置 (Secure Initial Configuration): 初始安全参数必须安全配置.
- 安全远程配置 (Secure Remote Configuration): 远程配置时, 使用安全通信.
- 保护配置数据 (Protect Configuration Data): 必须保护安全参数免遭未授权访问.
- 定期更新 (Regular Updates): 应定期审查和更新安全配置.
9.8. snmpEngineID 考虑事项 (snmpEngineID Considerations)
snmpEngineID 对 SNMP 安全至关重要:
-
唯一性 (Uniqueness): 每个 SNMP engine 必须具有唯一的 snmpEngineID.
- 重复的 snmpEngineIDs 可能导致安全漏洞.
-
持久性 (Persistence): snmpEngineID 应在重启之间保持不变.
- snmpEngineID 变更可能使安全关联失效.
-
生成 (Generation): 生成 snmpEngineIDs 时必须谨慎, 以确保唯一性.
- 使用推荐格式, 基于 enterprise number 和 MAC/IP address.
-
隐私 (Privacy): snmpEngineID 可能泄露有关设备的信息.
- 选择格式时应考虑这一点.
9.9. 上下文考虑事项 (Context Considerations)
上下文 (contexts) 允许单个 SNMP engine 表示多个设备或子系统. 安全考虑事项包括:
- Access Control: 访问控制必须按上下文应用.
- Isolation: 上下文之间应适当隔离.
- Context Names: context names 可能泄露有关系统的信息.
9.10. 代理考虑事项 (Proxy Considerations)
SNMP 代理 (proxies) 引入额外安全考虑事项:
- Trust: 代理必须同时被管理器和代理端信任.
- Security Translation: 在安全模型之间转换时, 安全性可能降低.
- Logging: 代理应记录所有转发消息.
- Access Control: 代理应对转发消息应用访问控制.
9.11. 实现安全 (Implementation Security)
实现者必须在整个实现过程中考虑安全:
- Buffer Overflows: 仔细验证所有输入, 防止缓冲区溢出.
- Input Validation: 验证所有消息组件.
- Error Handling: 错误消息不应泄露敏感信息.
- Timing Attacks: 注意计时侧信道.
- Resource Limits: 实现限制以防止资源耗尽.
9.12. 部署安全 (Deployment Security)
部署 SNMP 时:
- Network Security: 视情况使用网络级安全, 例如 firewalls, VPNs.
- Physical Security: 保护带有 SNMP agents 的设备.
- Regular Updates: 保持 SNMP 实现为最新版本.
- Monitoring: 监控安全事件.
- Incident Response: 准备响应安全事件的流程.
9.13. Community Strings (SNMPv1 and SNMPv2c)
使用 SNMPv1 或 SNMPv2c 时:
-
Weakness: Community strings 只提供最低限度的安全性.
- 它们以明文发送.
- 它们不提供认证, 完整性或隐私.
-
Migration: 尽快迁移到 SNMPv3.
-
如果必须使用 Community Strings:
- 使用强随机 community strings.
- 定期更换它们.
- 将其使用限制在可信网络内.
- 使用网络级安全, 例如 VPNs, firewalls.
9.14. 建议 (Recommendations)
为获得最高安全性:
- 使用 SNMPv3: 采用 User-based Security Model 的 SNMPv3 提供强安全性.
- 使用认证和隐私: 同时启用认证和隐私 (authPriv).
- 强算法 (Strong Algorithms): 使用强密码算法, 如 SHA-2, AES.
- 强密钥 (Strong Keys): 使用强密码/密钥并定期更换.
- 最小权限 (Least Privilege): 在访问控制中应用最小权限原则.
- 纵深防御 (Defense in Depth): 使用多层安全.
- 定期审查 (Regular Review): 定期审查安全配置和日志.
- 保持更新 (Stay Updated): 监控安全公告并更新实现.