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. .net 分布式锁实现

    摘要: .net分布式锁,包括redis分布式锁和zookeeper分布式锁的.net实现. 分布式锁在解决分布式环境下的业务一致性是非常有用的. 分布式锁 经常用于在解决分布式环境下的业务一致性和协 ...

  2. HmacSha1加密-java

    package com.test; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache ...

  3. 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解

    笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解     简介:讲解常用的服务间的调用方式 RPC:             远程过程调用,像调用本地 ...

  4. 来自iSpy整理的最全海康大华IPC的RTSP连接地址

    来自iSpy整理的最全海康大华IPC的RTSP连接地址 先贴出处: 海康:http://www.ispyconnect.com/man.aspx?n=Hikvision 大华:http://www.i ...

  5. spring boot系列(六)spring boot 配置mybatis(xml简化版)

    orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开 ...

  6. mysql8修改密码问题

    查看初始密码: grep "temporary password" /var/log/mysqld.log 查看validate_password变量 SHOW VARIABLES ...

  7. php7与其他版本共存

    转自: https://zhangge.net/5088.html php7编译安装 https://zhangge.net/5075.html

  8. STS中AOP的实现

    1. 在pom.xml中加入aop依赖: <groupId>org.springframework.boot</groupId> <artifactId>sprin ...

  9. sops的配置过程

    0.demo关键 1.关键信息,不能用5.1.6版本的,还有很多坑 蓝鲸版本: 标准运维:bk_sops_V3.1.39.tar 2.简单理解: 标准运维实际上调用作业平台job的API去执行 要跑通 ...

  10. [bzoj2597][Wc2007]剪刀石头布_费用流

    [Wc2007]剪刀石头布 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=2597 题解: 发现直接求三元环不好求,我们考虑任选三个点不是 ...