重放攻击
本文约需 2 分钟阅读
重放攻击 (Replay Attack) 是指截获正规的通信数据,并将该数据原样重新发送以尝试非法访问的攻击手法。其特点在于攻击者无需破解加密,只需将正规的已认证数据「录制并回放」即可实施攻击。它常与中间人攻击结合执行,认证令牌、API 请求、金融交易数据等各种通信都可能成为攻击目标。尽管原理简单,但若没有适当的对策,仅靠传输加密也无法防御,是一种棘手的攻击。
攻击的原理
捕获正规通信
原样记录数据
向服务器发送相同数据
服务器误认为是正规请求
重要的是,攻击者无需理解数据的内容。即便是加密的数据,只要原样重新发送,服务器就会将其作为正规请求处理。TLS 加密可以防止窃听,但无法防止在正规会话内捕获的数据被重复利用。
与会话劫持的区别
重放攻击与会话劫持容易被混淆,但二者的攻击机制不同。
- 重新发送过去的通信数据
- 即使原会话已结束也可行
- 无需修改数据
- 对策:随机数 (Nonce)、时间戳
- 夺取活动中的会话
- 仅在会话有效期间有效
- 需要窃取会话 ID
- 对策:防止会话固定、重新认证
对策技术
针对重放攻击的对策,归结为引入「让同一数据无法使用两次」的机制。
FIDO/WebAuthn 抵御重放攻击的原因
FIDO/WebAuthn 协议从设计阶段就内置了对重放攻击的抵抗能力。每次认证时服务器都会生成随机的挑战值,客户端使用私钥对该挑战进行签名。由于签名中包含挑战值、来源 (所连接的域名) 以及认证器的计数器值,因此即使重新发送过去的签名,也会因挑战值不匹配而被立即拒绝。重要的是要与会话劫持对策和会话令牌窃取对策相结合,实现整个认证流程的加固。
Kerberos 的票据有效期
在 Active Directory 环境中广泛使用的 Kerberos 认证协议也内置了重放攻击对策。认证票据 (TGT) 设有有效期 (默认 10 小时),过期的票据会被拒绝。此外,每个请求都包含时间戳,服务器会验证服务器与客户端之间的时间差是否在 5 分钟以内。这一时间同步要求,也是在 Kerberos 环境中运行 NTP 服务器被视为必需的原因。
重放攻击是一种经典手法,但随着 IoT 设备和 API 通信的增加,对策不足的系统至今仍大量存在。通过与两步验证的引入相结合,可以进一步提高认证的稳健性。网络安全专业书 (Amazon)推荐用来深入学习协议层面的对策。
这篇文章对您有帮助吗?