验证码防盗刷

更新时间:
复制 MD 格式

验证码盗刷指攻击者利用您的短信验证码接口,通过程序批量对单个或多个号码进行验证码重复请求,给用户发送大批量短信。短信服务为您提供验证码防盗刷监控功能,保障您的资金安全和业务稳定,帮助您有效预防验证码被盗刷或短信轰炸带来的不良影响。验证码防盗刷更需要你我共同的努力,建议您参照本文,加强客户端的防御措施。

重要

本文中含有重要信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

什么是验证码盗刷

在注册、登录、重置密码等身份验证场景中,验证码短信是一种常见的验证方式。服务提供方会在用户验证操作时发送一个一次性验证码,用户需要输入验证码来完成身份验证。如果您的验证码系统防御不足或存在安全漏洞,就可能被攻击者利用,通过程序批量对单个或多个号码进行验证码重复请求,这种行为就是验证码盗刷。验证码被盗刷可能出现的几种特征如下:

  • 短信数量骤增:短信发送数量和发送频率大大增加,远超正常的业务量级。

  • 目标手机尾号连号:如133**1247、1331248、133**1249等。

  • 攻击请求呈现集中性:如请求的IP地址集中、目标手机尾号相连、攻击时间段集中等。

验证码盗刷的危害

验证码被盗刷将直接导致您的经济损失、对收到短信轰炸的用户造成骚扰,甚至产生账号挟持与信息窃取等安全问题,最终引发品牌信任度下降、安全隐私泄露及各种负面后果。

  • 经济损失:短信盗刷会产生大批量的短信发送,给您带来经济损失。

  • 运营中断:发生短信盗刷后,服务方需要资源和时间来处理盗刷攻击、用户投诉和升级安全措施,影响正常的核心业务运营。

  • 信息泄露:盗刷直接发送短信给个人手机号,若攻击者获取到验证码,更有用户隐私泄露和账号挟持的风险。

  • 信任受损:当手机终端用户未执行任何验证操作却收到大批量验证码时,会损耗用户对品牌的信任。

防盗刷建议措施

通过加强防范意识、持续监控异常和提升技术防御手段,可以有效抵御大部分盗刷攻击。建议您在程序中增加多种防御措施,如在请求验证码操作时收集请求信息,识别并前置拦截异常请求,防止攻击者利用安全漏洞发送批量盗刷短信。此外,应在短信服务控制台配置防盗刷监控短信发送频率限制,对异常发送量的短信进行后置拦截。若未对接防御导致盗刷,应按照止损方案紧急处理,并尽快实施防盗刷措施。建议的盗刷防御方式如下:

  • 完善程序:在您的程序中完善验证操作,识别异常的短信请求并进行拦截。

    增加图形验证码 | 使用号码认证服务 | 限制验证码异常请求

  • 设置预警:在短信服务控制台开启验证码监控并设置验证码短信发送频率,当触发阈值时,平台将告知联系人并拦截超出限制的短信发送请求。验证码防盗刷监控仅覆盖验证码短信,无法防护通知类和推广类短信。通知/推广类短信盗刷需通过以下两种方式防护:在发送频率设置中配置通知及推广短信发送频率的每分钟、每小时、每日上限;在安全设置中配置发送总量阈值的日/月预警值和限额值,达到限额值后将暂停短信发送业务。此外,短信服务不支持按 IP 地址设置黑名单;验证码防护助手基于图形认证识别并拦截机器脚本发起的盗刷请求,仅适用于验证码场景,不能用于通知或推广类短信的防护。

    开启防盗刷监控 | 设置短信发送频率 | 设置国际短信发送阈值 | 操作指引

  • 保护账号:建议您通过RAM账户调用API,并妥善保管您的AccessKey,定期轮转,降低泄露风险。

  • 止损方案:发生盗刷时,您可以通过暂停短信接口或删除短信模板快速止损。紧急止损后请尽快对接上述盗刷防御方式,避免再次发生盗刷。

  • 排查盗刷来源:发生盗刷后,建议按以下步骤排查:

    1. 登录短信服务控制台,在业务统计 > 发送记录中查看异常发送记录,确认异常发送的时间段、号码和签名/模板。

    2. 登录操作审计控制台查看相关事件详情,检查事件详情中的 userIdentity 字段:当 type 为 root-account 时,表示该操作由阿里云主账号发起,并非服务器的 root 用户发起的操作,据此判断是否为账号自身的正常操作还是异常调用。

    3. 检查是否存在 AccessKey 泄露:确认参与短信发送调用的 AccessKey 是否被非授权方获取或滥用,如有泄露风险请立即处理。

    需要注意,短信服务不支持按 IP 地址设置黑名单,无法通过封禁来源 IP 的方式止损;验证码防护助手仅适用于验证码场景,无法用于拦截通知或推广类短信的盗刷。

请继续阅读,了解措施的详细内容。

加强您的程序防御

攻击者盗刷短信接口的行为主要发生在客户端,加强客户端的安全防控措施以应对盗刷风险是至关重要的,不能仅仅依赖于服务端的防护。

增加验证操作复杂度

建议您在程序中增加客户端用户验证操作复杂度。例如使用图形验证码,用户在获取验证码前,需要正确通过图形交互操作,达到区分人机请求、识别虚拟流量的目的,提高盗刷难度。您可以使用号码认证服务下的图形认证功能,含有滑块、点选和九宫格等验证方式。具体介绍,请参见图形认证

您也可以使用验证码2.0:验证码2.0支持无痕验证、一点即过、滑块验证、拼图验证、图像复原等多种验证形态,结合用户行为、设备指纹和 IP 等多维度判断是否为真人操作,具备 AI 智能安全防护和自动迭代攻防能力,能有效防御机器脚本伪造请求。相比图形验证码的基础防护,验证码2.0提供更强的防护能力,适合对安全性要求较高的短信接口防盗刷场景。具体接入方式,请参见什么是验证码2.0

使用一键登录认证

如果您的使用场景为用户登录或注册,并且为手机端应用,您可以使用号码认证服务。号码认证服务整合运营商的数据网关能力,无需短信验证码即可实现一键快捷登录,不对外暴露短信请求接口,避免批量盗刷。

一键登录页面会显示当前 SIM 卡对应的脱敏手机号(如 151****6600),并标注由中国移动提供认证服务。用户点击 一键登录 按钮即可完成登录,也可选择 其他手机号登录。登录前需勾选同意《中国移动服务条款》、《用户协议》和《隐私政策》。

阿里云还提供了融合认证等多种认证方式可用于对接,请参见什么是号码认证服务号码认证最佳实践

限制异常客户端请求

需要您在程序中收集请求特征,对异常的集中性请求进行识别并拦截。强烈建议您实现以下方式,可有效抵御盗刷攻击:

  • 限制验证码获取频率:限制用户获取验证码的最小间隔时间,一般限制为60秒,60秒后可重新获取验证码。

  • 限制验证码时效性:设定验证码有效时间,超过有效时间没有输入的验证码则作废,需重新获取。

  • 限制请求IP地址:识别请求的IP地址,对单个IP请求的验证码频率和量级进行限制,限制异常IP访问。

    说明

    短信服务控制台的发送频率设置中,频率限制白名单仅支持手机号码维度,不支持配置 IP 维度的白名单。因此上述 IP 维度的频率与量级限制需在您的业务程序中实现;如需在阿里云侧限制特定 IP 调用短信服务 API,请通过 RAM 策略的 acs:SourceIp 条件实现访问控制。

  • 限制发送手机号:识别接收短信的手机号,对同一手机号请求的验证码数量和频率进行限制。

开启短信服务预警

阿里云短信服务支持多种预警设置,建议您设置联系人并配置预警。当触发预警时,平台会通知到联系人,联系人可第一时间收到预警通知后及时处理。

  • 设置联系人:设置短信预警提醒联系人,当短信用量达到您设定的阈值时,平台会发送预警短信至联系人手机号码。

  • 开启验证码防盗刷监控:设置国内消息的监控阈值和预警阈值后,当触发预警阈值时,会发送告警。

  • 设置短信发送量预警:支持按日或按月设置。当发送总量达到您设置的预警值及限额值时,会发送告警。

  • 设置验证码短信发送频率:设置国内消息下同一个号码的每分钟/小时/自然日的发送上限,当达到上限时会进行拦截。

  • 设置国际消息发送阈值:设置国际短信每日/月的发送量上限,也可按国家/地域维度设置发送上限。

开启验证码防盗刷监控

仅国内短信支持使用防盗刷监控功能。
  1. 登录短信服务控制台通用设置-国内消息设置-安全设置页面。

  2. 打开验证码防盗刷监控开关。

  3. 单击修改配置,填写监控开启阈值预警触发阈值

    当验证码短信同时满足设置的监控开启阈值预警触发阈值时,将触发防盗刷预警,系统会发送短信到联系人。

    • 监控开启阈值:设置每小时验证码短信发送条数。

    • 预警触发阈值:设置当前一小时验证码成功率和当前一小时较前一天同时间段验证码增长率。

    示例:如果某企业监控开启阈值设置为1000条、预警触发阈值中当前一小时验证码成功率设置为低于80%、当前一小时较前一天同时间段验证码增长率设置为高于50%,该企业验证码短信发送情况同时满足以上三个设置(每小时验证码短信发送条数超过1000条、且当前一小时验证码成功率低于80%、当前一小时较前一天同时间段验证码增长率高于50%)时,将触发防盗刷预警,系统会发送短信到联系人。
  4. 单击确定,完成设置。

设置短信发送量预警

  1. 登录短信服务控制台通用设置-国内消息设置-安全设置页面。

  2. 发送总量阈值区域,单击修改配置,支持按日/月设置预警值和限额值。

    • 预警值:达到预警值时短信服务会向联系人发送预警提醒。

    • 限额值:到限额值时暂停短信发送业务。

  3. 单击确定,完成设置。

设置验证码短信发送频率

仅企业认证账号可设置短信发送频率。个人账号如需使用,请变更为企业认证
  1. 登录短信服务控制台通用设置-国内消息设置-发送频率设置页面。

  2. 单击发送频率设置,设置同签名、同号码的验证码发送频率在分钟/小时/自然日维度的限制。

  3. 单击确定,完成配置。配置在15分钟后生效。当短信发送频率达到阈值时,平台会拦截短信发送。

设置国际消息发送阈值

  1. 登录短信服务控制台国际/港澳台短信-国际消息设置页面。

  2. 选择全局配置或路由配置。具体操作,请参见设置国际短信发送预警

    • 全局配置:配置全局每日/每月发送量阈值。达到阈值后将进行告警提示或直接暂停短信发送。

    • 路由管理:按国家/地域维度配置每日发送量的阈值。达到阈值后将进行告警提示。

保护阿里云账号安全

您可以为阿里云账号创建RAM用户并为其授权,让不同的RAM用户拥有不同资源访问权限,授权范围需谨慎。访问密钥(AccessKey,AK)则是阿里云提供给用户的永久访问凭证,需妥善保管避免泄露。

  • 使用RAM账户:阿里云主账号拥有的权限较高,建议您通过RAM用户进行API调用和日常运维。

  • 设置最小权限:查看和管理RAM用户的安全设置,给用户设置最小可用权限。具体操作,请见管理RAM用户安全设置

  • 避免AK硬编码:请不要将您的AccessKey直接编写在代码中,推荐您通过环境变量使用AccessKey,避免泄露造成资产损失。

  • 定期轮转AK:建议您对使用超过90天的AccessKey及时轮转,降低泄露风险。具体操作,请参见轮转RAM用户的AccessKey

盗刷快速止损方案

若您已经发现产生盗刷情况,可采取以下措施紧急止损。止损操作可能影响短信正常发送,建议您处理后尽快加强您的程序防御

  • 暂停短信接口:禁用您的程序中发送短信的接口,并在后续完善网站或接口的防御措施。

  • 添加号码黑名单:若您排查到盗刷短信的异常手机号,可将其添加至号码黑名单,后续将不再对此号码下发短信。号码黑名单仅企业认证账号可设置,具体操作请参见设置号码黑名单

  • 暂时删除模板:删除被盗刷的短信模板,模板被删除后就无法发送短信。若您采用此方案,如果需要恢复业务,还需要重新申请短信模板。

  • 处理AK泄露:请参见AccessKey泄露处理方案,处理AK泄露问题。处理完成后请进一步确认并缩小AK权限,保持定期轮转AK,降低泄露风险。

  • 冻结签名:在不删除签名的前提下停止该签名的短信下发。登录短信服务控制台,在国内消息 > 签名管理页面找到目标签名,在操作列单击更多 > 冻结并确认。冻结后该签名将变为不可用状态,不可发送短信、不可申请模板、不可报备,使用该签名的短信发送请求(包括 API 调用)均会被拦截。止损处理完成后,在同一位置单击更多 > 解冻即可恢复签名的可用状态。

定位攻击来源

止损后,建议您通过操作审计定位发起短信发送请求的源 IP 地址,便于后续实施针对性的访问控制。

  1. 登录操作审计控制台,进入事件查询页面。

  2. 在筛选条件中将服务名称设置为短信服务(Dysms)

  3. 在事件列表中查找 SendSms 类型的事件。事件列表已包含事件源 IP 列,可直接查看调用来源。

  4. 单击目标事件的查看详情,在事件详情中查看事件源 IP 字段(即事件 JSON 中的 sourceIpAddress),即为发起该次 API 调用的源 IP 地址。

  5. 识别出异常 IP 后,可通过 RAM 策略的 acs:SourceIp 条件限制该 IP 对短信服务 API 的访问。

说明

短信服务的事件源为 dysms.aliyuncs.com

后续操作

如果您开启验证码防盗刷监控后,收到系统发送的预警短信,建议您查看短信的发送频率短信发送量和联系人手机号是否与当前业务相匹配。如果不匹配,可以根据业务场景设置日发送阈值上限值或短信发送频率,达到设置值后,短信接口会调用失败,保障您的资金安全;如果匹配,可以考虑调整监控开启阈值预警触发阈值。