专栏首页FreeBuf记一次被DDoS敲诈的历程

记一次被DDoS敲诈的历程

0x01 背景

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

0x02 来自黑客的威胁

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

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

大家可看看下面这个图。

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

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

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

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

0x03 常见流量攻击的形式

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

到7层的攻击

1.大量肉鸡产生的CC(ChallengeCollapsar)。

2.向WEB服务端口发送的大量的,巨型垃圾包(其实也不是很大,单条1MB以上)。

到4层的攻击

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

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

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

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

1.限定请求方法:

if ($request_method !~ ^(GET|HEAD)$ ) {     return    444;}

2.限定主机名:

if ($host !~* xxx\.com$) {      return 444;}

0x04 WAF防护

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

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

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

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

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

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

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

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

0x05 左右互博

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

拿起心爱的GO开撸:

package main

import (

   "fmt"

   "io"

   "io/ioutil"

   "net/http"

   "os"

   "time"

   "strconv"

)

func main() {

   start := time.Now()

   ch := make(chan string)

   var count int64 = 1

   times,_ := strconv.ParseInt(os.Args[1],10,64)

   url := os.Args[2]

   for count = 0; count <= times; count++ {

       go fetch(url, ch, count) // start a goroutine

    }

   for count = 0; count <= times; count++ {

       fmt.Println(<-ch) // receive from channel ch

    }

   fmt.Printf("%.2fs elapsed\n", time.Since(start).Seconds())

}

func fetch(url string, ch chan<- string,count int64) {

   start := time.Now()

   resp, err := http.Get(url)

   if err != nil {

       ch <- fmt.Sprint(err) // send to channel ch

       return

    }

   nbytes, err := io.Copy(ioutil.Discard, resp.Body)

   resp.Body.Close() // don't leak resources

   if err != nil {

       ch <- fmt.Sprintf("while reading %s: %v", url, err)

       return

    }

   secs := time.Since(start).Seconds()

   ch <- fmt.Sprintf("%7d %.2fs %7d  %s",count, secs, nbytes,url)

       }

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

0x06 采用高防

朋友这段自创的GO就是模拟产生大量的GET请求。结果朋友发现自己针对自己的,服务也一样抗不住,有反正都是造成拥塞,干脆就用WRK得了,就模拟正常的HTTP请求就行。

wrk -c1000-t10 -d10 --latency http://127.0.0.1:8080 /find

结果一样扛不住,还得找那个哥哥聊聊。

结果这个发起DDoS的哥们,从攻击改成培训了, 传授相关技术培训费1200,上手快,时间段,经济效益高,但是犯法,这个不能干!

朋友先给200人家不要,不过有新情况, 不但可以培训,还可以卖软件,黑产现在都这么会做生意了吗,这么多才多艺。

0x07 取证报官

朋友一看,请救兵吧,高防还是得买,然后报官,这时候就得去找警察叔叔。

前行100米和警察叔叔友好交流,和警察叔叔聊了一下,发现了一个问题。

800元也够不到5000元啊,但是警察叔叔让回去收集证据了。

0x08 高防测试

这位朋友最后还是找到一家公司提供高防服务,希望在自动切换以外,可以手动切换到高防。

因为有很多的域名接入,在测试阶段发现,接入高防以后,貌似有很多的正常流量和CDN的流理被清洗掉了,这样一天下来掉了很多单的销量。因为还是在测试阶段,还需要进一步的测试确认和加白。

用户->CDN->高防->服务。

上了高防护了好不好用啊,这朋友想问问DDoS的朋友,接收不接收测试的活。

到这个,就想问一句,抗DDOS的硬盘能不能也给来一块。

持续一段时间的攻击来了,但是服务貌似应该没挂。

0x09 立案成功

文章的最后就是,这位朋友成功的立案了,还是警察叔叔给力, 能不能抓到威胁要800元的朋友要看后续。

0x10 学习安全技术

这位朋友高防也上了,也立案了,利用间歇时间赶紧抓紧间学习安全知识, 上Freebuf找公开课看,安全技术书到用时方恨少。有人问安全有什么用,像这位朋友如果服务被攻击,每天会丢失的订单,订单的成本应该远远不是800元这个金额。

*本文原创作者:糖果L5Q,本文属于FreeBuf原创奖励计划,未经许可禁止转载

精彩推荐

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SUpraudit:一款MacOS上的日志审计工具

    你可能对BSM审计有所了解,也可能完全没有听说过。这是Solaris OS遗留下来的产物,它存在于FreeBSD,Linux,当然还包括MacOS上。在我的*O...

    FB客服
  • 如何使用Tokenvator和Windows Tokens实现提权

    今天给大家介绍的是一款名叫Tokenvator的工具,该工具采用.NET开发,可用于在Windows系统中提权。

    FB客服
  • Office DDEAUTO技术分析报告

    0x1 背景 过去几年,基于宏的文档攻击技术一直是主流,虽然需要用户主动进行确认,但是攻击的成功率依然非常的高。不过,近段时间来,使用Office DDEAUT...

    FB客服
  • sprintf函数的使用

    学C语言的同学对printf函数都不陌生。从世界上第一个程序(我认为的)"hello world”到你手里正写的某个程序,都少不了printf的影子。不过你也许...

    phith0n
  • [Flutter]使用SnackBar

    SnackBar是用户操作后,显示提示信息的一个控件,类似Toast,会自动隐藏。它还可以添加操作按钮,等等。SnackBar是通过Scaffold的showS...

    吴老师
  • 【HiBlock技术工坊54期】区块链+人工智能技术在版权领域的落地应用

    2)议题: 近年来,我国版权产业呈持续增长态势,已经成为国民经济新的增长点和经济发展中的支柱产业。但是版权领域还存在着版权登记成本高,侵权后维权难等问题。区块...

    辉哥
  • Web/PhpStorm设置代码缩进后代码格式化不起效的解决方法

    PhpStorm 或者 WebStorm 等 JetBrains 系列软件默认的是 4个空格。

    德顺
  • R使用LASSO回归预测股票收益

    只要有金融经济学家,金融经济学家一直在寻找能够预测股票收益的变量。对于最近的一些例子,想想Jegadeesh和Titman(1993),它表明股票的当前收益是由...

    拓端
  • 从websocket看go的应用

    Go是互联网时代的通用编程语言。这样它就和命令行时代的C语言、图示界面时代的C++、以及互联网早期的Java语言等有不同的侧重。它强调保持自身的精巧和独立,从而...

    李海彬
  • Flutter Widgets 之 SnackBa

    应用程序有时候需要弹出消息提示用户,比如‘网络连接失败’、‘下载成功’等提示,就像Android

    老孟Flutter

扫码关注云+社区

领取腾讯云代金券