重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方。很多时候,网络上传输的数据是加密过的,此时窃听者无法得到数据的准确意义。但如果他知道这些数据的作用,就可以在不知道数据内容的情况下通过再次发送这些数据达到愚弄接收端的目的。例如,有的系统会将鉴别信息进行简单加密后进行传输,这时攻击者虽然无法窃听密码,但他们却可以首先截取加密后的口令然后将其重放,从而利用这种方式进行有效的攻击。再比如,假设网上存款系统中,一条消息表示用户支取了一笔存款,攻击者完全可以多次发送这条消息而偷窃存款。
在开发中,为了防止信息被窃取之后被第三方重放,来攻击远程服务器,我通常会在数据报中加入时间戳,服务器端解密数据后,首先取出时间戳,判断信息是否已过期,如果数据中携带的时间戳与服务器当前时间戳之间不在安全区,则认为此次发送的数据为过期数据,服务器可将其丢弃,拒绝服务。
当然不止这一种,还有其他的方法:
1,加随机数:双方只需要记住各自使用过的随机数,不能有重复数,如果报文中有以前使用过的随机数,则被认为是重放攻击
优点:双方不需要保持时间的同步,
缺点:需要额外保存使用过的随机数,则需要保存和查询开销
2,加时间戳:时戳——代表当前时刻的数
而重放的时戳将相对远离当前时刻
优点:不需要内存开销
缺点:通信各方的计算机时钟必须保持同步(同步越好,受攻击的可能性越小)
3,加流水号:双方在报文中添加一个逐步递增的整数,则只要收到一个不连续的流水号报文(太大或者太小)就认为有重放威胁
优点:不需要时间同步,保存的信息量小
缺点:攻击者如果对报文解密成功,就获得了流水号进而会伪造数据
还没有评论,来说两句吧...