分类: 网络与安全
2009-05-25 16:52:21
SNMP口令的利用以及一些相关知识 |
一、从SNMP说起
SNMP,Simple Network Management Protocol,简单网络管理协议。用于管理IP网络上结点的协议。
几乎所有的网络设备和网络操作系统都支持SNMP。
接下来要介绍的是:community strings,
也不知道中文翻译是什么意思,呵呵,不过如果理解成为基于SNMP协议信息通信时使用的
一种“查询密码”应该不为过吧。
当使用特殊的客户端应用程序,通过该“查询密码”community strings的验证,将获得
对应的权限(只读 或者 读写)对SNMP中管理信息库(MIB)进行访问。
而管理信息库(MIB)中则保存了系统所有的重要信息。
也就是说,如果可以知道community strings 这个“查询密码”,我们就可以刺探系统的信息了。
比较遗憾的是,很多网络设备厂商以及操作系统厂商,在初始状态下,都使用比较
统一的“查询密码”呵呵,这也就给我们提供了足够的方便。
二、对WIN2K进行刺探扫描
以WIN2K来说,一旦安装并启动了简单网络管理协议,系统将打开
UDP 161 snmp
UDP 162 snmptrap
两个端口。
具体做什么我们不去细究。需要注意的是,这里使用的是UDP端口,而不是TCP端口。
同时,WIN2K系统支持初始的“查询密码”community strings 为:public
我们只要通过一款Resource Kit里面的工具snmputil,就可以方便的获得非常多的信息。
在这里可以下载:
呵呵,简单介绍一下用法
snmputil,就是程序名拉,呵呵。
get,就理解成获取一个信息。
getnext,就理解成获取下一个信息。
walk,就理解成获取一堆信息(嗯,应该说所有数据库子树/子目录的信息)
agent,具体某台机器拉。
community,嗯就是那个“community strings”“查询密码”拉。
oid,这个要多说一下,这个呢,就是物件识别代码(Object Identifier)。
可以把oid理解成MIB管理信息库中各种信息分类存放树资源的一个数字标识。
好了,具体的资料可以查阅相关文章。
开始刺探信息:
尝试获得对方机器当前进程列表
snmputil.exe walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2
尝试获得对方机器系统用户列表
snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 (如下图)
呵呵
是不是很容易的就刺探出了对方的信息?
当然,这样的命令还可以做很多
整理一些列在下面:
snmputil walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系统进程
snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系统用户列表
snmputil get 对方ip public .1.3.6.1.4.1.77.1.4.1.0 列出域名
snmputil walk 对方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安装的软件
snmputil walk 对方ip public .1.3.6.1.2.1.1 列出系统信息
三、一些工具的推荐
snmputil的功能已经完全足够用来进行对网络主机的刺探扫描了,只是因为它是命令行下的工具
而且,超常的oid标识符也并不是那么方便输入。
这里我推荐两款非常不错的网络管理工具,当然,它们的另一个作用就是snmp的刺探。
SolarWinds 2001的IP Network Browser
IP Network Browser是一款snmp浏览工具,它可以提供在输入正确的community strings“查询密码”
后的运行着snmp服务的WIN2K/NT系统上的任何可得的信息。
在下图中,我们可以看到“查询密码”为:public
而在Accounts(账号)表单里,我们已经获得了同上面snmputil命令行方式一样的反馈信息。
功能强大噢。
整个SolarWinds 软件套件更包含了更多的网络管理工具,以后我将在其他的文章里继续介绍。
LANguard Network Scanner 2.0
这是一个网络安全综合扫描工具,主要功能:显示每台主机的NETBIOS主机名,MAC地址,搜寻
共享,操作系统类型判断,并测试共享密码的安全性等等,以html格式输出。
主功能界面:
选中左边SNMP选项,右键呼出SNMPWalk功能
呵呵,出现了很直观的图形界面的MIB树的结构,直接通过选择进入相应的目录树
或者直接输入oid号,就可以查询出对方主机的相应信息。
如账号信息:
当然,LANguard Network Scanner还有一些更高级更适用的功能
比如暴力破解community strings,呵呵自己配置一个字典的话
会非常有效的。
四、如何防范基于snmp的刺探扫描
首先需要注意的是,snmp服务的通讯端口是UDP端口,这也就是大部分网络管理人员很容易忽略的地方。
往往某些网管配置服务器阻断了NetBIOS空会话的建立,就认为系统安全有了相当的保障,可由于安装
了SNMP服务,不知不觉中,就给系统带去了极大的隐患。
最方便和容易的解决方法,就是关闭SNMP服务,或者卸载掉该服务。
如果关掉SNMP服务不方便的话,那么可以通过修改注册表或者直接修改图形界面的SNMP服务属性
进行安全配置。
开始——程序——管理工具——服务——SNMP Service——属性——安全
在这个配置界面中,可以修改community strings,也就是微软所说的“团体名称”,呵呵,也就是
我所说的“查询密码”。或者可以配置是否从某些安全主机上才允许SNMP查询。
不过NT4环境下的朋友就必须修改注册表了。
修改community strings,在
[HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"SNMP"Parameters"ValidCommunities]
下,将public的名称修改成其它的名称就可以了。
如果要限定允许的ip才可以进行SNMP查询,可以进入
[HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"SNMP"Parameters"PermittedManagers]
添加字符串,名称为“1”,内容为要允许的主机IP。
当然,如果允许多台机器的话,就要名称沿用“2、3、4”等名称了。
到这里,基于SNMP的信息刺探与防护策略也基本说完了。
文章里面有很多名称或者解释都是我自己表述的,不够全面和正式,但对初学者来说,应该还是有些帮助的吧
Snmputil 命令
Snmputil是一个命令行下的软件,使用语法如下: usage: snmputil get|getnext|walk] agent community oid [oid ...] snmputil trap
其中agent表示代理进程的IP地址,community表示团体名,oid表示MIB对象ID。
举例说明:
1)查看本地计算机(IP地址为192.168.0.3)的系统信息
通过对系统组的MIB对象的查阅,我们知道系统信息所对应的MIB对象为.1.3.6.1.2.1.1.1(参看系统组对象),我们使用get参数来查询:
C:>snmputil get 192.168.0.3 public .1.3.6.1.2.1.1.1.0
Variable = system.sysDescr.0
Value = String Hardware: x86 Family 15 Model 2 Stepping 7 AT/AT COMPATIBLE -
Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)
其中public是192.168.0.3计算机上的团体名,.1.3.6.1.2.1.1.1.0是对象实例,注意对象ID前面要加一个点".",后面
还要加一个"0"。如果不在对象ID末尾加上一个0,那么用get参数查询就会出错。从查询结果中我们能够看出操作系统版本和CPU类型。
2)查询计算机连续开机多长时间
C:>snmputil get 192.168.0.3 public .1.3.6.1.2.1.1.3.0
Variable = system.sysUpTime.0
Value = TimeTicks 447614
如果我们在对象ID后面不加0,使用getnext参数能得到同样的效果:
C:>snmputil getnext 192.168.0.3 public .1.3.6.1.2.1.1.3
Variable = system.sysUpTime.0
Value = TimeTicks 476123
3)查询计算机的联系人
C:>snmputil get 192.168.0.3 public .1.3.6.1.2.1.1.4.0
Variable = system.sysContact.0
Value = String administrator
以上简单介绍了用snmputil查询代理进程的方法,由于在命令行下使用,可能大家感到颇为不方便,但命令行的一个好处就是可以促进大家主动查阅MIB对象,加深对SNMP网络管理的认识。
4)使用walk查询设备上所有正在运行的进程:
C:>snmputil walk 192.168.0.3 public .1.3.6.1.2.1.25.4.2.1.2
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.1
Value = String System Idle Process
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.4
Value = String System
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.292
Value = String snmputil.exe
Variable = host.hr
SWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.308
Value = String RavTimer.exe
Variable = host.hrSWRun.hrSWRunTable.hrSWRunEntry. hrSWRunName.336
Value = String RavMon.exe
限于篇幅笔者就不把所有进程列出来,大家可以在自己的计算机上面实验,以加强感性认识。
5)查询计算机上面的用户列表
C:>snmputil walk 192.168.0.3 public .1.3.6.1.4.1.77.1.2.25.1.1
Variable = .iso.org.dod.internet.private.enterprises. lanmanager.lanmgr-2.server.
svUserTable.svUserEntry.svUserName.4.117.115.101.114
Value = String user
Variable = .iso.org.dod.internet.private.enterprises. lanmanager.lanmgr-2.server.
svUserTable.svUserEntry.svUserName.5.71.117.101.115.116
Value = String Guest
Variable = .iso.org.dod.internet.private.enterprises.
lanmanager.lanmgr-2.server.svUserTable.svUserEntry.
svUserName.13.65.100.109.105.110. 105.115.116.114.97.116.111.114
Value = String Administrator
从中我们可以得知该计算机共有三个用户,它们分别为user、guest和administrator。
Snmputil还有一个trap的参数,主要用来陷阱捕捉,它可以接受代理进程上主动发来的信息。如果我们在命令行下面输入snmputil trap后回车,然后用错误的团体名来访问代理进程,这时候就能收到代理进程主动发回的报告。
在MIBII中总共有175个对象,每个对象均有其不同的含义,我们只有通过查阅MIB才能知道它们各自的作用。MIB对象是SNMP网络管理中的核心内容,只有深入了解MIB对象的含义我们才有可能知道如何去驾驭SNMP网络管理。
SNMP中MIB
1. SNMP基本原理
SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每
个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。下图10是NMS公司网络产品中SNMP协议的实现模型。
SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图
版本识别符(version identifier):确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。
团体名(Community Name):用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息
协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。
2. 管理信息库MIB
IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID:Object Identifier)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。
下图给出了NMS系统中SNMP可访问网络设备的对象识别树(OID:Object Identifier)结构。
下图给出了对一个DS1线路状态进行查询的OID设置例子。
3. SNMP的五种消息类型
SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap
SNMP管理信息库MIB
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据 结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。下图画的是管理信息库的一部分,它又称为对象命名 (objectnamingtree)。
管理信息库的对象命名举例
对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的饿一个(标号3)是被标识的组织。
在其下面有一个美国国防部(Department of
Defense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子
树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。在Internet结点下面的第二个结点是mgmt(管理),
标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB-
II,故结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1) .2.1}。这种标识为对象标识符。
最初的结点mib将其所管理的信息分为8个类别,见表1。现在de mib-2所包含的信息类别已超过40个。
表1 最初的结点mib管理的信息类别
类别 |
标号 |
所包含的信息 |
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软件(外部网关协议通信量统计) |
这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为 11.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。世界上任何一个公 司、学校只要用电子邮件发往iana-mib@isi.edu进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用 SNMP进行管理。