茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675149 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
F09_091.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

小企鵝開談 : [轉貼]TCPWrapper

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]TCPWrapper
何謂 Wrapper

"Wrapper"在字典有以下的字義:包裹布、包裝紙、書皮、封套、包裝工、打包工。若
加以衍伸至程式語言的領域,通常是指一個程式用來控制另一個程式的存取權, 就如同第
一個程式將第二個程式包裝起來, 藉此我們可以加強程式的安全等級,就如同多加一道防
線來避免有心人士的破壞。

為何需要 Wrapper

Wrapper 是近來UNIX 安全防護的一項創新,主要為因應更改作業系統設定,但又不希
望更動到系統的原始碼需求而開發。但伴隨 Wrapper 的發展,Wrapper 已成為簡單易用的
安全工具,主要的原因如下:
‧安全邏輯由單一程式封裝、控管,Wrappers 可以簡單且容易驗證安全邏輯是否達到。
‧被包裝的程式與 Wrapper 是獨立分開的兩個體,當被包裝程式升級或更改時,Wrapper
並不需要重新驗證。
‧Wrapper 是藉由 exec() 來啟動被包裝的程式,因此單一的 Wrapper 可以同時控制多個
不同被包裝的程式。

Wrapper 的種類

與網路相關的 Wrapper 大致有以下三種較常見的種類:
‧sendmail wrappers
是由 Trusted Information Systems(TIS)發展,主要由兩個部分構成:
- smap: 此程式的主要功能是接收網路上的訊息並寫入至一特定的目錄,方便日後的傳
遞。
- smapd: 此程式會定期檢查 smap 寫入的目錄,當一個訊息完成傳送時,便呼叫
sendmail 或其他程式將此訊息傳送到使用者的信箱。
‧TCPWrappers
一種專門包裝 TCP、UDP 服務的 Wrapper。
‧SOCKS
一種 Circuit-Level 的防火牆,由 David Koblas 及 Michelle Koblas 開發。

何謂 TCPWrapper

TCPWrapper 是一簡單易用的工具,主要的功能在紀錄並攔截由 inetd 管理的 TCP 服
務。這程式主要是由 Wietse Venema 開發。

TCPWrapper 的功能

TCPWrapper 提供系統管理者對TCP 連線提供較高的安全層級控制。當遠端連線要求建
立時,TCPWrapper 會被 inetd 啟動,TCPWrapper 主要提供下述的功能:
‧可以傳送"看板訊息"至連線的客戶端。這功能類似 BBS 的進版畫面,在公告訊息方面相
當方便。
‧對於連線機器的 IP 位址及主機名稱利用 DNS 進行反查,看兩者是否符合。如果不符合
,則將此情形紀錄下來,以利日後資料分析。
‧使用 ident 協定(RFC1413)來判斷此連線的使用者名稱。
‧將結果紀錄與 syslog 整合。
‧執行系統指令。
‧將此連線的控制權轉移至網路服務,或其他能夠處理進一步行動的程式。
‧將連線移轉到一個監控或假造的環境,來研究使用者的行為。

TCPWrapper 相關設定檔

/etc/inetd.conf
就如同先前提過的,TCPWrapper 主要在紀錄並攔截 inetd 管理的網路服務,在此對
inetd 的設定檔 inetd.conf 做一簡單的介紹。參考 FreeBSD 的說明文件,可以知道
inetd 指的是"internet super-server",簡單地說就是作業系統管理 internet 服務的程
式。在系統開機的時候即被執行,主要工作是聆聽internet 的連線,判斷此連線屬於何種
服務,並呼叫相關的程式來處理連線的要求。而 inetd 的設定檔 inetd.conf 主要就是在
定義服務與處理服務程式間的關聯。Inetd.conf 包含以下的欄位:
[code:1:e5406ad7ed]- service name
- socket type
- rpc/protocol
- nowait/wait
- user[:group][/login-class]
- server program
- server program arguments[/code:1:e5406ad7ed]

service name 是指服務名稱,須與/etc/services 相對應,才可確定系統提供此項網路服
務。socket type 是指連線的傳輸方式有 stream, datagram, raw, reliable delivered
message, sequenced packet socket 等型態。rpc/protocol 是指網路連線的協定,如tcp
, udp,如果要加上 Ipv4 及 Ipv6 的判斷,則可以寫作 tcp4, tcp6, udp4, udp6, tcp46
, udp46。nowait/wait 是指當 inetd 面對多個連線服務處理的方式,nowait 是指 inetd
直接呼叫子處理程序來處理連線服務, 其他連線不需要等待第一個連線服務結束才可進入
;相對地,wait 是指後續欲要求網路服務的連線,需等待前面的連線結束後才可以進入。
user 則是指能夠執行伺服器端的程式的使用者名稱。server program 則是描述當 inetd
接到此項服務要求需要至何處呼叫處理要求的程式,主要是程式的路徑及其名稱。
server program arguments 即是啟動服務程式的參數,但需特別注意的地方是,第一個參
數需是程式名稱,之後才是程式執行的參數。

inetd.conf 設定檔的範例如下:
[code:1:e5406ad7ed]‧telnet stream tcp nowait root /usr/libexec/telnetd telnetd[/code:1:e5406ad7ed]
telnet 是 service name,stream 是 socket type,tcp 是 protocol,nowait 是指不
需等待直接呼叫子處理程序,root 是指伺服端的程式由 root 執行。
/usr/libexec/telnetd 是處理 telnet 服務要求程式的路徑及名稱。Telnetd 則是第一
個參數即程式名稱本身,此外別無其他參數。而值得特別注意的地方是如果要將telnet
服務加入 TCPWrapper 的安全控管,需將 inetd.conf 的設定更改如下:
[code:1:e5406ad7ed]‧telnet stream tcp nowait root /usr/sbin/tcpd /usr/libexec/telnetd[/code:1:e5406ad7ed]
/usr/sbin/tcpd 即是 TCPWrapper 程式的路徑及名稱,亦即當 inetd 收到telnet 服務
要求時會先呼叫 TCPWrapper 來對此程式進行驗證,而驗證的法則主要寫在hosts.allow
及 hosts.deny 檔案中。
比較特別的地方是在 FreeBSD 中,inetd 本身即提供 wrapper 服務,只要在啟動inetd
時加上 wW 的參數即可。如:
[code:1:e5406ad7ed]inetd -Ww[/code:1:e5406ad7ed]
其中 w 是針對外部服務,W 是針對內部服務。且在 FreeBSD 中,僅由 hosts.allow 作
為 TCPWrapper 的設定檔。

hosts.allow
hosts.allow內主要資訊為紀錄相關的服務與連線來源,及符合前兩者時所需採取的行
動。形式如下:
[code:1:e5406ad7ed]daemon_list : client_host_list : option : option ...[/code:1:e5406ad7ed]

daemon_list 是指程式的名稱,即先前提到的server program arguments 中的第一個參數
,就是處理連線要求程式的列表。在這個欄位可以有兩個保留字可用,分別是 all 和
expect。all 代表所有由 TCPWrapper 控管的服務,except 使用的方式如
all except telnetd 即代表除了 telnetd 以外的所有服務。
client_host_list 是指要求連線的主機名稱或是IP 位址。也可以使用使用者名稱@主機名
稱的方式,但前提是遠端連線電腦需支援 ident 協定。

TCPWrapper 值得信任嗎

就整體而言,TCPWrapper 提供較高的安全層級控制。但 TCPWrapper 卻不是萬靈藥,
仍有其先天的弱勢。
1.最基本的問題在於 TCPWrapper 採取 IP 位址作為認證的基礎。 亦即 TCPWrapper 對於
IP Spoofing 的攻擊沒有辦法防治,仍會讓攻擊者取得服務, 進入系統取得資料或進行
破壞。由於IP Spoofing 是高級駭客技巧, 我們只能從防火牆的設定上來著手,將有可
能是 IP Spoofing 攻擊封包加以攔截,避免其進入伺服器。另外,也可以加上Tripwire
來對系統檔案做保護的動作,讓系統管理者在受到攻擊後可以察覺,避免更嚴重的損害。
2.TCPWrapper 對 UDP 服務的支援較少,因為 UDP 服務並不需要事先連線,只要在需要時
傳送封包即可,因此,部分 TCPWrapper 提供的功能不適用於 UDP 服務,當伺服器啟動
服務後,伺服器會接收網路上傳來的封包,即使這封包來源是不受歡迎的位址。 針對這
個弱點,建議可以可以採用 UDP Relayer 來保護,此功能在 SOCKSv5.0 已提供。

注意事項

雖然TCPWrapper 是一個簡單易用的工具,但在使用上仍有一些需要注意的事項,避免
發生反效果。
首先是finger 的使用,為能夠了解連線客戶端使用者資訊,在系統指令部分,有時會
以 finger 來查詢使用者,但現今的系統有時有反查的設定,會造成雙方一直進行 finger
的動作,形成所謂的"finger war",因此在使用 finger 時需要特別注意。接下來是
client_host_list 的部分,雖然可以用主機名稱作為判斷的基礎,不過使用主機名稱會牽
涉到 DNS 的判斷問題,無形中增加系統的危險,因此在此部份,建議盡量以 IP 位址作為
判斷標準,保持較高的安全等級。
最重要的還是方針的建立,TCPWrapper 雖然簡單好用,但若沒有好的方針配合,也只
不過是一個空架子、紙老虎,不具阻嚇的能力。 而一個方針的建立需考慮到網路上種種狀
況的發生,才能避免錯誤的發生, 輕則造成使用者的不方便,嚴重的話將使系統暴露在危
險之中。因此,建立一個有效且實用的方針才能使 TCPWraper 發揮功效。

原文出處 : 網路農夫
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|