1.5. Protection against Message Replay, Delay and Redirection (防止消息重放、延迟和重定向)
1.5. Protection against Message Replay, Delay and Redirection (防止消息重放、延迟和重定向)
基于用户的安全模型提供针对多种基于消息的攻击的保护。
Message Replay (消息重放)
威胁 (Threat): 攻击者捕获有效的已认证 SNMP 消息并在稍后时间重新传输以实现未经授权的效果。
保护机制 (Protection Mechanism): USM 使用基于时间的机制来检测和拒绝重放的消息。每个 SNMP 引擎维护:
- snmpEngineBoots: 每次 SNMP 引擎重新初始化时递增的计数器
- snmpEngineTime: 自上次引擎重启以来的秒数计数器
这些值包含在已认证消息的 msgAuthoritativeEngineBoots 和 msgAuthoritativeEngineTime 字段中。接收引擎验证这些值是否在可接受的时间窗口内。
时间窗口 (Time Window): 如果满足以下条件, 则认为消息是真实的:
|msgAuthoritativeEngineTime - snmpEngineTime| ≤ 150 秒
并且:
msgAuthoritativeEngineBoots = snmpEngineBoots
超出此窗口的消息将被拒绝为潜在的重放。
Message Delay (消息延迟)
威胁 (Threat): 攻击者延迟有效消息的传递, 使其在不适当的时间被处理。
保护机制 (Protection Mechanism): 用于防止重放的相同时间窗口机制也可以防止显著的消息延迟。延迟超过 150 秒的消息将被拒绝。
限制 (Limitations):
- 无法检测 150 秒窗口内的延迟
- 对于大多数网络管理应用来说, 这被认为是可以接受的
- 需要更严格时序的应用必须实现额外的机制
Message Redirection (消息重定向)
威胁 (Threat): 攻击者拦截发往一个 SNMP 引擎的消息并将其重定向到另一个 SNMP 引擎。
保护机制 (Protection Mechanism): USM 在消息的已认证部分中包含 msgAuthoritativeEngineID。此值标识预期的接收引擎。接收引擎将拒绝以下消息:
msgAuthoritativeEngineID ≠ snmpEngineID (接收引擎的)
额外保护 (Additional Protection): engineID、engineBoots 和 engineTime 的组合提供了强大的保护, 因为:
- 每个引擎都有唯一的
snmpEngineID - 密钥本地化到特定引擎 (参见第 2.6 节)
- 认证摘要覆盖 engineID, 使得无法在不被检测的情况下修改
Interaction of Protection Mechanisms (保护机制的相互作用)
三个值 (msgAuthoritativeEngineID、msgAuthoritativeEngineBoots、msgAuthoritativeEngineTime) 协同工作以提供全面保护:
- engineID 防止重定向到不同的引擎
- engineBoots 防止重放上次引擎重启之前的消息
- engineTime 防止重放最近的消息并检测显著的延迟
Limitations and Considerations (限制和考虑)
Clock Synchronization (时钟同步)
时间窗口机制要求:
- SNMP 引擎具有相当准确的时钟
- 时钟不会随时间显著漂移
- 在通信引擎之间维护时间同步
时钟问题的影响 (Impact of Clock Issues):
- 快时钟: 可能导致有效消息被拒绝
- 慢时钟: 可能允许重放的消息被接受
- 时钟向后重置: 需要递增
snmpEngineBoots
Time Window Size (时间窗口大小)
150 秒窗口代表以下之间的平衡:
- 安全性: 更小的窗口 = 更少的重放机会
- 操作灵活性: 更大的窗口 = 更多的时钟漂移和网络延迟容忍度
150 秒的理由 (Rationale for 150 seconds):
- 适应典型的网络延迟
- 容忍适度的时钟漂移
- 为管理流量提供合理的重放保护
Notification Messages (通知消息)
对于通知消息 (陷阱和通知):
- 权威引擎是通知发起者
- 通知接收器必须与发起者的时间同步
- 这与命令响应器模型相反
Discovery and Time Synchronization (发现和时间同步)
在安全通信发生之前:
- 非权威引擎必须发现权威引擎的
snmpEngineID - 非权威引擎必须将其缓存的时间值与权威引擎同步
这些过程在第 4 节 (发现) 和第 2.3 节 (时间同步) 中详细描述。
Security Analysis (安全分析)
USM 基于时间的重放保护提供:
强保护 (Strong Protection Against):
- 精确重放旧消息
- 重定向到不同的引擎
- 长期存储和重放攻击
有限保护 (Limited Protection Against):
- 在 150 秒窗口内的重放
- 能够操纵两个端点时钟的攻击者
不受保护 (Not Protected):
- 实时消息复制 (在窗口内发送两次相同的消息)
- 应用层重放 (攻击者发起具有相同内容的合法新请求)
这些限制对于 SNMP 的预期用例是可以接受的, 其中管理操作通常是幂等的, 或者应用层机制可以检测重复。