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