@系统运行时 | 短信验证码接口攻击

4
线上系统短受到对于短信验证码接口的恶意攻击,在此记录解决过程。

过程描述

  1. 短信运营商首先会针对平台本身的短信发送量进行监控预警,如果出现短信发送量异常的情况会联系平台进行排查。
  2. 根据短信平台近2-3天的短信发送行为进行分析(同一个手机号的发送频率、某个时间段的发送频率、持续时间等)。
  3. 定位导致恶意攻击的接口地址以及攻击方式(页面自动化攻击或接口直接调用攻击),如果系统做了短信验证码的防护,此处可排除接口直接调用攻击。
  4. 在服务器端限制IP的请求频率及次数(如果是非间歇性攻击可能导致服务器压力过大而崩溃)。
  5. 增加图形验证机制。
  6. 增加对同一个手机号码一天内发送验证码总次数限制,并且如果连续2-3天此手机号码有同样的短信验证码请求行为则直接加入黑名单。
  7. 由于此次攻击涉及到不同的业务场景,我们分别做不同的处理,针对注册页面增加图形验证码机制,针对忘记密码页面我们采取分步校验,先校验用户名密码并得到成功回执后才进行短信验证码的发送。
以上是针对本次攻击进行的处理过程描述,这种短信验证码接口的恶意攻击已经不是第一次遇见,在上一家公司也有发生,恰巧通过这次事故记录(另外这种攻击也会影响到平台给用户的形象,此次就有几个用户进行电话投诉短信验证码的骚扰行为)。

针对短信验证码接口被恶意攻击的防范总结

一. 短信接口被恶意攻击(短信轰炸)解读

短信验证码接口被恶意攻击一般主要用于短信轰炸。

短信轰炸一般基于 WEB 方式(基于客户端方式的原理与之类似),由两个模块组成,包括:

  1. 一个前端Web网页,提供输入被攻击者手机号码的表单
  2. 一个后台攻击页面(如html),利用从各个网站上找到的动态短信URL和前端输入的被攻击者手机号码,发送HTTP请求,每次请求给用户发送一个动态短信。
被攻击者大量接收非自身请求的短信,造成无法正常使用移动运营商业务。
短信接口被刷通常指的就网站的动态短信发送接口被此类短信轰炸工具收集,作为其中一个发送途径。

具体工作原理如下:

  • 恶意攻击者在前端页面中输入被攻击者的手机号;
  • 短信轰炸工具的后台服务器,将该手机号与互联网收集的可不需要经过认证即可发送动态短信的 URL 进行组合,形成可发送动态短信的 URL 请求;
  • 通过后台请求页面,伪造用户的请求发给不同的业务服务器;
  • 业务服务器收到该请求后,发送动态短信到被攻击用户的手机上。

二. 短信验证码的攻击方式

  1. 人工频繁点击(这种方式几率非常小)
  2. 通过脚本攻击,页面自动化模拟点击和直接通过短信接口攻击

三. 容易被恶意攻击的场景

  1. 注册页面
  2. 忘记密码页面
  3. 手机短信动态验证码登录

四. 防止短信验证码恶意攻击的手段

  1. 增加图形化验证码

    恶意攻击者采用自动化工具,调用动态短信获取接口进行动态短信发送,原因主要是攻击者可以自动对接口进行大量调用。
    采用图片验证码可有效防止工具自动化调用,即当用户进行“获取动态短信” 操作前,弹出图片验证码,要求用户输入验证码后,服务器端再发送动态短信到用户手机上,该方法可有效解决短信轰炸问题。

    安全的图形验证码必须满足如下防护要求

    • 生成过程安全:图片验证码必须在服务器端进行产生与校验;
    • 使用过程安全:单次有效,且以用户的验证请求为准;
    • 验证码自身安全:不易被识别工具识别,能有效防止暴力破解。
  2. 单IP请求次数限制

    使用了图片验证码后,能防止攻击者有效进行动态短信功能的自动化调用
    但若攻击者忽略图片验证码验证错误的情况,大量执行请求会给服务器带来额外负担,影响业务使用。建议在服务器端限制单个IP在单位时间内的请求次数,一旦用户请求次数(包括失败请求次数)超出设定的阈值,则暂停对该IP一段时间的请求;若情节特别严重,可以将IP加入黑名单,禁止该IP的访问请求。该措施能限制一个IP地址的大量请求,避免攻击者通过同一个IP对大量用户进行攻击,增加了攻击难度,保障了业务的正常开展。

  3. 手机号码限定

    根据业务特点,限定每个手机号码每天最多发送量

  4. 限制发送时间间隔

    此限定已经非常普遍,即当单个用户请求发送一次动态短信之后,服务器端限制只有在一定时长之后(此处一般为60秒),才能进行第二次动态短信请求。该功能可进一步保障用户体验,并避免包含手工攻击恶意发送垃圾验证短信。

  5. 流程限定

    如果是类似忘记密码功能页面,我们可以将手机短信验证和用户密码设置分成两个步骤,用户在设置完成用户密码后,并需要获取上一步的成功回执后才进行手机验证码的发送。

攻击者恶意攻击平台短信验证码接口,不仅会增加公司的运营成本,也会给公司的形象造成极坏的影响(比如本次攻击就有用户致电客服进行投诉),所以必须要对这种行为进行必要的防范。

附加说明

参考链接


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

Dong · 2018年07月23日

您好,关于发送短信接口的安全问题,这一块困扰我很久了。 不知道博主能回复一下下面问的这个问题,感激不尽。

攻击者的定位:①短信轰炸(限制手机号发送次数,得以解决) ②恶意刷短信接口,不为轰炸只是不停刷接口。

问题主要是在②上面:
1、10次发送短信请求,如何确保这是10个用户而不是1个? 设备号可被模拟,IP因为有CDN不能得到源IP而且IP也可以模拟,sessionId可被模拟,貌似一条请求过来 里面是所有内容都是可以被模拟的。 那么问题来了,10个请求进来 怎么确保这是10个用户的请求还是1个用户的请求呢?
2、图形验证码, 这个需求提出的场景很是麻烦,就是只有当发送次数超过3次才出现图形验证码,那么问题又变成上面的那个了。 我怎么去校验当前请求是否已经超过了3次呢?

help me..................

回复

0
Dong · 2018年07月23日
0

难道只能找第三方做人机校验了吗

Dong · 2018年07月23日
0

不好意思,这段时间有点事情没有登录博客,你这两个问题都能归结为校验用户唯一性,首先这个针对短信接口被攻击,那么手机号码肯定就是校验请求唯一性及请求次数的有效参数。

看不见的未来 作者 · 2018年12月12日
载入中...