浅议SNMP安全、SNMP协议、网络管理学习

相关学习资料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

相关文章
相关标签/搜索