漏洞解决方案-交易重放

漏洞解决方案-交易重放

前置知识

       重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
       重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一


威胁描述:
交易重放即重放交易请求报文,导致交易再次被执行。

导致交易重放的原因有很多种,常见的有以下几种:

  1. 认证和交易操作在同一个客户端请求中。
    ① 如果在认证交易过程中,只使用了静态认证因子,且静态认证因子未使用“一次一密” 的加密算法,或者对于随机因子使用不当,即可造成交易重放,原理和登录重放类似(详见登录重放的解决方案)。
    ② 如果在认证交易过程中,只使用了动态认证因子,且动态认证因子在成功使用后未做失效处理,也可造成交易重放。
  2. 认证和交易操作通过客户端与服务端的多步交互完成,认证和交易操作不在同一个客户端请求中,在最后一步交易操作请求中,服务端只是执行交易操作,那么,直接重放最后一步交易请求,即可造成交易重放。

涉及功能点:
各类交易场景。

修复方案

  1. 优化业务逻辑,将认证和操作放在同一个客户端请求中,在服务器端按照业务流程进行分步执行操作。
    以转账场景为例:
    漏洞解决方案-交易重放

       对密码加密时,使用随机因子,随机因子应参与加密运算。可使用随机数或时间戳等方式。如此,每次随机数和时间戳不同,加密后密码密文也不同,实现“一次一密”。
(1)使用时间戳。
       ① 密码加密时,使用服务端下发的时间戳;
       ② 服务端在验密时,先验证请求中的时间戳足够接近当前时刻的时间戳(适当的时间窗,越大越能包容网络传输延时,越小越能防重放攻击),再利用时间戳解密密码密文。
(2)使用随机数。
       ① 密码加密时,使用服务端下发的随机数;
       ② 服务端在验密时,利用服务端保存的随机数(如果验密随机数从客户端获取,服务端必须验证此随机数和本次登录服务端下发的随机数一致)解密验密;
       ③ 随机数在使用后,服务端应立即重置,防止重复使用。
漏洞解决方案-交易重放

  1. 如果采用客户端与服务端分步业务流程执行,认证通过后,服务端记录认证标识,最后操作时,验证其认证标识,认证标识使用一次后,应立即失效。
    漏洞解决方案-交易重放

  2. 如果系统采用了整体的全报文加密机制,可在报文加密过程中,加入服务端下发的随机因子,请求提交时,服务端对随机因子进行验证,验证成功后,立即对随机因子进行失效处理。

       由于随机因子有整体的报文加密保护,无法随意修改,可防止交易重放。