<div class="modbox">- R7 {# \6 E1 v. U* M
<div class="tit">因为近期有服务器被入侵 日志居然没有记录到入侵的那条入侵的IP 奇怪了 一般情况下 一个都跑不掉的 会记录IP地址 主机名 登陆的时间及用户名</div>0 l4 d( ~3 Y: M# K q
<div class="tit"> </div>
( }" P& K+ a# V f: H# C' F# G; N0 X<div class="tit"> </div>
/ B; M8 \4 r, {; Q' P<div class="cnt">
$ s& e5 j) Y j- ~; g9 X' e9 T<p><font color="#000000"> 单独将终端服务(Terminal Service)的日志监控分列出来是有原因的,微软Win2000服务器版中自带的终端服务Terminal Service是一个基于远程桌面协议(RDP)的工具,它的速度非常快,也很稳定,可以成为一个很好的远程管理软件,但是因为这个软件功能强大而且只受到密码的保护,所以也非常的危险,一旦入侵者拥有了管理员密码,就能够象本机一样操作远程服务器(不需要高深的NT命令行技巧,不需要编写特殊的脚本和程序,只要会用鼠标就能进行一切系统管理操作,实在是太方便、也实在是太可怕了)。虽然很多人都在使用终端服务来进行远程管理,但是,并不是人人都知道如何对终端服务进行审核,大多数的终端服务器上并没有打开终端登录的日志,其实打开日志审核是很容易的,在管理工具中打开远程控制服务配置(Terminal Service Configration),点击"连接",右击你想配置的RDP服务(比如 RDP-TCP(Microsoft RDP 5.0),选中书签"权限",点击左下角的"高级",看见上面那个"审核"了么?我们来加入一个Everyone组,这代表所有的用户,然后审核他的"连接"、"断开"、"注销"的成功和"登录"的成功和失败就足够了,审核太多了反而不好,这个审核是记录在安全日志中的,可以从"管理工具"->"日志查看器"中查看。现在什么人什么时候登录我都一清二楚了,可是美中不足的是:这个破烂玩艺居然不记录客户端的IP(只能查看在线用户的IP),而是华而不实的记录什么机器名,倒!要是别人起个PIG的机器名你只好受他的嘲弄了,不知道微软是怎么想的,看来还是不能完全依赖微软呀,我们自己来吧?写个程序,一切搞定,你会C么?不会?VB呢?也不会?Delphi?……什么?你什么编程语言都不会?我倒,毕竟系统管理员不是程序员呀,别急别急,我给你想办法,我们来建立一个bat文件,叫做TSLog.bat,这个文件用来记录登录者的IP,内容如下: </font></p>3 C) c% q5 Q& h/ I+ ~+ J
<p><font color="#000000">time /t >>TSLog.log <br/>netstat -n -p tcp | find ":3389">>TSLog.log <br/>start Explorer </font></p>
H! \, I% ? z% x# O<p><font color="#000000"> 我来解释一下这个文件的含义: </font></p>1 l! X( |3 A1 |4 k5 x% a* f
<p><font color="#000000"> 第一行是记录用户登录的时间,time /t的意思是直接返回系统时间(如果不加/t,系统会等待你输入新的时间),然后我们用追加符号">>"把这个时间记入TSLog.log作为日志的时间字段; </font></p>
$ Q7 S/ P* c. U! o: ~<p><font color="#000000"> 第二行是记录用户的IP地址,netstat是用来显示当前网络连接状况的命令,-n表示显示IP和端口而不是域名、协议,-ptcp是只显示tcp协议,然后我们用管道符号"|"把这个命令的结果输出给find命令,从输出结果中查找包含":3389"的行(这就是我们要的客户的IP所在的行,如果你更改了终端服务的端口,这个数值也要作相应的更改),最后我们同样把这个结果重定向到日志文件TSLog.log中去,于是在SLog.log文件中,记录格式如下: </font></p>
; {# N, L7 y9 `0 o# q4 u ` u<p><font color="#000000">22:40 <br/>TCP 192.168.12.28:3389 192.168.10.123:4903 ESTABLISHED <br/>22:54 <br/>TCP 192.168.12.28:3389 192.168.12.29:1039 ESTABLISHED </font></p>1 K, e! d& C( H6 \
<p><font color="#000000"> 也就是说只要这个TSLog.bat文件一运行,所有连在3389端口上的IP都会被记录,那么如何让这个批处理文件自动运行呢?我们知道,终端服务允许我们为用户自定义起始的程序,在终端服务配置中,我们覆盖用户的登录脚本设置并指定TSLog.bat为用户登录时需要打开的脚本,这样每个用户登录后都必须执行这个脚本,因为默认的脚本(相当于shell环境)是Explorer(资源管理器),所以我在TSLog.bat的最后一行加上了启动Explorer的命令startExplorer,如果不加这一行命令,用户是没有办法进入桌面的!当然,如果你只需要给用户特定的Shell: </font></p># S* c. Q1 z, R; \
<p><font color="#000000"> 例如cmd.exe或者word.exe你也可以把start Explorer替换成任意的shell。这个脚本也可以有其他的写法,作为系统管理员,你完全可以自由发挥你的想象力、自由利用自己的资源,例如写一个脚本把每个登录用户的IP发送到自己的信箱对于重要的服务器也是一个很好的方法。正常情况下一般的用户没有查看终端服务设置的权限,所以他不会知道你对登录进行了IP审核,只要把TSLog.bat文件和TSLog.log文件放在比较隐蔽的目录里就足够了,不过需要注意的是这只是一个简单的终端服务日志策略,并没有太多的安全保障措施和权限机制,如果服务器有更高的安全要求,那还是需要通过编程或购买入侵监测软件来完成的。 </font></p>
. R) s: O2 a: r2 _' G4 o0 Q9 [; e<p></p>- z( U; t7 F) r
<p><font color="#000000">----------------------------------------------------------------- </font></p>
' p! a, Y4 T: d, o+ M" j2 O<p><br/><font color="#000000"><strong>[转帖]谈终端方式登录的日志记录</strong> <br/>.abu. </font></p>1 }1 h( E: K# y6 u5 Q, C2 E
<p><font color="#000000"> </font></p>
( S2 [3 L+ {$ M. ?% `<p><font color="#000000"> 最近看到一篇文章《分析进入Win2000后留下的足迹》,这文章里的关于纪录终端服务登录服务器日志纪录的问题引发了几个朋友的讨论,究竟能不能纪录日志?何种情况下才能纪录日志? </font></p>
) K' {. j) [. J3 S' I<p><font color="#000000"> 顺手做了以下测试 </font></p>
: }& z& |0 a: n6 w5 q. p8 v<p><font color="#000000"> 这里先交待一下: </font></p>
9 M2 B) ~5 g6 p0 v: r0 \" X<p><font color="#000000"> 我的服务器名:ABUSERVER </font></p>
& X1 o9 Q; ~0 w7 z<p><font color="#000000"> 我自己客户机名:ABUPC13 </font></p>% R$ p9 w W5 E) d! m) O" |# \/ O
<p><font color="#000000"> 我自己客户机的IP:192.168.0.13 </font></p>- X' E1 A' |/ K3 K) |+ v
<p><font color="#000000"> 我登录所用的帐号:Administrator </font></p>
$ _/ Z% O. D/ o: {- I<p><font color="#000000"> 本地安全策略里面开启:审核登录事件 </font></p>5 _* f! T8 \# t$ N
<p><font color="#000000"> 测试一: </font></p>
: W; g; L! P$ O2 R<p><font color="#000000"> 用终端服务的方式登录服务器,并正常注销退出,查看安全审核的日志记录如下: </font></p>
9 R. G; {& G6 x! S$ t2 I<p><font color="#000000"> 登录成功: <br/> 用户名: Administrator <br/> 域: ABUSERVER </font></p>
4 p( ^9 l0 y6 q2 @9 \* M<p><font color="#000000"> 登录 ID: (0x0,0x1D0B52) <br/> 登录类型: 2 <br/> 登录过程: User32 <br/> 身份验证程序包: Negotiate <br/> 工作站名: ABUSERVER </font></p>
, y2 a( Q: W7 L7 L4 i& p4 z+ e<p></p>- h) j6 M% Y8 j9 Q
<p><font color="#000000"> 用户注销: <br/> 用户名: Administrator <br/> 域: ABUSERVER </font></p>
3 }8 V' y" U s) T [( L<p><font color="#000000"> 登录 ID: (0x0,0x1D0B52) <br/> 登录类型: 2 </font></p>
8 m" @8 Y; k; W( ?, d, u9 D* V<p><br/><font color="#000000"> 很奇怪吧,因为并没有看到有自己的IP或者机器名被记录下来。而且在登录时纪录的工作站名: ABUSERVER (这不是服务器的名字嘛) </font></p>
/ t% t3 K( g7 `' q<p><font color="#000000"> </font></p>
/ ] ?9 E" o( X* E0 R<p><font color="#000000"> 测试二: </font></p>
% m$ B! t0 A# P, P. J$ g<p><font color="#000000"> 正常登录上服务器以后,选择断开,临时中断当前会话,然后再次使用客户端连接上服务器,在安全日志里出现了以下记录: </font></p>& a4 ~/ N( Y! k0 H" l$ Q' u
<p><font color="#000000"> 会话从 winstation 中断连接: <br/> 用户名: administrator <br/> 域: ABUSERVER <br/> 登录 ID: (0x0,0x1D0B52) <br/> 会话名称: Unknown <br/> 客户端名: ABUPC13 <br/> 客户端地址: 192.168.0.13 </font></p>
3 h2 p! B1 I- {1 ~4 |6 ~# S<p></p>0 I, u# w2 d4 { C
<p><font color="#000000"> 会话被重新连接到 winstation: <br/> 用户名: administrator <br/> 域: ABUSERVER <br/> 登录 ID: (0x0,0x1BE7BA) <br/> 会话名称: RDP-Tcp#7 <br/> 客户端名: ABUPC13 <br/> 客户端地址: 192.168.0.13 </font></p>1 N* a D4 P o9 U
<p></p>
0 |! [6 `( y5 p- T# D( u4 N<p><font color="#000000"> 这次,自己客户机名以及当时的IP都被记录下来了。 </font></p>, q1 q% Y. g6 F
<p><font color="#000000"> 测试三: </font></p>9 Z; s6 P3 W! i
<p><font color="#000000"> 正常连接服务器,输入错误的密码,再输入到第6次(缺省安全配置情况下)终端服务窗口关闭。重新连接登录后,检查日志出现以下纪录: </font></p>- N) A' g6 D9 J9 V% }
<p><font color="#000000"> 在系统日志里:来自客户端名 ABUPC13 的远程会话超出了所允许的失败登录最大次数。强行终止了会话。 </font></p>
$ b6 ~5 u- W) n<p><font color="#000000"> 在安全日志里: </font></p>/ q( F: I3 V7 x- i
<p><font color="#000000"> 登录失败: <br/> 原因: 用户名未知或密码错误 <br/> 用户名: administrator <br/> 域: ABUSERVER <br/> 登录类型: 2 <br/> 登录过程: User32 <br/> 身份验证程序包: Negotiate <br/> 工作站名: ABUSERVER </font></p>
C" D# N$ n! |! z/ e2 Q. Q2 n<p></p>6 Q9 T1 ]1 s, G2 g2 V% U0 d6 [* Z7 M7 E
<p><font color="#000000"> 到这里,我们分析了各种不同环境下登录终端服务器的日志纪录效果。 </font></p>
# @; w4 _" B$ _& N+ K<p><font color="#000000"> 这样看来,是不是清楚了很多?呵呵 </font></p>1 C6 d! M5 o8 j6 r2 [; \
<p><font color="#000000"> 也许有朋友会奇怪为什么在第一个日志记录中,工作站名也是服务器的名称而不是我用来登录的客户机的名称。 </font></p>- l& w, A8 V% q4 I: e6 d
<p><font color="#000000"> 原因是因为在以终端方式登录的时候,系统实际上是以虚拟桌面、本地登录 的方式进行记录,自然没有对真正用户的纪录咯。 </font></p>
4 X7 A* R \5 L ~) J<p><font color="#000000"> </font></p>
8 w' I4 l$ E' Y- z, y<p><font color="#000000"> 所以总结如下: </font></p>
: [6 _! V' g& N4 P" C6 Z# b<p><font color="#000000"> 1、当一个用户以终端方式登录服务器的时候,如果正常退出,服务器上的日志中,将不会记录你的IP,机器名。 </font></p>
- ]0 Y$ F2 H. z, k R5 B3 {/ Q<p><font color="#000000"> 2、当用户以终端方式登录后又发生了中断,这时候系统才会纪录客户机的IP以及机器名。 </font></p>
6 Y0 e7 H' A8 ]) B! H5 Y% x0 K<p><font color="#000000"> 3、当密码输入错误导致连接终止时,在系统日志里会留下客户机的机器名信息。 </font></p>
4 f2 q. a, m, B8 Z<p><font color="#000000"> </font></p>
, q6 S g) [: S" ? j2 d: v<p><font color="#000000"> 呵呵,最后我在罗嗦一些关于被纪录下来的IP地址。 </font></p>6 P, M! k2 L* [3 U/ Z: ~
<p><font color="#000000"> 系统在纪录终端方式的客户机IP地址的时候,如果你的客户机处于一个局域网中,通过透明网关的方式访问服务器,在服务器上留下的IP也只是你内网的IP地址,看来,单纯依靠微软的日志纪录,还是难免会有疏漏的。 </font></p>
. i& ~ |' }0 y<p><font color="#000000"> 解决的方法,这里就不多说了,可以参考shotgun曾经写过的关于《Win2000 Server入侵监测》一文.</font></p></div></div> |