1引言
网站是网络服务开展的基点,是网络系统的最前沿阵地,较易成为被攻击的目标,其安全的重要性不言而喻。许多网站因为多种因素的制约采用了相对简单易用的NT(Windows NT/2000/2003)+IIS(Internet Information Server)的架构,由于各站点的技术力量和管理水平存在较大差距,因此网站的安全性也参差不齐,只有少数的IIS网站具有较高安全性。虽然IIS已默认配置了一套安全控制和管理机制,但仍存在相当多的安全问题,所以有必要进一步对其分析研究,进行更优化、更合理的配置与管理。
2不安全因素
IIS本身存在着许多的先天不足和安全漏洞,虽然较新的IIS版本和补丁改进或修补了已发现的问题,但随着时间的延续和新功能的开发,新漏洞又出现了,新的安全隐患也就产生了。由于NT和IIS的功能越来越复杂,熟悉和掌握需要大量时间和精力,一般人难以合理配置和安全管理。通常情况下,IIS的很多默认状态恰恰是危险所在,其本意或许是为方便用户,但最终有可能导致安全灾难。引发IIS不安全的表现形式和影响因素主要有:
Unicode漏洞。Unicode安全问题存在于许多系统中,当IIS对含有Unicode的字符进行解码时,如果遇到特定编码,将导致错误或非法操作。如:NT中对“\”“/”区分不是很严格,这和Unix仅支持“/”是不同的,攻击者可以利用这点进行目录浏览或非法控制。对Unicode的解码由系统内核完成,但现在众多的Unicode漏洞补丁并没有真正从根本上把问题解决,而只是简单过滤了一些危险的字符编码,所以IIS的Unicode安全隐患依然存在。
应用程序映射问题。在IIS的许多应用程序映射中存在着相当严重的安全问题,如源代码泄露、缓冲区溢出、DoS拒绝服务、非法执行脚本等基本上都是由此而引发的。这是许多IIS网站不安全的根源所在。
ISAPI缓冲溢出漏洞。如.htr、.printer等映射中就存在此问题。攻击者可得到主机的本地访问权限,如果使用随机数据,可使IIS服务崩溃或主机自动重启,如果精心构造攻击数据,可使攻击者得到系统管理员的权限。红色代码(Code Red)病毒就成功地利用了IIS组件Index Server的此漏洞进行了广泛传播和攻击。
IIS RDS(远程数据服务)漏洞。RDS是MDAC的组件,具有msadc虚拟目录的IIS 4系统最易受到攻击,这可导致非法用户访问ODBC数据库、访问受限制文件或远程执行命令。
HTTP非标准数据问题。攻击者发送大量的特殊畸形的HTTP请求头数据包,可导致服务器消耗系统的所有内存,只有服务终止或主机重启,IIS才能恢复正常。
IIS验证漏洞。这可导致泄露系统信息及帐号被远程暴力破解。如果服务器支持基本认证,攻击者通过将Host头域置空,Web服务器将会返回包含其内部地址的信息;如果服务器支持NTLM认证,攻击者可获取服务器的NetBIOS名称以及所属域的信息。
设备文件问题。NT为了兼容,支持诸如“PRN”、“CON”等设备文件名,虽然与9x相比已做了一些安全防范,但是很多程序还是存在问题,IIS在某些特殊情况下会受其影响导致拒绝服务。例如:当在ASP程序中使用FSO对象打开或读取设备文件时将导致服务停止响应。
系统设计错误。NT系统中有很多设计错误。如帐号锁定和IIS的安全之间就有冲突,一旦启用帐号锁定策略,即可对IUSER_和IWAM_这两个帐号进行锁定穷举,此时,任何人都将无法访问IIS,这样破坏者就很轻易地实现了IIS的拒绝服务攻击。
应用程序问题。网站的应用程序承担和实现了具体的网络服务和功能,但由于编程水平不一,因而应用程序安全性差别很大,这也极易造成对IIS的攻击。常见的应用程序安全问题包括:未检查客户端数据输入,容错能力差;未考虑可能发生的错误,导致服务意外中止;数据库连接源泄露;应用环境假设错误;引用处理模块不当等。
主观人为因素。指网站的设计者、管理者和使用者的意识、素质、道德、责任心、技术等主观方面对此的影响。主要表现在:安全意识淡薄、重视不足,偏重强调性能,而忽视安全;敬业精神不够、责任心不强、注意力松散;设定配置错误或操作不当;投入不足,普遍存在只重视硬件投入而忽视配套安全软环境建设的现象;对此缺乏全面深入研究,没有制定相应对策,许多网站没有整体上进行风险评估和安全论证;管理不力、责任不明、执行不严;教育学习力度不够、队伍建设滞后,有相当比例的站点管理和技术人员对此缺少足够的培训,缺乏处理突发事件能力;技术手段落后,许多站点由于经费等原因没有使用相应的防范设备和工具;与此相关的一些工作没有做好做细,如制定应急计划、系统备份恢复、漏洞持续修补等,出现问题时,往往是束手无策。
3安全解决方案
3.1安装
安全应该从安装时就开始构建,但这往往被许多网管所忽视。安装IIS时需注意:
NTFS格式和分区选择。主机的所有分区最好是NTFS格式,因为NTFS安全性更高,可对不同的文件和目录设置不同的访问权限,即使其他分区采用FAT格式,但至少IIS所在分区应是NTFS。建议将IIS安装到非系统分区上,IIS普遍存在源码泄漏与缓冲溢出的漏洞,如果NT系统和IIS在同一分区可能会导致重要信息泄漏、系统权限被远程获取等问题。
安装目录选择。IIS的安装目录建议不要使用默认的\Inetpub,应在系统分区之外的单独分区上新建一个名称复杂的安装目录,这样可减少很多默认情况下的攻击。
根据需要安装相应服务。根据安全原则,最大的安全=最少的服务+最小的权限,所以应尽量不安装与站点网络服务无关的内容。IIS的众多安全隐患是由于一些不常用的功能和不完善的服务引起的,如果仅是建立一个单纯的Web站点,就只安装WWW服务器即可,这可减少受到攻击的机会。典型的Web服务需要的最少组件选择是:只安装Internet服务管理器、WWW服务器、公用文件即可。如果确实需要安装其他组件,应慎重选择,特别是FrontPage服务器扩展、Internet服务管理器(HTML)、示例文档等,HTML远程管理的端口虽是随机的,但很容易被扫描到,从而留下隐患,事实证明示例文档中存在大量安全问题。FTP建议不装,IIS的FTP功能并不强,易出错,且漏洞较多,其传输密码时缺省为明文,易被截获,如确需FTP,可考虑采用第三方工具。SMTP邮件服务缺少必要和有效的身份验证机制,也不宜安装。
安装系统安全补丁。这些补丁中有许多是针对IIS的,IIS的HotFix安装时会停止IIS服务并有可能更改其配置。打补丁应是安装的最后一步,因为补丁往往要替换或修改某些重要的系统文件,如先安装补丁有可能导致起不到应有的作用。需注意:应按照补丁的逻辑顺序来安装,错误的次序可能会导致发生错误;在NT 4中安装补丁后,如果以后再从NT安装盘上安装新程序,需要重打补丁;2000系统可以直接访问http://v4.windowsupdate.microsoft.com实现对所有补丁的自动检测和更新。
3.2配置
IIS安全配置与操作系统密切相关,合理配置是保证IIS安全的重要环节。
帐号策略。用来维护管理的帐号,应尽可能少,帐号越多,被攻击的危险就越大;帐号权限应严格控制,掌握好权力均衡,不轻易给过多的特殊权限;管理帐号应改名为不易猜到的名字,这可为攻击增加一层障碍;系统的Guest、TsInternetUser帐号应禁用,并将其改为复杂的名字、增加密码、从Guests组删除,以防被黑客利用;帐号密码应提高安全性并加强管理,密码是安全认证的关键,应引起足够重视,很多入侵是因为密码出了问题而造成的。密码长度应至少8位以上,尽量使用不规则的、低频使用字符进行复杂组合,不要选取显而易见的信息(如生日、纪念日、姓名、单词等)作为密码,密码应时常更新和修改。在监控审核时如发现某帐号被连续尝试,应立即更改此帐号的名称和密码,并在帐号属性中设置锁定次数,以防被暴力破解。
访问权限。为了控制用户权限和预防今后可能的入侵,必须设置好目录和文件的访问权限,NTFS下所有文件默认对everyone完全控制,建议根据应用需要进行重设,普通用户只给予读取、列表权限,不给予完全控制、修改、写入等权限。应注意:权限是累计的,如果一个用户同时属于两个组,那么该用户就拥有了这两个组所允许的所有权限;拒绝权限优先于允许权限、文件权限优先于目录权限,应谨慎设置;多利用组策略来进行权限控制;给用户真正需要的权限,权限最小化是安全的重要保障。
端口开放。端口是主机与外部网络连接的逻辑接口,端口配置正确与否直接影响到IIS主机的安全。缺省情况下,主机的所有端口是对外开放的,黑客会加以利用并进行入侵,这对安全是一个严重威胁,所以只应开放必要的端口,其余不用的端口应关闭。
远程控制。如果不进行网站的远程管理,应关闭远程终端服务、关闭危险的NetBIOS,并删除系统默认的所有共享,包括打印共享和隐藏的ICP$、Admin$等共享,因为这些都是潜在的入侵口。
应用程序映射。大部分的攻击都是由于不安全或是有错误的映射导致的,.idc、.ida、.htr、.htw、.shtml、.shtm等默认的映射存在着大量的安全隐患,应予以删除;在保留使用的映射中应设置选择“检查文件是否存在”。需注意的是:在安装某些新的IIS补丁后,有些映射会重新出现,此时应进行重置,但这往往是许多网管较易忽视的地方。
虚拟目录。Web站点中如果存在scripts、iissamples、iishelp、msadc、printer等默认虚拟目录应全部删除,因为IIS的许多漏洞与此相关。
自定义错误信息。在IIS中应将HTTP 404 Not Found等出错消息通过URL重定向到定制页面,这既增强了用户界面的友好性,又可以使目前的大多数CGI漏洞扫描失效。因为大多数的此类扫描只是通过查看返回的HTTP代码来判断漏洞是否存在。
验证控制。如果用户访问服务器不需特殊认证,建议关闭IIS的基本验证和集成Windows验证。
FTP匿名访问。FTP服务的匿名访问有可能被利用来获取更多的信息,以致造成危害,应禁止。
关闭不用服务。服务开得越多,隐患也就越多,应将不必要或暂时不用的服务停止,如SMTP等。
在必要的情况下启用IIS提供的SSL安全通信机制来防止数据在网上被截取。
3.3管理
分开放置。有条件的站点应将数据与Web服务分开放置在不同的主机上,数据可存储在专用主机上,由Web服务执行相应机制从数据主机中提取,即Web在前台,数据在后台,这可很大程度上防止危险事件的发生和降低受危害的程度。
监测审核。应记录、分析、跟踪和审核用户使用网站的过程,定期检查敏感区域和数据,搜索积累有关的日志信息进行分析研究,有重点地进行跟踪审查,以期发现潜在的危险或为已发生的事件提供有力的证据。IIS自带的日志从某种程度上可以成为入侵监测的工具。为了不过多影响响应速度,IIS日志建议选用W3C格式记录,用ODBC记录虽然更易于分析,但流量大时,网站性能会受很大影响。IIS日志信息量很大,需借助专门软件来进行分析,也可自己编程实现。通过对IIS日志的提取和分析,可察觉有不良意图的访问、了解窥探和攻击者行踪,以便及时做出反应。但IIS日志并不是万能的,它在某些特殊情况下会忽略记录一些入侵,此外,攻击者也可能从Telnet等其他服务侵入,因此,建立一套完整的监测审核机制是相当重要的。系统默认安装时安全审核是关闭的,可通过本地安全策略将其打开,由安全日志详细记录用户登录、特权操作等信息;此外,系统日志和应用程序日志也是很好的辅助工具;对于关键的重要目录和文件(system32目录、cmd.exe文件等)也应加强访问记录,这样,即使攻击者入侵了也很难不留下踪迹。在日志审核时,如发现问题,应及时预防和解决,不能得过且过。需注意:日志记录应只选择必要的项目,项目太多,信息量就大,反而不利于分析,并加重了系统负荷,项目太少,又达不到预期的安全效果;不过分相信日志,高明的入侵者有可能对其进行加工修改;日志文件不要存放在默认目录下,并设置好访问权限。
备份恢复。这项工作非常重要,这是网络安全的最后阵地。站点的核心是数据和信息,一旦遭到破坏后果不堪设想。大部分站点的备份工作开展得不错,但仍存在不少问题:如备份不完全及时、备份不做有效测试、备份无计划安排、备份不异地存放等。完整的备份应包括安全配置、资料数据、用户信息等多个方面,并随着网站的更新,而不断地及时调整。有条件的站点可安装相应的监控恢复工具,对于Web服务,可配置主页的自动恢复机制,即如果主页被非法纂改,系统能自动识别并将其恢复至事先设定的页面。
访问控制。对于WWW服务,可以拒绝一些有攻击意图的IP地址或域进行访问;对于目录和文件,应根据具体的应用服务需要,有针对性在管理时恰当分配脚本、写入、浏览、执行的权限;对于FTP服务,如果只是管理使用,应限定登录的IP地址,从而提高其安全性。建议在更改访问控制前做好测试,以防服务意外中止或出现新的安全问题。
内部管理。网络攻击更多的来自于内部,在我国立案可查的网络安全事件中,大部分是由于内部管理不善造成的,所以应加强内部的管理,完备和严格执行规章制度。网管不要将主机用于个人用途,应尽量少用主机浏览器来浏览网页、收发邮件,避免因此而感染病毒、木马或暴露信息。
防治结合。要树立起防患于未然的意识,将不安全的因素解决在未发生之前。这是一项长期的工作,要建立起风险论证的机制,分析可能存在的薄弱环节,通过定期安全扫描等技术手段,及早发现存在问题,采取措施;在此基础上应制定出切实可行的安全策略,构建合适的安全结构、确定管理的范围和方法、规划好访问控制的等级权限。正确的规划来自于对现实条件和实际需求的理性分析,既不是贪大求全,也不是仅为一时之需而凑合,应坚持安全第一的原则,宁可牺牲一定性能,也要保证足够安全。防范的多重性和整体性也很重要,只有互为补充的各个防卫层次和手段才能共同构成一个有机整体。此外,使用更多先进可靠的技术手段来加强安全性是必不可少的,安装IIS的防火墙、IIS的增强工具等就可以很大程度上减少受到攻击的可能。
补丁更新。站点的管理员应随时关注最新的漏洞和安全信息、查看有关的补丁公告,及时打上相应补丁,这是维护安全最简单也是最有效的方法。但安全不是绝对的,补丁是在漏洞发现之后才有的,完全信任补丁和防火墙等技术手段是不可取的,许多网管认为系统升级不会出问题,但事实上,在补丁更新时常常对其中共享的组件也进行了升级,某些程序有可能不支持升级后的组件从而导致各种安全问题,所以安装不确定的补丁前应在其他机器上做好测试。
3.4应用服务程序
目前,大多数在IIS中运行的ASP、PHP、CGI等应用服务程序存在着这样或那样的安全问题,所以在编写和管理应用服务程序时,应引起足够重视,以便IIS和操作系统进行安全控制。
编程与管理时应尽量将众多的文件进行目录归类;减少用户名和密码在程序中出现的频率,涉及重要信息的程序最好封装在服务器端;对于重要的程序页面应进行访问者来源跟踪验证,只有从合法路径传来的请求才能继续执行;应注意程序的备份文件问题,因为某些编辑器会自动备份修改过的程序文件,这些备份文件有可能被攻击者猜测到并被非法下载;对于程序运行时可能发生的错误和意外要有充分认识,并做出相应的容错处理。
用户数据输入时,应屏蔽HTML、javascript、VBScript等语法和特殊字符,通常情况下可限定用户只允许输入字母与数字,并限制输入的字符长度;对输入合法性的检查不应只在客户端进行,也应同时在服务器端进行。
数据库连接部分更应加强安全性,数据调用方法不要直接出现在程序中,建议在ODBC中设置数据源,再在程序中调用数据源;数据库访问一般情况下只给用户读取存储的权限,不直接给用户修改删除的权限;数据库名应使用无规则字符进行复杂组合,并注意存放位置;必要时可对数据库进行编码和加密,以防数据库被直接下载查看,从而导致重大安全事件的发生。
4结束语
IIS的安全配置与管理不仅仅是一个技术问题,人的因素也相当重要,因为最终是人在执行各项设定和控制,为此,树立良好的安全意识、加强各方面的投入、加强培训学习等是非常重要的,只有从基础做起、从细处做起,才能有效地保障安全。
安全是一项系统工程,不仅有空间跨度,还有时间跨度,进行了安全配置与管理的IIS系统并不是绝对安全的,只能说是在一定的情况下、一定的时间里是安全的,随着持续地发展,其安全状况也在发生着相应的变化,只有让安全意识、安全技术和安全管理贯穿整个过程才能做到最大程度上的安全。