前置知识
大多数金融行业信息系统业务场景中,对于交易的安全,采用安全认证的方式保护,认证的因子包括静态密码、短信验证码、UsbKEY,OTP令牌等,一旦业务流程和业务逻辑设计不当,这种认证机制被绕过,可带来严重后果,比如:无需密码即可进行交易、无需短信验证码即可重置密码等。
威胁描述:
大部分注册、忘记密码、密码重置、交易类等操作都是通过客户端与服务端多步交互完成,在交互过程中,很多参数和数据都是通过客户端提交的,这些参数和数据在通信过程中可能被篡改。
以订单支付为例:
在第③步验密请求中,输入错误的支付密码,服务器必然验密失败,如果将服务端返回的“密码错误”标识,修改为“验密成功”的标识,那么,客户端是否直接发起下一步的支付请求?此时,如果服务端没有相关认证是否成功的记录,那么,认证绕过产生了。
系统将认证(如口令、短信验证码的认证等)与操作(如登录、变更、转账交易等),通过客户端和服务端的分步业务流程执行,由于服务端在认证之后,未记录认证是否成功的标识,可通过直接修改认证结果(将服务器返回的“失败”修改为“成功”),或直接发送认证通过后的操作请求(如转账操作),导致认证机制被饶过;
涉及功能点:
常见的认证绕过场景:注册、忘记密码、各类交易场景。
修复方案
-
优化业务逻辑,将认证和操作放在同一个客户端请求中,在服务器端按照业务流程进行分步执行操作。
以转账场景为例: -
如果采用客户端与服务端分步业务流程执行,认证通过后,服务端记录认证标识,最后操作时,验证其认证标识,认证标识应与用户绑定防止越权使用,且使用一次后,应立即失效。