|
来源:http://killgod.blogchina.com/ ! \) o# Q- h* E$ Y0 @
记:黑客X档案前几期的文章上有介绍利用工具snmputil.exe来刺探信息的,但是本
* J8 u2 s8 E( Q ?3 T9 p人觉得讲的有点简单,下面本人来深入的讨论一下,大家共同进步。
5 Z& H" }( b2 g, J g
, j. T8 ?4 \# a' e; d% Q) r" ?2 O6 m7 @一、SNMP的概念,功能 9 ^+ S- Z! \% Y& ?9 H1 v
SNMP(Simple Network Management Protocol)是被广泛接受并投入使用的工业标准, + [4 F" b H( Z: h* ?0 D+ H
它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索
2 q, B3 V3 W. V7 h# G, S. }信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。它采用轮询机制,
2 G$ s& n, o: E% j提供最基本的功能集。最适合小型、快速、低价格的环境使用。它只要求无证实的传输层
6 n( p/ ?0 z, v* |6 F协议UDP,受到许多产品的广泛支持。
7 y' r9 p4 W4 Y本文将讨论如何在Win2K安装使支持SNMP功能,SNMP技术对于提升整体安全水准是有益的,
0 |5 `, G. A' i. W0 ^% z7 B+ \但也可能存在风险,本文将同时检验这两个方面。另外,除了介绍一些开发工具外, * @- D7 }/ [/ B# i# r- _& k4 Q
还将图解通过SNMP收集信息的可能用法,以及如何提高安全性。 3 o: O/ K$ ?. s( t
二、在Win2K中安装SNMP
{7 H. [1 B$ S/ t- ^" m! f" h提供一个支持SNMP的Win2K设备与增加一个额外的Windows组件同样简单,只需要进入"开始/设置/控制面板/", ! B. z& i) U' ^+ [+ o7 e, ^+ p
选择"添加/删除程序",然后选择"添加/删除Windows组件",随之出现一个对话框,在其中选择"管理和监视工具",
, T0 G" U, f) j8 Q: r6 Z最后点击"下一步",依照提示安装:& F( h0 c" V6 V1 I$ [8 V1 B% M
OK,现在Win2K就可以通过SNMP来访问了.
9 m9 d% ?, Q* b2 i三、对snmp信息的刺探方法 % J. M0 o$ O2 E' A0 I0 }/ N: `
1、Snmputil get
9 K* l; \/ K; ~+ @" h, X Y7 [8 s下面我们在命令行状态下使用Win2K资源工具箱中的程序snmputil.exe
9 p3 x0 z3 V, C(http://pdp.nease.net/snmputil.zip)
6 y1 k& l3 u! H1 _7 T1 U; q% q来获取安装了SNMP的Win2K机器的网络接口数目,命令参数是get:
$ b3 ?# l( |0 X! o/ b, g( l前提是对方snmp口令是public - G0 B3 n/ T& U, n! ~/ {- c \5 Z
snmputil.exe提供基本的、低级的SNMP功能,通过使用不同的参数和变量,可以显示设备情况以及管理设备。 + r0 \2 x6 ?6 d8 j8 [+ ]- G/ r
下面来看看这个例子都包含了哪些参数和变量:
. j- Y* U5 Z- g7 K$ x% S
8 N* z& d) s1 \4 q6 c1 `●最后一个参数是SNMP变量,值为1.3.6.1.2.1.2.1.0,被称为物件识别代码OID(object identifier)。 $ K0 |$ D1 n3 W, t
OID有对应的字符串表达式,也就是在SNMPUTIL输出内容的第一行,在这个例子中,即是interfaces.ifNumber.0。 8 w' ?( J8 b4 U$ G- }! B; r
这个字符串对于用户来说,就要易记易读多了。你可以发现,这种对应关系与DNS类似。 $ p1 ]; t% i4 }) P- C- {! |
●第二个参数指定将SNMP请求发送给哪个设备,在这里是localhost,即本地主机。 , w6 T' E0 m0 c6 k9 c1 t
●第三个参数指定使用哪个共同体(即验证字符串或口令),在这里是public。
2 c, z4 B7 W, J0 j' _在每个发送到被管理设备的SNMP UDP信息包中,这个口令是以纯文本形式传输的。
! V% i1 P9 t; k当一个Win2K设备安装上SNMP支持后,缺省的SNMP共同体名称为 public,这表明允许用户读取现有的所有变量。
5 Z1 x, P' j7 L" i8 a0 l因为即便是设备中的网络接口数目也是一个敏感数据,所以这就成为第一个安全问题。
/ |' T: o1 f/ K" G! R/ Y8 ]& M; Y G& G
5 S1 h3 ~7 y8 O6 r7 R3 z/ O Q2、Snmputil getnext - u5 M/ t. H7 @+ b
接着,我们试一试snmputil的另一个命令参数getnext:
7 B# }6 A0 W8 \& H* q) bgetnext的功能是获取指定SNMP变量的下一个变量的值及其OID。因为一个设备的所有SNMP变量都是规则排列的,
- Z& \, S1 f5 B7 |* u* S% }所以使用getnext命令参数就可以获取一个设备中的所有变量值及OID,而不需要事先知道它们的准确OID值。 7 O0 P5 @8 |3 J% N- K* x6 N: @
$ j( z* R! |! O" e4 x" i/ G
另外Snmputil getnext可以用来测试 Windows 2K SNMP内存消耗拒绝服务攻击缺陷
8 F" x( m5 D( B/ i0 M R受影响的系统有:
1 f }% b- j% b: k9 P+ `1 N! K5 d- Microsoft lmmib2.dll 5.00.2134.1% n$ U( g9 K* |; J/ M4 H
- Microsoft Windows 2000 Server SP2
+ Y' C$ e- F/ N- Microsoft Windows 2000 Server SP1
% V7 |. M, G3 s; |; U/ q2 h+ r7 q- Microsoft Windows 2000 Server
1 I' ~; c6 X3 Y% z. X8 F具体方法: 8 v; W5 c9 e7 c- ?6 D: m) ?* \7 t
snmputil getnext localhost public .1.3.6.1.4.1.77.1.2.28.0 ) b* ^* k3 g9 y
请谨慎使用。。。。。。 当心被警察叔叔K哦
/ W! l1 H: c: [# b6 `2 r* q+ W6 c6 s( [# A6 R, m
3、snmputil walk
; N3 x* } j* [$ K! G知道了next指令的用途,我们可以编写一个程序自动获取一个设备的所有OID及其数值,而不用一行行地敲入那么长的命令。 # y* U! W, B* |4 v
但幸运的是,snmputil的walk指令帮助我们实现了这个想法。在命令行状态下敲入下面的命令,将显示出本地机器几乎所有的变量:
+ k4 { \1 s7 t7 VC:\> snmputil walk localhost public .1.3
6 b7 U1 U3 V. n6 B6 J8 R9 E你会看到一行行的文字在黑白窗口中不停地滚动 ...... 直到最后出现"End of MIB subtree"的信息:
1 f6 `7 ]( H" B其他指令含义:
: }6 d% a1 {7 E; f3 Z2 y$ A1.snmputil walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系统进程 6 z w, j! f9 a
这样就可以使入侵者在入侵之前就知道你系统运行的软件,有没有装杀毒软件,
$ ?6 B- j$ l% y4 b" v' d3 ^/ P从而知己知彼,百战不殆!
/ N7 e9 C* l/ z9 N) u2.snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系统用户列表
7 |0 Y/ {+ B: f7 m5 f/ }: X有了这个更好了,入侵者可以根据你的用户表编一个密码表进行探测,9 k+ c* L; Y; P1 G l0 Z2 E
减少了入侵的盲目性。
* O( h% F& |+ L |; k, m3 E: q7 f0 j3.snmputil get 对方ip public .1.3.6.1.4.1.77.1.4.1.0 列出域名 ' [9 |2 m$ L1 S* _* j
这个可以列出系统的域名,是入侵者得到了主机名,可以根据此设置探测的密码字典,增加了成功率。 C7 E$ ^& _9 O9 [7 F
& s+ a) R/ L6 ~4.snmputil walk 对方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安装的软件
) K1 }5 f: R, @7 [用这个入侵者可以看你装的sp是什么,有没有装防火墙等信息,可以据此判断应该有的系统漏洞,增加了入侵的成功率。
& k' w8 c7 ?- Z0 U' l6 G5.snmputil walk 对方ip public .1.3.6.1.2.1.1 列出系统信息
, S$ M) @$ \# ?这个可以使入侵者了解系统状况以及主机的稳定性,可以从主机的uptime里得知你系统开机了多长时间,从而确定是否入侵。
7 O4 X8 X6 ?* v# ~( |0 O& K H+ M6 r! d- J. k) V0 @7 L
其他的工具: ' G& R) F( T0 U
1:SolarWinds 2002的IP Network Browser
( i7 g( F0 ^; `. [5 [4 y& X4 a_id=82">http://www.lbfok.com/txt/showsoft.asp?soft_id=82(软件地址)
% r6 L! r% \4 }4 T7 t_id=83">http://www.lbfok.com/txt/showsoft.asp?soft_id=83(注册机下载)
3 r: o% ^/ o |$ {2:LANguard Network Scanner 3.- f# O2 x) h0 a- g' n
_id=103">http://www.lbfok.com/txt/showsoft.asp?soft_id=103 : q9 \5 R: M* F5 G
3:X-scan2.3cn
2 J3 x, K ~5 H( T以上用x-scan就得到了系统信息 ' S2 g/ x2 H8 ~7 S0 L
_id=13">http://www.lbfok.com/txt/showsoft.asp?soft_id=13 5 R" U* L/ d8 |
4 x6 o% W+ E% `; t% {
四、如何提高Win2K SNMP的安全性 # r% t) j. a o8 t0 I3 }4 @) L
$ ^6 f" C# n3 c: v' h$ d
1:首先需要注意的是,snmp服务的通讯端口是UDP端口,这也就是大部分网络管理人员很容易忽略的地方。
( A6 Q' `9 w1 [% I1 K- {4 u往往某些网管配置服务器阻断了NetBIOS空会话的建立,就认为系统安全有了相当的保障,可由于安装
& m4 z3 U, E* C( ]( I; ~了SNMP服务,不知不觉中,就给系统带去了极大的隐患。 5 K- D2 Q6 r2 [% M+ O2 E
最方便和容易的解决方法,就是关闭SNMP服务,或者卸载掉该服务。
- T; P2 a, _8 R+ L8 z1 i. z如果关掉SNMP服务不方便的话,那么可以通过修改注册表或者直接修改图形界面的SNMP服务属性 ; A% p* i) X( Z w( w& S. B
进行安全配置。
2 t* M# J" H& s; d0 C开始——程序——管理工具——服务——SNMP Service——属性——安全
2 Y0 s* L( [2 F4 h' H7 S3 o* K# x7 f& x$ T8 V" \
在这个配置界面中,可以修改community strings,也就是微软所说的"团体名称",呵呵,也就是 * t3 |8 t1 x# d4 Q; x( L* S
我所说的"查询密码"。或者可以配置是否从某些安全主机上才允许SNMP查询。 4 r# O$ ^* w8 t1 H. X5 b
不过NT4环境下的朋友就必须修改注册表了。 , o6 x7 n6 B; w" Q. V O3 M
修改community strings,在 " Y9 Q5 a0 \( F. A
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities]
" e- w) p) p. |) b" {$ o9 U下,将public的名称修改成其它的名称就可以了。
: R% Q2 w! P, F8 w如果要限定允许的ip才可以进行SNMP查询,可以进入 ) c# d& Q+ E1 ]! p9 e9 _
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers] # u! r0 ~. N V K, F3 O# }. z
添加字符串,名称为"1",内容为要允许的主机IP。 ' e7 y- Q/ q9 d) B
当然,如果允许多台机器的话,就要名称沿用"2、3、4"等名称了 ! P* E; l+ [) n+ a/ e2 k; D8 q k9 S I& m
b8 W4 M# d7 j* n: A4 f
2:在Win2K中,事件日志中的任何事件都可用来创建包含这一事件的SNMP陷阱,Microsoft将这称为SNMP 事件转换器。
6 t" J- t. Y- Y; Y9 l$ g0 O可以对一些Win2K设备进行配置,使得当有人试图登录它或者对其共享而未成功时,让这些设备能够发送一个SNMP陷阱信息。 0 `0 E- ?4 I( F/ I6 p
把这些陷阱引导到我们自己的工作站,并设置当收到陷阱信息,用应用程序播放一个报警音调,这样就可以初步建立一个多 % Z2 s% Y& {* L9 x2 f$ Z3 r' g
媒体安全管理工作站。 ; b% ]3 c$ A- `6 r
配置这些陷阱信息所需要的工具有evntwin.exe和evntcmd.exe,二者都是Win2K标准安装后的一部分:
/ Z6 e3 I/ I4 u( n用evntwin.exe对一些重要事件建立陷阱,然后在管理工作站上启动snmputil.exe:
( g2 |* V) s* i' l& ]) p0 s7 \8 [! D: R$ X2 _0 {& m
C:\> snmputil trap ! {8 g: V7 {$ b% ?4 i6 V
snmputil: listening for traps...
" _; f+ p1 T! S6 W6 I9 MIncoming Trap:
* ?1 u* W5 ]1 O, _generic = 6 % q" i/ V; i0 N. ~
specific = 529 : y. u; ^: }, s0 ]2 i. L& O
enterprise = .iso.org.8.83.101.99.117.114.105.116.121
; `5 i* O9 {. @8 ^* N3 v! @agent = 127.0.0.1
; ~) I& O0 y8 P5 h0 zsource IP = 127.0.0.1
, C% O1 a1 c3 h9 g8 l/ g U/ G4 ocommunity = public - u1 i9 z& g, B2 J c# U
variable = .iso.org.1.0 6 a0 z8 h% u1 Y& t
value = String & V# A1 X8 D# G- H9 L3 n7 |9 o1 h
variable = .iso.org.2.0
/ s% |: D9 d% Z. Tvalue = String SYSTEM
4 W* e- e% x! y9 c. W, }variable = .iso.org.3.0
. W8 B0 [4 K& y$ d3 j- q _value = String JVO
6 Y1 z* D1 [( s4 I: i2 rvariable = .iso.org.4.0 " L: p/ J3 D1 h* P/ G) g
value = String 16 , n% ?- z5 C0 l6 y% }6 A
variable = .iso.org.5.0
8 e$ }' @# }2 D3 W" k$ Mvalue = String 2
/ ]+ l6 b. h% l/ s6 |& d5 h! _* svariable = .iso.org.dod.0
$ F; S- |% O9 W* lvalue = String nonexistinguser
# P+ n" Z3 V$ g" g. Q& `) @variable = .iso.org.7.0
4 A% Y! Y! ?0 Pvalue = String ADS
, i# g# q( h( a# H( ~9 A" }variable = .iso.org.8.0
9 |8 T ?% \& Q, Y" @value = String 3
4 A# _# p' |! j- D5 avariable = .iso.org.9.0 ) c+ i. G9 K( k
value = String NtLmSsp # H# \; k) `' ~
variable = .iso.org.10.0
6 m) z$ u# k, g/ jvalue = String MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
6 W9 @" @4 O5 y+ U% gvariable = .iso.org.11.0
' E6 g$ w& N6 E- P4 G/ r* uvalue = String JVO
- ]& I( j; I9 z) p要记住,SNMP陷阱只产生于出现在Win2K事件日志中的事件。如果是一个单独的工作站,需要在"本地安全策略"中配置。 ' g$ J* p' m+ G' f( S/ U' g6 W* u
如果是一个域中的设备,要使用AD(活动目录)来设置。
+ T6 c1 L8 J, S4 [1 ]另一个使用SNMP并得到附加安全的方法是主动监控某些SNMP变量,这些变量有: 7 U* L! l0 G4 Y: [" V/ M
●IpForwarding (1.3.6.1.2.1.4.1.0):就是IP转发,这个特性对大多少工作站而言不是个好功能。 7 \7 T8 O2 c1 B% p( \! ~$ u! q
●IcmpInRedirects (1.3.6.1.2.1.5.7):是否有人正在向设备发送icmp重定向信息。 / f7 y$ B Z; |# X: F0 D
●TcpOutRsts (1.3.6.1.2.1.6.15):一个记数器,表示设备所发送的RST数。当受到端口扫描时,这个记数器会急剧增加。 . M! O$ l& t4 U% b
●UdpNoPorts (1.3.6.1.2.1.7.2):一个记数器,表示不提供服务的端口的通信量。同样是一个可能受到端口扫描的信号。 0 k3 ?! J; X9 M) Z; g: K+ e7 k3 Q# t
对于一个SNMP管理工作站来说,为这些变量设置阀值就能提供很好的报警信息。 8 p7 N- |4 ?( s* t3 ~1 C( S3 F5 c8 o
6 B, j5 \& s. @+ o4 d' G" T$ r/ I; f; I6 z9 U" N M+ U Q& a
|