记一次被自己DDOS攻击
服务器报警
7月24号下午5点半开始,突然服务器报警,检查监控,发现CPU异常100%。
该服务器正常情况下CPU使用率在40%已经算高了,另外负载经过调试都保持在CPU承受范围内。
系统负载同时飙升
数据包的量直上云霄
TCP连接数上2W,正常情况下最多6K
悲剧的是刚好今晚和妹子约会,为什么每次出去都要遇到这种事,在家的时候几乎没出现过问题。所以最开始没有处理,一般来说ddos不会持续太久,结果7点服务器开始响应变慢反馈,必须处理了,辛亏有随身远程应急预案。
此服务器代码半年没动过,之前都正常的,只是中午的时候更新了下漏洞补丁,原则上是不会导致这个问题才对。通过linux命令分析了一下相关的进程,应该不是补丁导致的,否则打完补丁就应该出问题,而不是等到5点。
一开始为了应付CPU过高的问题,怀疑是我之前设置的php-fpm子线程过大(500),服务器上下文频繁切换,导致本身就已经高负载?索性就把值设为小到280试试看什么情况,但是并没有好转,php-fpm慢日志还建议调大,又调回之前的设置。
再来看数据包,已经要上天了,初步评估是ddos攻击。
初步分析
经过了1个多小时的日志分析,定位到心跳写数据库异常,导致数据库连接爆满卡死,影响到了别的业务。所以禁用了该接口,服务器相对可用。
晚上11点多回到家,依旧没有恢复的意思,并且还出现了每隔5分钟一次攻击(00:16之后)。决定用cache的inc记录看一下接口调用情况。
基本上是每秒1K+的访问,偶尔会有高并发,短时间调用了76W+次,其他接口几乎为0,现在是接近凌晨2点钟,理论上设备这个点钟已经关的差不多了,而且默认设备是5分钟调用一次心跳接口,不可能在这个时候大面积并发。
DDOS无误,但是这个量好像有点小,并且一般也不会通过接口调用形式攻击吧,阿里云都没有触发ddos流量清洗。
进一步分析
接下来就是看哪个IP发送的了。用netstate查了下感觉好像又比较正常。
根据该方法的日志,看到这些IP在几秒内调用接口300次左右,有些不可思议,但是这些IP确实是对应的设备IP,难道是被自己的设备DDOS了?!
再来5分钟一次心跳,不就是监控中后来的5分钟一次异常情况?每五分钟会出现一次峰值。
但是他们是如何做到秒级的百次调用呢?除非APK有问题,但是之前又没见出现?
再次深入分析,尝试禁封某些设备IP无效,反而更加猖狂,应该是设备APK集体出现BUG了,导致实例化了N个线程同时进行接口调用……怎么办?设备端的APK是友方开发,并且长时间没有更新维护了,又没办法让设备重启,最后决定分析设备日志。
最终分析
第二天联系运维人员取了一台并发量很高的设备日志。刚好这台设备记录了事件的全过程,分析结果如下:
1、7月24号5点半之前,设备运转良好
2、之后出现心跳时token失效的情况,然后开始以指数级新增心跳线程。
可以看到重新获取token之后,就出现了2个心跳包发送请求
3、反编译APK发现重新获取token部分的代码是有bug的
这里应该是if和else,否则在没有重新获取到token的情况下,又立马执行一次runnable,导致又再次报错一次。
4、这个异常情况只会在token过期的时候出现,正常情况理论不会过期,所以这个bug一直没有发现。
分析出问题之后,服务端临时去掉了token校验,联系友方修复bug,发布更新,问题解决。
总结
昨晚搞到4点钟,今天继续分析到4点,历时10个小时心中的石头终于落下。
1、设备端应至少有重启指令,以防万一。
2、一个小小的逻辑代码,可以使服务器直接崩溃。
3、日志监控真的很重要。
4、对于一些特殊情况,普通的测试很难遇到,除非是有经验的测试人员,否则只能等线上才能发现了。
记一次被自己DDOS攻击的更多相关文章
- 记一次DDOS攻击防御实录
前言 笔者所在单位是一家小型创业公司,目前产品正在成长阶段,日活跃用户只有区区几万人次,并发只有日均 85/QPS,自建机房,带宽 100MB.在这样的背景下,完全没想过一个小产品会招来黑客的 ...
- 记一次阿里云服务器被用作DDOS攻击肉鸡
事件描述:阿里云报警 ——检测该异常事件意味着您服务器上开启了"Chargen/DNS/NTP/SNMP/SSDP"这些UDP端口服务,黑客通过向该ECS发送伪造源IP和源端口的恶 ...
- 记一次ntp反射放大ddos攻击
2018/3/26 ,共计310G左右的DDoS攻击 临时解决办法:将web服务转移到同生产一个内网段的备份服务器a上,a提供web端口80,数据库通过内网连接还是沿用生产数据库. 后续解决办法:通过 ...
- Linux下防御DDOS攻击的操作梳理
DDOS的全称是Distributed Denial of Service,即"分布式拒绝服务攻击",是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求.耗尽目标主机资源 ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 通俗版解释网关,IP地址,ARP欺骗,DDOS攻击
计算机主机网关的作用是什么? 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声 ...
- 【转】《从入门到精通云服务器》第四讲—DDOS攻击
上周咱们深入分析了云服务器的配置问题,好了,现在手上有了云服务器之后,我们又不得不提它:DDOS攻击.这是所有运维者的心头痛,也是任何公司听闻后都将心惊胆战的强大对手.下面我们将用浅显易懂的方式讲述什 ...
- 防DDOS攻击SHELL脚本
最近一段时间服务器频繁遭到DDOS攻击,目前只能通过封IP来源来暂时解决.IP不源变化多端,光靠手工来添加简直是恶梦,想了个方法,用SHELL来做. 比较简单,但很实用:) 以下内容根据作者原文进行适 ...
- 漫画告诉你什么是DDoS攻击?
本文作者:魏杰 文章转载自:绿盟科技博客,原文标题:看ADS如何治愈DDoS伤痛 根据<2015 H1绿盟科技DDoS威胁报告>指出,如今大流量网络攻击正逐渐呈现增长趋势,前不久锤子科技的 ...
随机推荐
- .net 分布式锁实现
摘要: .net分布式锁,包括redis分布式锁和zookeeper分布式锁的.net实现. 分布式锁在解决分布式环境下的业务一致性是非常有用的. 分布式锁 经常用于在解决分布式环境下的业务一致性和协 ...
- HmacSha1加密-java
package com.test; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解 简介:讲解常用的服务间的调用方式 RPC: 远程过程调用,像调用本地 ...
- 来自iSpy整理的最全海康大华IPC的RTSP连接地址
来自iSpy整理的最全海康大华IPC的RTSP连接地址 先贴出处: 海康:http://www.ispyconnect.com/man.aspx?n=Hikvision 大华:http://www.i ...
- spring boot系列(六)spring boot 配置mybatis(xml简化版)
orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开 ...
- mysql8修改密码问题
查看初始密码: grep "temporary password" /var/log/mysqld.log 查看validate_password变量 SHOW VARIABLES ...
- php7与其他版本共存
转自: https://zhangge.net/5088.html php7编译安装 https://zhangge.net/5075.html
- STS中AOP的实现
1. 在pom.xml中加入aop依赖: <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- sops的配置过程
0.demo关键 1.关键信息,不能用5.1.6版本的,还有很多坑 蓝鲸版本: 标准运维:bk_sops_V3.1.39.tar 2.简单理解: 标准运维实际上调用作业平台job的API去执行 要跑通 ...
- [bzoj2597][Wc2007]剪刀石头布_费用流
[Wc2007]剪刀石头布 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=2597 题解: 发现直接求三元环不好求,我们考虑任选三个点不是 ...