什么是簡單網絡管理協議(SNMP)
什么是簡單網絡管理協議(SNMP)
SNMP(Simple Network Management Protocol,簡單網絡管理協議)的前身是簡單網關監控協議(SGMP),用來對通信線路進行管理。隨后,人們對SGMP進行了很大的修改,特別是加入了符合Internet定義的SMI和MIB:體系結構,改進后的協議就是著名的SNMP。SNMP的目標是管理互聯網Internet上眾多廠家生產的軟硬件平臺,因此SNMP受Internet標準網絡管理框架的影響也很大。現在SNMP已經出到第三個版本的協議,其功能較以前已經大大地加強和改進了。
簡單網絡管理協議(SNMP)首先是由Internet工程任務組織(Internet Engineering Task Force)(IETF)的研究小組為了解決Internet上的路由器管理問題而提出的。許多人認為 SNMP在IP上運行的原因是Internet運行的是TCP/IP協議,然而事實并不是這樣。
SNMP被設計成與協議無關,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的傳輸協議上被使用。
SNMP是一系列協議組和規范(見下表),它們提供了一種從網絡上的設備中收集網絡管理信息的方法。SNMP也為設備向網絡管理工作站報告問題和錯誤提供了一種方法。
從被管理設備中收集數據有兩種方法:一種是只輪詢(polling-only)的方法,另一種是基于中斷(interrupt-based)的方法。
如果你只使用只輪詢的方法,那么網絡管理工作站總是在控制之下。而這種方法的缺陷在于信息的實時性,尤其是錯誤的實時性。你多久輪詢一次,并且在輪詢時按照什么樣的設備順序呢?如果輪詢間隔太小,那么將產生太多不必要的通信量。如果輪詢間隔太大,并且在輪詢時順序不對,那么關于一些大的災難性的事件的通知又會太饅。這就違背了積極主動的網絡管理目的。
當有異常事件發生時,基于中斷的方法可以立即通知網絡管理工作站(在這里假設該設備還沒有崩潰,并且在被管理設備和管理工作站之間仍有一條可用的通信途徑)。然而,這種方法也不是沒有他的缺陷的,首先,產生錯誤或自陷需要系統資源。如果自陷必須轉發大量的信息,那么被管理設備可能不得不消耗更多的時間和系統資源來產生自陷,從而影響了它執行主要的功能(違背了網絡管理的原則2)。
而且,如果幾個同類型的自陷事件接連發生,那么大量網絡帶寬可能將被相同的信息所占用(違背了網絡管理的原則1)。尤其是如果自陷是關于網絡擁擠問題的時候,事情就會變得特別糟糕。克服這一缺陷的一種方法就是對于被管理設備來說,應當設置關于什么時候報告問題的閾值(threshold)。但不幸的是這種方法可能再一次違背了網絡管理的原則2,因為設備必須消耗更多的時間和系統資源,來決定一個自陷是否應該被產生。
結果,以上兩種方法的結合:面向自陷的輪詢方法(trap-directed polling)可能是執行網絡管理最為有效的方法了。一般來說,網絡管理工作站輪詢在被管理設備中的代理來收集數據,并且在控制臺上用數字或圖形的表示方式來顯示這些數據。這就允許網絡管理員分析和管理設備以及網絡通信量了。
被管理設備中的代理可以在任何時候向網絡管理工作站報告錯誤情況,例如預制定閾值越界程度等等。代理并不需要等到管理工作站為獲得這些錯誤情況而輪詢他的時候才會報告。這些錯誤情況就是眾所周知的SNMP自陷(trap)。
在這種結合的方法中,當一個設備產生了一個自陷時,你可以使用網絡管理工作站來查詢該設備(假設它仍然是可到達的),以獲得更多的信息。
簡單網絡管理協議允許網絡管理工作站軟件與被管理設備中的代理進行通信。這種通信可以包括來自管理工作站的詢問消息、來自代理的應答消息或者來自代理給管理工作站的自陷消息。為了保證因網絡管理而帶來的通信量是最小的(網絡管理原則1),SNMP使用了一種異步客戶機/服務器方法。這意味著一個SNMP實體(管理工作站或被管理設備)在發出一條消息后不需要等待一個應答;然而,除了自陷的情況以外應答都是要被產生的。如果需要的話該實體可以發送另一條消息,或者也可以繼續它預先被定義的功能。SNMPv1實現起來很簡單并且對資源占用不多,它只有5個請求/響應原語:
get-request
set-request
get-next-request
get-reponse
trap
網絡管理工作站可以把感興趣的變量值提取到其應用程序中,只要發出get-request或get-next-request報文即可。前者是指定對象的讀操作,后者則提供了一個樹遍歷操作符,便于確定一個代理進程支持哪些對象。網絡管理工作站可以修改代理進程中的變量值,只要發出set-request報文即可。
如果沒有發生錯誤,代理進程可以用get-reponse原語回答這些請求。另外,利用trap原語,代理進程可以異步地發送告警給網絡管理工作站,告訴它發生了某個滿足預設條件的事件。
SNMP結構圖
實現中的經驗和設計過程中的不斷完善給SNMPv2帶來了協議改進意見,即給網絡管理工作站增加一個成塊讀操作get-bulk-request報文。當需要用一個請求原語提取大量數據(如讀取某個表的內容)時就可以調用它以提高效率。SNMPv2也引進管理進程和管理進程之間的通信進行狀況報告,為此增加了一條原語inform-request,并把get-response簡化成更加合理的名稱reponse。trap報文則已改為snmpv2-trap,并與所有的協議報文具有同樣的格式。
接入Internet的網絡面臨許多風險,Web服務器可能面臨攻擊,郵件服務器的安全也令人擔憂。但除 此之外,網絡上可能還存在一些隱性的漏洞。大多數網絡總有一些設備運行著SNMP服務,許多時候這些SNMP服務是不必要的,但卻沒有引起網絡管理員的重視。
根據SANS協會的報告,對于接入Internet的主機,SNMP是威脅安全的十大首要因素之一;同時,SNMP還是Internet主機上最常見的服務之一。特別地,SNMP服務通常在位于網絡邊緣的設備(防火墻保護圈之外的設備)上運行,進一步加劇了SNMP帶來的風險。這一切聽起來出人意料,但其實事情不應該是這樣的。
〖一、背景知識〗
SNMP開發于九十年代早期,其目的是簡化大型網絡中設備的管理和數據的獲取。許多與網絡有關的軟件包,如HP的OpenView和Nortel Networks的Optivity Network Management System,還有Multi Router Traffic Grapher(MRTG)之類的免費軟件,都用SNMP服務來簡化網絡的管理和維護。
由于SNMP的效果實在太好了,所以網絡硬件廠商開始把SNMP加入到它們制造的每一臺設備。今天,各種網絡設備上都可以看到默認啟用的SNMP服務,從交換機到路由器,從防火墻到網絡打印機,無一例外。
僅僅是分布廣泛還不足以造成威脅,問題是許多廠商安裝的SNMP都采用了默認的通信字符串(例如密碼),這些通信字符串是程序獲取設備信息和修改配置必不可少的。采用默認通信字符串的好處是網絡上的軟件可以直接訪問設備,無需經過復雜的配置。
通信字符串主要包含兩類命令:GET命令,SET命令。GET命令從設備讀取數據,這些數據通常是操作參數,例如連接狀態、接口名稱等。SET命令允許設置設備的某些參數,這類功能一般有限制,例如關閉某個網絡接口、修改路由器參數等功能。但很顯然,GET、SET命令都可能被用于拒絕服務攻擊(DoS)和惡意修改網絡參數。
最常見的默認通信字符串是public(只讀)和private(讀/寫),除此之外還有許多廠商私有的默認通信字符串。幾乎所有運行SNMP的網絡設備上,都可以找到某種形式的默認通信字符串。
SNMP 2.0和SNMP 1.0的安全機制比較脆弱,通信不加密,所有通信字符串和數據都以明文形式發送。攻擊者一旦捕獲了網絡通信,就可以利用各種嗅探工具直接獲取通信字符串,即使用戶改變了通信字符串的默認值也無濟于事。
近幾年才出現的SNMP 3.0解決了一部分問題。為保護通信字符串,SNMP 3.0使用DES(Data Encryption Standard)算法加密數據通信;另外,SNMP 3.0還能夠用MD5和SHA(Secure Hash Algorithm)技術驗證節點的標識符,從而防止攻擊者冒充管理節點的身份操作網絡。
雖然SNMP 3.0出現已經有一段時間了,但目前還沒有廣泛應用。如果設備是2、3年前的產品,很可能根本不支持SNMP 3.0;甚至有些較新的設備也只有SNMP 2.0或SNMP 1.0。
即使設備已經支持SNMP 3.0,許多廠商使用的還是標準的通信字符串,這些字符串對黑客組織來說根本不是秘密。因此,雖然SNMP 3.0比以前的版本提供了更多的安全特性,如果配置不當,其實際效果仍舊有限。
〖二、禁用SNMP〗
要避免SNMP服務帶來的安全風險,最徹底的辦法是禁用SNMP。如果你沒有用SNMP來管理網絡,那就沒有必要運行它;如果你不清楚是否有必要運行SNMP,很可能實際上不需要。即使你打算以后使用SNMP,只要現在沒有用,也應該先禁用SNMP,直到確實需要使用SNMP時才啟用它。
下面列出了如何在常見的平臺上禁用SNMP服務。
■ Windows XP和Windows 2000
在XP和Win 2K中,右擊“我的電腦”,選擇“管理”。展開“服務和應用程序”、“服務”,從服務的清單中選擇SNMP服務,停止該服務。然后打開服務的“屬性”對話框,將啟動類型該為“禁用”(按照微軟的默認設置,Win 2K/XP默認不安裝SNMP服務,但許多軟件會自動安裝該服務)。
■ Windows NT 4.0
選擇“開始”→“設置”,打開服務設置程序,在服務清單中選擇SNMP服務,停止該服務,然后將它的啟動類型該為禁用。
■ Windows 9x
打開控制面板的網絡設置程序,在“配置”頁中,從已安裝的組件清單中選擇“Microsoft SNMP代理”,點擊“刪除”。檢查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices和HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows\CurrentVersion\Run注冊鍵,確認不存在snmp.exe。
■ Cisco Systems硬件
對于Cisco的網絡硬件,執行“no SNMP-server”命令禁用SNMP服務。如果要檢查SNMP是否關閉,可執行“show SNMP”命令。這些命令只適用于運行Cisco IOS的平臺;對于非IOS的Cisco設備,請參考隨機文檔。
■ HP硬件
對于所有使用JetDirect卡(絕大部分HP網絡打印機都使用它)的HP網絡設備,用telnet連接到JetDirect卡的IP地址,然后執行下面的命令:
SNMP-config: 0
quit
這些命令將關閉設備的SNMP服務。但必須注意的是,禁用SNMP服務會影響服務的發現操作以及利用SNMP獲取設備狀態的端口監視機制。
■ Red Hat Linux
對于Red Hat Linux,可以用Linuxconf工具從自動啟動的服務清單中刪除SNMP,或者直接從/etc/services文件刪除啟動SNMP的行。對于其他Linux系統,操作方法應該也相似。
〖三、保障SNMP的安全〗
如果某些設備確實有必要運行SNMP,則必須保障這些設備的安全。首先要做的是確定哪些設備正在運行SNMP服務。除非定期對整個網絡進行端口掃描,全面掌握各臺機器、設備上運行的服務,否則的話,很有可能遺漏一、二個SNMP服務。特別需要注意的是,網絡交換機、打印機之類的設備同樣也會運行SNMP服務。確定SNMP服務的運行情況后,再采取下面的措施保障服務安全。
■ 加載SNMP服務的補丁
安裝SNMP服務的補丁,將SNMP服務升級到2.0或更高的版本。聯系設備的制造商,了解有關安全漏洞和升級補丁的情況。
■ 保護SNMP通信字符串
一個很重要的保護措施是修改所有默認的通信字符串。根據設備文檔的說明,逐一檢查、修改各個標準的、非標準的通信字符串,不要遺漏任何一項,必要時可以聯系制造商獲取詳細的說明。
■ 過濾SNMP
另一個可以采用的保護措施是在網絡邊界上過濾SNMP通信和請求,即在防火墻或邊界路由器上,阻塞SNMP請求使用的端口。標準的SNMP服務使用161和162端口,廠商私有的實現一般使用199、391、705和1993端口。禁用這些端口通信后,外部網絡訪問內部網絡的能力就受到了限制;另外,在內部網絡的路由器上,應該編寫一個ACL,只允許某個特定的可信任的SNMP管理系統操作SNMP。例如,下面的ACL只允許來自(或者走向)SNMP管理系統的SNMP通信,限制網絡上的所有其他SNMP通信:
access-list 100 permit ip host w.x.y any
access-list 100 deny udp any any eq snmp
access-list 100 deny udp any any eq snmptrap
access-list 100 permit ip any any
這個ACL的第一行定義了可信任管理系統(w.x.y)。利用下面的命令可以將上述ACL應用到所有網絡接口:
interface serial 0
ip access-group 100 in
總之,SNMP的發明代表著網絡管理的一大進步,現在它仍是高效管理大型網絡的有力工具。然而,SNMP的早期版本天生缺乏安全性,即使最新的版本同樣也存在問題。就象網絡上運行的其他服務一樣,SNMP服務的安全性也是不可忽視的。不要盲目地肯定網絡上沒有運行SNMP服務,也許它就躲藏在某個設備上。那些必不可少的網絡服務已經有太多讓人擔憂的安全問題,所以最好關閉SNMP之類并非必需的服務——至少盡量設法保障其安全。
非常好我支持^.^
(3) 100%
不好我反對
(0) 0%
相關閱讀:
( 發表人:admin )