前言

前段时间客户现场被攻击,客户找到了公司,公司找到了我,于是有了这一次的应急响应,因为第一次搞,所以记录一下整个过程。

一、要做什么

刚开始不知道干啥,非常迷茫,通过老大的教导,事后总结了下面几条个人觉得非常重要的点。

1.事件确认,发生什么事情了,什么事件,是否紧急,影响程度等。

2.确定攻击动机,别人为什么攻击我们。

3.确认攻击手段,利用什么漏洞进行攻击的,我们的应用是否存在高危漏洞,还是某一个中间件,还是其他攻击手段。

4.制定解决方案,包括临时解决方案和最终结局方案。临时解决方案为了快速应对问题,最终解决方案为了彻底解决问题。

5.追踪溯源,尽可能确定攻击者的身份。

6.形成书面报告。说明时间的起因经过结果,说明事件的责任归属(谁的锅)J。

二、详细过程

有了上面的指导,就可以第一次的应急响应了。

1. 事件确认

客户给公司反映有人投诉说收到了大量的短信验证码,然后登陆了服务器发现了大量短信验证码请求。

红色标记的就是失败的次数,非常的多,可以确认有人在利用短信验证码接口进行攻击。

2. 攻击动机

因为是大量短信验证码,所以攻击动机就有了两种:(1)有人盯上了我们的客户,在恶意消耗我们的资源(但是我们客户是公安),所以可能性不大。(2)我们的服务器被利用了,有人在利用服务器对特定的人进行短信验证码攻击,我们只是其中的一条。所以很可能是短信验证码轰炸平台利用了我们的资源。

后面给投诉用户打了电话,投诉的人告诉我们,他收到了很多平台的短信验证码,他的同事也收到了(可以确定是短信验证码轰炸).

3.攻击点分析

首先先和开发确定了哪些接口都可以发送短信验证码,确定有三个可以发送短信验证码的。

#注册接口,可获取验证码
/api/user/smsxxxx?mobile=xxxx
/api/user/sms?mobile=xxxx&xxxxx
#登录接口 可获取验证码
/sendLoginMobilexxxx

通过开发确定了我们的应用存在下面的机制:每个用户每天只能发10条,每个IP可以发送100条。所以我们先确定了自己的机制是否生效,确定短信验证码机制是生效的,这里不存在安全问题。

于是我继续查看了我们的一个注册接口,发现获取短信验证码不需要输入图片验证码。如下图所示,可以直接请求短信验证码,所以才导致可以大量的爆破。

看到这里就知道我们产品的问题了,好的产品都会在获取短信验证码前需要一个手工验证防止爆破的。

4. 制定解决方案

我以为到这里就结束了,直接上图片验证码就好了。结果开发告诉我,这个功能他们原来有,下线了,因为很多老年机加了这个功能无法收到短信验证码?这是什么情况?事情果然不简单,此处应该有图片.jpg

临时解决方案

所以我们先确定了临时的解决方案,修改短信验证码发送配置:(1)每个用户一天只能发五条,一个IP只能发10条。(2)当一个IP发送的数量超过100条后,日志中会记录大量的错误+ip这样的信息。所以我们可以根据这个信息来进行IP封锁。

最终解决方案

上图片验证码功能

5. 流量统计,进行封IP处理

因为日志都存储在ES上,而访问ES要先登录VPN,再访问堡垒机,再访问虚拟机,然后从ES上导出日志,然后从堡垒机上下载日志。非常复杂,所以这一个阶段花费了大量的时间,并且效果也不是很好。(只拿了两天的日志量,大概有100G)

这是我下载下来的日志,日志中包含了大量的报错等无用信息,因为我需要的日志都是以2020开头的,所以写了简单的脚本将信息进行过滤。

fileDir= "F:\xxx\xxxx\log3"
files=os.listdir(fileDir)with open("result3.txt", "w") as f:for file in files:filePath=fileDir+"\\"+filefor line in open(filePath, encoding="utf-8"):if line.startswith("2020-"):f.write(line)
f.close()

过滤后的流量主要有两种是我要的,第一种就是发送过多,会记录ip和手机号码。第二种是成功发送的。

2020-12-17 21:35:46.035 ERROR 7 --- [-8080-exec-1974] c.d.e.w.common.utils.CheckIpSmsPrevent   : send.message.over.the.limit,ip=111.229.73.67,mobile=138xxxxx12
2020-12-17 21:35:46.072  INFO 7 --- [-8080-exec-1347] c.d.e.w.common.message.SmsCodeRedisDao   : get code me 1350xxxxx70 redisKey [117, 97, 97, 58, 109, 101, 58, 99, 111, 100, 101, 58, 49, 51, 53, 48, 54, 56, 50, 54, 48, 55, 48]

因为数据量太大了,所以想着用sql去统计会方便一些,就写了下面的脚本。提取了时间,ip地址和手机号。

import re#匹配时间
pattern=re.compile("2020-[0-9]{2}-[0-9]{2}.*[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}")
#匹配电话号码
pattern2=re.compile("1[0-9]{10}")
#匹配ip地址
pattern3=re.compile("[0-9]{1,3}\.[0-9\{1,3}\.[0-9\{1,3}\.[0-9]{1,3}")filePath = "F:/xxxx/xxxx/results/result3.txt"
with open("sqlResult3.txt", "w") as f:for line in open(filePath):try:if "INFO 7" in line:time =re.findall(pattern, line)[0]phone = re.findall(pattern2, line)[0]ip = '0.0.0.0'f.write(time + ',' + phone + ',' + ip + '\n')elif "ERROR 7" in line:time = re.findall(pattern, line)[0]phone = re.findall(pattern2, line)[0]ip = re.findall(pattern3, line)[0]f.write(time + ',' + phone + ',' + ip + '\n')except:pass
f.close()

最后将数据导入到mysql中,一共有600w行数据,通过sql语句进行了查询和判断,如下图所示,两天的数据量失败次数在2000次以上的就有500多个ip,这个池子还是很大的,然后查了一下其中的部分ip,发现都是阿里云,腾讯云什么的,应该都是肉鸡。

因为存在大量的国内ip地址,又对ip地址的归属地进行了判断。最后发送给一线同学进行ip封锁。

总结

这次应急其实挺简单的,但是因为vpn,堡垒机不好导出日志花费了很多时间。因为是第一次做,所以做一次整体思路的笔记,为下一次应急做好充足的理论和流程准备。

一次短信验证码攻击的应急响应相关推荐

  1. 游戏安全资讯精选 2018年第二期:游戏行业年度白皮书;手游外挂、直播答题安全风险解析,近30%外挂手游存在致命安全问题,八招应对短信验证码攻击...

    [游戏行业安全动态]游戏行业年度白皮书 概要:刚刚结束的2017年,作为游戏行业买量竞争升级的一年,广告主纷纷表示压力山大,用户获取成本已经高到了临界点,而各个广告平台则希望在2018年广告收入还能再 ...

  2. 解决网站漏洞 短信验证码被盗刷 该怎么办

    公司的商城网站刚上线运营不到一个星期,网站就被攻击了,导致公司网站的短信通道被人恶意刷了几万条短信,损失较大,同时服务器也遭受到了前所未有的攻击.CPU监控看到网站在被盗刷短信验证码的时候,CPU一直 ...

  3. 如何防止恶意攻击短信验证码接口

    如何防止恶意攻击短信验证码接口 1 自研技术 2 自研验证码被破解怎么办? 3 所有图形验证码都被破解怎么办? 1 自研技术 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信 ...

  4. java防止注册刷短信攻击_java面试(1)如何防止恶意攻击短信验证码接口

    防止恶意攻击短信验证码接口方法 1.手机号码限制:限制单个手机号码每天的最大发送次数.超过次数不能发送短信,可以考虑将手机号码加入黑名单,禁止1天. 2.短信发送时间间隔限制:限制同一个手机号码重复发 ...

  5. 黑客攻击 短信验证码_黑客的低码

    黑客攻击 短信验证码 近年来,低码/无码已成为热门话题. 根据该方法,可以可视地开发IT系统. 传统观点认为,以低代码构建MVP是可以的,但是如果需要复杂且可扩展的内容,则必须传统上对其进行编码. 这 ...

  6. 短信验证码防攻击、防轰炸

    短信轰炸就是指一些人用特殊的软件越过前端进行无限制获取短信验证码,对于这块需要做一些防止的措施来避免短信轰炸. 1,第一种方式,使用图形验证码进行来防止攻击 使用图形验证码时,无论安全监测进行怎么样攻 ...

  7. 如何防止短信验证码接口、登录注册入口被恶意调用攻击?

    目录 前言 1.短信验证码是什么? 2.为什么要对短信验证码进行防护? 3.有哪些常见的防护手段? 4.这些防护手段有没有用呢,到底该如何选择? 5.结语 前言 最近遇到一个关于防止短信验证码被刷的问 ...

  8. 短信接口攻击事件(一)紧张的遭遇战险胜

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 事件简述 这是一件发生在前段时间的事情,当时的情况是这样的:一个新的 ...

  9. 手机短信验证码真的安全吗?

    手机的蓬勃发展,衍生出来众多行业,也让原本功能单一的手机号做出极大的改变.如今似乎每个人的手机号都绑定了或多或少的各种账号,手机绑定的东西越来越多,涉及到的重要的东西也越来越多,例如像银行卡绑定手机号 ...

最新文章

  1. 关于释放内存的那点事
  2. mysql列宽设置,mysql – 从.csv文件确定最佳列宽
  3. Hadoop概念学习系列之Hadoop 生态系统
  4. 审计某开源商城中的漏洞大礼包
  5. 防止表单重复提交的解决方案整理
  6. 公司邮箱发邮件的util类
  7. 如何将Spring Bean注入到JSF Converter
  8. VBA(比较全的api中文帮助文档例如office,excel,outlook,PowerPoint等api文档)
  9. 网利友联迈入敏捷开发新时代
  10. github windows系统监控_辅助Windows 自带的微软五笔字型输入法,解决长期存在的7大问题...
  11. 论文阅读:Instance Weighting in Dialogue Systems
  12. 我的世界服务器如何做无限箱子,《我的世界》无限存储箱子制作方法 制作流程介绍...
  13. vnc-4.0-winsrc版本之winvnc工程分析_源码研究
  14. 机器学习入门:Kaggle -titanic(泰坦尼克)生存预测
  15. 在线流程图绘制工具测评-ioDraw
  16. memory_max_target/memory_target设置过大报ORA-00845错误
  17. 云计算发展前景好不好 学了后能胜任哪些岗位
  18. C# 抽象类与接口异同
  19. nboot,eboot和uboot的区别
  20. 图(一)之邻接表Adjacency List

热门文章

  1. rpc核心实现和原理
  2. windows下安装rabbitMQ教程(实战书写)
  3. 01. elastcsearch-monitor (es 监控)
  4. Leecode 869. 重新排序得到 2 的幂——Leecode每日一题系列
  5. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案
  6. dataguard如何实现切换_深度干货 | 如何借助云原生搞定Oracle备份快速恢复?
  7. mysql5.5安装最后一步一直无反应_【MATLAB R2019b】保姆级安装教程
  8. java布局管理器的应用总结,GridBagLayout布局管理器的应用
  9. Python中os库的使用
  10. linux给文件赋权限找不到,linux 文件赋权限