动态短信验证码安全防护

发布时间 2019-08-01 作者 合众admin 阅读 1242次

动态短信验证码安全防护方案,是针对端口类动态短信验证码功能的安全实施方法与要求,适用于具备动态验证码功能的业务与系统。
     近年,随着互联网、APP的快速发展与广泛应用,部分手机用户连续收到莫名验证码短信,对手机用户正常的业务使用造成了严重的影响,同时在短信行业内还引起了大量的用户投诉。经运营商及相关官方分析,该类现象是由一种互联网恶意攻击方法---“短信炸弹”形式,该攻击方法循环利用不同业务中的无需注册即可向任意手机号发送短信动态验证码的正常业务需求(如用户注册、好友邀请、密码取回等),可以向多个用户同时连续发送大量的验证短信,严重影响用户的正常使用。虽然部分业务设定用户首次输入错误后,提供“手机号+动态验证码”的登录方式;但由于攻击工具循环调用不同的动态短信发送URL进行攻击,可绕开该限制进行攻击。
    以下方案适用于无需用户登录认证的情况下(如用户注册、好友邀请、密码取回等环节),需要向用户发送动态短信验证码或其他业务所需的短信(如认证信息、业务提示信息等)的业务场景。
1、短信炸弹原理
短信炸弹一般基于WEB 方式(基于客户端方式的“短信炸弹”工具原理类似),
其由两个模块组成,包括:一个前端Web 网页,提供输入被攻击者手机号码的输
入窗口;一个后台攻击页面(如PHP),利用从各个网站上找到的动态短信URL 和
前端输入的被攻击者手机号码,发送HTTP 请求,每次请求给用户发送一个动态
短信。
利用这两个模块实施“短信轰炸”攻击,原理具体分析如下:
(1)恶意攻击者在前端页面(如下图所示 “迷你轰炸台”)中输入被攻击

者的手机号;

(2)短信炸弹后台服务器,将该手机号与互联网收集的可不需要经过认证
即可发送动态短信的URL 进行组合,形成可发送动态短信的URL 请求;
(3)通过后台请求页面,伪造用户的请求发给不同的业务服务器;
(4)业务服务器收到该请求后,发送动态短信到被攻击用户的手机上。
这个过程如下图1 所示。

2、用户在某短信炸弹上输入被攻击手机号、攻击的次数后,对被攻击的手机号
进行攻击的源码如图2所示。

该攻击页面中主要采用 <img src=’http://…..’ />来调用业务服务器动态短信发送的接口。如红框中内容所示:
? 在“短信轰炸”源代码中,利用<img />标签的src属性定义了可以请求发送动态短信的URL(如gd.12530.com/….);
? 在其中的phonenumber字段中嵌入被攻击的手机号(如13811111111)后,即可形成攻击URL;
? 页面运行后,将其以HTTP GET/POST的方法提交给业务服务器;
? 业务服务器发送动态短信到被攻击者的手机上,从而完成了 “短信炸弹”攻击。
3、动态短信验证码安全防护方案
短信炸弹形成的原因是因为非授权的动态短信获取,而由于业务的需要(如注册、好友邀请等),在使用动态短信业务前系统并不能建立业务关联。因此,在未建立业务关联的情况下,需要进一步严格限制保证业务使用的安全性。
针对短信炸弹问题,建议综合采用:增加图片验证码、单IP请求次数限制、限制发送时长限制3个措施,防护“动态短信获取”功能与业务接口。

4、图形验证码实现机制
(1) 典型验证系统架构图
典型的系统主要由前端WEB服务器、后端验证服务器群组成。WEB前端服务器负责通过Internet与用户进行交互,提供认证业务(包含用户手机号输入、动态验证短信输入);后端验证服务器群由验证码服务器和动态短信验证服务器组成,验证码服务器负责产生、校验验证码,短信验证服务器负责向用户手机发送动态短信验证码信息,并对用户输入进行校验。
典型业务流程如图3所示。

当业务服务为客户端模式时,与图3 所示的web 方式基本相同,其中客户端
相当于web 前端服务器的功能。
(2)验证码安全使用流程
对图3 中图片验证码的使用流程(步骤2~步骤6)进行描述如下。
步骤2:用户访问验证码请求页面,输入手机号后,前端应用服务器向图片
验证码服务器发送请求,请求获得图片验证码的URL 格式示例如下:
http://192.168.1.1/getImage?sessionId=xxxx&busid=xxx
- 192.168.1.1 代表前端应用服务器的域名或者IP 地址;
- sessionId 代表前端应用服务器与验证码服务器建立的会话ID 号,由双
方协商获得;
- busid 代表前端应用服务器的业务ID 号,由双方协商获得;该ID 的设
置使一台验证码服务器支持为多个业务提供图片验证码。
步骤3:验证码服务器产生验证码,并将引用图片验证码的URL 传送回前端
应用服务器;前端应用服务器通过URL 获取图片验证码,并通过浏览器向用户展
示。
步骤4:用户输入手机号与图片验证码,并单击发送按钮,请求验证码服务
器对图片验证码的有效性认证。
步骤5:请求对图片验证码进行有效性验证的URL 格式示例如下:
http:// 192.168.1.1/checkCode?sessionId=xxxx&busid=xxx&code=xxxx
- sessionId,busid同上,code为用户输入的图片验证码的值。
步骤6:服务器端收到请求后与原始数据进行核对,并立即将原验证码进行失效处理。若用户提交数据与服务器数据一致,则服务器返回认证成功,并产生、发送短信验证码至手机;若用户提交数据与服务器数据不匹配,则web服务器返回认证失败,需告知向图片验证码服务器认证失败并向图片验证码服务器请求新的验证码。
5、图片验证码的安全设计要求
对于图片验证码的设计既要考虑到安全性、易用性也要考虑用户的操作体验。对于验证码的设计不能简单的单纯使用字母、数字或4位以内的短验证码等,这样易被验证码识别器破解;同样验证码的设计也不易使用过多的干扰线条、过大的字符变形或复杂的逻辑判断等,会严重影响用户的使用体验,尤其是对年长者更加难以识别。
对于验证码的安全设计主要有以下4种方式:
(1)字母数字类
字母数字类验证码主要由阿拉伯数字0~9以及26个英文字母(包括大小写)组成
(2)中文类
中文类验证码主要由多个简体汉字组成
(3)智力题类
对于智力题类的验证码一般使用的是100以内的算数运算为主,主要有加法、减法、乘法等
(4)选择题类
对于选择题类的验证码,一般使用一幅图片并配有四个选项,让用户输入选项代号选择图片的意义