1.问题描述
2024年2月20日晚7点左右,开始有用户反馈没有进行操作,但是收到了数条短信登陆验证码;
2024年2月20日晚7点半左右,排查短信验证码发送记录,发现系统正在批量发送短信登陆验证码;
经过开发部门的排查,短信发送通道遭遇了黑客攻击,正在批量发送短信验证码;
2024年2月20日晚8点半左右,先采用限制策略,限制单手机号码的短信验证码发送频率,单手机号一个小时只能发送一条短信;
2024年2月20日晚10点左右,经过排查发现短信验证码还在随机发送,且均是登陆短信验证码,所以暂时下线短信验证码登陆功能。
2.问题影响
2.1用户体验
大约有几百个客户收到了过量的短信验证码,受到了不必要的干扰
2.2短信支出成本
共发送短信6万多条,由于大部分未发送成功,实际经济损失约2000元
3.问题分析
3.1登陆安全限制问题
之前为考虑到减少用户的操作门槛,对于用户注册环节进行了极致的简化,用户只需要通过发送短信验证码即可完成平台的注册,用户个人信息录入、图形验证码模块等均平台初步建立时制定的流程与规则均已经被要求下架;
3.2短信发送上限策略问题
之前为考虑到用户群体受教育水平较为低下,对互联网的认知不够充分,加上现有的短信验证码经常会因为各种原因被屏蔽,所以取消了原有的平台发送短信验证码的限制,仅保留了短信发送渠道自身的限制。
3.3原因分析
通过APP抓包的方式抓取了公司短信验证码发送接口,直接攻击、调用短信验证码发送接口
4.解决方案
4.1增加图形验证码
在请求发送短信验证码的流程中,增加前后端图形验证码校验功能;
用户在前端完成短信验证码校验后,即调用短信验证码发送接口,在调用接口的同时,生成一个动态的唯一加密码,码值校验正确再调用第三方短信验证码发送接口;
考虑到不影响用户日常使用的场景,该限制可以进行场景的区分:
仅在新用户登陆注册时需要进行图形校验,同时后端短信发送功能新增校验规则:仅老用户或经过图形校验的新用户可以进行短信验证码的发送
4.1.1输入类
通过输入正确图形中的文字/数字信息,来进行校验;
该图形验证码需要用户进行操作,且容易被自动化识别,现在使用率已经下降了。
4.1.2滑动类
通过将图形的一部分与剩余部分组成一个完整的整体,来进行校验;
4.1.3点击类
通过点击正确的图片类型,来进行校验
4.2增加限制规则
在发送短信验证码之前,增加规则判断,判断是否应该发送短信验证码
4.2.1手机号限制
制定单手机号在固定时间段内的发送上限,但是该策略不能解决批量向陌生手机号发送短信的问题
4.2.2请求IP限制
前端需要获取用户的IP地址后,在请求的时候上送用户的IP地址给后端,由后端进行IP地址的限制
但是该方案会面临IP地址获取的问题:
1.公众号、小程序等第三方环境下,不可获取用户的IP地址
2.IP地址现在是敏感信息,在APP环境下获取用户的IP地址,会导致APP上架出现问题,严重的甚至会有法律或者行政风险
4.2.3手机号真实性校验
通过第三方的接口或是校验规则去校验用户手机号的真实性;
通用的规则会被攻击者利用、第三方的接口会增加平台的成本;
通过添加微信的方式,对发送短信的手机号进行了验证,发现随机抽样的5个手机号均有对应的微信号,是真实的手机号;
该规则现在不具备有效性。
4.2.4传输参数加密
传参加入加解密的模块;前端可以加入一套密钥生成规则(md5),后端在解析后,再进行接口调用,解析失败的请求将不进行具体功能的调用。
5.其他
由于给用户发送地其他短信也有批量发送的现象:
- 1.定时任务时间未到,却给用户发送了短信
- 2.单个用户收到了多条短信
- 3.该类型的短信接收手机号均为平台已注册的用户
- 4.该类型的短信均为曾经平台因为真实的业务场景发送的短信
该问题并未查询到原因,是否有可能为平台某个开发的电脑被劫持,直接调用了产线的功能?具体原因未知,还在排查中。