什么是重放攻击?
主机A要给主机B发送报文,中间重放攻击的主人可以是A,或者是攻击者C
C截获了A发送给B的报文,然后再伪装成A给B发送其截获的报文
重放攻击的含义:主机A给主机B发送的报文被攻击者C截获了,然后C伪装成A给B发送其截获来的报文,而B会误以为C就是A,就把回应报文发送给了C。
虽然A是加密的,但C根本不用破译
常见的重放攻击
第一种是直接重放,即重放给原来的验证端,直接重放的发送方和接收方均不变。
第二种是反向重放,将原本发给接收方的消息反向重放给发送方。
第三种是第三方重放,将消息重放给域内的其他验证端。
防御手段
-
加随机数。该方法优点是认证双方不需要时间同步,双方记住使用过的随机数,如发现报文中有以前使用过的随机数,就认为是重放攻击。缺点是需要额外保存使用过的随机数,若记录的时间段较长,则保存和查询的开销较大。
-
加时间戳。该方法优点是不用额外保存其他信息。缺点是认证双方需要准确的时间同步,同步越好,受攻击的可能性就越小。但当系统很庞大,跨越的区域较广时,要做到精确的时间同步并不是很容易。
-
加流水号。就是双方在报文中添加一个逐步递增的整数,只要接收到一个不连续的流水号报文(太大或太小),就认定有重放威胁。该方法优点是不需要时间同步,保存的信息量比随机数方式小。缺点是一旦攻击者对报文解密成功,就可以获得流水号,从而每次将流水号递增欺骗认证端。
-
Https防重放攻击。对于https,每个socket连接都会验证证书,交换密钥。攻击者截获请求,重新发送,因为socket不同,密钥也不同,后台解密后是一堆乱码,所以https本身就是防止重放攻击的,除非能复制socket,或者进行中间人攻击。