讓子彈多飛一會 論如何優化DDoS

2021-09-23 08:58:15 字數 1699 閱讀 4085

假設1枚炮彈擊中目標的傷害為10,而4枚炮彈同時擊中目標的傷害為200。現在我方只有一門火炮,4枚炮彈。此火炮每次只能發射一枚炮彈。問如何操作可以使其傷害達到200?

答案是」讓子彈多飛一會兒」,不過這個回答不是來自姜文的電影,而是源於美軍在二戰中提出的 mrsi (multiple rounds simultaneous impact)技術,粗糙的翻譯一下就是「發射多次卻同時命中」。

我們知道炮彈飛行的時間取決於開炮時的發射仰角,比如仰角大於45度時,炮彈的飛行的長度和時間比仰角小於45度要長。那麼我們就可以採用mrsi 技術,以從大到小的發射仰角,連續發射4次。這樣第一次發射的炮彈飛行時間最長,最後一次發射的飛行時間最短。只要我們精確的計算好角度和發射的時間間隔,就有可能讓4枚炮彈同時擊中目標,從而造成200的傷害。

簡而言之,就是利用炮彈的飛行時間差來彌補發射的間隔時間。

這麼做的好處是什麼呢?當然是提高了ddos的效率,攻擊者的發報率是1包/70毫秒,而在某個時間點卻有2個反射包擊中目標。這相當於巧妙的利用了網路延遲而把所有的攻擊包匯聚在某乙個特定的時間點上。例子中只用到了2個dns伺服器,但是在實際攻擊中,可以擴充套件到n個。攻擊方式也不僅限於dns放大攻擊,用http **的cc攻擊也可以。

優化過的ddos步驟是

1.假設有n條線路(取決於具體的攻擊方法,可能有n個dns伺服器,n個http**等等),攻擊者先測量出每條攻擊路線的延遲, 對應記為 (l1,l2,…,ln)。

2.從(l1,l2,…,ln)中找出最大延遲,記為lmax

對於路線i(1≤ i ≤n),攻擊者在傳送前須等待 lmax-li

普通的ddos是拼命打,有多少打多少。這樣的結果是資料報擊中最終目標的時間是平均分布的,如下圖所示

而優化過的ddos應該是這樣的

然而為了成功的優化ddos,我們還必須得解決乙個首要問題,如何測量網路延遲。 對於http cc類攻擊來說比較簡單,攻擊者配製好**,對攻擊目標發乙個http請求,接收http響應,就可以得到請求往返時間,然後用這個請求往返時間來估算網路延遲。當然,在實際情況中,網路延遲取決於很多因素,還需要用不同的方法降低噪音帶來的影響,比如多次測量取平均值等等。

對於dns放大攻擊,一般用king測量法。比如攻擊者(a)打算用dns伺服器d來攻擊目標t。然而,直接測量 a經過d到t的網路延遲 (ladt)是很難的。但是,我們可以利用dns遞迴查詢的特性,測量出 a經過d到t的dns伺服器 的網路延遲(ladt(dns))。方法是讓a對d發乙個關於t域的dns查詢,在這種情況下d會向t的dns伺服器遞迴查詢。從而該攻擊者可以用此dns請求往返時間來估算lat(dns)。一般來說, dns伺服器都在離其他伺服器很近的地方,延遲差別可以忽略不計,因此lat ≈ lat(dns) 。

比如攻擊者打算利用google dns (8.8.8.8)來攻擊test.com的web 伺服器。為了優化,攻擊者需要先知道他到8.8.8.8再到test.com web伺服器的延遲。怎麼計算延遲呢? 攻擊者可以給8.8.8.8傳送乙個dns查詢:[隨機子域].test.com 。由於8.8.8.8 並不負責test.com子網域名稱,它只能遞迴詢問test.com的dns伺服器。test.com的dns伺服器收到該詢問以後,會進行本地記錄查詢。因為該子域是隨機產生的,所以肯定會返回找不到啦,8.8.8.8收到回答以後,會再把這一回答繼續**給攻擊者。這樣攻擊者就可以計算出他到8.8.8.8再到test.com dns伺服器的延遲。由於一般dns伺服器都在離web伺服器很近的地方,因此可以推算出到8.8.8.8再到test.com web伺服器的延遲。

讓AutoMapper在你的專案裡飛一會兒

dto是個什麼東東?dto data transfer object 就是資料傳輸物件,說白了就是乙個物件,只不過裡邊全是資料而已。為什麼要用dto?1 dto更注重資料,對領域物件進行合理封裝,從而不會將領域物件的行為過分暴露給表現層 2 dto是面向ui的需求而設計的,而領域模型是面向業務而設計...

讓AutoMapper在你的專案裡飛一會兒

dto是個什麼東東?dto data transfer object 就是資料傳輸物件,說白了就是乙個物件,只不過裡邊全是資料而已。為什麼要用dto?1 dto更注重資料,對領域物件進行合理封裝,從而不會將領域物件的行為過分暴露給表現層 2 dto是面向ui的需求而設計的,而領域模型是面向業務而設計...

別做 開始愛好者 ,讓自己的想法飛一會

最近學到乙個新詞 開始愛好者 接下來,我要舉一些例子了,相信會戳到很多人的痛點。是不是有很多人,感覺買了書就相當於自己讀了?是不是有很多人,感覺買了健身卡就相當於自己去健身了?是不是有很多人,購買了學習程式設計的專欄,就相當於自己掌握了這門技術了?沒錯,這就是開始愛好者。那在這裡反問自己的內心一句 ...