加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

记一次被DDoS敲诈的历程

发布时间:2019-06-24 17:05:59 所属栏目:策划 来源:糖果L5Q
导读:一、背景 背景是这样,一个朋友网站业务被DDoS了,先是威胁要800元RMB,然后又转成提供DDOS的服务,然后又变成了DDOS培训, 又变成了卖DDOS软件,最后又变成了DDOS高防护提供者,最后到警察叔叔那里,报警立案成功的故事。 二、来自黑客的威胁 就在这几天
副标题[/!--empirenews.page--]

一、背景

背景是这样,一个朋友网站业务被DDoS了,先是威胁要800元RMB,然后又转成提供DDOS的服务,然后又变成了DDOS培训, 又变成了卖DDOS软件,最后又变成了DDOS高防护提供者,最后到警察叔叔那里,报警立案成功的故事。

二、来自黑客的威胁

就在这几天,一个朋友传来了他被DDoS的消息,正在搬砖中看到他发的消息,说他们的客服收到到0118号客人的威胁信息,说要马上干掉你们。

记一次被DDoS敲诈的历程

这位朋友可能见过大场面的人,这点威胁就能吓倒他吗, 太天真了。

2.png

大家可看看下面这个图。

记一次被DDoS敲诈的历程

看到上面这个流量激增你们也能看出来,之后服务器真的就挂了,真的挂了,挂了。

记一次被DDoS敲诈的历程

这位朋友默默的看了眼高仿的价格,这个价格再次击穿了他的心量防线。 我买,我买, 我买不起。买不起是开玩笑,但这也太贵了。

不过这个时候这位朋友想起来了,客服留言中的那个黑客微信联系方式, 先加个微信会会这位朋友。

记一次被DDoS敲诈的历程

这么长的对话内容,大概的意思是说, 对方要800块钱,并且还能帮助搞其它竞争对手。这位朋友的回答就比较艺术了,没钱,要钱向老板要去。

三、常见流量攻击的形式

到这了,我们插入一段技术内容,流量攻击的几种常见形式。

1. 到7层的攻击

  • 大量肉鸡产生的CC(ChallengeCollapsar)。
  • 向WEB服务端口发送的大量的,巨型垃圾包(其实也不是很大,单条1MB以上)。

2. 到4层的攻击

  • TCP sync攻击,每一次tcp握手就跑,纯撩闲式的方式。

除了sync方式攻击,其它的两种,都可以达到7层,形成WEB服务日志。

第1种和第2种,我们都可以看到nginx日志,大post的垃圾请求有一个问题是,发送的请求数据,可能都不符合HTTP规范。

比较粗爆的请求,可以通过下面简单的方法, 加入到nginx.conf配置中,进行非http请求的协议数据的过滤。

(1) 限定请求方法:

  1. if ($request_method !~ ^(GET|HEAD)$ ) {  
  2.      return    444;  

(2) 限定主机名:

  1. if ($host !~* xxx.com$) { 
  2.       return 444; 

四、WAF防护

我们的服务有很多都是用nginx、openresy、tengine搭建的,所以用nginx lua做WAF防护也是一件很正常的事, 看看下面的配置就能知道这位朋友用的是那个WAF了吧。

记一次被DDoS敲诈的历程

用LUA写CC的安全策略是一个相对很便捷的过程。

记一次被DDoS敲诈的历程

威胁请求产生了大量的501和444。

记一次被DDoS敲诈的历程

命中了策略后,产生了对应的命中日志。

记一次被DDoS敲诈的历程

就算我们明确知道攻击源,要进行拦截也是有问题的,我们在服务器上部署了WAF,但前端服务还有CDN和LVS,可以在后端分析出威胁,但不能在这些设备上进行ip block阻断。

并且,这位朋友的日志分析还没有用到大数据层面,在手动分析日志阶段, 这样分析和响应速度很难和WAF协同工作。

但就算WAF可以拦截一部分威胁,当小规模的机房和服务器还是有带宽上限的,一旦请深求拥堵带宽大于这个上限,还是一样无响应。

并且有机房根本没有阻断功能,只有报警功能,一般贷款占大,业务就会被机机房业断网。

记一次被DDoS敲诈的历程

五、左右互博

攻击是消停了,可是这位朋友感觉还是不对, 要不就模拟一下自己DDoS自己机吧。

记一次被DDoS敲诈的历程

拿起心爱的GO开撸:

  1. package main  
  2. import (  
  3.    "fmt"  
  4.    "io"  
  5.    "io/ioutil"  
  6.    "net/http"  
  7.    "os"  
  8.    "time"  
  9.    "strconv"  
  10. )  
  11. func main() {  
  12.    start := time.Now()  
  13.    ch := make(chan string)  
  14.    var count int64 = 1  
  15.    times,_ := strconv.ParseInt(os.Args[1],10,64)  
  16.    url := os.Args[2]  
  17.    for count = 0; count <= times; count++ {  
  18.        go fetch(url, ch, count) // start a goroutine  
  19.     }  
  20.    for count = 0; count <= times; count++ {  
  21.        fmt.Println(<-ch) // receive from channel ch  
  22.     }  
  23.    fmt.Printf("%.2fs elapsedn", time.Since(start).Seconds())  
  24. }  
  25. func fetch(url string, ch chan<- string,count int64) {  
  26.    start := time.Now()  
  27.    resp, err := http.Get(url)  
  28.    if err != nil {  
  29.        ch <- fmt.Sprint(err) // send to channel ch  
  30.        return  
  31.     }  
  32.    nbytes, err := io.Copy(ioutil.Discard, resp.Body)  
  33.    resp.Body.Close() // don't leak resources  
  34.    if err != nil {  
  35.        ch <- fmt.Sprintf("while reading %s: %v", url, err)  
  36.        return  
  37.     }  
  38.    secs := time.Since(start).Seconds()  
  39.    ch <- fmt.Sprintf("%7d %.2fs %7d  %s",count, secs, nbytes,url)  
  40.        } 

你的代码写的真棒,也许有的朋友需要这代码,老规矩放到github上:go-attacker

六、采用高防

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读