防火牆設計中的一些重點問題(1)(轉)

amyz發表於2007-08-13
防火牆設計中的一些重點問題(1)(轉)[@more@]

  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代理的方式則需要修改客戶應用)。透明代理的採用,可以降低系統登入固有的安全風險和出錯機率,從而提高了防火牆的安全性。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-955568/,如需轉載,請註明出處,否則將追究法律責任。

相關文章