|
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
當(dāng)SynAttackProtect值(如無特別說明,本文提到的注冊表鍵值都為十六進(jìn)制)為0或不設(shè)置時,系統(tǒng)不受SynAttackProtect保護(hù)。
當(dāng)SynAttackProtect值為1時,系統(tǒng)通過減少重傳次數(shù)和延遲未連接時路由緩沖項(xiàng)(route cache entry)防范SYN攻擊。
當(dāng)SynAttackProtect值為2時(Microsoft推薦使用此值),系統(tǒng)不僅使用backlog隊(duì)列,還使用附加的半連接指示,以此來處理更多的SYN連接,使用此鍵值時,tcp/ip的TCPInitialRTT、window size和可滑動窗囗將被禁止。
我們應(yīng)該知道,平時,系統(tǒng)是不啟用SynAttackProtect機(jī)制的,僅在檢測到SYN攻擊時,才啟用,并調(diào)整tcp/ip協(xié)議棧。那么系統(tǒng)是如何檢測SYN攻擊發(fā)生的呢?事實(shí)上,系統(tǒng)根據(jù)TcpMaxHalfOpen,TcpMaxHalfOpenRetried 和TcpMaxPortsExhausted三個參數(shù)判斷是否遭受SYN攻擊。
TcpMaxHalfOpen 表示能同時處理的最大半連接數(shù),如果超過此值,系統(tǒng)認(rèn)為正處于SYN攻擊中。Windows2000 server默認(rèn)值為100,Windows2000 Advanced server為500。
TcpMaxHalfOpenRetried定義了保存在backlog隊(duì)列且重傳過的半連接數(shù),如果超過此值,系統(tǒng)自動啟動SynAttackProtect機(jī)制。Windows2000 server默認(rèn)值為80,Windows2000 Advanced server為400。
TcpMaxPortsExhausted 是指系統(tǒng)拒絕的SYN請求包的數(shù)量,默認(rèn)是5。
如果想調(diào)整以上參數(shù)的默認(rèn)值,可以在注冊表里修改(位置與SynAttackProtect相同)
· SYN cookies技術(shù)
我們知道,TCP協(xié)議開辟了一個比較大的內(nèi)存空間backlog隊(duì)列來存儲半連接條目,當(dāng)SYN請求不斷增加,并這個空間,致使系統(tǒng)丟棄SYN連接。為使半連接隊(duì)列被塞滿的情況下,服務(wù)器仍能處理新到的SYN請求,SYN cookies技術(shù)被設(shè)計(jì)出來。
SYN cookies應(yīng)用于linux、FreeBSD等操作系統(tǒng),當(dāng)半連接隊(duì)列滿時,SYNcookies并不丟棄SYN請求,而是通過加密技術(shù)來標(biāo)識半連接狀態(tài)。
在TCP實(shí)現(xiàn)中,當(dāng)收到客戶端的SYN請求時,服務(wù)器需要回復(fù)SYN+ACK包給客戶端,客戶端也要發(fā)送確認(rèn)包給服務(wù)器。通常,服務(wù)器的初始序列號由服務(wù)器按照一定的規(guī)律計(jì)算得到或采用隨機(jī)數(shù),但在SYN cookies中,服務(wù)器的初始序列號是通過對客戶端IP地址、客戶端端囗、服務(wù)器IP地址和服務(wù)器端囗以及其他一些安全數(shù)值等要素進(jìn)行hash運(yùn)算,加密得到的,稱之為cookie。當(dāng)服務(wù)器遭受SYN攻擊使得backlog隊(duì)列滿時,服務(wù)器并不拒絕新的SYN請求,而是回復(fù)cookie(回復(fù)包的SYN序列號)給客戶端, 如果收到客戶端的ACK包,服務(wù)器將客戶端的ACK序列號減去1得到cookie比較值,并將上述要素進(jìn)行一次hash運(yùn)算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此時并不用查看此連接是否屬于backlog隊(duì)列)。
在RedHat linux中,啟用SYN cookies是通過在啟動環(huán)境中設(shè)置以下命令來完成:
# echo 1 ?? /proc/sys/net/ipv4/tcp_syncookies
· 增加最大半連接數(shù)
大量的SYN請求導(dǎo)致未連接隊(duì)列被塞滿,使正常的TCP連接無法順利完成三次握手,通過增大未連接隊(duì)列空間可以緩解這種壓力。當(dāng)然backlog隊(duì)列需要占用大量的內(nèi)存資源,不能被無限的擴(kuò)大。
Windows2000:除了上面介紹的TcpMaxHalfOpen, TcpMaxHalfOpenRetried參數(shù)外,Windows2000操作系統(tǒng)可以通過設(shè)置動態(tài)backlog(dynamic backlog)來增大系統(tǒng)所能容納的最大半連接數(shù),配置動態(tài)backlog由AFD.SYS驅(qū)動完成,AFD.SYS是一種內(nèi)核級的驅(qū)動,用于支持基于window socket的應(yīng)用程序,比如ftp、telnet等。AFD.SYS在注冊表的位置:
HKLM\System\CurrentControlSet\Services\AFD\Parameters\EnableDynamicBacklog值為1時,表示啟用動態(tài)backlog,可以修改最大半連接數(shù)。
MinimumDynamicBacklog表示半連接隊(duì)列為單個TCP端囗分配的最小空閑連接數(shù),當(dāng)該TCP端囗在backlog隊(duì)列的空閑連接小于此臨界值時,系統(tǒng)為此端囗自動啟用擴(kuò)展的空閑連接(DynamicBacklogGrowthDelta),Microsoft推薦該值為20。 本新聞共 4頁,當(dāng)前在第 3頁 1 2 3 4 |
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|