DOS攻擊
什么是DOS攻擊
DOS是Denial of Service的簡稱,用中文簡單翻譯就是拒絕服務。DOS攻擊的目的是:通過耗盡服務器的CPU、內存和網絡帶寬等資源使服務器無法為用戶提供正常服務或使得服務質量下降。總結下就是攻擊服務器,使得服務器拒絕為正常的用戶請求提供服務。(這樣已解釋,感覺DOS這個名字還取得挺形象的,哈哈~)
在網上找了個比較詳細的解釋:
作個形象的比喻來理解DoS。街頭的餐館是為大眾提供餐飲服務,如果一群地痞流氓要DoS餐館的話,手段會很多,比如霸占着餐桌不結賬,堵住餐館的大門不讓路,騷擾餐館的服務員或廚子不能干活,甚至更惡劣……相應的計算機和網絡系統則是為Internet用戶提供互聯網資源的,如果有黑客要進行DoS攻擊的話,可以想象同樣有好多手段!今天最常見的DoS攻擊有對計算機網絡的帶寬攻擊和連通性攻擊。帶寬攻擊指以極大的通信量沖擊網絡,使得所有可用網絡資源都被消耗殆盡,最后導致合法的用戶請求無法通過。連通性攻擊指用大量的連接請求沖擊計算機,使得所有可用的操作系統資源都被消耗殆盡,最終計算機無法再處理合法用戶的請求。
攻擊手段分類
DOS拒絕服務攻擊根據攻擊手段,主要可分為兩類:
- 洪泛攻擊:向目標服務器發送大量超過其處理能力的無用數據包從而使目標服務器無法為合法用戶提供服務;
- 半開連接攻擊:使系統中存在大量處於半連接的請求服務,服務器為了維護這些半開連接,需要耗費大量內存,而且一般的Web服務器都是有連接數量限制的。這個時候如果正常的請求過來就會被拒絕掉。
具體的攻擊方式舉例
1. SYN FLOOD(屬於半開連接攻擊)
利用服務器的連接緩沖區(Backlog Queue),利用特殊的程序,設置TCP的Header,向服務器端不斷地成倍發送只有SYN標志的TCP連接請求。當服務器接收的時候,都認為是沒有建立起來的連接請求,於是為這些請求建立會話,排到緩沖區隊列中。
如果你的SYN請求超過了服務器能容納的限度,緩沖區隊列滿,那么服務器就不再接收新的請求了。其他合法用戶的連接都被拒絕掉。可以持續你的SYN請求發送,直到緩沖區中都是你的只有SYN標記的請求。
2. 帶寬DOS攻擊
如果你的連接帶寬足夠大而服務器又不是很大,你可以發送請求,來消耗服務器的緩沖區消耗服務器的帶寬。這種攻擊就是人多力量大了,配合上SYN一起實施DOS,威力巨大。不過是初級DOS攻擊。
3. Hash碰撞攻擊
這個安全弱點利用了各語言的Hash算法的“非隨機性”可以制造出N多的value不一樣,但是key一樣數據,然后讓你的Hash表成為一張單向鏈表,而導致你的整個網站或是程序的運行性能以級數下降(可以很輕松的讓你的CPU升到100%)。關於Hash碰撞DOS攻擊,這篇博客已經總結的很全面了,就不自己再造個輪子了。
我自己做了個簡單的實驗,寫了下面這個Controller
@RequestMapping("/convertJSONAndValid")
public Object convertJSON(@RequestBody JSONObject jspan){
Map<String,Object> map = new HashMap<>();
map.put("key1","value");
return map;
}
通過Postman向這個接口一次性發送1000000個"xx":"1"這樣的鍵值對,通過任務管理器看到CPU瞬間就飆升到了88%。這個攻擊還是非常恐怖的。下面代碼用於生成1000000個鍵值對。
public static void main(String[] args) throws Exception {
FileWriter fs = new FileWriter("D:\\json.txt");
fs.write("{\r\n");
int count = 1000000;
for(int i=0;i<count;i++){
if(i!=count-1){
fs.write("\"xx\":\"1\",\r\n");
}else {
fs.write("\"xx\":\"1\"\r\n");
}
}
fs.write("}");
fs.close();
}
優秀博客參考
DDOS攻擊
傳統上,攻擊者所面臨的主要問題是網絡帶寬,由於較小的網絡規模和較慢的網絡速度的限制,攻擊者無法發出過多的請求。雖然類似“the ping of death”的攻擊類型只需要較少量的包就可以摧毀一個沒有打過補丁的UNIX系統,但大多數的DoS攻擊還是需要相當大的帶寬的,而以個人為單位的黑客們很難使用高帶寬的資源。為了克服這個缺點,DoS攻擊者開發了分布式的攻擊。攻擊者簡單利用工具集合許多的網絡帶寬來同時對同一個目標發動大量的攻擊請求,這就是DDoS(Distributed Denial of Service)攻擊。
無論是DoS攻擊還是DDoS攻擊,簡單的看,都只是一種破壞網絡服務的黑客方式,雖然具體的實現方式千變萬化,但都有一個共同點,就是其根本目的是使受害主機或網絡無法及時接收並處理外界請求,或無法及時回應外界請求。
總結下:
DDOS攻擊就是控制多台分布廣泛的機器對目標機器發起DOS攻擊