淺議SNMP安全、SNMP協議、網絡管理學習


相關學習資料

tcp-ip詳解卷1:協議.pdf(重點看25章SNMP部分)
http://www.rfc-editor.org/rfc/rfc1213.txt
http://www.rfc-editor.org/rfc/rfc1155.txt
http://www.rfc-editor.org/rfc/rfc1157.txt
http://network.51cto.com/art/201007/209214.htm
http://zh.wikipedia.org/wiki/SNMP
http://network.51cto.com/art/201006/208297.htm
http://tools.ietf.org/html/rfc2578
http://wenku.baidu.com/view/3b19313d87c24028915fc3a1.html

 

目錄

1. 網絡管理簡介
2. SNMP協議
3. SNMP通信流程抓包實驗
4. SNMP存在的安全風險

 

1. 網絡管理簡介

隨着網絡技術的飛速發展,網絡的數量也越來越多。而網絡中的設備來自各個不同的廠家,如何管理這些設備就變得十分重要。我們今天要研究的就是介紹管理這些設備的標准,簡單來說就是如何在內網中管理各種異構設備。
0x1: TCP/IP的網絡管理組件

1. 網絡管理系統(NMSs,Network-management systems)
網絡管理系統一般安裝在網絡管理站上,一個網絡管理系統運行應用程序,以該應用程序監視並控制被管理的設備。也稱為管理實體(managing entity),網絡管理員在這兒與網絡設備進行交
互。網絡管理系統提供網絡管理需要的大量運算和記憶資源。一個被管理的網絡可能存在一個以上的網絡管理系統
2. 被管理的設備(managed device) 一個被管理的設備是一個網絡節點,它包含一個存在於被管理的網絡中的SNMP代理者。被管理的設備通過管理信息庫(MIB)收集並存儲管理信息,並且讓網絡管理系統能夠通過SNMP代理者取得
這項信息。被管設備種類繁多,例如:
2.1) 路由器 2.2) X終端 2.3) 終端服務器 2.4) 打印機等 3. 代理者(agent) 代理者是一種存在於被管理的設備中的網絡管理軟件模塊。代理者控制本地機器的管理信息,以和SNMP兼容的格式發送這項信息。可以是一個獨立的程序(在Unix中叫守護進程),也可以是已經
整合到操作系統中(比如:銳捷路由器的RGNOS,或者UPS中的底層操作系統)

管理進程和代理進程之間的通信可以有兩種方式:

1) 管理進程向代理進程發出請求:
    1.1) 詢問一個具體的參數值(例如:你產生了多少個不可達的ICMP端口)
    1.2) 要求改變代理進程的參數值(例如:把默認的IP TTL值改為64)
2) 代理進程主動向管理進程報告有某些重要的事件發生(例如:一個連接口掉線了) 

0x2: 網絡管理體系架構

1. 管理信息庫MIB(Management Information Base)
管理信息庫(MIB)包含所有代理進程的所有可被查詢和修改的參數。RFC 1213 [McCloghrie and Rose 1991]定義了第二版的MIB,叫做MIB-II
MIB是一個數據庫的概念
2. 管理信息結構SMI(Structure of Management Information) 關於MIB的一套公用的結構和表示符號,這個在RFC 1155 [Rose and McCloghrie 1990]中定義
SMI是一個數據結構的概念

3. 簡單網絡管理協議SNMP(Simple Network Management Protocol) 管理進程和代理進程之間的通信協議,在RFC 1157 [Case et al. 1990]中定義
SNMP是一個協議、以及通信流程的概念

值得注意的是:

對協議和管理信息結構的良好分離使得使用SNMP來監測和管理同一網絡內上百的不同子系統非常簡單。MIB模型運行管理OSI參考模型的所有層,並可以擴展至諸如數據庫,電子郵件以及J2EE參
考模型之類的應用。

MIB(Management Information Base)

對於MIB,我們可以理解為一個中央數據庫,用來保存網絡中各種設備的參數信息

1. 管理信息庫MIB指明了網絡元素(網絡中的設備)所維持的變量(能夠被管理進程查詢和設置的信息)
2. MIB給出了一個網絡中所有可能的被管理對象的集合的數據結構
3. MIB管理信息庫采用和域名系統DNS相似的樹型結構,它的根在最上面,根沒有名字,它又稱為對象命名(object naming tree)

類似於數據庫中常說的唯一標識每條記錄的"主鍵",在MIB中,由對象識別符(OID:Object Identifier)唯一指定每條MIB記錄。

MIB是一個樹形結構(點分樹形結構),SNMP協議消息通過遍歷SNMP MIB樹形目錄中的節點來訪問網絡中的設備

在這課"對象命名樹"中,我們care的只是"mgmt(管理子樹)",即

Root->iso->org->dod->internet->mgmt->mid..
{1.3.6.1.2.1}

最初的結點mib將其所管理的信息分為8個類別

類別

標號

所包含的信息

system

interfaces

address translation

ip

icmp

tcp

udp

egp

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

主機或路由器的操作系統

各種網絡接口及它們的測定通信量

地址轉換(例如ARP映射)

Internet軟件(IP分組統計)

ICMP軟件(已收到ICMP消息的統計)

TCP軟件(算法、參數和統計)

UDP軟件(UDP通信量統計)

EGP軟件(外部網關協議通信量統計)

例如,我們可以使用1.3.6.1.2.1.1來標識"主機或路由器的操作系統",從而對指定項進行信息獲取以及參數設定

SMI(Structure Of Management Information)

對於SMI,我們可以把它理解為一個數據結構,一個規范規則。在繼續深入學習SMI之前,我們需要先來了解一下ASN.1

ASN.1:
高級數據描述語言,描述:
1) 數據類型
2) 結構
3) 組織
4) 編碼方法
包含語法符號和編碼規則兩大部分
//SMI是ASN.1的子集
SMI是SNMP的描述方法。但是因為ASN.1功能很強大,但SNMP只用到其中一小部分,為了方便使用,對這部分內容做了描述,限定了范圍,這就是SMI。SMI由ASN.1的一個"子集合"和一部分自
定義的類型、宏等組成。SMI是ASN.1的一個子集

管理信息結構SMI(structure of management information)指定了在SNMP的MIB中用於"定義管理目標的規則"。SMI是一種語言,是為了確保網絡管理數據的"語法"和"語義"明確和無二義性而定義的語言。它是定義被管理網絡實體中特定數據的語言

SMI定義了:

1) 數據類型
2) 對象模型
3) 寫入管理信息的規則
4) 修改管理信息的規則

我們接下來討論一下SMI中定義的數據類型:

1. Integer整型
Signed 32bit Integer (values between -2147483648 and 2147483647)
有符號32位整數(值范圍: -2147483648 ~ +2147483648)

2. Integer32
Same as Integer. 與Integer相同

3. UInteger32
Unsigned 32bit Integer (values between 0 and 4294967295)
無符號32位整數(值范圍:0~4294967295)

4. Octet String
Arbitrary binary or textual data, typically limited to 255 characters in length
任意二進制或文本數據,通常長度限制在255個字符內。 

5. Object Identifier
An OID
一個OID

6. Bit String
Represents an enumeration of named bits. This is an unsigned datatype
表示取名的位的枚舉。這是一個無符號的數據類型

7. IpAddress
An IP address. 一個IP地址,值范圍0到65535

8. Counter32
Represents a non-negative integer which monotonically increases until it reaches a maximum value of 32bits-1 (4294967295 dec), when it wraps 
around and starts increasing again from zero 表示一個非負的整數(可遞增到32位最大值-1),然后恢復並從0開始遞增 9. Counter64 Same as Counter32 but has a maximum value of 64bits-1 與Counter32相同,最大值為64位的最大值-1 10. Gauge32 Represents an unsigned integer, which may increase or decrease, but shall never exceed a maximum value 表示無符號整數,可增加或減少,但是不超過最大值 11. TimeTicks Represents an unsigned integer which represents the time,modulo 2ˆ32 (4294967296 dec), in hundredths of a second between two epochs 表示代表數據的一個無符號整數,2^32取模(4294967296),兩個值之間為百分之一秒。 12. Opaque Provided solely for backward-compatibility, its no longer used 提供向下兼容,不再使用的數據類型 13. NsapAddress Represents an OSI address as a variable-length OCTET STRING 表示一個用變長八進制字符窗表示的OSI地址

SNMP(Simple Network Management Protocol)

SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。對網絡的管理與維護是通過管理工作站與SNMP代理間的交互工作完成的。每個SNMP從代理負責回答SNMP管理工作站(主代理)關於SNMP MIB定義信息的各種查詢

從圖中我們可以看到,不論是攻擊者還是安全測試人員要對網絡中的設備進行"SNMP查詢",都必須提供一個"community(團隊名)",這就是相當於密碼的作用。所謂的SNMP爆破指的就是窮舉這個"community"。

對於更安全地配置來說,還會在從代理上設置白名單,只允許指定IP、MAC的設備進行SNMP訪問

SNMP網絡管理體系總體架構圖

 

 

2. SNMP協議

簡單網絡管理協議(SNMP:Simple Network Management Protocol)是由互聯網工程任務組(IETF:Internet Engineering Task Force )定義的一套網絡管理協議。該協議基於簡單網關監視協議(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一個管理工作站可以遠程管理所有支持這種協議的網絡設備,包括監視網絡狀態、修改網絡設備配置、接收網絡事件警告等。雖然SNMP開始是面向基於IP的網絡管理,但作為一個工業標准也被成功用於電話網絡管理

1. SNMP從代理(網絡中的設備)和管理站(主代理)通過SNMP協議中的標准消息進行通信,每個消息都是一個單獨的數據報。
2. SNMP使用UDP(用戶數據報協議)作為第四層協議(傳輸協議),進行無連接操作。
3. SNMP采用UDP 161端口接收和發送請求,162端口接收trap

和其他大部分的協議一樣,SNMP包含了多種數據報類型

1. GET REQUEST
從代理進程處提取一個或多個參數值

2. GET NEXT REQUEST
從代理進程處提取一個或多個參數的下一個參數值

3. GET RESPONSE
設置代理進程的一個或多個參數值

4. SET REQUEST
返回的一個或多個參數值。這個操作是由代理進程發出的。它是前面"GET RESPONSE"中操作的響應操作

5. TRAP
代理進程主動發出的報文,通知管理進程有故障或錯誤發生

6. GETBULK REQUEST
7. INFORM

SNMP的數據報格式

和其他的協議類似,SNMP中有不同種類的數據報,所以它們的協議格式在大框架相同的情況下,內部也略有不同,我們來分別學習

0x1: GET REQUEST、GET NEXT REQUEST、GET RESPONSE、SET REQUEST

1. 版本識別符(version identifier)
確保SNMP代理使用相同的協議,每個SNMP代理都直接拋棄與自己協議版本不同的數據報。
該字段的值是通過SNMP版本號減去1得到的:
    1) 0代表SNMP v1
    2) 1代表SNMP v2
    3) 2代表SNMP v3
2. 團體名(Community Name)
用於SNMP從代理對SNMP管理站進行認證 
    1) 如果失敗,SNMP從代理將向管理站發送一個認證失敗的Trap消息
    2) 如果成功,則繼續進行下一步set/get操作
"Community團體名"是管理進程(主代理)和代理進程(從代理)之間的口令,是明文格式,默認為public(這顯然是一個明文弱密碼,這也是很多SNMP存在風險的原因)

3. 協議數據單元(PDU)
其中PDU指明了SNMP的消息類型及其相關參數
    1) PDU類型
        1.1) 0表示get-request
        1.2) 1表示get-next-request
        1.3) 2表示get-response
        1.4) 3表示set-request
        1.5) 4表示trap
    2) 請求標識
    請求標識由管理進程設置,然后由代理進程在get-response中返回。這個字段的作用是使客戶進程(在目前情況下是管理進程)能夠將服務器進程(即代理進程)發出的響應和客戶進程發出的
查詢進行匹配。 這個字段允許管理進程對一個或多個代理進程發出多個請求,並且從返回的眾多應答中進行分類
3) 差錯狀態 差錯狀態字段是一個整數,它是由代理進程標注的,指明有差錯發生 3.1) 0: noError: 沒有錯誤 3.2) 1: tooBig: 代理進程無法把響應放在一個SNMP消息中發送 3.3) 2: noSuchName: 操作一個不存在的變量 3.4) 3: badValue: set操作的值或語義有錯誤 3.5) 4: readOnly: 管理進程試圖修改一個只讀變量 3.6) 5: genErr: 其他錯誤 4) 差錯索引 差錯索引字段是一個整數偏移量,指明當有差錯發生時,差錯發生在哪個參數。它是由代理進程標注的,並且只有在發生noSuchName、readOnly和badValue差錯時才進行標注。否則為0 5) 名稱、值 在SNMP數據報中,名稱和值構成一張"" 5.1) GET REQUEST、GET NEXT REQUEST、GET RESPONSE value為空,只有名稱 5.2) SET REQUEST 名稱+值對

0x2: Trap

1. 版本識別符(version identifier)
確保SNMP代理使用相同的協議,每個SNMP代理都直接拋棄與自己協議版本不同的數據報。
該字段的值是通過SNMP版本號減去1得到的:
    1) 0代表SNMP v1
    2) 1代表SNMP v2
    3) 2代表SNMP v3
2. 團體名(Community Name)
用於SNMP從代理對SNMP管理站進行認證 
    1) 如果失敗,SNMP從代理將向管理站發送一個認證失敗的Trap消息
    2) 如果成功,則繼續進行下一步set/get操作
"Community團體名"是管理進程(主代理)和代理進程(從代理)之間的口令,是明文格式,默認為public(這顯然是一個明文弱密碼,這也是很多SNMP存在風險的原因)

3. 協議數據單元(PDU)
其中PDU指明了SNMP的消息類型及其相關參數
    1) PDU類型
    4表示trap
    2) 企業
    3) 代理的IP地址
    4) trap類型
        4.1) 0: coldStart: 代理進程對自己初始化
        4.2) 1: warmStart: 代理進程對自己重新初始化
        4.3) 2: linkDown: 一個接口已經從工作狀態改變為故障狀態,報文中的第一個變量標識此接口
        4.4) 3: linkUp: 一個接口已經從故障狀態改變為工作狀態,報文中的第一個變量標識此接口
        4.5) 4: authenticationFailure: 從SNMP管理進程收到無效"團隊名(密碼)"的報文
        4.6) 5: egpNeighborLoss: 一個EGP鄰站已變為故障狀態。報文中的第一個變量包含此鄰站的IP地址
        4.7) 6: enterpriseSpecific: 在這個特定的代碼字段中查找trap信息
    5) 特定代碼
    6) 時間戳
    7) 名稱、值對

 

 

3. SNMP通信流程抓包實驗

在ubuntu下安裝啟動SNMPD過程

1. 安裝snmp服務
apt-get install snmpd snmp

2. 修改團體名
vi /etc/snmp/snmpd.conf
增加一條
com2sec readwrite default public
則外部可以用public團體名訪問snmpMIB

3. 修改snmpd服務啟動參數
默認的snmpd是帶參數127.0.0.1啟動的,這樣啟動的時候就只能本機訪問snmp服務,如果要讓外部也能夠訪問snmp服務,則需要將該參數去掉。
vi /etc/default/snmpd,找到以下行: 
SNMPDOPTS=’-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1′
去掉其中的127.0.0.1,保存

4. 重啟snmp服務
service snmpd restart

snmpwalk命令解釋

USAGE: snmpwalk [OPTIONS] AGENT [OID]
1. OPTIONS: 
    1) -v 1|2c|3        
    顯示指定SNMP的版本號
    2) -V
    顯示但前版本號 
    3) -c COMMUNITY        
    指定團體號,即SNMP密碼  
    4) -r RETRIES    
    設置失敗重試次數
    5) -t TIMEOUT    
    設置失敗等待延時閾值 
    6) -m MIB[:...]        
    加載指定列表的MIB信息庫,默認為ALL
    7) -M DIR[:...]        
    加載制定路徑的MIB信息庫

2. AGENT
目標設備的代理地址(IP)
3. OID
可以是:
    1) 點分對象命名標識,例如: .1.3.6.1.2.1.25.2.2 
    2) 指定條目名稱,例如: system   

常用的snmp命令有如下:

1. 得到取得windows端的系統進程用戶數等
snmpwalk -c public -v 1 -m ALL 192.168.159.128 .1.3.6.1.2.1.25.1    

2. 取得系統總內存
snmpwalk -c public -v 1 -m ALL 192.168.159.128 .1.3.6.1.2.1.25.2.2  

3. hrSystemNumUsers
snmpwalk -c public -v 1 -m ALL 192.168.159.128 

4. 取得IP信息
snmpwalk -c public -v 1 -m ALL 192.168.159.128 .1.3.6.1.2.1.4.20    

5. 查看系統信息
snmpwalk -v 2c -c public 192.168.159.128 system   

6. ifDescr
snmpwalk -v 1 192.168.159.128 -c public 

7. 得到取得windows端的系統進程用戶數等
snmpwalk -v 2c -c public 192.168.159.128 .1.3.6.1.2.1.25.1    
 
8. 取得系統總內存
snmpwalk -v 2c -c public 192.168.159.128 .1.3.6.1.2.1.25.2.2  

9. 取得系統用戶數
snmpwalk -v 2c -c public 192.168.159.128 hrSystemNumUsers  

10. 取得IP信息
snmpwalk -v 2c -c public 192.168.159.128 .1.3.6.1.2.1.4.20    

11. 查看系統信息
snmpwalk -v 2c -c public 192.168.159.128 system   

12. 獲取網卡信息
snmpwalk -v 2c -c public 192.168.159.128 ifDescr 
 
13. 獲取全部信息
snmpwalk -v 2c -c public 192.168.159.128

0x3: SNMP通信抓包截圖

get-request

get-next-request

get-response

 

 

4. SNMP存在的安全風險

0x1: 主要威脅

1. 信息修改
一些非授權實體可能改變由另一個授權實體產生的消息

2. 未授權訪問
一個實體偽裝成一個授權實體來進行它無權進行的操作 
    1) community團隊名暴力窮舉 
   可以使用例如hydra在內的工具進行SNMP密碼破解
2) 認證機制漏洞 2008-6-16 US-CERT和其他機構警告企業,SNMP協議現在的版本存在嚴重漏洞,這個漏洞可以允許黑客繞過協議認證機制,偽裝合法用戶。這個漏洞可以使黑客在受影響的系統上完成一切
合法用戶可以完成的行為。漏洞存在於SNMPv3的認證機制中,該機制使用鍵入的Hash Message Authentication Code(HMAC)。這是一種組合了密碼算法散列式及密碼密鑰的運算,SNMPv3
的執行方法允許以縮短的HMAC編碼以最少的HMAC字節(一個字節)使用在認證人欄位中認證代理,而將HMAC減少至一個字節是暴力破解法變得可行。黑客可以通過向受影響的計算機發送特制信息
包利用這些缺陷,可以查看並改變受到威脅的設備配置
3. 泄密 竊聽代理和管理站之間的數據交換。即流量嗅探。 SNMP2.0和SNMP1.0的安全機制比較脆弱,通信不加密,所有通信字符串和數據都以明文形式發送。攻擊者一旦捕獲了網絡通信,就可以利用各種嗅探工具直接獲取通信字符串,即使用戶改變了
通信字符串的默認值也無濟於事。
4. 消息流修改 消息流修改是指消息可能被惡意地重排、延遲或者重發 5. 拒絕服務 攻擊者阻止管理站和代理之間的信息交換。 6. 流量分析 攻擊者觀測管理站和代理之間流量的一般模式。

0x2: SNMP安全測試相關工具

1. HNMS
http://www.nas.nasa.gov/Groups/LAN/Trouble/HNMS.html
2. RMON  
3. tkined
http://www.ibr.cs.tu-bs.de/projects/nm/scotty/tkined.html
4. NET-SNMP
http://www.net-snmp.net/
5. Mon 
系統監視工具
http://consult.ml.org/~trockij/mon/
6. IKT 
故障監測工具  
http://pikt.uchicago.edu/pikt/
7. Scotty 
網絡管理工具 
http://www.cs.utwente.nl/~schoenw/scotty/
8. Big Brother  
系統監視工具 
http://www.iti.qc.ca/iti/users/sean/bb-dnld/
9. MRTG 
網絡流量監視工具  
http://www.ee.ethz.ch/~oetiker/webtools/mrtg/mrtg.html
10. cmu-snmp 
SNMP工具 
http://www.gaertner.de/snmp/

 

Copyright (c) 2014 LittleHann All rights reserved

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM