安全圈 | 专注于最新网络信息安全讯息新闻

首页

ddos攻擊:無限戰爭

作者 galluppi 时间 2020-02-27
all

前情回顧:

1

風雲再起

小Q是Linux帝國網絡部負責TCP連接的公務員。

一直以來工作都很輕鬆,加班也少,但自從小馬哥到Linux帝國開設了nginx公司,小Q的工作量一下就大了起來,經常加班,為此小Q背後沒少抱怨。

一大早,nginx按時啟動,綁定了80埠監聽,開始了今天的營生。

沒過多久,今天的第一個客戶來了。

小Q還是如往常一樣,收到這個帶有SYN標記的數据包後,創建了一個連接請求塊,然後將其放入80埠歸屬的連接請求隊列中,回復了一個帶有SYN和ACK標記的數据包後,開啟了一個計时器,等待第三次握手的完成。

沒等多久,這個客戶就發來了回信,三次握手完成。小Q把這個連接請求塊轉移到了80埠對應的連接就緒隊列中,並按下了鈴鐺。

聽到鈴聲的nginx線程從epoll_wait函數中醒來,調用accept函數,從隊列中拿到了這個新來的客戶,開始服務。

這就是小Q的日常,他已經幹這份工作太久了,輕車熟路。

很快到了深夜,小Q準備打個盹兒,這麼晚估計是沒有活幹了。

沒想到剛躺下,就來了一個連接請求,小Q揉揉惺忪的睡眼,準備來處理,然後接著很快來了第二個,第三個,第四個······

奇怪的是,每一個客戶只發送了一個SYN就沒了音訊,眼看著連接請求隊列裏的請求塊越來越多,最後實在沒有空間安放新的請求塊,小Q開始意識到情況不妙,拉響了帝國安全警報······

2

全軍出擊

十分鐘前······

“快醒醒,有消息來了“,還在sleep的阿D被喚醒了。

“上峰總算想起我了,我來到Windows帝國都快一個月了,一直沒有訓示,只是讓我保持靜默,我都憋壞了。”,阿D伸了伸懶腰,起身調用recv函數取到了消息:

目標:222.230.189.34

埠:80

動作:偽造源IP地址,發送SYN數据包

3

SYN Flood

此刻,帝國高層正在召開緊急會議。

防火牆:“現在有無數的網絡連接進來,為了帝國的安全,我只好先關閉了網絡,把那些數据包擋在外面。”

小馬哥:“需要趕緊採取措施,恢復正常,我們nginx公司每秒鐘都在遺失大量的客戶,這是一筆巨額損失!”

帝國安全部長:“小Q,你把當前的形勢介紹一下,大家一起來出謀劃策。”

小Q:“好的。TCP的三次握手想必諸位都有所瞭解,收到SYN數据包後,我需要準備一個數據塊來存儲用戶端的資訊,敵軍正是瞄準了這一點,給我發送大量SYN數据包,我就需要分配大量的數據塊,直到把帝國空間耗盡。”

小馬哥:“抱歉,我打斷一下,你為何不及時把無效的數據塊釋放掉,騰出空間呢?”

小Q:“當然有,我有一套超時機制,超時以後第三次握手還沒來,我就會給釋放掉。但現在問題是敵軍聲勢浩大,剛剛騰出的空間馬上又會被擠佔。”

小馬哥:“那簡單,你把超時時間調小一點,儘快釋放無效的數據塊不就行了!”

小Q:“要是太小了,正常的用戶因為網絡原因,時延比較大的,這不就誤傷了嗎?”

小馬哥:“嗯,這個你們自己權衡一下,取一個合適的值,如今也沒有其他辦法,趕緊恢復生產才是!”

安全部長:“小Q,先這樣試試看”

小Q:“行吧,我這就去”

小Q:“大人,我已經按照訓示執行,不過網絡連接越來越多,這一招恐怕支撐不了太久,還是早做打算才是。”

安全部長:“WAF公司呢,你們有什麼辦法沒有?”

WAF公司黑衣人:“大人,我們關注的業務在於web應用安全,此次的SYN Flood,實非我等擅長。”

現場陷入了久久的沉默……

良久,防火牆打破了沉默:“小Q,為何非得在收到第一次握手SYN數据包後就建立數據塊?如果把數據塊的建立時間放在第三次握手之後呢?”

小Q:“如果一開始不用建立數據塊佔用空間,那確實解决了大麻煩!不過,不建立數據塊,那如何把用戶端的資訊保存起來呢?”

防火牆:“保存什麼資訊?”

小Q:“用戶端的IP、埠、序號這些啊。”

防火牆:“這些資訊在第三次握手來的數据包中也有啊,不用提前存起來嘛!”

防火牆:“有沒有什麼辦法,不用提前存,也能做校驗呢?”

小Q:“這,這怎麼做?”

防火牆:“有了!第二次發給用戶端的序號,如果不是一個隨機值,而是根據用戶端資訊和其他資訊綜合計算出來的一個雜湊值,收到第三次握手的時候,我們拿到用戶端答覆的ACK,再重新計算一次雜湊值,如果雜湊值+1=ACK,那就能對得上,反之就是錯誤的包,直接丟棄!”

還沒等小Q回過神,安全部長起身鼓掌:“妙哉!這真是一個絕妙的點子!小Q,就按這個辦法,趕緊去辦!”

4

絕處逢生

WAF黑衣人搶先發言:“我覺得這個管道關鍵點在於把校驗資訊的存儲從服務器放到了用戶端,有點類似web科技中的Cookie。要不咱們就叫做SYN Cookie吧!”

防火牆:“嗯,這個名字好,總結的很到位”

一個小時後,瘋狂的TCP SYN數据包潮水逐漸退去,Linux帝國終於恢復了往日的寧靜,nginx公司的業務也恢復了正常。小Q抬頭一看,天邊已經微亮,這漫長的夜晚總算是熬過去了。

彩蛋

“大人,Linux帝國有防火牆、WAF一幫人守衛,我們的攻擊沒有起到什麼效果。”

“你以為他們真的是靠自己的本事勝利的嗎?這次只是給他們點教訓,我們的遊戲才剛剛開始。”

欲知後事如何,請關注後續精彩……

原創不容易,快轉發分享給更多人看啊

精彩回顧:

掃碼關注,更多精彩