7. 安全考虑
本文档定义 SNMP 的协议操作. 协议操作本身不提供安全性. 相反, 安全性由 SNMP 框架通过使用 RFC 3411 [RFC3411] 中定义的架构以及 RFC 3414 [RFC3414] 和 RFC 3415 [RFC3415] 中定义的安全子系统来提供.
网络管理员负责定义安全策略, 这些策略应考虑被管理的资源, 管理信息的敏感性以及网络所面临的威胁. 随后, 架构, 安全子系统和访问控制子系统负责执行这些策略.
具体而言, SNMP 架构提供以下机制:
-
消息认证: 确保消息未被篡改或伪造.
-
消息隐私: 确保消息内容不能被未授权方读取.
-
消息授权: 确保只有获得授权的用户才能执行管理操作.
本文档定义的协议操作假定:
-
包含该操作的 SNMP 消息已通过认证, 从而确定代表其执行该操作的主体身份.
-
SNMP 引擎已执行访问控制检查, 以确定已识别主体是否被授权对指定受管对象执行所请求的操作.
-
如果需要隐私保护, SNMP 消息已被加密, 以防止向未授权方披露.
这些功能由 SNMP 架构的消息处理和安全子系统执行, 不属于协议操作本身的一部分.
但是, 使用本文档定义的协议操作的应用应注意以下安全考虑:
信息泄露
GetRequest-PDU, GetNextRequest-PDU 和 GetBulkRequest-PDU 操作会从受管对象检索管理信息. 如果这些信息敏感, 应通过使用消息隐私机制加以保护. 如果没有这种保护, 信息可能会通过对网络流量的被动监控泄露给未授权方.
未授权修改
SetRequest-PDU 操作会修改受管对象的值. 如果修改某个特定对象可能带来安全影响 (例如禁用防火墙规则或更改访问控制列表), 则应谨慎控制对该对象的访问. RFC 3415 [RFC3415] 中定义的访问控制机制提供了限制哪些主体被授权修改哪些对象的方法.
拒绝服务
所有协议操作都会在发起和接收 SNMP 实体上消耗资源 (网络带宽, 处理时间, 内存). 攻击者可能通过发送大量请求发起拒绝服务攻击. 速率限制和资源管理是实现需要重点考虑的事项.
GetBulkRequest-PDU 尤其容易被滥用, 因为它专门设计用于检索大量数据. 攻击者可能请求非常大的重复次数 (max-repetitions), 从而导致响应实体消耗过多资源或生成极大的响应. 实现应对任何单个请求消耗的资源施加合理限制.
消息重放
如果没有适当的消息认证和时效性检查, 攻击者可能捕获 SNMP 消息并在以后重放. 这可能产生严重后果, 特别是对于会修改受管对象的 SetRequest-PDU 操作. RFC 3414 [RFC3414] 中定义的时效性机制通过在认证消息中包含基于时间的信息来防止消息重放.
Trap/Inform 伪造
SNMPv2-Trap-PDU 和 InformRequest-PDU 消息提供事件通知. 如果这些通知未经认证, 攻击者可能发送虚假通知以误导网络管理员或触发不适当的自动响应. 应使用消息认证机制来验证通知来源.
总结
总之, 本文档定义的协议操作必须与适当的安全机制结合使用, 以确保:
- 对消息发起方进行认证
- 防止消息被修改
- 防止消息重放
- 保护消息内容隐私 (在需要时)
- 对管理操作进行授权
- 防止拒绝服务攻击
SNMP 架构为这些安全服务提供了框架, 实现应充分利用这些能力来保护受管网络免受安全威胁.