SNMP服務

SNMP服務,由一組網路管理的標準組成,包含一個套用層協定(application layer protocol)、資料庫模型(database schema)和一組資源對象。

接入Internet的網路面臨許多風險,Web伺服器可能面臨攻擊,郵件伺服器的安全也令人擔憂。但除 此之外,網路上可能還存在一些隱性的漏洞。大多數網路總有一些設備運行著SNMP服務,許多時候這些SNMP服務是不必要的,但卻沒有引起網路管理員的重視。
根據SANS協會(
http://www.sans.org)的報告,對於接入Internet的主機,SNMP是威脅安全的十大首要因素之一;同時,SNMP還是Internet主機上最常見的服務之一。特別地,SNMP服務通常在位於網路邊緣的設備(防火牆保護圈之外的設備)上運行,進一步加劇了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的詳細說明,請參見http://www.ietf.org/rfc/rfc2570.txt。
雖然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之類並非必需的服務——至少儘量設法保障其安全。

相關詞條

相關搜尋

熱門詞條

聯絡我們