|
来源:http://killgod.blogchina.com/
6 _, K) I1 n5 q4 _( v# J# F6 e记:黑客X档案前几期的文章上有介绍利用工具snmputil.exe来刺探信息的,但是本 ' x' d5 K& H6 a/ z
人觉得讲的有点简单,下面本人来深入的讨论一下,大家共同进步。
. `4 \, v& t8 A
9 ~2 A& }' ]3 v8 E$ W0 z一、SNMP的概念,功能 0 Y6 A4 f: V7 d Z1 [6 z9 M
SNMP(Simple Network Management Protocol)是被广泛接受并投入使用的工业标准, + |6 K6 m+ ~2 g' H, o& r
它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索
8 v- [: U- T* S k: \信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。它采用轮询机制,
j0 t+ V2 N# K; c0 Y& X7 B( I提供最基本的功能集。最适合小型、快速、低价格的环境使用。它只要求无证实的传输层
( k) t ^0 _' @5 ?协议UDP,受到许多产品的广泛支持。
0 h3 P2 Q- }% Y0 q% F) G7 O本文将讨论如何在Win2K安装使支持SNMP功能,SNMP技术对于提升整体安全水准是有益的, ' {4 V0 m: Y" n
但也可能存在风险,本文将同时检验这两个方面。另外,除了介绍一些开发工具外, |) P! A; |1 U5 J
还将图解通过SNMP收集信息的可能用法,以及如何提高安全性。 W Z l0 w' ^) c& }( M' j
二、在Win2K中安装SNMP
" ^ f7 U$ l, @5 c; h4 m提供一个支持SNMP的Win2K设备与增加一个额外的Windows组件同样简单,只需要进入"开始/设置/控制面板/",
/ l! D4 u- u6 B2 L* _# f选择"添加/删除程序",然后选择"添加/删除Windows组件",随之出现一个对话框,在其中选择"管理和监视工具", , M# }' I; Y R9 ~' G+ y
最后点击"下一步",依照提示安装:
/ Y& p) V" d! y% BOK,现在Win2K就可以通过SNMP来访问了.
. ^8 t: u4 V6 e! q* f, P三、对snmp信息的刺探方法 @( V/ w u' D+ w- h3 k
1、Snmputil get ( b% h+ x) |! H+ d# L
下面我们在命令行状态下使用Win2K资源工具箱中的程序snmputil.exe k3 H4 B$ `" \# [, U3 T& ?
(http://pdp.nease.net/snmputil.zip) 1 q# k) M) b6 h" R/ \* `1 E
来获取安装了SNMP的Win2K机器的网络接口数目,命令参数是get: 0 \# F5 F, i# q
前提是对方snmp口令是public ( k1 K8 Z- l8 K1 f/ {$ K( [
snmputil.exe提供基本的、低级的SNMP功能,通过使用不同的参数和变量,可以显示设备情况以及管理设备。
4 g1 R0 t* p! T* G, v下面来看看这个例子都包含了哪些参数和变量: , u6 V. m0 ]8 V; n9 G* P* l
/ s( Q& w! S, E, B- H3 h6 m
●最后一个参数是SNMP变量,值为1.3.6.1.2.1.2.1.0,被称为物件识别代码OID(object identifier)。
0 c/ y0 R1 \* S' \OID有对应的字符串表达式,也就是在SNMPUTIL输出内容的第一行,在这个例子中,即是interfaces.ifNumber.0。 9 R& d8 Q* V7 L8 F& g8 g
这个字符串对于用户来说,就要易记易读多了。你可以发现,这种对应关系与DNS类似。 5 u1 E, b; U/ X* j& q
●第二个参数指定将SNMP请求发送给哪个设备,在这里是localhost,即本地主机。
/ w o6 B0 X. _3 _( [2 L; E●第三个参数指定使用哪个共同体(即验证字符串或口令),在这里是public。
! x. j% Y+ ?, t1 j5 c) X8 |' b在每个发送到被管理设备的SNMP UDP信息包中,这个口令是以纯文本形式传输的。 0 v' ~- p$ i% G6 }! J/ n
当一个Win2K设备安装上SNMP支持后,缺省的SNMP共同体名称为 public,这表明允许用户读取现有的所有变量。
1 N( [2 O5 [+ x因为即便是设备中的网络接口数目也是一个敏感数据,所以这就成为第一个安全问题。
+ o/ z; O. h$ u) w$ q: A# q7 f2 h5 t x& q5 ~
2、Snmputil getnext
' t& A' f3 V, V$ a6 K9 E4 {接着,我们试一试snmputil的另一个命令参数getnext:
' n1 j* Z" B/ m" `! Dgetnext的功能是获取指定SNMP变量的下一个变量的值及其OID。因为一个设备的所有SNMP变量都是规则排列的,
" V& C B; e5 s. E8 \" b' r所以使用getnext命令参数就可以获取一个设备中的所有变量值及OID,而不需要事先知道它们的准确OID值。
% l8 Q1 r$ g' u& }- W5 g% f8 Y; t4 X9 A. I4 p1 j/ m
另外Snmputil getnext可以用来测试 Windows 2K SNMP内存消耗拒绝服务攻击缺陷 ( }& }6 M M! \* l( H3 e' H
受影响的系统有: . I! V. }7 Y! }3 e9 J' ~! |
- Microsoft lmmib2.dll 5.00.2134.13 i! Z5 M% P) Q& N! L/ G* }1 H
- Microsoft Windows 2000 Server SP2 ) l- i0 s" w3 P+ E n* m. m5 ^
- Microsoft Windows 2000 Server SP1 9 b3 c4 j; D1 u+ o: ~. R5 p
- Microsoft Windows 2000 Server
% I5 c3 k: e! b, z具体方法:
" d" G; s8 b- O! i, f) Gsnmputil getnext localhost public .1.3.6.1.4.1.77.1.2.28.0 1 w* P9 g- e, ^% a* j. A( H, G
请谨慎使用。。。。。。 当心被警察叔叔K哦 . n0 k, `$ A* a3 b
- i$ a. K4 z2 u& U5 d3、snmputil walk & S) [$ S, w/ U6 ? E; |
知道了next指令的用途,我们可以编写一个程序自动获取一个设备的所有OID及其数值,而不用一行行地敲入那么长的命令。
8 P T/ U1 j: l3 `但幸运的是,snmputil的walk指令帮助我们实现了这个想法。在命令行状态下敲入下面的命令,将显示出本地机器几乎所有的变量: 5 ^# W1 }# T7 l% F, C0 C7 u+ n4 w; h
C:\> snmputil walk localhost public .1.3 8 f2 \/ O. K0 X* o- ^; ~ y
你会看到一行行的文字在黑白窗口中不停地滚动 ...... 直到最后出现"End of MIB subtree"的信息:
) S: C W1 ^& q' b. \( K其他指令含义: 6 h+ Q* X% z2 h; c+ {8 ?
1.snmputil walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系统进程 4 J* J U: z8 d& f4 [2 C
这样就可以使入侵者在入侵之前就知道你系统运行的软件,有没有装杀毒软件,
/ D3 C6 Y4 _! ]从而知己知彼,百战不殆!
- J6 D1 @. ?5 Z2.snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系统用户列表 4 V+ ?$ l, T) o v: B
有了这个更好了,入侵者可以根据你的用户表编一个密码表进行探测,7 |0 ]$ A. {+ a! n. j9 ]
减少了入侵的盲目性。 1 k) _0 m% V9 ` C/ ~ `+ Y
3.snmputil get 对方ip public .1.3.6.1.4.1.77.1.4.1.0 列出域名
4 N. Y, r8 Z2 W8 z; d! D( x/ s这个可以列出系统的域名,是入侵者得到了主机名,可以根据此设置探测的密码字典,增加了成功率。 3 v- B. @0 _( C4 c
/ E7 D4 f# g3 S; `4.snmputil walk 对方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安装的软件
' I, k2 t! L3 P& M) L& j* K/ Y用这个入侵者可以看你装的sp是什么,有没有装防火墙等信息,可以据此判断应该有的系统漏洞,增加了入侵的成功率。 2 [9 a) l( |2 ]: ?
5.snmputil walk 对方ip public .1.3.6.1.2.1.1 列出系统信息 7 Y7 Z* u( |+ ?6 h$ G% |( b& ~
这个可以使入侵者了解系统状况以及主机的稳定性,可以从主机的uptime里得知你系统开机了多长时间,从而确定是否入侵。 ( a4 L! k' T3 E
: o8 w, s1 U: P. A: B2 c2 g
其他的工具: % O, e3 X0 N2 ~
1:SolarWinds 2002的IP Network Browser 8 ~$ D+ m, E/ y$ R, T F
_id=82">http://www.lbfok.com/txt/showsoft.asp?soft_id=82(软件地址)
4 r( P8 M) T3 v8 W( z) |, h_id=83">http://www.lbfok.com/txt/showsoft.asp?soft_id=83(注册机下载) , u/ ~8 |& w/ m
2:LANguard Network Scanner 3.
/ p3 Z ~5 g% }! T_id=103">http://www.lbfok.com/txt/showsoft.asp?soft_id=103 & S. Q5 P" d0 k+ z9 I
3:X-scan2.3cn
/ j9 ?' g d: d! U3 ~以上用x-scan就得到了系统信息
5 w. s9 w( c# t! V ]: k6 i, G_id=13">http://www.lbfok.com/txt/showsoft.asp?soft_id=13 & w% Y# J2 Z% k2 P' u8 B
% U! h' y' z4 Q& U四、如何提高Win2K SNMP的安全性 1 ^$ J9 q. i2 r4 M) ?
}( w8 f9 ~6 p2 n/ G8 ]
1:首先需要注意的是,snmp服务的通讯端口是UDP端口,这也就是大部分网络管理人员很容易忽略的地方。 & P2 s. @9 b) L: K5 b0 y% w$ Y, t
往往某些网管配置服务器阻断了NetBIOS空会话的建立,就认为系统安全有了相当的保障,可由于安装
$ ], f9 j# K4 G3 t) X了SNMP服务,不知不觉中,就给系统带去了极大的隐患。 ) e6 x) Z, ^$ N5 m+ i" v& Y
最方便和容易的解决方法,就是关闭SNMP服务,或者卸载掉该服务。 . W# A7 j0 c+ p
如果关掉SNMP服务不方便的话,那么可以通过修改注册表或者直接修改图形界面的SNMP服务属性
- x( T0 {7 K: f" v0 M$ c进行安全配置。
$ `. w! _3 v- g6 I1 ^开始——程序——管理工具——服务——SNMP Service——属性——安全
' _3 x' m# ]2 }! T3 ^: R; C. E+ _* i" z. x6 l
在这个配置界面中,可以修改community strings,也就是微软所说的"团体名称",呵呵,也就是
' ^; U0 a/ D; t" K2 V; H C5 U我所说的"查询密码"。或者可以配置是否从某些安全主机上才允许SNMP查询。 $ f% w" X @$ D$ T
不过NT4环境下的朋友就必须修改注册表了。 4 q! P; T f+ w
修改community strings,在
. [6 c h% l) n( m$ A& z[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities]
; W. q8 e% E- ^0 z7 k) }& Z* p; F; c0 h( d下,将public的名称修改成其它的名称就可以了。
. C7 V9 a4 _ T0 C2 u" \如果要限定允许的ip才可以进行SNMP查询,可以进入 % o# r+ i- d$ H8 }- f
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers]
# p; k( }: w, \( H8 m5 H+ f添加字符串,名称为"1",内容为要允许的主机IP。
: ?/ W$ f' C7 N! j9 U当然,如果允许多台机器的话,就要名称沿用"2、3、4"等名称了 # @- ^5 \- t6 E
; |/ e+ p2 a( A2 }7 l3 f2:在Win2K中,事件日志中的任何事件都可用来创建包含这一事件的SNMP陷阱,Microsoft将这称为SNMP 事件转换器。
8 D# Q- _/ C" O; _, ^( \8 \可以对一些Win2K设备进行配置,使得当有人试图登录它或者对其共享而未成功时,让这些设备能够发送一个SNMP陷阱信息。
& \# X) @7 [9 |+ u; v1 u0 }把这些陷阱引导到我们自己的工作站,并设置当收到陷阱信息,用应用程序播放一个报警音调,这样就可以初步建立一个多
3 _' L3 ]- c3 F( N$ h( p" `媒体安全管理工作站。
7 o( k/ p4 N. d$ P4 [3 u: T配置这些陷阱信息所需要的工具有evntwin.exe和evntcmd.exe,二者都是Win2K标准安装后的一部分: i* G. y4 w* D3 Q& x0 s2 m
用evntwin.exe对一些重要事件建立陷阱,然后在管理工作站上启动snmputil.exe:
: P$ r. ^& @: ~% F, @# \- G
: d# m2 t2 G/ ]' p+ y: ~$ z$ vC:\> snmputil trap
$ x5 A' ^% @0 ?* y& |7 ~snmputil: listening for traps... + L* Y$ a5 C# _ X2 R
Incoming Trap:
% @" x3 q3 \6 n' ?' Wgeneric = 6 $ J9 ]! e. X! W6 q0 K
specific = 529 : J" i; s b; B0 L" ?6 M5 ?
enterprise = .iso.org.8.83.101.99.117.114.105.116.121
B* B1 G# w8 N; _' bagent = 127.0.0.1
8 D& A' ]. J" Esource IP = 127.0.0.1 & W) G! M9 F7 u6 U
community = public , {# Z9 ~8 f1 e+ o8 u
variable = .iso.org.1.0 + m/ r% W7 R2 q5 T4 D9 M& Q
value = String 2 @! Y! y4 M) Z( \8 Q3 z/ S/ q
variable = .iso.org.2.0
3 Q T8 r! ]6 Z+ ~& [* @3 x5 f* q; {value = String SYSTEM 3 }. S( Q( _1 T9 w1 ?/ W
variable = .iso.org.3.0 + o1 [/ X1 O0 [+ y4 T* z8 i% ?, Y& l2 j
value = String JVO
) t: D; a% m' ~- V4 b# A5 e0 I! D* mvariable = .iso.org.4.0 $ |8 N. {/ v7 Q8 c* O
value = String 16
4 N7 G# b {" nvariable = .iso.org.5.0 ; H \9 C5 N3 |
value = String 2
. I8 u4 y9 a2 s" e, M2 Rvariable = .iso.org.dod.0 9 j2 Y# J @- ^6 u
value = String nonexistinguser $ V+ i) x; m6 e) L9 C
variable = .iso.org.7.0
6 @. X1 x4 j* ?' }0 ^ |value = String ADS + M# @! Y+ t8 d! S
variable = .iso.org.8.0
1 V5 E3 h+ S4 m2 b) O5 Ivalue = String 3
4 Y1 M$ ^+ X2 d( L* [variable = .iso.org.9.0 9 s' e/ U1 K' |8 n5 Y% W5 R. Q& X
value = String NtLmSsp
c6 r4 c5 l3 C4 vvariable = .iso.org.10.0 / Q3 H! |, l. o3 i. b/ w; I6 F
value = String MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
4 i) U( [6 N+ w2 `# b1 zvariable = .iso.org.11.0
' g6 T+ y- h3 E- p) c! b- C! hvalue = String JVO ) T! R; W7 _, ?' L
要记住,SNMP陷阱只产生于出现在Win2K事件日志中的事件。如果是一个单独的工作站,需要在"本地安全策略"中配置。
! a7 a7 @ t: H) b3 p如果是一个域中的设备,要使用AD(活动目录)来设置。
9 ?) @% w- V1 U4 j4 `4 `另一个使用SNMP并得到附加安全的方法是主动监控某些SNMP变量,这些变量有:
3 ]- g1 b2 s, V5 k' @; {+ O8 S●IpForwarding (1.3.6.1.2.1.4.1.0):就是IP转发,这个特性对大多少工作站而言不是个好功能。 5 m0 }! E" a0 `, b* w
●IcmpInRedirects (1.3.6.1.2.1.5.7):是否有人正在向设备发送icmp重定向信息。 + u. c* U7 D$ ^; _/ m1 D% @' h& w
●TcpOutRsts (1.3.6.1.2.1.6.15):一个记数器,表示设备所发送的RST数。当受到端口扫描时,这个记数器会急剧增加。
( r& u H: u% t; J3 x0 o7 Z) u●UdpNoPorts (1.3.6.1.2.1.7.2):一个记数器,表示不提供服务的端口的通信量。同样是一个可能受到端口扫描的信号。 , a S& p6 [7 j5 b. b; I o8 N3 Y
对于一个SNMP管理工作站来说,为这些变量设置阀值就能提供很好的报警信息。 " o6 r! a# O4 Y5 R
" }4 |6 t: x2 f% M- J/ _# J7 C
) e8 C N( I7 j |