你是否曾经有过这样的感觉,你的Web站点安全曾经受到威胁,但你又不能确定?诚然,你可以紧跟补丁的速度,你可以保证所有的ACL(访问控制列表)都进行了正确的设置,但是现在每周都有许多新的攻击出现,还有许多攻击没有被公开,在这种情况下,如何才能确信你受到了保护?有些攻击者会让你明白你受到了黑客袭击,但是也确有一些人来去都不让你知道,但你会感觉到不对劲,怀疑自己受到了攻击,这种情况更加危险。
如何才能判断自己的安全是否受到了威胁?本文通过模拟实例来介绍一些在入侵发生时进行检测的技术,以及一些自我保护策略。有许多第三方应用程序能帮助我们实现入侵检测目的,但在这里我将演示使用Windows 2000的内置程序执行入侵检测。其实,最重要的是通过分析攻击者的行为方式,了解哪些技术对发现攻击最有效。
假设入侵行为1及应对措施
现在假设出于某种原因我决定要侵入你的网络。我将从哪里开始呢?首先,我要尽可能地收集你的网络信息,这可以通过一系列程序完成,如whois、dig、nslookup、tracert,还可以使用一些在Internet上公开的信息。假设通过这些操作,我发现你的网络中有一小部分没有被防火墙所保护。然后,通过执行端口扫描,我注意到有许多机器的135、139、389和445端口都是开放的。
445端口是Win2K的一个致命后门。在Win2K中,SMB(Server Message Block,用于文件和打印共享服务)除了基于NBT(NetBIOS over TCP/IP,使用端口137, UDP端口138 和TCP端口139来实现基于TCP/IP的NETBIOS网际互联)的实现,还有直接通过445端口实现。如果win2000服务器允许NBT, 那么UDP端口137, 138, TCP 端口 139, 445将开放。如果 NBT 被禁止, 那么只有445端口开放。445端口的使用方式有以下2种:
# 当Win2K在允许NBT情况下作为客户端连接SMB服务器时,它会同时尝试连接139和445端口,如果445端口有响应,那么就发送TCP RST包给139端口断开连接,以455端口通讯来继续;当445端口无响应时,才使用139端口。
# 当Win2K在禁止NBT情况下作为客户端来连接SMB服务器时,那么它只会尝试连接445端口,如果无响应,那么连接失败。
现在继续我的发现假设。我还注意到许多机器的端口80和443也是开放的,这可能是一个IIS 5 Web服务器。
Ok,我做了以上的窥视工作,你能检测到我的活动吗?下面来分析一下。首先,发生了端口扫描,在扫描的过程中,你应该注意到网络的通信量有一个突然的增加。端口扫描通常表现为持续数分钟的稳定的通信量增加,时间的长短闰:
这样,随着所有信息进出网络,将会有一个图标点亮在任务栏中一闪一闪:
方法三
如果怀疑自己受到扫描,还可以使用一个内置的命令行工具netstat。键入以下命令:
Netstat -p tcp -n
如果目前正在被扫描,根据扫描所使用的工具,就会得到以下类似结果:
Active Connections
Proto Local Address Foreign Address State
TCP 127.13.18.201:2572 127.199.34.42:135 TIME_WAIT
TCP 127.13.18.201:2984 127.199.34.42:1027 TIME_WAIT
TCP 127.13.18.201:3106 127.199.34.42:1444 SYN_SENT
TCP 127.13.18.201:3107 127.199.34.42:1445 SYN_SENT
TCP 127.13.18.201:3108 127.199.34.42:1446 SYN_SENT
TCP 127.13.18.201:3109 127.199.34.42:1447 SYN_SENT
TCP 127.13.18.201:3110 127.199.34.42:1448 SYN_SENT
TCP 127.13.18.201:3111 127.199.34.42:1449 SYN_SENT
TCP 127.13.18.201:3112 127.199.34.42:1450 SYN_SENT
TCP 127.13.18.201:3113 127.199.34.42:1451 SYN_SENT
TCP 127.13.18.201:3114 127.199.34.42:1452 SYN_SENT
以上信息中,我们要重点注意在本地和外部地址上的连续端口以及大量的SYN_SENT信息。有些扫描工具还会显示ESTABLISHED或TIME_WAIT信息。总之,信息的关键在于连续的端口序列和来自同一主机的大量连接。
假设入侵行为2及应对措施
再回到假设的环境中来。在发现了一些机器没有被防火墙保护以及扫描到一些开放端口后,现在有几条路摆在我面前。其一是寻找你的网络中的弱点。Windows网络口令用于使用Web服务器上的Web服务,这些网络登录信息对我来说是最有用的,因此我决定朝这个方向试一试。首先从一个机器下载帐号名列表,从中选出一个很少使用的,例如guest帐号。我用这个帐号尝试多次登录直到它被锁住,这样我就能推测设置的是什么帐号锁住策略了。然后我编写一个脚本对每个帐号都尝试多次登录,但不触发锁住条件。当然,管理员帐号一般是不会被锁住的。我启动脚本,并运行Whisker扫描器程序,它使用我为IIS服务器编写的一个脚本,来试探公共代理服务器信息。现在,可以坐等结果了。
在我的上述探测过程中,你那端应该从一些关键入侵检测记数器指标中接收到许多警报信息。第一个应该是Web Service-Connection Attempts/sec:
这个指标能显示出Web信息量的突然增加。
另一个非常重要的记数器是Web Service-Not Found Errors/sec:
由于类似于Whisker 的Web 扫描器要检查指定URL的存在,因此以上性能记数器就会显示出通信量的急剧增长和404 错误信息。因此,可以预先设定通信量的正常水平,然后一旦有针对你的扫描行为时,就会发出警报。
与此同时,在你的网络上也会有穷举法攻击(brute-force attack)。在这种情况下,能够帮助你的两个性能记数器分别是Server-Logon/sec和Server-Errors Logon:
对每秒两个以上的登录和五个以上的登录错误设置警报,这样就能知道是否有穷举攻击正在发生。同时,对安全事件日志进行检查,就能验证出大量的失败登录是否来自同一个计算机。
假设入侵行为3及应对措施
继续回到假设的环境中。现在,我的探测脚本已经结束运行,我发现你的网络中一台计算机的系统管理员口令为空,这表明该系统刚刚安装不久,还没有来得及进行保护。我用管理员帐号和空口令连接到那个机器上,将要做的第一件事就是上传一些木马类程序和运行状况检测程序,例如nc.exe、lsadump2.exe、tlist.exe以及一些扫描脚本。当然,你的系统上已经内置了我所需要的其它工具,如nbtstat.exe。我启动服务器的定时服务,设定nc.exe在一分钟后运行,并将cmd.exe重新定向到一个端口,如1234。一分钟后,我使用nc.exe从本地连接到远程计算机进入命令行状态,运行tlist.exe得到了当前程序列表,运行lsadump2.exe来查看存储的口令,或者浏览硬盘,得到想要的内容。
现在看看你能对以上攻击有何察觉以及能够采取的措施。打开任务管理器,你会注意到cmd.exe,它有一个很高的程序ID值;你还会注意到定时服务正在运行;你查看C:\Winnt\SchedLgU.txt,注意到就在刚才有一个nc.exe程序的内容,在任务列表中也同样有一个;使用Explorer的查找功能,你可以寻找最后一天中生成的所有文件,这不奇怪,你会在System32目录中发现许多新的可执行文件,包括nc.exe。你试图结束命令行操作,但是却未被允许,这时就可以断定发生了一个侵入行为,马上可以开始收集证据了。现在关闭计算机告诫攻击者已经被发现,因为你不想留给他进行实际攻击的时间。事件日志显示失败的登录尝试,在最后也会将成功的登录显示出来。但是,事件日志中的条目没有显示另一端计算机的IP地址,只是显示了计算机的名字。为了确定其IP地址,可以键入以下命令:
netstat -a –n
从显示信息中找到与本地 TCP端口139、UDP端口137以及端口445处于连接状态的IP地址信息。将输出保存在一个文件中,然后使用nbtstat程序在那个IP地址上执行一个名字查找:
nbtstat -A
在netstat 的输出中,你还应该能注意到一个与TCP端口1234的连接,这属于nc进程。你可能还会注意到许多与网络上其它计算机的 UDP 137 和138的连接。
假设入侵行为4及应对措施
再次回到假设的环境中。我还通过nc的远程命令行对你的内部网络中其它计算机进行了扫描,发现在一台名叫FILESERVER的计算机上有一个共享目录PUBLIC。我将这个共享进行映射,并开始嗅探工作。由于你的网络中其它计算机存在NetBIOS连接,因此你怀疑这个计算机会被利用并危及内部网络的安全。在命令行中键入以下命令:
net view
你可以从输出中观察到对内部文件服务器的驱动器映射情况。
在对你的硬盘浏览了一会儿之后,我再次运行tlist.exe,注意到现在屏幕保护程序不再运行了,并且打开了一个命令行窗口。我还不能肯定你是否发现了我,于是赶快对注册表的某些项目进行修改,以使计算机启动时再次运行netcat,最后断开连接。等了大约10分钟,我再次ping这个计算机,得到了一个请求超时应答。显然,你已经发现了我,于是我与“借来的”帐号说声白白。
小结:入侵检测跟踪信息6部分
以上这些入侵行为都是虚构的,并且有点简单,但是它展示了一个基于网络的攻击的许多要素,以及如何检测出这样的攻击。理论上而言,只要你坚持跟踪以下信息,那么几乎所有基于网络的攻击都能被检测出来:
# 网络上拥挤程度和网络连接
# Web拥挤程度和“pages not found”错误的发生次数
# 成功及失败的登录尝试
# 对文件系统所做的改变
# 当前运行的应用程序和服务
# 定时运行的应用程序或在启动时运行的应用程序
通过对这些内容进行跟踪,不需要任何外来的入侵检测软件就能阻止许多破坏企图。当然,其它应用程序也会很有帮助,但管理员必须时刻牢记以上六条。
结 语
本文描述的场景是在管理员在场的时候发生的一个攻击,而在真实生活中,一天24小时中可能发生许多次攻击。有些只是简单的端口扫描,而有些则是对网络的全面威胁。不管是哪种攻击,都不应该漠然坐视而不采取行动。通过本文介绍的应对措施,我们完全可以建立一个对自己网络有用的入侵检测系统:我们可以通过Email或者页面的方式发送警报信息,也可以使用定时服务来定时将当前运行的所有程序或网络连接写入日志文件。就是说,编写一些脚本程序,并借助定时服务以及少量的免费软件工具,我们就可以建立一个实用的入侵检测系统,其性能可能比市场上的许多入侵检测软件都要好得多。发现入侵者的关键不在于有多少强有力的软件,最重要的是要了解入侵者是如何行动的,并且比他们抢先一步。