一、洪水——大自然對人類的報復
每一年,自然界都要用各種方式去報復人們對它做的一切,例如洪水。
每一年,人們都要為洪水后滿地的狼籍和可能造成的人員傷亡和財產損失而發愁。
為了抵抗洪水,人們砍伐樹木挖采巖石建造更高的堤壩;為了破壞這些堤壩,大自然發起更猛烈的洪水沖垮這些防護措施。
在大自然與人類抗衡的同時,網絡上也有人與人之間的抗衡。
每一年,有些人總要不斷試驗各種令某些網站長時間無法訪問的攻擊方法。
每一年,投資者都要因為這些網站被惡意停止所造成的經濟損失頭痛。
為了抵抗這些人的攻擊,技術人員研究各種方法讓這些攻擊造成的損失降低;為了各種目的,攻擊者們研究更多的攻擊方法讓網站再次癱瘓。
這種攻擊被稱為“Denial of Service(DoS)”,臭名昭著的“拒絕服務”攻擊。
它通常使用不只一臺機器進行攻擊,攻擊者能同時控制這些機器,這種結構就是“Distributed”,分布式。所以,我們要討論的拒絕服務,默認都是指“Distributed Denial of Service(DDoS)”,分布式拒絕服務。
二、面對洪水……
1.洪水以外的東西——被濫用的SYN拒絕服務(Synchronize Denial of Service)
當一個地區即將發生洪水(或者已經發生)的時候,當地居民的表現很少有鎮定的:東奔西跑的、收拾財物的、不知所措的……整個城鎮亂成一鍋粥,造成的后果就是街道交通混亂,誰也跑不了。
這個問題到了網絡上,就變成了一堆數據包只能在服務器外面亂撞而不入。
為什么會這樣?因為攻擊者使用了SYN攻擊。
要明白SYN攻擊的原理,要從連接建立的過程開始說起。從我們輸入一個網址到我們能看到這個網頁,機器在非常短的時間內為我們做了三件重要的事情:
1.機器發送一個帶有“ SYN”(同步)標志的數據包給服務器,請求連接;
2.服務器返回一個帶有SYN標志和ACK(確認)標志數據包給機器;
3.機器也返回一個ACK確認標志數據包給服務器,數據傳輸建立。
這三步就叫做“三次握手”。
那么所謂的SYN攻擊是什么呢?讓我們再看第二步,服務器返回數據后,并不會跑開,而是等待對方再次返回確認,問題就出在這里。如果一臺計算機發送SYN數據包后由于意外斷開了網絡,服務器返回的ACK就得不到回應,而規范標準規定它必須“不見不散”,所以服務器就癡癡的等到夕陽下山,這期間內它拒絕其他機器的連接請求。于是在其它機器看來,它們開不了某個服務器的頁面了。幸好在服務器的時間里,“夕陽下山”不過一瞬間,所以偶爾意外的一兩臺機器不回答它也很少影響大局。可是對于惡意攻擊者來說,這不是問題——他們使用一些特殊工具大量產生這種導致服務器等待的虛假IP地址的SYN數據包,由于這個IP地址根本沒有機器存在,自然不會有任何回應,所以服務器只有傻乎乎的為這些數據包做了個列表,然后一個一個等下去!這些等待花去的時間累加起來就變成了影響正常數據傳輸的原因,因為攻擊者不停發送SYN數據包,服務器就無限的等下去,其他數據包就進不去服務器了,于是,一切都完了。這是最常見最濫用的拒絕服務模式,現成的攻擊工具也很多,例如流行的Lion SYN Flood、xdos、獨裁者等,這些工具幾乎不需要什么高深知識就能用,因此SYN成為服務器和網絡管理員最恨最怕的攻擊。
其實SYN攻擊的出現與系統自身設計的疏忽有關,首先,SYN是利用了TCP協議規范的疏忽;其次,是系統做的后臺!*nix和Win2000/XP的網絡架構允許用戶通過編程手動設置IP頭部,包括源IP、目標IP等,這是產生虛假SYN包的關鍵。Win9x/Me的網絡架構不允許用戶這樣做,因此別指望Win9x/Me下使用這些工具能對服務器構成威脅了。
目前依然沒有任何有效的軟措施能抵擋SYN攻擊,唯一的辦法只有使用硬件防火墻,它從物理線路上直接過濾掉虛假的SYN數據包,但是價格昂貴,很多人只能痛心的看著他們的服務器被SYN數據包折磨得CPU持久不下100%……
有人說了,“難怪我的機器經常慢,原來有人SYN我!”等等等等,先聽我說完。SYN攻擊因為數據包很小,不能造成阻塞網絡的危害,對沒有開任何TCP服務的用戶是不起作用的,即使有人正在SYN攻擊你,你也察覺不到異常情況,除非你開了WEB服務之類。