记一次被DDoS敲诈的历程
本文轉載自微信公眾號:糖果的實驗室
0×01 背景
之前一個蜀國的朋友業務被DDOS攻擊,業務服務被機房斷網,客戶單流失有經濟損失,這篇具體說的就是這件事情。
背景是這樣,一個朋友網站業務被DDoS了,先是威脅要800元RMB,然后又轉成提供DDOS的服務,然后又變成了DDOS培訓, 又變成了賣DDOS軟件,最后又變成了DDOS高防測試提供者,最后到警察叔叔那里,報警立案成功的故事。
采用高仿系統對于防護ddos問題當然有效,但也要注意誤攔行為對用戶訂單的影響。每個公司的具體情況是不一樣的,解決問題也要有具體的針對性,比如當機房不是自己的,路由防火墻設備不是自己控制的,無法從類似設備上取得第一手流量信息時(如果能用SNMP),如何處理。當CDN是第三方提供,不能進行黑名單阻斷設置等各種情況下,又如何處理。
0×02 來自黑客的威脅
就在這幾天,一個朋友傳來了他被DDoS的消息,正在搬磚中看到他發的消息,說他們的客服收到到0118號客人的威脅信息,說要馬上干掉你們。
這位朋友可能見過大場面的人,這點威脅就能嚇倒他嗎, 太天真了。
大家可看看下面這個圖。?
看到上面這個流量激增你們也能看出來,之后服務器真的就掛了,真的掛了,掛了。
?
這位朋友默默的看了眼高仿的價格,這個價格再次擊穿了他的心里防線。我買,我買, 我買不起。買不起是開玩笑,但這也太貴了。?
不過這個時候這位朋友想起來了,客服留言中的那個黑客微信聯系方式, 先加個微信會會這位朋友。
加了之后聊了幾句,對方大概的意思是說, 要800塊錢,并且還能幫助搞其它競爭對手。這位朋友的回答就比較藝術了,沒錢,要錢向老板要去。
0×03 常見流量攻擊的形式
到這了,我們插入一段技術內容,流量攻擊的幾種常見形式。
到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; }0×04 WAF防護
我們的服務有很多都是用nginx、openresy、tengine搭建的,所以用nginx lua做WAF防護也是一件很正常的事, 看看下面的配置就能知道這位朋友用的是那個WAF了吧。?
用LUA寫CC的安全策略是一個相對很便捷的過程。
威脅請求產生了大量的501和444。
命中了策略后,產生了對應的命中日志。
就算我們明確知道攻擊源,要進行攔截也是有問題的,我們在服務器上部署了WAF,但前端服務還有CDN和LVS,可以在后端分析出威脅,但不能在這些設備上進行ip block阻斷。?
并且,這位朋友的日志分析還沒有應用到大數據層面,在手動分析日志階段, 這樣分析和響應速度很難和WAF協同工作。
但就算WAF可以攔截一部分威脅,當小規模的機房和服務器還是有帶寬上限的,一旦請深求擁堵帶寬大于這個上限,還是一樣無響應。
并且有機房根本沒有阻斷功能,只有報警功能,一般帶寬被占滿,業務就會被機房業斷網。
0×05 左右互博
攻擊是消停了,可是這位朋友感覺還是不對, 要不就模擬一下自己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 = 1times,_ := 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 chreturn}nbytes, err := io.Copy(ioutil.Discard, resp.Body)resp.Body.Close() // don't leak resourcesif 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
0×06 采用高防
朋友這段自創的GO就是模擬產生大量的GET請求。結果朋友發現自己針對自己的,服務也一樣抗不住,有反正都是造成擁塞,干脆就用WRK得了,就模擬正常的HTTP請求就行。
wrk -c1000-t10 -d10 --latency http://127.0.0.1:8080 /find 結果一樣扛不住,還得找那個哥哥聊聊。結果這個發起DDoS的哥們,從攻擊改成培訓了, 傳授相關技術培訓費1200,上手快,時間段,經濟效益高,但是犯法,這個不能干!
朋友先給200人家不要,不過有新情況, 不但可以培訓,還可以賣軟件,黑產現在都這么會做生意了嗎,這么多才多藝。
0×07 取證報官
朋友一看,請救兵吧,高防還是得買,然后報官,這時候就得去找警察叔叔。
和警察叔叔聊了一下,發現了一個問題。
800元也夠不到5000元啊,但是警察叔叔讓回去收集證據了。
0×08 高防測試
這位朋友最后還是找到一家公司提供高防服務,希望在自動切換以外,可以手動切換到高仿。
因為有很多的域名接入,在測試階段發現,接入高仿以后,貌似有很多的正常流量和CDN的流理被清洗掉了,這樣一天下來掉了很多單的銷量。因為還是在測試階段,還需要進一步的測試確認和加白。?
用戶->CDN->高仿->服務。
上了高防護了好不好用啊,這朋友想問問DDoS的朋友,接收不接收測試的活。
到這個,就想問一句,抗DDOS的硬盤能不能也給來一塊。
持續一段時間的攻擊來了,但是服務貌似應該沒掛。
0×09 立案成功
文章的最后就是,這位朋友成功的立案了,還是警察叔叔給力, 能不能抓到威脅要800元的朋友要看后續。?
0×10 學習安全技術
這位朋友高仿也上了,也立案了,利用間歇時間趕緊抓緊間學習安全知識, 上Freebuf找公開課看,安全技術書到用時方恨少。有人問安全有什么用,像這位朋友如果服務被攻擊,每天會丟失的訂單,訂單的成本應該遠遠不是800元這個金額。
0×11 ?高防外的可能方案
實際上,因為我們這位蜀國朋友的服務不在自建機房,實際上機房的具體報警策略,機房提供商不會給被服務者提供的,當機房中的某個IP流量過大,就可能觸發流量報警,甚至后續的斷網。
假設整個網絡結點的抽象結構是下面這樣:
機房網絡設備-> 防火墻->CDN->WAF->WEB服務
1.什么做不到
1.1 ?不能在機房和CDN層面時行攔截
那機房網絡設備、防火墻是沒法干預的,攔截策略也是不知道的。
就算我們自己從WEB服務中分析出異常的訪問, 也沒有辦法在機房設備上攔截。如果CDN提供商也不支持IP封禁接口,也不能在cdn上進行攔截。
1.2 不能過濾80和443以外的流量
在這位朋友的網格結構中沒有提到LVS等負載的情況, 這樣的話,就不具備LVS過濾80和443端口以外數據的能力。
2.什么能做到
實際的WAF和業務服務器這位朋友是可以操作的,如果可以4層流量中取得HTTP日志,可在4層階段讓日志落地。但實際如果在WAF結果之前都不能做攔截動作, 就只能直接在7層通過Openresty解析出HTTP數據和日志再做分析,這樣那個效率高,具體看情況。
2.1 ?做日志分析
Openresty落地的HTTP日志都是可以分析,如是不是通過大流量的網絡聚合日志,一般的ELK對單個WEB日志的數據就可以分析,分析出威脅可疑的IP,發現其中的集團攻擊行為,也可以與威脅情報庫碰撞,發現異常被控肉機等。
2.2 停止域名解析
因為網站多域名解析的設計,可以在機房斷網之前,停止被攻擊的域名解析。一個域名停制解析不會大面積影響訂單。這樣就需要找到一個報警閥值,這個值與機房斷網的閥值相關,當WAF分析出可能會造成機房斷網的那個極限量時,就提前觸發停止域名解析。
3.期望能做到什么
期望第三方CDN可以提供IP攔截接口,期望高仿支持接口手動切換高仿。??
期待這位朋友,在沉迷于網絡安全技術學習的同時,不在被攻擊困擾。
總結
以上是生活随笔為你收集整理的记一次被DDoS敲诈的历程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低效能人士的七个习惯
- 下一篇: GitHub 标星 15K,这个牛逼开源