1、SNMP协议分析 摘要:当今由路由器、交换机、服务器组成的复杂的网络,确保所有的设备正常运行且处于最佳状态确实是一件困难的事情。为了解决这个问题在1988年正式推出了简单网络管理协议(SNMP)。利用SNMP只需一些“简单”的操作便可实现对网络设备的远程管理。但同时SNMP是威胁安全的十大首要因素之一。 目录: 1 SNMP简介 1 1.1 SNMP版本 1 1.2 管理端和agent 2 1.3 SNMP 和 UDP 2 2 管理对象 3 2.1 SMI和MIB 3 2.2 OID命名 3 2.3 管理信息结构 4 3 SNMP 操作 4 4 SNMP V
2、3 5 4.1 SNMPv3的变化 5 4.2 SNMPv3引擎 5 4.3 SNMPv3 应用程序 6 4.4 SNMPv3 安全机制 6 5 SNMP受到的安全威胁 7 5.1 拒绝服务攻击DOS 7 5.2 流量分析攻击 7 5.3 认证机制漏洞 7 1 SNMP简介 SNMP可以用于管理很多类型的设备,其核心是帮助网络管理员简化对一些支持SNMP设备设置的操作(也包括这些信息的收集)。例如,使用SNMP可以关闭路由器的一个端口,也可以查看以太网端口的工作速率。SNMP还可以监控交换机的温度,在出现过高现象进行报警。 1.1 SNMP版本 IETF负责定义
3、互联网流量监管的标准,这里面包括SNMP。IETF发行的RFCs,对IP领域中的众多协议进行了详细的阐述。下面列举了一些当前的SNMP版本。 1)SNMP V1是SNMP协议的最初版本,不过依然是众多厂家实现SNMP基本方式。 2)SNMP V2通常被指是基于community的SNMP V2。Community实质上就是密码。 3)SNMPv3 是最新版本的SNMP。它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持。 1.2 管理端和agent SNMP有2个主体:管理端和agent。 管理端指的是运行了可以执行网络管理任务软件的服务器,通常被称作为网络管理工作站
4、NMS),NMS负责采样网络中agent的信息,并接受agent的trap。 Agent是运行在可网络设备上的软件。可以是一个独立的程序(在Unix中叫守护进程),也可以是已经整合到操作系统中(比如:锐捷路由器的RGNOS,或者UPS中的底层操作系统)。 NMS和Agent工作示意图 1.3 SNMP 和 UDP SNMP采用UDP协议在管理端和agent之间传输信息。 SNMP采用UDP 161端口接收和发送请求,162端口接收trap,执行SNMP的设备缺省都必须采用这些端口。 SNMP的TCP/IP通信模型 2 管理对象 2.1 SMI和MIB 基本管理信息(MI
5、B)可以理解成为agent维护的管理对象数据库,MIB中定义的大部分管理对象的状态和统计信息都可以被NMS访问。MIB是一个按照层次结构组织的树状结构,每个被管对象对应树形结构的一个叶子节点,称为一个object,拥有唯一的数字标识符。 SMIv1(RFC1155定义)对管理对象是如何命名的、管理对象的数据类型进行了详细的描述。规定MIB中对象的命名方式、数据类型、编码和传输方式,是定义MIB必须遵循的标准。 2.2 OID命名 每个管理对象都有自己的OID(Object Identifier),管理对象通过树状结构进行组织,OID由树上的一系列整数组成,整数之间用点( . )分隔开,树
6、的叶子节点才是真正能够被管理的对象。 SMI对象树 2.3 管理信息结构 SNMP中,数据类型并不多。SMIv1定了多种对于网络设备来说非常重的数据类型,这些数据定义了管理对象包含哪些信息。 SMIv1支持的常见的数据类型。 数据类型 描述 INTEGER 32位的数字,指定某个可以数字表示的管理对象内容。例如路由器接口的状态可能是up、down、或者test,用数据的方式表示,1表示up,2表示down,3表示testing,根据RFC1153种提到的,0不能用作数值类型。 OCTET STRING 表示文本字符串,0个或者更多的字节。经常被用作表示无力地址 Cou
7、nter 32位数字,0~232 - 1 (4,294,967,295). 当达到最大值后,又从0开始计数。一般用于端口上发送/接收的字节数,或者端口上看到的错误数、丢弃数。计数值是一直往上增长的。当agent重启,所有的计数清0。 OBJECT IDENTIFIER 跟有点的十进制值组成的符号,代表对象树上的某个管理对性。 例如1.3.6.1.4.1.4881 代表锐捷网络private enterprise OID. IpAddress 代表32位的IPv4地址.SMIv1和SMIv2都没有对128位的IPv6地址的描述。 NetworkAddress 类似于IP地址类型,但
8、可以代表不同的网络地址类型 TimeTicks 在 0 ~~ 232 - 1之间的32位数值 (4,294,967,295).以0.01秒的粒度计算TimeTicks。设备的Uptime就是TimeTicks类型 Opaque 允许其他所有的ASN.1编码到一个8位字符中 3 SNMP 操作 已经讨论了SNMP是如何组织信息的,PDU是管理端和agent用于发送和接收这些管理信息的消息。 SNMP报文格式 以下是几种常见的SNMP操作。 get-request操作:从代理进程处提取一个或多个参数值 get-next-request操作:从代理进程处提取紧跟当前参数值的下
9、一个数值。 set-request操作:设置代理进程的一个或多个参数值 get-response 操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。 trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。 4 SNMP V3 SNMPv3是为了解决SNMPv1和SNMPv2的安全问题而推出的,SNMPv3支持SNMPv1和SNMPv2的所有操作。 4.1 SNMPv3的变化 除了安全方面得到加强,SNMPv3还增加了一些约定、概念、术语。最为重要的变化是,V3摒弃了管理端和agent的叫法,两者都被称作是SNMP实体。每个实体都是由
10、一个SNMP引擎以及一个或者多个SNMP应用程序组成的。 4.2 SNMPv3引擎 每个SNMP实体仅包含一个SNMP引擎,作为一个实体的SNMPv3代理器必须拥有一个唯一的引擎标识,即SnmpEngineID。 引擎包括四个部分:传送器, 消息处理子系统,安全子系统,访问控制子系统。传送的器的任务是发送和接收消息,判断每个收到消息的版本,将消息发给消息子系统,传送器也会将SNMP消息发送给其他的实体。消息处理子系统提供准备发送的消息,从接收到的消息中提取数据。安全子系统提供认证和安全服务。访问控制子系统负责控制MIB对象的访问,可以控制用户访问的MIB对象以及允许进行的操作。 4.3
11、 SNMPv3 应用程序 SNMPv3的应用程序都可以分为以下几个部分: 1)Command generator 命令发生器,发出get,getnext,getbulk以及set请求和响应命令。 2)Command responder 命令响应器,负责响应get,getnext,getbulk以及set请求。 3)Notification originator 通告信息产生器,发出SNMP traps和notifications。 4)Notification receiver 通告信息接收器,接收traps和通告消息。 5)Proxy forwarder 在实体之间中继
12、消息。 4.4 SNMPv3 安全机制 SNMPv3 弥补了前两个版本在安全方面的缺陷, 增加了以下内容: 1) 使用USM 负责对用户认证和对报文加密解密; 2) 引入VACM 使得MIB 库访问权限的控制和管理更加严谨。 4.4.1 身份认证 身份认证是指通过数字签名技术使得SNMP 实体在接收到消息后确认消息是否来自授权实体, 并且确保消息在输出过程中未被改变的过程。 USM使用HMAC 算法进行消息认证, 管理与代理共享同一密钥(privkey),此密钥由口令通过MD5 或是SHA 算法获得,管理者以该密钥和待传输的消息作为HMAC算法的输入, 通过该算法计算出MAC(M
13、essage Authentication Code,消息认证码);然后将其加入消息的msgAuthenti-cationParameters字段中传输,代理收到该消息后使用同一密钥计算该消息的MAC, 并与收到的MAC 进行比较, 如果匹配, 则认为消息可靠, 否则, 认为不可靠, 拒绝接受并返回错误信息。 4.4.2 加密 对发送的数据消息进行加密, 保护消息在传输中不被泄漏和篡改。采用对称加密体制, 即加密过程需要管理者和代理共享同一密钥, 该密钥由口令通过MD5 算法获得。USM使用CBC-DES对称加密算法, 仅对报文中的上下文和PDU 组成的scoped PDU 部分进行加密。
14、 4.4.3 访问控制机制 SNMPv3 访问控制是一种PDU级的安全机制。当代理收到数据信息后, 首先通过调用消息处理模块和安全模块对数据信息进行认证检测和解密, 然后才会通过命令响应器调用访问控制模块对PDU 进行相关处理。对用户访问控制权限的管理是通过组来实现的, 具有相同访问权限的用户划归为同一组, 通过改变组的访问权限实现对用户访问权限的控制。 5 SNMP受到的安全威胁 主要威胁包括信息修改、未授权访问。 Ø 信息修改:是指一些非授权实体可能改变由另一个授权实体产生的消息。 Ø 未授权访问:是指一个实体伪装成一个授权实体来进行它无权进行的操作。 第二层次的威胁包括泄密
15、消息流修改。 Ø 泄密:是指窃听代理和管理站之间的数据交换。 Ø 消息流修改:消息流修改是指消息可能被恶意地重排、延迟或者重发。 第三层次的威胁包括拒绝服务、流量分析。 Ø 拒绝服务:攻击者阻止管理站和代理之间的信息交换。 Ø 流量分析:攻击者观测管理站和代理之间流量的一般模式。 SNMP2.0和SNMP1.0的安全机制比较脆弱,通信不加密,所有通信字符串和数据都以明文形式发送。攻击者一旦捕获了网络通信,就可以利用各种嗅探工具直接获取通信字符串,即使用户改变了通信字符串的默认值也无济于事。 SNMPv3中增加了安全模块使得网络免受数据篡改、伪装、消息修改等攻击。但是现有的SN
16、MPv3安全机制还不够完善, 不能有效避免以下三种攻击: 5.1 拒绝服务攻击DOS 拒绝服务攻击不是以获得网络的控制权和信息的访问权为目的, 而是为了使网络服务不能正常运行和提供。拒绝服务攻击的目的是通过将网络、操作系统或应用程序的有限资源耗尽, 使得它们不能够正常工作。其手段包括: 洪泛攻击, 使得网络接口瘫痪; 干扰两台机器之间的连接; 阻止个人访问服务等等。 5.2 流量分析攻击 攻击者通过监测管理者和代理者之间传输的数据来获取有用信息。 5.3 认证机制漏洞 2008-6-16 US-CERT和其他机构警告企业,SNMP协议现在的版本存在严重漏洞,这个漏洞可以允许黑客绕过协议认证机制,伪装合法用户。这个漏洞可以使黑客在受影响的系统上完成一切合法用户可以完成的行为。漏洞存在于SNMPv3的认证机制中,该机制使用键入的Hash Message Authentication Code (HMAC)。这是一种组合了密码算法散列式及密码密钥的运算,SNMPv3的执行方法允许以缩短的HMAC编码以最少的HMAC字节(一个字节)使用在认证人栏位中认证代理,而将HMAC减少至一个字节是暴力破解法变得可行。黑客可以通过向受影响的计算机发送特制信息包利用这些缺陷,可以查看并改变受到威胁的设备配置。






