短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场
前言
短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜
短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求
短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本
以上三篇文章详细的介绍了事件的起因和经过,回顾了一下整个过程,其实就是技术人员不上心没有做好安全验证导致接口被无聊的黑客攻击,然后一系列菜鸡互啄的过程,要说战,肯定是没有的,只是这个过程比较好玩儿,因此花了一些时间记录了一下这个事故的经过,至于说为什么这一篇叫清理战场嘛,就是这四篇文章把该写的都写完了,这一篇作为最终的完结篇,也不知道该起什么名字了,因此最后一篇就做做清理、打扫的活儿了,写写自己的感受,总结一下经验教训,给这次事件画上一个句号。

一点小感受
文章发布之后,由于是关于系统安全方面的问题,感觉在这件事情上大家很热情,终于有种自己不是玩单机的感觉了,哈哈哈哈哈。文章里收到了大量的留言,也看到了很多的处理方案,有些建议确实很好,因此也就学习到了一些东西,当然也受到了一些批评,从这些批评中也知道了自己的不足,这种交流的氛围挺让我感慨的,自从写博客以来,一直有一种孤独感,而且有时候不知道写博客是干嘛的,但是通过这几篇博客与大家的交流,我觉得和大家有互动才是最棒的,长久的封闭会导致落后,也会产生些许的抵触和迷茫的情绪。
整理了一些留言,由于量有些大,就不全部贴出来了,谢谢你们的建议。
星多天空亮,人多智慧广


也可以到对应的博客留言中查看。
- 有人针对这次攻击给了一些处理的建议,也提出了不少的方案。在做日志分析的时候,就根据一位朋友提出的建议,通过日志文件去分析了请求者的request,确实是有规律可循的,可以很简单的就被识别,也听取了一些处理经验,在处理方式上没有特别的死板。
- 当然也有人提出了质疑和批评,指出对于事件的处理方法不恰、一开始也没做好安全验证等等之类的话。批评的对,确实是我们自己的原因,没有做好一个模块验证导致了这种问题。
- 也有很多留言的朋友说到他们也遭受过类似的攻击,因此这次的遭遇处境和很多朋友都挺有共鸣的,和大家的交流中得到了很多的宝贵的经验。
前面三篇文章中所说的黑名单和iptables防火墙方案,是第一天发现问题后所做的事情,但是最终并不是用的这个方法,这些只是当时的应急方案,因为我们自己也发现这个方案其实缺点很多而且不够灵活,只能临时起到一些作用,很多朋友也在留言中直接指出了方案的不足。
最终采用了另外一种方案--WAF。
WAF模式
最终的方案是添加了验证码机制,前端加图片验证码,后端加验证,同时在部署的centos服务器上架设了WAF(应用防火墙)用来做请求验证及制定策略来防御攻击,这个是运维小哥搭建的,拦截效果非常好,以后有机会再分享吧。
最终的拦截方式效果图:

图中可以直观的看到最新的防御方式为:WAF+验证码,在搭建了WAF之后,不仅仅是此次的接口攻击,对于其他类型的攻击以及一些骚扰也都有很好的防御效果,不过搭建过程较复杂,配置也比较麻烦,但是有很好的拦截功能,因此很值得推荐也很解渴。
教训一:接口安全
在这次攻击事件之前,根本没有想到过会发生类似的事情,也根本没有一个清晰而严格的关于安全验证的概念,因为以往觉得请求验证就是类似登录那种功能,或者https协议这些,网络安全和接口安全方面的意识太薄弱了,以前虽然也遭遇过攻击,但是针对于应用接口的攻击是第一次碰到,也算是自己上了一节安全知识的课了。
在实际应用层方面,做好接口安全设计和落地,以往做的安全验证过于简单,有的甚至没做,现在看来应用里还存在一些裸奔的接口,这些都需要尽快修改。这次事件虽然是发生在APP移动端,但是在WEB模块中,如果不做好接口安全,肯定也会出现类似的情况,而且WEB端的代码是可以被查看的,如果被盯上肯定更加危险。
安全问题,一定要注意,我以前还碰到过服务器被黑的情况,所以深知被攻击的痛苦。
教训二:及时应对
现在说这些都是后话了,总结了这么多,也是事后诸葛亮,事件发生当时能想到的以及所做的与现在的想法和方案确实差别较大,毕竟事件稳定后,有了更多的思路和方案,许多事情也都比原来更加深刻和清楚,而且攻击事件既然已经发生,当时的情境下,首先想到的肯定不是总结事件,也不是找各种各样的方案,而是找到一个能够实现的方案尽快止损,应对方案应该是阻止攻击以避免进一步的损失和危害。
过程中也出现过错误的判断,以为是什么流量攻击,其实只是小打小闹,只是当时太紧张,发生了错误的判断,自己吓唬自己。
也根据一些朋友留言中的建议,做了一些修改,接口返回的字段并没有直接返回错误码和错误信息,而是返回的发送成功,因为担心攻击者修改脚本,因此这么做是为了迷惑攻击者,避免他们发现工具无用后对请求做修改,使得分析变得困难。
总结
首发于我的个人博客,地址在这里
这次是一个偶然事件,我也没有预料到会忽然发生,过程中也一直在做整理,然后把整理后的文章发布到网上大家一起讨论,很多方案其实都是通过各位朋友的建议去修改的,比如最终的方案,采用的WAF+验证码也是留言中提到的较多的有效方法,问题解决了就好。
原本打算写的博客,因为这次事件已经被丢到马里亚纳海沟里去完全记不起来原先的计划了,不过关于接口攻击这个系列的博客到这一篇就算是完结了,感谢大家提出的意见以及提供的帮助。接下来要继续更新原来计划的博客了,要么是更新SSM系列的进阶篇,要么是关于ELK日志系统集群搭建教程的一个系列博文,还都没开始动笔写,不确定该写哪一篇。
短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场的更多相关文章
- 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本
前言 承接前文<短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求>,文中有讲到一个定位非法IP的shell脚本,现在就来公布一下吧,并没有什么技术难度,只是当时花了些时间去写 ...
- thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO
为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...
- 短信发送接口demo
public class SendValidCode { // 短信发送的接口网关 private static String sendUrl = "******************** ...
- 给安卓端调用的短信发送接口demo
package com.js.ai.modules.pointwall.action; import java.io.IOException; import java.util.HashMap; im ...
- python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口
!/usr/bin/python #encoding=utf-8 #Author:Ruiy #//////////////////////////////////////////////////// ...
- destoon 短信发送函数及短信接口修改
// $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt']; 从缓存里读取网站配置信息. //$d ...
- C# 编写短信发送Window服务
我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...
- Abp 添加阿里云短信发送
ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...
- ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成
在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...
随机推荐
- Sql Server + ADO.NET
MsSql-http://www.cnblogs.com/zhangwei595806165/archive/2012/02/23/2364746.html 协议:Shared Memory :效率最 ...
- Linux环境g++编译TinyXML动态库
除了CMarkup,tinyxml也是C/C++下解析XML很好的工具.在linux下用g++编译tinyxml的步骤如下(tinyxml版本2.6.2): 进入tinyxml解压目录,用文本编辑器打 ...
- Eclipse中如何关联Javadoc
MySQL重置密码:http://www.jb51.net/article/35061.htm Eclipse有直接查看java文档和类库源码的功能,不过得手工添加才行,下面对如何在Eclipse中添 ...
- elasticsearch系列(四)部署
本文采用tar包的方式部署es 准备jdk8的环境 5.4.0的es依赖jdk8及以上版本 下载linux版的jdk jdk-8u121-linux-x64.tar.gz tar -zvxf jdk- ...
- poi解析excel
一.遇见的问题: 当单元格设置为日期类型时,cell.getCellStyle().getDataFormat()返回的值都为176. poi jar包3.14以上不支持用cell.getCellTy ...
- 快速傅里叶变换(FFT)算法【详解】
快速傅里叶变换(Fast Fourier Transform)是信号处理与数据分析领域里最重要的算法之一.我打开一本老旧的算法书,欣赏了JW Cooley 和 John Tukey 在1965年的文章 ...
- Tomcat 连接池详解
(转) JDBC 连接池 org.apache.tomcat.jdbc.pool 是Apache-Commons DBCP连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Co ...
- Maven测试篇
maven的生命周期: 讲解Maven测试篇之前将首先介绍一下Maven生命周期的相关概念,如果你熟知这部分概念可以略过此小节内容. 大多数时候,我们在构建一个项目时,不外乎是对其进行清理.编译.测 ...
- Yii2.0中场景的使用小记
熟悉Yii框架的人都知道,灵活的使用场景可以达到事半功倍的效果! 比如普通的数据的新增.修改,新增需要验证其中两个字段,而修改只需要验证其中一个字段:还有种情况,也是我们现在用到的,同一张表(同一个m ...
- Java IO流之内存流
内存流 1)内存流主要用来操作内存 2)分类 ByteArrayInputStream 主要完成将内容从内存读入程序之中 ByteArrayOutputStream 主要是将数据写入到内存中. 3)输 ...