文章目錄
- 啟用 SYN 攻擊保護
- 設定 SYN 保護閾值
- 設定其他的保護
Microsoft Corporation
請參閱著陸頁以獲得《改進 Web 應用程式安全性:威脅和對策》的起點和完整的概述。
摘要: 您可以在 Windows 註冊表中配置各種 TCP/IP 參數,以便防止網路級拒絕服務的攻擊,包括 SYN 洪水攻擊、ICMP 攻擊和 SNMP 攻擊。您可以將登錄機碼配置為:
| • |
當檢測到攻擊時,啟用 SYN 洪水保護。 |
| • |
設定用於確定攻擊構成要素的閾值。 |
該方法文檔為管理員展示了必須配置的登錄機碼和註冊表值,以防止受到基於網路的拒絕服務的攻擊。
注 這些設定會修改 TCP/IP 在伺服器上的工作方式。Web 服務器的特性將決定要觸發拒絕服務對策的最佳閾值。有些值可能對您的用戶端串連的限制非常嚴格。在部署到產品伺服器之前,請先測試本文檔的建議。
本頁內容
|
預備知識 |
|
防止 SYN 攻擊 |
|
防止 ICMP 攻擊 |
|
防止 SNMP 攻擊 |
|
AFD.SYS 保護 |
|
其他保護 |
|
缺陷 |
|
其他資源 |
預備知識
TCP/IP 是一種本質上不安全的協議。但是,Windows 2000 實現可以使您配置其操作以防止網路的拒絕服務的攻擊。預設情況下,本文中所涉及的一些項和值可能並不存在。在這些情況下,請建立該項、值或值資料。
有關 Windows 2000 的註冊表所控制的 TCP/IP 網路設定的詳細資料,請參閱白皮書“Microsoft Windows 2000 TCP/IP Implementation Details”,位於 http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.asp。
防止 SYN 攻擊
SYN 攻擊利用 TCP/IP 串連建立機制中的安全性漏洞。要發動 SYN 洪水攻擊,攻擊者要使用程式來發送大量的 TCP SYN 請求來填充伺服器上掛起的串連隊列。這將導致其他使用者無法建立網路連接。
要防止網路受到 SYN 攻擊,請遵循下列通用的步驟,這些步驟稍後將於本文檔中進行解釋:
| • |
啟用 SYN 攻擊保護 |
| • |
設定 SYN 保護閾值 |
| • |
設定其他保護 |
啟用 SYN 攻擊保護
啟用 SYN 攻擊保護的命名值位於下面的登錄機碼中: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services.
值名稱:SynAttackProtect
建議值: 2
有效值: 0 - 2
說明: 引起 TCP 調整 SYN-ACKS 的重新傳輸。如果您配置這個值,當發生 SYN 攻擊時,串連響應的逾時速度會比較快。當超出 TcpMaxHalfOpen 或 TcpMaxHalfOpenRetried 的值時,便會觸發 SYN 攻擊。
設定 SYN 保護閾值
下列值確定要觸發的 SYN 保護的閾值。本部分中的所有項和值都位於登錄機碼 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 中。這些項和值如下所示:
| • |
值名稱:TcpMaxPortsExhausted 建議值: 5 有效值: 0-65535 說明: 指定 TCP 連線要求的閾值,必須超過該閾值才會觸發 SYN 洪水保護。 |
| • |
值名稱:TcpMaxHalfOpen 建議值資料: 500 有效值: 100-65535 說明: 啟用 SynAttackProtect 時,該值會指定在 SYN_RCVD 狀態下的 TCP 串連的閾值。超過 SynAttackProtect 時,便會觸發 SYN 洪水保護。 |
| • |
值名稱:TcpMaxHalfOpenRetried 建議值資料: 400 有效值: 80-65535 說明: 啟用 SynAttackProtect 時,該值指定在 SYN_RCVD 狀態下的 TCP 串連的閾值,其中至少已經進行了一次重新傳輸。超過 SynAttackProtect 時,便會觸發 SYN 洪水保護。 |
設定其他的保護
本部分中的所有項和值都位於登錄機碼 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 中。這些項和值如下所示:
| • |
值名稱:TcpMaxConnectResponseRetransmissions 建議值資料: 2 有效值: 0-255 說明: 對取消嘗試響應 SYN 請求之前要重新傳輸 SYN-ACK 的次數進行控制+。 |
| • |
值名稱:TcpMaxDataRetransmissions 建議值資料: 2 有效值: 0-65535 說明: 指定 TCP 在中止串連前,要重新傳輸單獨資料片斷(而並非串連請求片斷)的次數。 |
| • |
值名稱:EnablePMTUDiscovery 建議值資料: 0 有效值: 0, 1 說明: 將該值設定為 1(預設值)時,便會強制 TCP 在到遠程主機的路徑上找到最大傳輸單位或最大資料包大小。攻擊者可能會強制資料包分割,造成堆棧負荷過重。將該值設定為 0 會強制不是本地子網的主機串連都使用 576 位元組的 MTU。 |
| • |
值名稱:KeepAliveTime 建議值資料: 300000 有效值: 80-4294967295 說明: 通過發送保持活動資料包,指定 TCP 嘗實驗證閑置串連是否仍然原封不動的頻率。 |
| • |
值名稱:NoNameReleaseOnDemand 建議值資料: 1 有效值: 0, 1 說明: 當電腦接收到名稱釋放請求時,指定不要釋放電腦的 NetBIOS 名稱。 |
請使用表 1 中總結的值來建立最大保護。
| 表 1 建議值 |
| 值名稱 |
值 (REG_DWORD) |
SynAttackProtect |
2 |
TcpMaxPortsExhausted |
1 |
TcpMaxHalfOpen |
500 |
TcpMaxHalfOpenRetried |
400 |
TcpMaxConnectResponseRetransmissions |
2 |
TcpMaxDataRetransmissions |
2 |
EnablePMTUDiscovery |
0 |
KeepAliveTime |
300000 (5 minutes) |
NoNameReleaseOnDemand |
1 |
防止 ICMP 攻擊
本部分中指定的值位於登錄機碼HKLM/System/CurrentControlSet/Services/AFD/Parameters 下
值:EnableICMPRedirect
建議值資料: 0
有效值: 0(禁用)、1(啟用)
說明: 將該註冊表值修改為 0 可以防止接收到 ICMP 重新導向資料包時,建立代價高昂的主機路由。
請使用表 2 中總結的值來建立最大保護。
| 表 2 建議值 |
| 值名稱 |
值 (REG_DWORD) |
EnableICMPRedirect |
0 |
防止 SNMP 攻擊
本部分中指定的值位於登錄機碼HKLM/System/CurrentControlSet/Services/Tcpip/Parameters 下。
值:EnableDeadGWDetect
建議值資料: 0
有效值: 0(禁用)、1(啟用)
說明: 防止攻擊者強制切換到次要網關
請使用表 3 中總結的值來建立最大保護。
| 表 3 建議值 |
| 值名稱 |
值 (REG_DWORD) |
EnableDeadGWDetect |
0 |
AFD.SYS 保護
下列項指定核心模式驅動程式 Afd.sys 的參數。Afd.sys 用於支援 Windows 通訊端應用程式。本部分中的所有項和值都位於登錄機碼 HKLM/System/CurrentControlSet/Services/AFD/Parameters 中。這些項和值如下所示:
| • |
值:EnableDynamicBacklog 建議值資料: 1 有效值: 0(禁用)、1(啟用) 說明: 指定 AFD.SYS 功能來有效抵禦大量的 SYN_RCVD 串連。有關詳細資料,請參閱“Internet Server Unavailable Because of Malicious SYN Attacks”,位於 http://support.microsoft.com/default.aspx?scid=kb;en-us;142641。 |
| • |
值名稱:MinimumDynamicBacklog 建議值資料: 20 有效值: 0-4294967295 說明: 指定偵聽終結點上允許的可用串連的最小數量。如果可用串連的數目低於該值,線程便會排入隊列以建立其他的可用串連。 |
| • |
值名稱: MaximumDynamicBacklog 建議值資料: 20000 有效值: 0-4294967295 說明: 指定可用串連再加上 SYN_RCVD 狀態中的串連的總數的最大值。 |
| • |
值名稱:DynamicBacklogGrowthDelta 建議值資料: 10 有效值: 0-4294967295 預設為存在: No 說明: 指定需要其他串連時將建立的可用串連數量。 |
請使用表 4 中所總結的值來建立最大保護。
| 表 4 建議值 |
| 值名稱 |
值 (REG_DWORD) |
EnableDynamicBacklog |
1 |
MinimumDynamicBacklog |
20 |
MaximumDynamicBacklog |
20000 |
DynamicBacklogGrowthDelta |
10 |
其他保護
本部分中的所有項和值都位於登錄機碼 HKLM/System/CurrentControlSet/Services/Tcpip/Parameters 中。
保護篩選的網路詳細資料
網路位址轉譯 (NAT) 用於篩選來自傳入串連的網路。攻擊者可以使用 IP 源路由來避開該篩選以確定網路拓撲。
值:DisableIPSourceRouting
建議值資料: 1
有效值: 0(轉寄所有資料包)、1(不轉寄源路由的資料包)、2(丟棄所有傳入源路由的資料包)。
說明: 禁用 IP 源路由,發送方可以利用 IP 源路由來確定資料包通過網路時應該採用的路由。
避免接收分段的資料包
處理分段資料包的代價可能很高。雖然拒絕服務極少來自周邊網路的內部,但是該設定可以防止分段資料包的處理。
值:EnableFragmentChecking
建議值資料: 1
有效值: 0(禁用)、1(啟用)
說明: 防止 IP 堆棧接受分段的資料包。
不轉寄送往多主機的資料包
多主機可能會響應多播資料包,進而造成在網路中廣泛傳播的響應。
值:EnableMulticastForwarding
建議值資料: 0
有效範圍: 0 (false)、1 (true)
說明: 路由服務使用這個參數來控制是否要轉寄 IP 多播。該參數是由路由和遠端存取服務建立的。
只有防火牆在網路間轉寄資料包
多主伺服器不能在所串連的各個網路間轉寄資料包。防火牆是明顯的例外。
值:IPEnableRouter
建議值資料: 0
有效範圍: 0 (false)、1 (true)
說明: 將該參數設定為 1 (true) 可使系統在所串連的各個網路間路由 IP 資料包。
掩碼網路拓撲詳細資料
使用 ICMP 資料包可以請求主機的子網路遮罩。公開該資訊本身並無大礙;但是,多主機的響應可能會被用於構建內部網路的資訊。
值:EnableAddrMaskReply
建議值資料: 0
有效範圍: 0 (false)、1 (true)
說明: 該參數控制電腦是否響應 ICMP 位址遮罩請求。
請使用表 5 中總結的值來建立最大保護。
| 表 5 建議值 |
| 值名稱 |
值 (REG_DWORD) |
DisableIPSourceRouting |
1 |
EnableFragmentChecking |
1 |
EnableMulticastForwarding |
0 |
IPEnableRouter |
0 |
EnableAddrMaskReply |
0 |
缺陷
測試這些值的更改時,請根據您在生產中預期使用的網路捲來進行測試。這些設定會修改被認為是正常的閾值,而且偏離經過測試的預設值。如果各個用戶端的連線速度差異很大,那麼有些設定可能過於狹隘而無法穩定地支援用戶端。
其他資源
有關 TCP/IP 的其他詳細資料,請參考下列資源:
| • |
有關強化 TCP/IP 堆棧的詳細資料,請參閱 Microsoft 知識庫文章 315669“How To:Harden the TCP/IP Stack Against Denial of Service Attacks in Windows 2000”。 |
| • |
有關 Windows 2000 TCP/IP 實現的詳細資料,請參閱 Lee Davies 的“Windows 2000 TCP/IP Protocols and Services”(Microsoft Press 書籍)。 |
| • |
有關 Windows 2000 TCP/IP 實現的詳細資料,請參閱 TechNet 網站上的“Microsoft Windows 2000 TCP/IP Implementation Details”,位於 http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.asp。 |