背景是這樣,一個朋友網(wǎng)站業(yè)務(wù)被DDoS了,先是威脅要800元RMB,然后又轉(zhuǎn)成提供DDOS的服務(wù),然后又變成了DDOS培訓(xùn), 又變成了賣DDOS軟件,最后又變成了DDOS高防護(hù)提供者,最后到警察叔叔那里,報(bào)警立案成功的故事。
一、來自黑客的威脅
就在這幾天,一個朋友傳來了他被DDoS的消息,正在搬磚中看到他發(fā)的消息,說他們的客服收到到0118號客人的威脅信息,說要馬上干掉你們。

這位朋友可能見過大場面的人,這點(diǎn)威脅就能嚇倒他嗎, 太天真了。
大家可看看下面這個圖。

看到上面這個流量激增你們也能看出來,之后服務(wù)器真的就掛了,真的掛了,掛了。

這位朋友默默的看了眼高防的價格,這個價格再次擊穿了他的心量防線。 我買,我買, 我買不起。買不起是開玩笑,但這也太貴了。
不過這個時候這位朋友想起來了,客服留言中的那個黑客微信聯(lián)系方式, 先加個微信會會這位朋友。

這么長的對話內(nèi)容,大概的意思是說, 對方要800塊錢,并且還能幫助搞其它競爭對手。這位朋友的回答就比較藝術(shù)了,沒錢,要錢向老板要去。
二、常見流量攻擊的形式
到這了,我們插入一段技術(shù)內(nèi)容,流量攻擊的幾種常見形式。
1. 到7層的攻擊
2. 到4層的攻擊
除了sync方式攻擊,其它的兩種,都可以達(dá)到7層,形成WEB服務(wù)日志。
第1種和第2種,我們都可以看到nginx日志,大post的垃圾請求有一個問題是,發(fā)送的請求數(shù)據(jù),可能都不符合HTTP規(guī)范。
比較粗爆的請求,可以通過下面簡單的方法, 加入到nginx.conf配置中,進(jìn)行非http請求的協(xié)議數(shù)據(jù)的過濾。
(1) 限定請求方法:
if ($request_method !~ ^(GET|HEAD)$ ) {
return 444;
}
(2) 限定主機(jī)名:
if ($host !~* xxx\.com$) {
return 444;
}
三、WAF防護(hù)
我們的服務(wù)有很多都是用nginx、openresy、tengine搭建的,所以用nginx lua做WAF防護(hù)也是一件很正常的事, 看看下面的配置就能知道這位朋友用的是那個WAF了吧。

用LUA寫CC的安全策略是一個相對很便捷的過程。

威脅請求產(chǎn)生了大量的501和444。

命中了策略后,產(chǎn)生了對應(yīng)的命中日志。

就算我們明確知道攻擊源,要進(jìn)行攔截也是有問題的,我們在服務(wù)器上部署了WAF,但前端服務(wù)還有CDN和LVS,可以在后端分析出威脅,但不能在這些設(shè)備上進(jìn)行ip block阻斷。
并且,這位朋友的日志分析還沒有用到大數(shù)據(jù)層面,在手動分析日志階段, 這樣分析和響應(yīng)速度很難和WAF協(xié)同工作。
但就算WAF可以攔截一部分威脅,當(dāng)小規(guī)模的機(jī)房和服務(wù)器還是有帶寬上限的,一旦請深求擁堵帶寬大于這個上限,還是一樣無響應(yīng)。
并且有機(jī)房根本沒有阻斷功能,只有報(bào)警功能,一般貸款占大,業(yè)務(wù)就會被機(jī)機(jī)房業(yè)斷網(wǎng)。

四、左右互博
攻擊是消停了,可是這位朋友感覺還是不對, 要不就模擬一下自己DDoS自己機(jī)吧。

拿起心愛的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)
}
你的代碼寫的真棒,也許有的朋友需要這代碼,老規(guī)矩放到github上:go-attacker
五、采用高防
朋友這段自創(chuàng)的GO就是模擬產(chǎn)生大量的GET請求。結(jié)果朋友發(fā)現(xiàn)自己針對自己的,服務(wù)也一樣抗不住,有反正都是造成擁塞,干脆就用WRK得了,就模擬正常的HTTP請求就行。
wrk -c1000-t10 -d10 --latency http://127.0.0.1:8080 /find
結(jié)果一樣扛不住,還得找那個哥哥聊聊。

結(jié)果這個發(fā)起DDoS的哥們,從攻擊改成培訓(xùn)了, 傳授相關(guān)技術(shù)培訓(xùn)費(fèi)1200,上手快,時間短,經(jīng)濟(jì)效益高,但是犯法,這個不能干!

朋友先給200人家不要,不過有新情況, 不但可以培訓(xùn),還可以賣軟件,黑產(chǎn)現(xiàn)在都這么會做生意了嗎,這么多才多藝。

六、取證報(bào)官
朋友一看,請救兵吧,高防還是得買,然后報(bào)官,這時候就得去找警察叔叔。

前行100米和警察叔叔友好交流,和警察叔叔聊了一下,發(fā)現(xiàn)了一個問題。

800元也夠不到5000元啊,但是警察叔叔讓回去收集證據(jù)了。
七、高防測試
這位朋友最后還是找到一家公司提供高防服務(wù),希望在自動切換以外,可以手動切換到高防。
因?yàn)橛泻芏嗟挠蛎尤,在測試階段發(fā)現(xiàn),接入高防以后,貌似有很多的正常流量和CDN的流理被清洗掉了,這樣一天下來掉了很多單的銷量。因?yàn)檫是在測試階段,還需要進(jìn)一步的測試確認(rèn)和加白。
用戶->CDN->高防->服務(wù)。
上了高防護(hù)了好不好用啊,這朋友想問問DDoS的朋友,接收不接收測試的活。

到這個,就想問一句,抗DDOS的硬盤能不能也給來一塊。
持續(xù)一段時間的攻擊來了,但是服務(wù)貌似應(yīng)該沒掛。
八、立案成功

文章的最后就是,這位朋友成功的立案了,還是警察叔叔給力, 能不能抓到威脅要800元的朋友要看后續(xù)。
九、學(xué)習(xí)安全技術(shù)
這位朋友高防也上了,也立案了,利用間歇時間趕緊抓緊間學(xué)習(xí)安全知識。有人問安全有什么用,像這位朋友如果服務(wù)被攻擊,每天會丟失的訂單,訂單的成本應(yīng)該遠(yuǎn)遠(yuǎn)不是800元這個金額。
文章來源:http://netsecurity.51cto.com/art/201906/598294.htm