Win NT/2000网络操作系统在内核和安全方面的设计很好,但从第一版到现在毕竟不到十年时间,不像Unix已经过了几十年的完善,因此,还存在一些安全隐患。
1. SAM数据库无效时,任何人可用超级用户登录Win NT/2000
SAM,即安全账号管理数据库(Security Accounts Management Database),它是Win NT/2000操作系统的核心,其中存放了本地机和操作系统所控制域的组帐号及用户帐号信息。SAM中的开始存放了域中各组的描述信息和权限信息,接下来的部分存放了域用户的描述信息和加密后的密码数据等。超级用户Administrator的密码存放在SAM 文件中最后一?quot;Administrator"字串之后。SAM这个文件位于winnt/system32/config目录下,它在系统运行时受操作系统保护,即使是超级用户也无法直接打开,只能通过"域用户管理器"来操作。但还是有办法访问SAM,如果本机不定期存在另一个操作系统,且另一个系统可以访问Win NT/2000系统文件的所在的分区的话。这时候,SAM的安全总是就暴露出来了:任何人只要把SAM文件删除或移动到另一个目录,然后再重新启动系统,在登录时使用"Administrator"帐号,用户密码为空,然后确认,便能以超级用户成功登录系统。
消除这一安全隐患的一种办法是在一台计算机中只安装一种操作系统,而且把Win NT/2000的启动分区和要存放操作系统文件的分区格式化为NTFS或NTFS5。另一种方法是在CMOS中设置开机密码。
造成Win NT/2000这一安全隐患的原因是用户帐号太集中,都存放在SAM文件中。SAM一旦被人为改动,系统将在启动时报告错误并重新启动,实际是崩溃了。SAM文件一旦丢失,系统没有校验和恢复SAM文件的能力。
在Win NT SP3以后的版本中,winnt/system32目录下有一个公开发行资料很少提到的可执行文件syskey.exe,它是作为一个NT补丁程序加进去的。它的主要作用是设置开机密码,并将SAM中用户密码的加密键扩展为128位。用syskey.exe设置开机密码后,系统会在进行用户认证之前要求企图登录的人输入开机密码。如果没有开机密码,即使企图登录者有超级用户密码,系统也无法启动。但在采用上述使SAM"丢失"的办法后,开机密码设置也将失效。
SAM的另一个安全问题在于,某人只须有域中Replicator (支持域中的文凭复制)组成员的权限,就可以利用Windows提供的隐藏共享功能从网络访问域服务器的目录,这时可以访问winnt/repair目录获得SAM,然后根据SAM中的用户密码,猜解得到用户密码。
2. 对远程多次登录失败的处理,存在安全隐患
在Win NT/2000的默认设置下,一个用户登录失败后可以继续重新登录,而且对重新登录的次数没有限制,这样,攻击者可以采用穷举密码和字典攻击的方式来猜解更高权限用户的密码乃至超级用户密码。在10M/100M以太局域网络中,以错误密码登录Win NT 4 Server,大约0.7秒后可以获得登录失败的信息及重新登录。如果是登录Win 2000则所用时间更少。比如用Win NT工作站穷举,工作站的线程时间片是Server1/6,以此速度,6个字符的密码,20分钟一定能获得密码。如果Win NT/2000某用户的密码在这个密码集合中,别人在一台工作站上,几天内一定能够取得密码。
通过Win NT的域用户管理器中的账号规则设置可以实现用户帐号锁定功能。这个功能的作用是某个用户在限定的次数内仍无法提供正确的登录密码,Win NT将自动锁定这个账号,不允许以此账号登录。这个功能无疑是针对穷举密码攻击而设计的。但这个设计本身有两个安全隐患:一是当用"Administrator"登录时,即使登录失败的次数超过了"账号规则"中限定的次数,这个账号仍然不锁定,二是当某个账号锁定时,Win NT/2000将不接受来自任何工作站的用这个账号登录的请求,即使某个工作站提供了正确的登录密码。这时,不难理解为什么超级用户的账号不会锁定,因为,如果允许锁定,系统管理员将无法以超级用户登录进管理服务器,而只能去拔网线了!
在Unix/Linux中,对于多次登录失败的处理是断开与对方的连接,在重新连接后仍然可以登录。这样虽然避免了帐号锁定产生的安全隐患,但密码穷举还是可以进行的,只是速度慢了而已。可见两类系统在解决这个问题上各有不足。
这个问题的解决可以考虑这种方法,在服务器中维护一个表,这个表记录了超过限定登录失败次数计算机的IP地址或其他标识。服务器建立连接时查询这个表,不与表中的计算机建立连接。
3.网络设备硬件中断的安全问题
事实上,计算机硬件方面也存在着安全隐患。隐患之一是现代操作系统的设计中,硬件中断优先级高于软件优先级,包括操作系统内核最重要的高度程序。现以Win NT/2000网络设备的中断来说明问题。
Win NT/2000的中断优先级从高到低依次为:(1)高级,即系统停机程序;(2)电源级,即电源故障或关闭电源程序:(3)处理器级,即处理器间通信;(4)时钟级;(5)设备级,x86支持256个设备中断;(6)高度/DPX级,即线程高度和延迟过程调节器(DPC);(7)异步过程调用(APC)级;(8)32个线程优先级要高于操作系统各种线程的优先级。因为网络设备是可以通过网络远程访问的,这个安全总是也就暴露出来了:如果攻击者通过网络以足够的频率向服务器网络设备发送数据帧,那么服务器的处理器将穷于应付网络设备的中断而无暇去响应操作系统各个线程的软件中断,也没有机会来高度线程和资源。尽管Win NT提供了时间片、优先级自动衰减/提高等机制来保证各个过程有机会占用处理器,但这个机制只对线程调度起作用,对硬件中断则不起作用。因此,频繁的硬件中断可使操作系统运行的速度慢到使人无法忍受,甚至使操作系统"停止运行"。
这种可能性已经在局域网得到了验证。普通个人计算机通过不断地发送数据帧,可使安装有Win 2000操作系统的服务器推动应用软件及用户的响应。
能够利用这一安全隐患的人,要对网络协议栈底层的实现有足够的了解,需要跳过网络协议中间的各层,在网络协议层中的链路层直接构造自己的数据帧。这类攻击与DoS攻击是有区别的:这种攻击需要在数据链路层实现,因此只能在物理上相连的相邻节点间使用,不能跨过路由器,但这种攻击是无法过滤的;而典型的DoS攻击如SYN Flooding是在TCP/IP协议层中的TCP层实现的,可以跨过网络中的中间节点(如路由器)进行攻击,但也可以被中间节点在IP层过滤。
这一安全隐患的危害性较大,因为它具有不可屏蔽性、不可跟踪性。不可屏蔽性是指这类攻击的数据帧在网络设备的链路层已被处理,无法采用过滤构件来防范,不可跟踪性是指无法通过日志的方式记录攻击者,因为数据帧不是协议栈产生的,是人为构造的。这一安全隐患的解决办法是提高网络设备的数据处理能力和独立能力,使它在工作时不必过多依赖服务器CPU。这样,当网络设备受到攻击时,它不能给服务器CPU造成过重的负担。