移动安全 安全管理 应用案例 网络威胁 系统安全 应用安全数据安全 云安全
当前位置: 主页 > 信息安全 > 数据安全 >

打好WEB服务器系统安全攻坚战

时间:2011-05-03 15:16来源: 点击:
我们若只是站在WEB管理员的角度上考虑问题,可能就发现不了的漏洞。相反,我们此时若能够换个角度,把自己当作可能的攻击者,从他们的角色出发,想想他们可能会利用那些手段。
Tags服务器(140)Web(532)安全(476)Web安全(115)  

  一、 转换角色,把自己当作可能的攻击者

  大部分时候,我们若只是站在WEB管理员的角度上考虑问题,可能就发现不了的漏洞。相反,我们此时若能够换个角度,把自己当作可能的攻击者,从他们的角色出发,想想他们可能会利用那些手段、哪些WEB的漏洞进行攻击,或许,我们就可以发现WEB服务器可能存在的安全漏洞,从而早先一步,修补安全漏洞,防止被或者攻击。

  从公司外面访问自己的WEB服务器,进行完正的检测,然后模拟攻击自己的网站,看看,会有什么样的结果。这对于WEB的安全性来说,可能是一种很好的方法。如我们可以假当攻击者,利用扫描工具,对WEB服务器进行扫描,看看有否存在可以被攻击的服务。有些东西我们平时可能不会引起我们重视,但是,利用常用的工具进行扫描,就会发现一些可能会被他们利用的服务或者漏洞。如在服务器安装的时候,会默认的安装并启动一些不需要的服务;或者在的时候,需要启动一些服务,但是事后没有及时的关闭,从而给了不法攻击者一个攻击的机会。最常见的如SNMP服务,又称简单网络管理协议。这个服务在系统安装完毕后,默认情况下是开启的。但是,这个服务可以为攻击者提供的详细信息,如WEB服务器是采用了什么操作系统,在服务器上开启了什么服务与对应的端口等等宝贵的信息。攻击者只有了解这些最基本的信息之后,才能够开展攻击。

  我们安全管理人员,在平时的时候可能不会发现这个问题,但是,若能够利用黑客的扫描工具一扫描,就能够发现问题的所在。故笔者认为在必要的时候,需要换个角度,从攻击的角色出发,考虑他们会采用什么样的攻击方法。如此的话,我们才可以避免“当局者迷”的错误,保障WEB服务器的安全。

  二、 合理的权限管理

  有时候,在一台服务器上,不仅运行了WEB服务器,而且还会运行其他的诸如之类的网络服务。在同一台服务器上应用多种网络服务的话,很可能造成服务之间的相互感染。也就是说,攻击者只要攻击一种服务,就可以利用相关的技术,攻陷另一种应用。因为攻击者之需要攻破其中一种服务,就可以利用这个服务平台,从内部攻击其他服务。而一般来说,从企业内容进行攻击,要比企业外部进行攻击方便的多。

  那或许有人会说,那不同服务采用不同服务器就可以了。其实,这对于企业来说,可能是种浪费。因为从性能上讲,现在的服务器上同时部署WEB服务与服务的话,是完全可行的,性能不会受到影响。为此,企业从成本考虑,会采取一个服务器。而现在给我们安全管理员出了一个难题,就是在两种、甚至两种以上的服务同时部署在一台服务器上,如何保障他们的安全,防止他们彼此相互之间感染呢?

  笔者现在就遇到这个问题。笔者现在的WEB服务器上运行着三种服务。一个是传统等WEB服务;二是FTP服务;三是(办公)服务,因为该服务是WEB模式的,上也可以直接访问OA服务器,所以也就把它部署在这台服务器上。由于这台服务器的配置还是比较高的,所以,运行这三个服务来说,没有多少的困难,性能不会有所影响。现在的问题是,如何来保障他们的安全,FTP服务器、OA服务器与WEB服务器之间安全上不会相互影响呢?

  我现在采用的是Windows2003服务器,为了实现这个安全需求,把服务器中所有的硬盘都转换为NTFS分区。一般来说,NTFS分区比FAT分区安全性要高的多。利用NTFS分区自带的功能,合理为他们分配相关的权限。如为这个三个服务器配置不同的管理员帐户,而不同的帐户又只能对特定的分区与目录进行访问。如此的话,即使某个管理员帐户泄露,则他们也只能够访问某个服务的空间,而不能访问其他服务的。如把WEB服务装载分区D,而把FTP服务放在分区E。若FTP的帐户泄露,被攻击利用;但是,因为FTP帐户没有对分区D具有读写的权利,所以,其不会对WEB服务器上的内容进行任何的读写操作。这就可以保障,其即时攻陷FTP服务器后,也不会对WEB服务器产生不良的影响。

  虽然说的操作系统价格昂贵,而安全漏洞又比较多,但是,其NTFS分区上的成就表现还是不差的。在NTFS分区上,可以实现很大程度的安全管理,保障相关服务于数据的安全性。所以最后还是采用了微软的2003操作系统作为服务器系统,而没有采用系统。

  三:脚本安全管理

  根据以往经验,其实很多WEB服务器因为被攻击而瘫痪,都是由于不良的脚本所造成的。特别是,攻击者非常喜欢利用CGI程序或者PHP脚本,利用他们的脚本或者程序漏洞,进行攻击。

  如我们的网站就遇到个几次攻击,他们利用CGI程序的漏洞,让外部攻击者向WEB服务器传递了一些不可靠的参数。一般来说,WEB应用需要传递一些必要的参数,才能够正常访问。而这个参数又可以分为两类,一个是可值得信任的参数,另外一类是不值得信任的参数。如企业可能是自己管理WEB服务器,而不是托管。他们就把服务器放置在企业的内部,以提高WEB服务器的安全性。所以一般来说,来自于企业防火墙内部的参数都是可靠的,值得信任的;而来自于企业外部的参数,都是不值得信任的。但是,也不是说不值得信任的参数或者说,来自于防火墙外部的参数WEB服务器都不采用。而是说,在WEB服务器设计的时候,需要注意,采用这些不值得信任的参数的时候,需要进行检查,看其是否合法;而不能向来自于企业内部的参数那样,不管三七二十一,都照收不误。这明显会对WEB服务器的安全带来威胁。如有时会,攻击者利用TELNET连接到80端口,就可以向CGL脚本传递不安全的参数。

  所以,在CGI程序编写或者PHP脚本编辑的时候,我们要注意,一定不能让其随便接受陌生人的参数,不要随便跟陌生人打交道。在接受参数之前,一定要先检验提供参数的人或者参数本身的合法性。在程序或者脚本编写的时候,可以预先加入一些判断条件。当服务期认为若提供的参数不合法的时候,及时通知管理员。这也可以帮助我们,尽早的发现可能存在的攻击者,并采取相应的措施。

  对于脚本的安全性来说,要注意以下问题:

  1、在脚本或者程序编写的时候,不应该把任何不信任的参数直接保存为会话变量。因为根据WEB应用的设计原理,会话变量只保存信任变量。也就是说,会话变量中的值,WEB服务都认为其是值得信任的,会不加思索的采用。一般的设计思路是,先设置一个临时变量进行存储,然后编写一个检验其合法性的过程或者函数,来验证其合法性。只有通过验证的时候,这个值才能够被传给会话变量。根据笔者的经验,要是没有亲身经历过惨痛教训的WEB管理员,可能对此不屑一顾。但是,那些有过这方面教训的人,则会非常看重这个合法性的检验过程。毕竟是吃一堑长一智,所以新手还是需要多听听过来人的建议,不会吃亏的。

  2、在没有充分必要的时候,不要采用脚本,尽量使得网页的简单化。其实,企业的网站跟个人网站有个很大的不同,企业的网站只要朴素就好,不需要过多的渲染。一方面,过度渲染的网站会降低用户网站访问的速度;另一方面,这也会降低网络的安全性能。故,在没有充分必要的情况下,不要共脚本或者程序在渲染网站的华而不实的功能。

  3、对脚本或者程序的执行情况要进行持续的跟踪。在万不得已网站采用了程序或者脚本的时候,则需要定时不定时的对这些脚本或者程序的运行情况进行稽核,看看其有没有被非法利用的嫌疑。

------分隔线----------------------------

推荐内容