短信验证码安全

0x00 事件

短信验证码常被用于网站用户注册、账户安全登录以及忘记密码、确认下单等应用场景,特别是一些涉及到用户个人敏感行为时候,为了确认操作是用户本人执行的通常会使用短信验证码进行二次认证。

接口来源

  • 注册登录
    • 注册
    • 注册成功欢迎语
    • 登录
    • 找回密码
  • 操作提醒类
    • 操作提醒
    • 确定下单
    • 开通xx服务

 

0x01 短信验证码接口没有设置下发频次

短信验证码接口没有设置下发频次,发送大量验证码(短信轰炸)

IP数量不断变化,大量手机号码(不在意短信是否空号)

解决方法:

  1. 设置发送间隔:

    限制同一个手机号码重复发送的时间间隔。通常设置为60-120秒,前端做倒计时限制,时间未到不能点击发送短信按钮,后台也做时间间隔限制,时间未到不能发送短信。

  2. 设置单用户发送上限

    根据业务特点,设置每个用户单位时间内发送短信数的上限,如果超过阈值就不允许今天再次调用短信接口(阈值根据业务情况设置)。

  3. 单IP限定

    根据自己的业务特点,设置每个IP每天的最大发送量,另外可校验手机号码和IP是否属于同一地区,由于IP的特殊性可能存在所处IP是大出口,一旦误杀后果会很验证,所以这个限制根据自身情况酌情考虑,对于有风控的团队来说,当发现发送IP存在异常可以对该IP增加二次认证来防止机器操作,也可以降低误杀情况

  4. 流程限制

    注册用户,将发送短信验证码和设置用户名密码分成两个步骤,第一步一个页面用来设置用户名和密码,用户设置用户名和密码发送到后台,获取到后台返回的第一步成功回执之后,进入第二步另一个页面发送手机短信验证码。(增加同一页面批量操作的难度,提交的速度和IP提交限制)

    附:将手机短信验证和用户名密码设置分成两个步骤,用户在设置成功用户名密码后,下一步才进行手机短信验证,并且需要在获取第一步成功的回执之后才可进行校验。

    使用验证码的界面如有多个表单填写项,请设置为部分表单填写后才能使用短信验证码按钮

  5. 加入Token

    对发送者进行唯一性识别:防止修改参数伪造多个IP地址和手机号码进行恶意攻击,用Token作为唯一性识别标识,后台将Token注入到前端,前端可以获取到Token,请求发送短信验证码接口时带上Token,后台接收到Token进行验证,验证未通过不能发送短信。

  6. 增加图片验证码:

    采用图片验证码可有效防止采用自动化工具调用验证码短信接口,即当用户进行“获取短信验证码”操作前,弹出图片验证码,要求用户输入验证码后,服务器端再发送验证短信到用户手机上

    • 生成过程安全:图片验证码必须在服务器端进行产生与校验;
    • 使用过程安全:单次有效,且以用户的验证请求为准;
    • 验证码自身安全:不易被识别工具识别,能有效防止暴力破解,如算术题、中文类、选择题、滑动验证码等;
    • 当多次(2-5次)同一号码请求验证码,请弹出二次验证方式,或直接采用先识别图片验证码或者图形验证码后才允许获取短信验证码的方式
  7. 埋点

    通过js收集一些网页版的设备指纹和客户端信息上报,通过js生成hash指纹区别不通设备,同时上传浏览器ua、分辨率、平台、系统等信息,有宽泛的鉴别能力,通过此方法可以建立自己的情报库。

    对用户进行人机验证,例如,前段js的加载,用户页面停留的时间,判断用户是否代理IP。

    有能力企业可以自己做风控系统

0x02 无效验证码

有验证码模块,但验证模块与业务功能没有关联性,此为无效验证,一般在新上线的系统中比较常见。

  • 获取短信验证码后,随意输入验证码或存在万能验证码,直接输入两次密码,可成功更改用户密码,没有对短信验证码进行验证
  • 任意用户注册

    第一步,利用自己的手机号接收验证码进行验证,下一步跳转到一个设定密码的页面

    第二步,抓包,篡改手机号,使用任意手机号进行注册

业务一致性存在安全隐患,身份验证与密码修改过程分开,验证无效。

0x03 客户端验证绕过

客户端验证是不安全的,通过拦截替换返回信息,绕过客户端本地验证,可能导致任意账号注册、登录及重置任意用户密码等一系列问题

  • 直接返回明文验证码
  • 返回密文验证码
  • 拦截替换返回包

0x04 验证码与手机号未绑定

一般来说短信验证码仅能使用一次,验证码和手机号未绑定,验证码一段时期内有效

  • A手机的验证码,B可以拿来用;
  • A手机在一定时间间隔内接到两个验证码,都可以用。

任意用户密码重置

a、使用自己手机号收取验证码

b、自己的验证码和对方的手机号填上,下一步设置新密码

解决方法:

  1. 在服务器进行有效验证,手机号和验证码在服务器进行唯一性绑定验证。
  2. 在服务端限制验证码发送周期,设置时效,限制次数。

0x05 验证码爆破

短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破的可能

发布者:常山赵子龙,转载请注明出处:https://www.qztxs.com/archives/science/technology/11458

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月27日 下午12:01
下一篇 2022年5月27日 下午4:10

相关推荐

  • 渗透测试流程

    总结,持续更新 渗透千万条,安全第一条。渗透不授权,亲人泪两行! 白帽子要有自己的原则和底线,即使数据再诱人,也千万不要去拿任何数据! 是要在客户允许的范围内进行测试,白帽子需要有白帽子的底线! 0x00 前言 渗透测试是指渗透人员在不同的位置(比如从内网、从外网等位置)利用各种手段对某个特定网络进行测试,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告...

    技术 2022年5月28日
    2600
  • msfvenom 使用

    木马连接方式 正向连接(bind) 是我主动去连接别人机器上的某个端口,很显然,这样极易被对方防火墙拦掉反向连接(reverse)是让别人机器上的某个端口上的流量主动连到我机器上的某个端口上,起码暂时对各类应用层防火墙的穿透效果还是蛮不错的  msfvenom 常用选项123456789-l 列出所有可用的payload,编码器,空指令……-p 指...

    技术 2022年5月28日
    7200
  • ubuntu搭建xunfeng资产扫描系统

    0x00 前言 巡风是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。 网络资产识别引擎会通过用户配置的IP范围定期自动的进行端口探测(支持调用MASSCAN),并进行指纹识别,识别内容包括:服务类型、组件容器、脚本语言、CMS。 漏洞检测引擎会根据用户...

    技术 2022年5月27日
    1200
  • 区块链究竟是啥?1分钟系列

    区块链,比特币这些概念很火,但很多人搞不清楚它究竟是啥,从技术的角度,从架构的角度,用通俗的语言谈谈楼主的理解。   究竟啥是区块链? 一句话,区块链是一个存储系统。 更细一点,区块链是一个没有管理员,每个节点都拥有全部数据的分布式存储系统。   通常所见的存储系统是啥样的? 如上图,一块空间存储数据,一个软件管理数据,提供接口写入数据,这是存储系统,例如m...

    2022年5月11日
    2900
  • 关于MySQL,这篇都没人赞,太没天理了!

    这是一篇关于MySQL数据库,redo log,LSN,崩溃恢复,在线热备的长文,耐心读完,如果没有收获,可以捶我。   研发的童鞋每次对MySQL库表做重大操作之前,例如: (1)修改表结构; (2)批量修改或者删除数据; 都会向DBA申请进行数据库的备份。 画外音:又或者说,不备份直接操作啦?   那DBA童鞋是怎么进行MySQL备份的呢?  ...

    2022年5月11日
    1900

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信