相關學習資料html
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
目錄web
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中的底層操做系統)
管理進程和代理進程之間的通訊能夠有兩種方式:ubuntu
1) 管理進程向代理進程發出請求: 1.1) 詢問一個具體的參數值(例如:你產生了多少個不可達的ICMP端口) 1.2) 要求改變代理進程的參數值(例如:把默認的IP TTL值改成64) 2) 代理進程主動向管理進程報告有某些重要的事件發生(例如:一個鏈接口掉線了)
0x2: 網絡管理體系架構windows
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