當前位置:編程學習大全網 - 源碼下載 - DOS 是什麽?怎麽用?

DOS 是什麽?怎麽用?

通常所說的DOS有兩種不同的概念,即拒絕服務或壹種磁盤操作系統,通常DoS(O小寫)指的是拒絕服務,DOS(O大寫)指的是壹種磁盤操作系統

隨著計算機技術的發展,網絡也在迅猛地普及和發展。人們在享受著網絡帶來的各種便利的同時,也受到了很多黑客的攻擊。在眾多的攻擊種類中,有壹種叫做 DoS(Denial of Service 拒絕服務)的攻擊,是壹種常見而有效的網絡攻擊技術,它通過利用協議或系統的缺陷,采取欺騙或偽裝的策略來進行網絡攻擊,最終使得受害者的系統因為資源耗盡或無法作出正確響應而癱瘓,從而無法向合法用戶提供正常服務。它看上去平淡無奇,但是攻擊範圍廣,隱蔽性強、簡單有效而成為了網絡中壹種強大的攻擊技術,極大地影響了網絡和業務主機系統的有效服務。其中,DDoS(Distubuted Denial of Service 分布式拒絕服務)更以其大規模性、隱蔽性和難防範性而著稱。

在對Linux 2. 4 內核防火墻netfilter 的原理深入研究後,分析了在netfilter 架構下防火墻的設計、實現和開發過程。以kylix3. 0為開發環境,作者基於netfilter 架構開發了壹款包過濾和應用代理的混合型防火墻,並對其做了測試。該防火墻系統是由包過濾管理模塊、路由記錄模塊、應用代理模塊(syn proxy)、掃描防禦模塊和日誌記錄模塊構成。其中包過濾是基於netfilter 中的iptables 來實現的,網絡地址轉換也在包過濾管理模塊中實現;路由記錄模塊通過修改Linux 內核中TCP/IP程序和重新編譯內核使內核支持路由記錄功能來實現的;在應用代理模塊中實現了HTTP代理和壹個通用代理服務,HTTP代理程序基於SQUID 實現,而通用代理由壹個代理進程來實現;掃描防禦模塊中主要是通過壹個網絡掃描防禦Demo 進程來監控是否有掃描發生;日誌記錄模塊主要是選擇記錄日誌的位置,有本機和郵件通知兩種選擇方式。針對常見的IP 地址欺騙、IP 源路由欺騙、ICMP 重定向欺騙、IP 劫持等常見網絡攻擊給予了分析並在過濾管理模塊中加以解決實現,其中IP 劫持實現是用壹個鉤子函數註入協議棧中來實現的。文中還分析了加固操作系統而關閉壹些危險和不使用的服務,使防火墻架設在壹個相對安全的基礎上,同時也將系統編譯升級為最新的穩定內核。

DoS攻擊是網絡攻擊最常見的壹種。它故意攻擊網絡協議的缺陷或直接通過某種手段耗盡被攻擊對象的資源,目的是讓目標計算機或網絡無法捉供正常的服務或資源訪問,使目標系統服務停止響應甚至崩潰,而在此攻擊中並不入侵目標服務器或目標網絡設備。這些服務資源包括網絡寬帶、系統堆棧、開放的進程。或者允許的連接。這種攻擊會導致資源耗盡,無論計算機的處理速度多快、內存容量多大、網絡帶寬的速度多快都無法避免這種攻擊帶來的後果。任何資源都有壹個極限,所以總能找到壹個方法使請求的值大於該極限值,導致所提供的服務資源耗盡。

DoS攻擊有許多種類,主要有Land攻擊、死亡之ping、淚滴、Smurf攻擊及SYN洪水等。

據統計,在所有黑客攻擊事件中,syn洪水攻擊是最常見又最容易被利用的壹種DoS攻擊手法。

1.攻擊原理

要理解SYN洪水攻擊,首先要理解TCP連接的三次握手過程(Three-wayhandshake)。在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立壹個連接。第壹次握手:建立連接時,客戶端發送SYN包((SYN=i)到服務器,並進入SYN SEND狀態,等待服務器確認;

第二次握手:服務器收到SYN包,必須確認客戶的SYN (ACK=i+1 ),同}Jj’自己也發送壹個SYN包((SYN j)}即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN十ACK包,向服務器發送確認包ACK(ACK=j+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,客戶端與服務器開始傳送數據。

在上述過程中,還有壹些重要的概念:

半連接:收到SYN包而還未收到ACK包時的連接狀態稱為半連接,即尚未完全完成三次握手的TCP連接。

半連接隊列:在三次握手協議中,服務器維護壹個半連接隊列,該隊列為每個客戶端的SYN包(SYN=i )開設壹個條目,該條目表明服務器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處於SYN_ RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。

Backlog參數:表示半連接隊列的最大容納數目。

SYN-ACK重傳次數:服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首次重傳,等待壹段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息、從半連接隊列中刪除。註意,每次重傳等待的時間不壹定相同。

半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。

上面三個參數對系統的TCP連接狀況有很大影響。

SYN洪水攻擊屬於DoS攻擊的壹種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火墻等網絡系統,事實上SYN攻擊並不管目標是什麽系統,只要這些系統打開TCP服務就可以實施。從圖4-3可看到,服務器接收到連接請求(SYN=i )將此信息加入未連接隊列,並發送請求包給客戶( SYN=j,ACK=i+1 ),此時進入SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,壹直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP地址,向服務器不斷地發送SYN包,服務器回復確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN 請求

被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。過程如下:

攻擊主機C(地址偽裝後為C')-----大量SYN包---->彼攻擊主機

C'<-------SYN/ACK包----被攻擊主機

由於C’地址不可達,被攻擊主機等待SYN包超時。攻擊主機通過發人量SYN包填滿未連接隊列,導致正常SYN包被拒絕服務。另外,SYN洪水攻擊還可以通過發大量ACK包進行DoS攻擊。

2.傳統算法

抵禦SYN洪水攻擊較常用的方法為網關防火墻法、中繼防火墻法和SYNcookies。為便於敘述,將系統拓撲圖簡化為圖4-4。圖中,按網絡在防火墻內側還是外側將其分為內網、外網(內網是受防火墻保護的)。其次,設置防火墻的SYN重傳計時器。超時值必須足夠小,避免backlog隊列被填滿;同時又要足夠大保證用戶的正常通訊。

(1) 網關防火墻法

網關防火墻抵禦攻擊的基本思想是:對於內網服務器所發的SYN/ACK包,防火墻立即發送ACK包響應。當內網服務器接到ACK包後,從backlog隊列中移出此半連接,連接轉為開連接,TCP連接建成。由於服務器處理開連接的能力比處理半連接大得多,這種方法能有效減輕對內網服務器的SYN攻擊,能有效地讓backlog隊列處於未滿狀態,同時在重傳壹個未完成的連接之前可以等待更長時間。

以下為算法完整描述:

第壹步,防火墻截獲外網客戶端發向內網服務器SYN數據包,允許其通過,抵達內網服務器。同時在連接跟蹤表中記錄此事件.

第二步,防火墻截獲服務器發向客戶端的SYN/ACK響應包,用連接跟蹤表中記錄的相應SYN包匹配它.

第三步,防火墻讓截獲的SYN/ACK繼續進行(發向客戶端)。同時,向內網服務器發送ACK包。這樣,對服務器來說,TCP連接三次握手已經完成。系統在backlog隊列中刪掉此半連接.

第四步,看此TCP連接是否有效,相應產生兩種解決方法。如果客戶端的連接嘗試是有效的,那麽防火墻將接到來自客戶端的ACK包,然後防火墻將它轉發到服務器。服務器會忽略這個冗余的ACK包,這在TCP協議中是允許的.

如果客戶端的IP地址並不存在,那麽防火墻將收不到來自客戶端的ACK包,重轉計時器將超時。這時,防火墻重傳此連接.

(2) 中繼防火墻法

中繼防火墻抵禦攻擊的思想是:防火墻在向內網服務器發SYN包之前,首先完成與外網的三次握手連接,從而消除SYN洪水攻擊的成立條件。

以下為算法完整描述:

第壹步,防火墻截獲外網客戶端發向內網服務器SYN數據包.

第二步,防火墻並不直接向內網發SYN數據包,而是代替內網服務器向外網發SYNIACK數據包.

第三步,只有接到外網的ACK包,防火墻向內網發SYN包.

第四步,服務器應答SYN/ACK包.

第五步,防火墻應答ACK包.

(3) 分析

首先分析算法的性能,可以看出:為了提高效率,上述算法使用了狀態檢測等機制(可通過本系統的基本模塊層得以實現)

對於非SYN包(CSYN/ACK及ACK包),如果在連線跟蹤信息表未查找到相應項,則還要匹配規則庫,而匹配規則庫需比較諸多項(如IP地址、端口號等),花費較大,這會降低防火墻的流量。另外,在中繼防火墻算法中,由於使用了SYN包代理,增加了防火墻的負荷,也會降低防火墻的流量。

其次,當攻擊主機發ACK包,而不是SYN包,算法將出現安全漏洞。壹般地,TCP連接從SYN包開始,壹旦 SYN包匹配規則庫,此連接將被加到連接跟蹤表中,並且系統給其60s延時。之後,當接到ACK包時,此連接延時突然加大到3600s。如果,TCP連接從ACK包開始,同時此連接未在連接跟蹤表中註冊,ACK包會匹配規則庫。如匹配成功,此連接將被加到連接跟蹤表中,同時其延時被設置為3600s。即使系統無響應,此連接也不會終止。如果攻擊者發大量的ACK包,就會使半連接隊列填滿,導致無法建立其它TCP連接。此類攻擊來自於內網。因為,來自於外網的ACK包攻擊,服務器會很快發RST包終止此連接(SOs>。而對於內網的外發包,其限制規則的嚴格性要小的多。壹旦攻擊者在某時間段內從內網發大量ACK包,並且速度高於防火墻處理速度,很容易造成系統癱瘓。

(4) SYN cookies

Linux支持SYN cookies,它通過修改TCP協議的序列號生成方法來加強抵禦SYN洪水攻擊能力。在TCP協議中,當收到客戶端的SYN請求時,服務器需要回復SYN-SACK包給客戶端,客戶端也要發送確認包給服務器。通常,服務器的初始序列號由服務器按照壹定的規律計算得到或采用隨機數,但在SYN cookies中,服務器的初始序列號是通過對客戶端IP地址、客戶端端口、服務器IP地址和服務器端口以及其他壹些安全數值等要素進行hash運算,加密得到的,稱之為cookie。當服務器遭受SYN攻擊使得backlog隊列滿時,服務器並不拒絕新的SYN請求,而是回復cookie(回復包的SYN序列號)給客戶端,如果收到客戶端的ACK包,服務器將客戶端的ACK序列號減去1得到。cookie比較值,並將上述要素進行壹次hash運算,看看是否等於此cookie。如果相等,直接完成三次握手(註意:此時並不用查看此連接是否屬於backlog隊列)。

此算法的優點是:半連接隊列滿時,SYN cookies仍可以處理新SYN請求。缺點是:某些TCP選項必須禁用,如大窗口等。計算cookies有花銷。

/*壹個IP包,其分片都被放入到壹個鏈表中,作為每壹個分片的鏈表節點用ipfrag結構表示。IP分片的中心組裝在此鏈表進行。*/

內核抵禦攻擊的代碼結構如下:

// From /ctu_85/archive/2008/01/03/2023205.aspx

/*IP分片結構體*/

struct ipfrag

{

int offset; //ip包中此分片的偏移值

int end; //此分片最後壹個株距在ip包中的位置

int len; //此分片長度

struct sk_buff *skb; //分片數據包

unsigned ........

if(end<= offset)&&(i>skb->len)

return NF_DRDP;

}

}

return NF_ACCEPT;

組成規則的三個結構體具體解釋如下:

(1)ipt......

unsigned int nfcache ; //用此位域表示數據報的哪些部分由這個規則檢查

.......

; //包含數據包及匹配此規則數據包的計算數值

以下僅列出ipt_entry_match結構體:

struce ipt_entry_match

{

union

{

struct{

u_int16_t target_size;

......

......

{

struct list_head list;//鏈表

struct

u int32 ipaddr; //地址

u_ int16 port; //端口

}src; //源端信息

struct

{

u_ int32 ipaddr;

u_ int 16 port;

} dst; //目的端信息

u_intl6 protonum; //協議號

`常用語法

dir+* 瀏覽

cls 清屏

cd 打開子目錄

cd.+* 退出子目錄

rd+* 刪除子目錄

del+* 刪除文件

  • 上一篇:中國地圖高清版大圖片
  • 下一篇:Zookeeper深入原理(3) - Zab協議
  • copyright 2024編程學習大全網