1.方案:硬件?還是軟件? 現在防火牆的功能越來越多越花哨,如此多的功能必然要求系統有一個高效的處理能力。 防火牆從實現上可以分為軟件防火牆和硬件防火牆。軟件防火牆以checkpoint公司的Firewall-I為代表,其實現是通過 dev_add_pack的辦法加載過濾函數(Linux,其他操作系統沒有作分析,估計類似),通過在操作系統底層做工作來實現防火牆的各種功能和優化。國內也有一些所謂的軟件防火牆,但據了解大多是所謂“個人”防火牆,而且功能及其有限,故不在此討論范圍。 在國內目前已通過公安部檢驗的防火牆中,硬件防火牆占絕大多數。硬件防火牆一種是從硬件到軟件都單獨設計,典型如Netscreen防火牆不但軟件部分單獨設計,硬件部分也采用專門的ASIC集成電路。 另外一種就是基於PC架構的使用經過定制的通用操作系統的所謂硬件防火牆。目前國內絕大 多數防火牆都屬於這種類型。 雖然都號稱硬件防火牆,國內廠家和國外廠家還是存在著巨大區別。硬件防火牆需要在硬件和軟件兩方面同時下功夫,國外廠家的通常做法是軟件運算硬件化,其所設計或選用的運行平台本身的性能可能並不高,但它將主要的運算程序(查表運算是防火牆的主要工作)做成芯片,以減少主機CPU的運算壓力。國內廠家的防火牆硬件平台基本上采用通用PC系統或工業PC架構(直接原因是可以節省硬件開發成本),在提高硬件性能方面所能做的工作僅僅是提升系統CPU的處理能力,增大內存容量而已。現在國內防火牆的一個典型結構就是:工業主板+x86+128(256)M內存+DOC/DOM+硬盤(或不要硬盤而另增加一個日志服務器)+百兆網卡 這 樣一個工業PC結構。 在軟件性能方面,國內外廠家的差別就更大了,國外(一些著名)廠家均是采用專用的操作系統,自行設計防火牆。而國內所有廠家操作系統系統都是基於通用的 Linux,無一例外。各廠家的區別僅僅在於對Linux系統本身和防火牆部分(2.2內核為ipchains,2.4以後內核為netfilter)所作的改動量有多大。 事實上,Linux只是一個通用操作系統,它並沒有針對防火牆功能做什麼優化,而且其處理大數據量通信方面的能力一直並不突出,甚至比較低下(這也是 Linux一直只是低端服務器的寵兒的重要原因,我自己認為,在這一點上它還不如BSD系列,據說國外有用BSD做防火牆的,國內尚未見到)。現在絕大部分廠家,甚至包括號稱國內最大的天融信,在軟件方面所作的工作無非也就是系統有針對性的裁減、防火牆部分代碼的少量改動(絕大部分還是沒有什麼改動)和少量的系統補丁。而且我們在分析各廠家產品時可以注意這一點,如果哪個廠家對系統本身做了什麼大的改動,它肯定會把這個視為一個重要的賣點,大吹特吹,遺憾的是似乎還沒有什麼廠家有能力去做宣傳(天融信似乎有一個類似於checkpoint的功能:開放式的安全應用接口 TOPSEC,但它究竟做了多少工作,還需要去仔細了解)。 目前國內廠家也已經認識到這個問題,有些在做一些底層的工作,但有明顯成效的,似乎還沒有。 在此我們僅針對以Linux(或其他通用操作系統)為基礎的、以PC架構為硬件載體的防火牆做討論,以下如不特別提出,均同。
2.內核和防火牆設計 現在有一種商業賣點,即所謂“建立在安全操作系統之上的第四代防火牆”(關於防火牆分代的問題,目前有很多討論,比較一致的是把包過濾防火牆稱為第一代防火牆,把應用型防火牆(一般結合了包過濾功能,因此也成為混合型防火牆)稱為第二代防火牆,有些廠家把增加了檢測通信信息、狀態檢測和應用監測的防火牆稱為第三代防火牆,更有甚者在此基礎上提出了采用安全操作系統的防火牆,並把這個稱為第四代防火牆)。所謂安全操作系統,其實大多用的還是Linux,所不同的是需要做一些內核加固和簡單改造的工作,主要有以下: 取消危險的系統調用,或者截獲系統調用,稍加改動(如加載一些llkm); 限制命令執行權限; 取消IP轉發功能; 檢查每個分組的接口; 采用隨機連接序號; 駐留分組過濾模塊; 取消動態路由功能; 采用多個安全內核(這個只見有人提出,但未見到實例,對此不是很清楚)。 以上諸多工作,其實基本上都沒有對內核源碼做太大改動,因此從個人角度來看算不上可以太誇大的地方。 對於防火牆部分,國內大部分已經升級到2.4內核所支持的netfilter。netfilter已經是一個功能比較完善的防火牆框架,它已經支持基於狀態的監測(通過connection track模塊實現)。而且netfilter是一個設計很合理的框架,可以在適當的位置上登記一些需要的處理函數,正式代碼中已經登記了許多處理函數,如在NF_IP_FORWARD點上登記了裝發的包過濾功能(包過濾等功能便是由這些正式登記的函數實現的)。我們也可以登記自己的處理函數,在功能上作擴展(如加入簡單的IDS功能等等)。這一點是國內廠家可以做文章的地方,至於netfilter源碼的修改,對國內廠家來說似乎不太現實。 至於采用其它防火牆模型的,目前還沒有看到(可能是netfilter已經設計的很成功,不需要我們再去做太多工作)。
3.自我保護能力(安全性) 由於防火牆的特殊功能和特殊位置,它自然是眾多攻擊者的目標,因此它的自我包括能力在設計過程中應該放在首要的位置。 A.管理上的安全性 防火牆需要一個管理界面,而管理過程如何設計的更安全,是一個很重要的問題。目前有兩種方案。 a.設置專門的服務端口 為了減少管理上的風險和降低設計上的難度,有一些防火牆(如東方龍馬)在防火牆上專門添加了一個服務端口,這個端口只是用來和管理主機連接。除了專用的服務口外,防火牆不接受來自任何其它端口的直接訪問。這樣做的顯著特點就是降低了設計上的難度,由於管理通信是單獨的通道,無論是內網主機、外網主機還是DMZ內主機都無法竊聽到該通信,安全性顯然很高,而且設計時也無需考慮通信過程加密的問題。 然而這樣做,我們需要單獨設置一台管理主機,顯然太過浪費,而且這樣管理起來的靈活性也不好。 b.通信過程加密 這樣無需一個專門的端口,內網任意一台主機都可以在適當的情況下成為管理主機,管理主 機和防火牆之間采用加密的方式通信。 目前國內有采用的是使用自定義協議、一次性口令認證。對加密這個領域了解不多,不做詳 細討論。 B.對來自外部(和內部)攻擊的反應能力 目前常見的來自外部的攻擊方式主要有: a.DOS(DDOS)攻擊 (分布式)拒絕服務攻擊是目前一種很普遍的攻擊方式,在預防上也是非常困難的。目前防火牆對於這種攻擊似乎沒有太多的解決辦法,主要是提高防火牆本身的健壯性(如增加緩沖區大小)。在Linux內核中有一個防止Syn flooding攻擊的選項:CONFIG_SYN_COOKIES,它是通過為每一個Syn建立一個緩沖(cookie)來分辨可信請求和不可信請求。另外對於ICMP攻擊,可以通過關閉ICMP 回應來實現。 b.IP假冒(IP spoofing) IP假冒是指一個非法的主機假冒內部的主機地址,騙取服務器的“信任”,從而達到對網絡的攻擊目的。 第一,防火牆設計上應該知道網絡內外的IP地址分配,從而丟棄所有來自網絡外部但卻有內部地址的數據包。實際實現起來非常簡單,只要在內核中打開rp_filter功能即可。 第二,防火牆將內網的實際地址隱蔽起來,外網很難知道內部的IP地址,攻擊難度加大。IP假冒主要來自外部,對內網無需考慮此問題(其實同時內網的IP假冒情況也可以得到遏制)。 c.特洛伊木馬 防火牆本身預防木馬比較簡單,只要不讓系統不能執行下載的程序即可。 一個需要說明的地方是必須指出的是,防火牆能抗特洛伊木馬的攻擊並不意味著內網主機也能防止木馬攻擊。事實上,內網主機可能會透過防火牆下載執行攜帶木馬的程序而感染。內網主機的在預防木馬方面的安全性仍然需要主機自己解決(防火牆只能在內網主機感染木馬以後起一定的防范作用)。 d.口令字攻擊 口令字攻擊既可能來自外部,也可能來自內部,主要是來自內部。(在管理主機與防火牆通過單獨接口通信的情況下,口令字攻擊是不存在的) 來自外部的攻擊即用窮舉的辦法猜測防火牆管理的口令字,這個很容易解決,只要不把管理部分提供給外部接口即可。 內部的口令字攻擊主要是窮舉和嗅探,其中以嗅探危害最大。嗅探指監測網絡截獲管理主機給防火牆的口令字,如果口令字已加密,則解密得到口令字。目前一般采用一次性口令和禁止直接登錄防火牆的措施來防止對口令字的攻擊。 e.郵件詐騙 郵件詐騙是目前越來越突出的攻擊方式。防火牆本身防止郵件詐騙非常簡單,不接收任何郵件就可以了。然而象木馬攻擊一樣,內網主機仍可收發郵件,郵件詐騙的危險仍然存在,其解決辦法一個是內網主機本身采取措施防止郵件詐騙,另一個是在防火牆上做過濾。 f.對抗防火牆(anti-firewall) 目前一個網絡安全中一個研究的熱點就是對抗網絡安全產品如防火牆。一種是分析防火牆功能和探測防火牆內部網絡結構,典型的如Firewalk。另外有一些其他的網絡安全性分析工具本身具有雙刃性,這類工具用於攻擊網絡,也可能會很有效的探測到防火牆和內部網絡的安全缺陷,典型的如SATAN和ISS公司的 Internet Security Scanner。目前對於這種探測(攻擊)手段,尚無有效的預防措施,因為防火牆本身是一個被動的東西,它只能靠隱藏內部網絡結構和提高自身的安全性來對抗這些攻擊。 C.透明代理的采用 應用代理防火牆一般是通過設置不同用戶的訪問權限來實現,這樣就需要有用戶認證體系。以前的防火牆在訪問方式上主要是要求用戶登錄進系統(如果采用 sock代理的方式則需要修改客戶應用)。透明代理的采用,可以降低系統登錄固有的安全風險和出錯概率,從而提高了防火牆的安全性。
更多的請看:http://www.QQread.com/windows/2003/index.Html
1.方案:硬件?還是軟件? 現在防火牆的功能越來越多越花哨,如此多的功能必然要求系統有一個高效的處理能力。 防火牆從實現上可以分為軟件防火牆和硬件防火牆。軟件防火牆以checkpoint公司的Firewall-I為代表,其實現是通過 dev_add_pack的辦法加載過濾函數(Linux,其他操作系統沒有作分析,估計類似),通過在操作系統底層做工作來實現防火牆的各種功能和優化。國內也有一些所謂的軟件防火牆,但據了解大多是所謂“個人”防火牆,而且功能及其有限,故不在此討論范圍。 在國內目前已通過公安部檢驗的防火牆中,硬件防火牆占絕大多數。硬件防火牆一種是從硬件到軟件都單獨設計,典型如Netscreen防火牆不但軟件部分單獨設計,硬件部分也采用專門的ASIC集成電路。 另外一種就是基於PC架構的使用經過定制的通用操作系統的所謂硬件防火牆。目前國內絕大 多數防火牆都屬於這種類型。 雖然都號稱硬件防火牆,國內廠家和國外廠家還是存在著巨大區別。硬件防火牆需要在硬件和軟件兩方面同時下功夫,國外廠家的通常做法是軟件運算硬件化,其所設計或選用的運行平台本身的性能可能並不高,但它將主要的運算程序(查表運算是防火牆的主要工作)做成芯片,以減少主機CPU的運算壓力。國內廠家的防火牆硬件平台基本上采用通用PC系統或工業PC架構(直接原因是可以節省硬件開發成本),在提高硬件性能方面所能做的工作僅僅是提升系統CPU的處理能力,增大內存容量而已。現在國內防火牆的一個典型結構就是:工業主板+x86+128(256)M內存+DOC/DOM+硬盤(或不要硬盤而另增加一個日志服務器)+百兆網卡 這 樣一個工業PC結構。 在軟件性能方面,國內外廠家的差別就更大了,國外(一些著名)廠家均是采用專用的操作系統,自行設計防火牆。而國內所有廠家操作系統系統都是基於通用的 Linux,無一例外。各廠家的區別僅僅在於對Linux系統本身和防火牆部分(2.2內核為ipchains,2.4以後內核為netfilter)所作的改動量有多大。 事實上,Linux只是一個通用操作系統,它並沒有針對防火牆功能做什麼優化,而且其處理大數據量通信方面的能力一直並不突出,甚至比較低下(這也是 Linux一直只是低端服務器的寵兒的重要原因,我自己認為,在這一點上它還不如BSD系列,據說國外有用BSD做防火牆的,國內尚未見到)。現在絕大部分廠家,甚至包括號稱國內最大的天融信,在軟件方面所作的工作無非也就是系統有針對性的裁減、防火牆部分代碼的少量改動(絕大部分還是沒有什麼改動)和少量的系統補丁。而且我們在分析各廠家產品時可以注意這一點,如果哪個廠家對系統本身做了什麼大的改動,它肯定會把這個視為一個重要的賣點,大吹特吹,遺憾的是似乎還沒有什麼廠家有能力去做宣傳(天融信似乎有一個類似於checkpoint的功能:開放式的安全應用接口 TOPSEC,但它究竟做了多少工作,還需要去仔細了解)。 目前國內廠家也已經認識到這個問題,有些在做一些底層的工作,但有明顯成效的,似乎還沒有。 在此我們僅針對以Linux(或其他通用操作系統)為基礎的、以PC架構為硬件載體的防火牆做討論,以下如不特別提出,均同。
2.內核和防火牆設計 現在有一種商業賣點,即所謂“建立在安全操作系統之上的第四代防火牆”(關於防火牆分代的問題,目前有很多討論,比較一致的是把包過濾防火牆稱為第一代防火牆,把應用型防火牆(一般結合了包過濾功能,因此也成為混合型防火牆)稱為第二代防火牆,有些廠家把增加了檢測通信信息、狀態檢測和應用監測的防火牆稱為第三代防火牆,更有甚者在此基礎上提出了采用安全操作系統的防火牆,並把這個稱為第四代防火牆)。所謂安全操作系統,其實大多用的還是Linux,所不同的是需要做一些內核加固和簡單改造的工作,主要有以下: 取消危險的系統調用,或者截獲系統調用,稍加改動(如加載一些llkm); 限制命令執行權限; 取消IP轉發功能; 檢查每個分組的接口; 采用隨機連接序號; 駐留分組過濾模塊; 取消動態路由功能; 采用多個安全內核(這個只見有人提出,但未見到實例,對此不是很清楚)。 以上諸多工作,其實基本上都沒有對內核源碼做太大改動,因此從個人角度來看算不上可以太誇大的地方。 對於防火牆部分,國內大部分已經升級到2.4內核所支持的netfilter。netfilter已經是一個功能比較完善的防火牆框架,它已經支持基於狀態的監測(通過connection track模塊實現)。而且netfilter是一個設計很合理的框架,可以在適當的位置上登記一些需要的處理函數,正式代碼中已經登記了許多處理函數,如在NF_IP_FORWARD點上登記了裝發的包過濾功能(包過濾等功能便是由這些正式登記的函數實現的)。我們也可以登記自己的處理函數,在功能上作擴展(如加入簡單的IDS功能等等)。這一點是國內廠家可以做文章的地方,至於netfilter源碼的修改,對國內廠家來說似乎不太現實。 至於采用其它防火牆模型的,目前還沒有看到(可能是netfilter已經設計的很成功,不需要我們再去做太多工作)。
3.自我保護能力(安全性) 由於防火牆的特殊功能和特殊位置,它自然是眾多攻擊者的目標,因此它的自我包括能力在設計過程中應該放在首要的位置。 A.管理上的安全性 防火牆需要一個管理界面,而管理過程如何設計的更安全,是一個很重要的問題。目前有兩種方案。 a.設置專門的服務端口 為了減少管理上的風險和降低設計上的難度,有一些防火牆(如東方龍馬)在防火牆上專門添加了一個服務端口,這個端口只是用來和管理主機連接。除了專用的服務口外,防火牆不接受來自任何其它端口的直接訪問。這樣做的顯著特點就是降低了設計上的難度,由於管理通信是單獨的通道,無論是內網主機、外網主機還是DMZ內主機都無法竊聽到該通信,安全性顯然很高,而且設計時也無需考慮通信過程加密的問題。 然而這樣做,我們需要單獨設置一台管理主機,顯然太過浪費,而且這樣管理起來的靈活性也不好。 b.通信過程加密 這樣無需一個專門的端口,內網任意一台主機都可以在適當的情況下成為管理主機,管理主 機和防火牆之間采用加密的方式通信。 目前國內有采用的是使用自定義協議、一次性口令認證。對加密這個領域了解不多,不做詳 細討論。 B.對來自外部(和內部)攻擊的反應能力 目前常見的來自外部的攻擊方式主要有: a.DOS(DDOS)攻擊 (分布式)拒絕服務攻擊是目前一種很普遍的攻擊方式,在預防上也是非常困難的。目前防火牆對於這種攻擊似乎沒有太多的解決辦法,主要是提高防火牆本身的健壯性(如增加緩沖區大小)。在Linux內核中有一個防止Syn flooding攻擊的選項:CONFIG_SYN_COOKIES,它是通過為每一個Syn建立一個緩沖(cookie)來分辨可信請求和不可信請求。另外對於ICMP攻擊,可以通過關閉ICMP 回應來實現。 b.IP假冒(IP spoofing) IP假冒是指一個非法的主機假冒內部的主機地址,騙取服務器的“信任”,從而達到對網絡的攻擊目的。 第一,防火牆設計上應該知道網絡內外的IP地址分配,從而丟棄所有來自網絡外部但卻有內部地址的數據包。實際實現起來非常簡單,只要在內核中打開rp_filter功能即可。 第二,防火牆將內網的實際地址隱蔽起來,外網很難知道內部的IP地址,攻擊難度加大。IP假冒主要來自外部,對內網無需考慮此問題(其實同時內網的IP假冒情況也可以得到遏制)。 c.特洛伊木馬 防火牆本身預防木馬比較簡單,只要不讓系統不能執行下載的程序即可。 一個需要說明的地方是必須指出的是,防火牆能抗特洛伊木馬的攻擊並不意味著內網主機也能防止木馬攻擊。事實上,內網主機可能會透過防火牆下載執行攜帶木馬的程序而感染。內網主機的在預防木馬方面的安全性仍然需要主機自己解決(防火牆只能在內網主機感染木馬以後起一定的防范作用)。 d.口令字攻擊 口令字攻擊既可能來自外部,也可能來自內部,主要是來自內部。(在管理主機與防火牆通過單獨接口通信的情況下,口令字攻擊是不存在的) 來自外部的攻擊即用窮舉的辦法猜測防火牆管理的口令字,這個很容易解決,只要不把管理部分提供給外部接口即可。 內部的口令字攻擊主要是窮舉和嗅探,其中以嗅探危害最大。嗅探指監測網絡截獲管理主機給防火牆的口令字,如果口令字已加密,則解密得到口令字。目前一般采用一次性口令和禁止直接登錄防火牆的措施來防止對口令字的攻擊。 e.郵件詐騙 郵件詐騙是目前越來越突出的攻擊方式。防火牆本身防止郵件詐騙非常簡單,不接收任何郵件就可以了。然而象木馬攻擊一樣,內網主機仍可收發郵件,郵件詐騙的危險仍然存在,其解決辦法一個是內網主機本身采取措施防止郵件詐騙,另一個是在防火牆上做過濾。 f.對抗防火牆(anti-firewall) 目前一個網絡安全中一個研究的熱點就是對抗網絡安全產品如防火牆。一種是分析防火牆功能和探測防火牆內部網絡結構,典型的如Firewalk。另外有一些其他的網絡安全性分析工具本身具有雙刃性,這類工具用於攻擊網絡,也可能會很有效的探測到防火牆和內部網絡的安全缺陷,典型的如SATAN和ISS公司的 Internet Security Scanner。目前對於這種探測(攻擊)手段,尚無有效的預防措施,因為防火牆本身是一個被動的東西,它只能靠隱藏內部網絡結構和提高自身的安全性來對抗這些攻擊。 C.透明代理的采用 應用代理防火牆一般是通過設置不同用戶的訪問權限來實現,這樣就需要有用戶認證體系。以前的防火牆在訪問方式上主要是要求用戶登錄進系統(如果采用 sock代理的方式則需要修改客戶應用)。透明代理的采用,可以降低系統登錄固有的安全風險和出錯概率,從而提高了防火牆的安全性。