TOC

服务器报警

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攻击的更多相关文章

  1. 记一次DDOS攻击防御实录

    前言     笔者所在单位是一家小型创业公司,目前产品正在成长阶段,日活跃用户只有区区几万人次,并发只有日均 85/QPS,自建机房,带宽 100MB.在这样的背景下,完全没想过一个小产品会招来黑客的 ...

  2. 记一次阿里云服务器被用作DDOS攻击肉鸡

    事件描述:阿里云报警 ——检测该异常事件意味着您服务器上开启了"Chargen/DNS/NTP/SNMP/SSDP"这些UDP端口服务,黑客通过向该ECS发送伪造源IP和源端口的恶 ...

  3. 记一次ntp反射放大ddos攻击

    2018/3/26 ,共计310G左右的DDoS攻击 临时解决办法:将web服务转移到同生产一个内网段的备份服务器a上,a提供web端口80,数据库通过内网连接还是沿用生产数据库. 后续解决办法:通过 ...

  4. Linux下防御DDOS攻击的操作梳理

    DDOS的全称是Distributed Denial of Service,即"分布式拒绝服务攻击",是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求.耗尽目标主机资源 ...

  5. 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有相关 ...

  6. 通俗版解释网关,IP地址,ARP欺骗,DDOS攻击

    计算机主机网关的作用是什么? 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声 ...

  7. 【转】《从入门到精通云服务器》第四讲—DDOS攻击

    上周咱们深入分析了云服务器的配置问题,好了,现在手上有了云服务器之后,我们又不得不提它:DDOS攻击.这是所有运维者的心头痛,也是任何公司听闻后都将心惊胆战的强大对手.下面我们将用浅显易懂的方式讲述什 ...

  8. 防DDOS攻击SHELL脚本

    最近一段时间服务器频繁遭到DDOS攻击,目前只能通过封IP来源来暂时解决.IP不源变化多端,光靠手工来添加简直是恶梦,想了个方法,用SHELL来做. 比较简单,但很实用:) 以下内容根据作者原文进行适 ...

  9. 漫画告诉你什么是DDoS攻击?

    本文作者:魏杰 文章转载自:绿盟科技博客,原文标题:看ADS如何治愈DDoS伤痛 根据<2015 H1绿盟科技DDoS威胁报告>指出,如今大流量网络攻击正逐渐呈现增长趋势,前不久锤子科技的 ...

随机推荐

  1. SmartTest__自动随机填充表单数据

    下载地址https://addons.mozilla.org/zh-CN/firefox/addon/smarttesttool/ 安装完成后可以在工具栏看见 目前只包含两个功能 测试使用

  2. JAVA反射机制,总结下

    1.总体概述 Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法:对于给定的一个对象,都能够调用它的任意一个属性和方法.这种动态获取类的内容以及动态调用对 ...

  3. java(SSM)上传文件到七牛云(对象存储)

    项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...

  4. Laplacian eigenmap 拉普拉斯特征映射

    下面是实验室大牛师兄自己写的一段总结,主要内容是Laplacian Eigenmap中的核心推导过程. 有空还是多点向这位师兄请教,每次都会捡到不少金子. Reference : <Laplac ...

  5. iOS创建带删除线和价钱符号的Label

    效果显示如下: 只需要子类化Label,重写DrawRect()方法即可: #import "MyLabel.h" @implementation MyLabel - (insta ...

  6. php curl如何设置自定义请求头和打印请求头信息

    $header = [ 'client:h5', 'token:test', ]; curlRequest($url, $params, true, 10, $header); PHP5.1.3版以上 ...

  7. AES加密解密 加密解密使用

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  8. k8s 管理机密信息

    一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...

  9. 求帮助 html5三次贝塞尔曲线问题

    <!DOCTYPE html><html><head><meta charset="utf-8"> <title>can ...

  10. 多版本YUM仓库搭建

    服务器:CentOS7 YUM源:阿里云 空间要求:CentOS6+CentOS7  50G,考虑后期更新预留,LVS空间100G 1.在服务器配置CentOS7的yum源和CentOS6的yum源 ...