https://secutech.tw.messefrankfurt.com/taipei/zh-tw/programme-events/AIoT_SecurityForum.html
https://secutech.tw.messefrankfurt.com/taipei/zh-tw/programme-events/AIoT_SecurityForum.html

觀點

SNMP 的革命進程

2005 / 11 / 04
Eric Cole
SNMP 的革命進程

SNMP中的S,代表的意思是「簡單」(simple),而非「安全」(secure)!
SNMP(Simple Network Management Protocol)為簡化網路監控和管理提供重要的機能,像是HP的OpenView和IBM的Tivoli之類的產品,都支援SNMP的協定。但是,依然是危機四伏:第一版的SNMP本身就不安全,因為欠缺支援加密及認證功能的緣故,因此,很輕易地就會遭受到攻擊。
第二版的SNMP解決了來自於第一版上面的許多安全缺陷,可是,它依舊未能填補所有的漏洞。SNMPv2的確具備最基礎的認證程序,也提供些許加密的功能,但是不能與前一版相容,而且在執行速度上,還較前一版慢上幾拍。
SNMPv3則是提供網路安全人員一個穩固、設定簡單而又具安全性的協定。然而,如果牽涉到相容性的問題,那麼,第三版的SNMP對所有設備並非百分百的支援!也就因為如此,雖然SNMPv3已經問世許久,但畢竟不是人人都使用,而且眾多企業也是呈現三個版本混用的情況。所以在本文之中,我們會探討SNMPv3在網路安全方面的優異性,還有在網路環境中,如何有效應用這些支援SNMPv3以及不支援此項協定的網路設備。
媚力無法擋
SNMPv3修改了前面兩版的問題,事實上,針對第一版的問題是做了比較多的修正,原因在於SNMPv2已做過的修正,SNMPv3就不再重複,而只改正原本協定上出現的問題,包含允許同時傳送多重指令的資料量,以及去除在設定陷落(traps)時所產生緩衝溢位的情況,另外,也增加了一個模組的設計,以便讓未來版本更能依網路架構而做調整。
SNMPv3不僅會對所有傳輸資料進行加密,而且可以使回應者(通常是SNMP 代理程式)對產生訊息的使用者做認證程序,並確保數位簽章訊息的完整性,另外,針對每項訊息還會有存取清單的限制!
比較大的問題出在SNMPv1對public(唯讀存取,例如可以讀取記憶體和CPU的用量)和private(寫入存取,例如可以下達重新開機的命令或是更改組態設定檔)社區字串 (community strings)的保護。public和private通常是預設的社區字串密碼,然而,大多數人都不了解這是預設密碼,以致於長期下來,就會使用public作為public community strings,而把private當成是private community strings。在SNMPv3當中,則會針對這部分進行檢查,以防止使用者選擇較簡易的字串作為密碼。
在SNMPv3中的重要變革,包括針對使用者的認證功能以及使用MD5和SHA演算法編碼。而第一、二版的認證是基於對社區字串的掌握所形成的:只要知道密碼就可以下達指令,不過,這樣反而會造成所有系統層級均等的假象,而且也難以去分辨系統之間的等級。SNMPv3則允許不同等級層次的認證,並且在各個等級內,還能設定是否可執行所存取的項目,所以User和Group等級的認證會提供較大的權限控管範圍。權限資料則是儲存在自身的組態設定資料庫之中,裡頭包含所有允許存取以及認證的資訊;另外,SNMPv3也能使用其他類型的資料庫,像是RADIUS或是TACACS+等。
另一個SNMPv1較大的安全性問題則在於字串的傳送皆為明碼,這也意謂著任何人都可以十分輕易地攔截到密碼。舉例來說,如果某人攔截到一項SNMP的訊息之後,他便可以任意使用SNMP的陷落功能-甚至是重開伺服器。SNMPv3則對所有資料流量使用CBC-DES演算法加密,並檢查資料以確保沒有遭到竄改,也因此SNMP的陷落不會受到任何外力的改變。要達成此項目的的一般作法,是將傳送訊息先進行雜湊運算(hash),然後你會狐疑,如何能避免攻擊者改變訊息並將重新算得的雜湊值再取而代之?答案是,靠非對稱式加密(asymmetric encryption)的方法來建立數位簽章。在雜湊值計算之後,用傳送方的私密金鑰加密,此舉將允許任何持有傳送方私密金鑰的人確認資料來源,這樣作法不但消弭SNMP訊息在傳送過程中遭到竄改的威脅,也防止未授權端冒充已授權的用戶,如此亦可延緩攻擊行動,避免密碼遭到盜取,另外,也進一步阻撓網路竊聽等行為。
其實不管哪一種協定都會受到DoS攻擊的影響,但藉由強化容錯和負載平衡能力,你可以將單一系統被搞垮的可能性降到最低。所以相較於早期的兩個版本,SNMPv3強化了容錯和負載平衡的能力。

啟用SNMPv3
雖然身處一片SNMP的聲浪當中,但是,你卻無法立刻升級所有的系統至SNMPv3。此時,你應該以一種有系統的方式來擴展才行;雖然SNMPv3提供向下相容的能力,但要做起來也不是件一蹴可及的事情。
並非所有的設備都支援SNMPv3協定,許多廠商只提供韌體升級的方式。不過,利用軟體替代方案就可以使用眾多已獲改善的SNMPv3功能,諸如資料加密和資料完整性的檢查,甚至還有進階的功能-認證及群組管理政策。軟體替代方案包含利用可與SNMP系統連線和提供少部分管理功能的軟體,再者,由於部分廠商只提供有限的SNMP支援,所以利用軟體替代方案還可以變更協定以擴充能力。
要是韌體升級和軟體替代方案都行不通的時候,唯一的選擇就是採購支援SNMPv3的設備來取代舊有的機器。如果預算吃緊,也可以將較老舊的設備挪用到非重點網路區段裡頭,而在重要網路區段節點,部署較新型、有SNMPv3能力的機器。
由於SNMPv1和SNMPv2之間的不相容情形,使得這些設備很難一下子就升級到支援SNMPv3的狀態。最好的辦法就是先將原有SNMPv2的設備降級成SNMPv1,然後再升級成SNMPv3。
一般理想的情況是:在現有網路擴大部署這些設備之前,可以在實驗性質的網路上先行測試SNMPv3的狀況。但如果沒有多餘的機器可供測試,而又非得直接套用在現行網路上的話,那麼,請在網路維護的期間再行部署SNMPv3!反正不管怎樣,備份好所有設定檔跟資料,以防在發生問題時,可以再次回復到原始狀態。假若有備用路由器,那麼就能先行測試,待第一台確定沒問題之後,再換第二台,如此這樣地周而復始,直到全面部署完成!
縱使計畫要讓整個企業都部署SNMPv3,也得按部就班的進行,以盡量避免潛在問題的產生。因為一旦在整個網路中安裝新軟體或協定的時候,便可能會有不穩定的情況發生,況且,這樣也很難馬上找出問題所在。另外,我們也應該針對最貴重、最容易處於危險狀態下的資訊資產,優先部署新版的協定,給定這些設備足夠的保護能力。所以說,路由器是最先要升級的部分,以保障底下網路設備的安全管理,接著才是防火牆和伺服器群。由於SNMPv3和其他舊有版本之間並無相容性的問題,這也就是意謂著,在部署期間,這幾個版本不會在搭配上出現任何干擾的情形!

值得升級
安裝新版本的軟體或是協定,通常都得花上一筆費用,也要冒著相當程度的風險,不過,升級到SNMPv3是值得去作的事-尤其是在早期SNMP版本中,對流量安全的考量完全不足的情況下,更是應該如此!儘管升級部分老舊機器實在是一件麻煩事,但在加強管理協定上的價值,絕對是高過所要擔負的風險。
由於SNMP十分地普及,所以駭客們也都愛極了這項管理協定!不過,在第三版問世之後,便修正了許多在舊有版本之中所產生的安全性漏洞,而且管理機制變得更健全、功能更強,安全性也隨著提高。不過,要是到現在都還沒能完成升級的話,勸你現在就趕快動手吧!

ERIC COLE,擁有CISSP和GIAC證照,目前擔任The Sytex Group的執行長。著有Hacker Beware,另外,也與人合著過Network Security Bible一書。關於本文的任何批評指教,歡迎來信至iseditor@asmag.com

SNMP 的革命進程:
SNMPv3是修補和強化網路管理協定安全性的第二次嘗試,到目前為止,它似乎有達成目標!以下是針對SNMP三個版本的特色和能力所進行的比較:

社區字串採用明碼:
SNMPv1 : 是
SNMPv2 : 否
SNMPv3 : 否

資訊流皆經過加密:
SNMPv1 : 否
SNMPv2 : 是
SNMPv3 : 是

與舊有版本相容的能力:
SNMPv1 : 否
SNMPv2 : 否
SNMPv3 : 是

易受暴力攻擊(brute- force)的影響 :
SNMPv1 : 是
SNMPv2 : 是
SNMPv3 : 否

易受緩衝溢位攻擊(buffer-overflow)的影響 :
SNMPv1 : 是
SNMPv2 : 是
SNMPv3 : 否

祕密金鑰有被盜取的可能性 :
SNMPv1 : 是
SNMPv2 : 否
SNMPv3 : 否

易受注入式攻擊(injection attacks)的影響:
SNMPv1 : 是
SNMPv2 : 否
SNMPv3 : 否

易受封包重送攻擊(replay attacks)的影響 :
SNMPv1 : 是
SNMPv2 : 否
SNMPv3 : 否

使用預設已知的密碼 :
SNMPv1 : 是
SNMPv2 : 是
SNMPv3 : 否

惡意封包偵測能力 :
SNMPv1 : 否
SNMPv2 : 是
SNMPv3 : 是