|
网络安全的威胁与防御
宋德军
随着Internet的发展,客户/服务器结构逐渐向浏览器/服务器结构迁移,因此Web服务在很短时间内也成为Internet上的主要服务。Web文本发布具有简洁、生动、形象等特点,所以,无论是单位和个人,都越来越倾向于用Web来发布自己的信息。
Web服务基于超文本传输协议,即HTTP协议。目前,HTTP协议共有三个版本,分别为HTTP0.9、H TTP1.0和HTTP1.1。其中HTTP1.0为大多数服务器和浏览器所使用,是一个面向连接的无状态的协议,在 TCP的端口80上进行信息的传输。大多数Web服务器和浏览器都对HTTP协议进行了必要的扩展,一些新的技术,如 CGI通用网关程序、Java小程序、ActiveX控件、虚拟现实等,也开始应用于Web服务,从而使现在的Web 文本看上去更生动、更形象,信息交互也显得更加容易。
Web服务给用户发布信息带来了方便的同时,也给用户带来了不安全因素。特别是在HTTP标准协议之上扩展的某些服务,在给用户提供信息交互的同时,也使得Web在已有的安全隐患之外,又增加了新的不安全因素。
Web面临的两类安全威胁
Web服务所面临的安全威胁大致可归纳为以下两种:一种是机密信息所面临的安全威胁,一种是WWW服务器和浏览器主机所面临的安全威胁。其中,前一种安全威胁是Internet上各种服务所共有的,而后一种威胁则是由扩展We b服务的某些软件所带来的。这两种安全隐患也不是截然分开的,而是共同存在并相互作用的,尤其是后一种安全威胁的存在,使得保护机密信息的安全更加困难。
机密信息所面临的安全威胁
通过Web服务来传递信息,快捷、有效、而且生动形象。但对于机密信息,又如何防止搭线窃听,如何防止外部用户侵入主机呢?尤其是随着新技术的应用,在外部用户进入系统越来越容易、给主机带来的危害越来越大的情况下,如果无法保证这些信息仅为授权用户阅读,致使机密信息泄露,就必将给被侵入方带来巨大损失。
WWW服务器和浏览器主机所面临的安全威胁
1.CGI通用网关程序所带来的威胁
CGI是英文Common Gateway Interface(通用网关接口)的缩写,它在服务器端与We b服务器相互配合,响应远程用户的交互性请求。它允许用户选择一种语言,如C/C++、Perl、UNIX Shel l、VB等进行编程,提供在服务器端和远程浏览之间的信息交互能力。
服务器使用环境变量传输有关的请求信息到CGI程序,这些环境变量包括服务器的名字、CGI和服务器使用协议的版本号、客户端的IP地址和域名地址、客户端的请求方式、请求内容及编码方式、合法性访问信息及用户的输入信息等。
CGI Script是Web安全漏洞的主要来源。其安全漏洞存在于以下三个方面:
1)它们会泄露主机系统的信息,帮助黑客入侵;
2)当服务器处理远程用户输入的某些信息(如表格)时,易被远程用户攻击;
3)不规范的第三方CGI程序,或存有恶意的客户发布给Web服务器的CGI程序,会对Web服务器造成物理或逻辑上的损坏,甚至将Web服务器上的整个硬盘信息拷贝到Internet的某一台主机上。
2. Java小程序所带来的威胁
Java是由美国Sun MicroSystems公司于1995年推出的一种跨平台和具有交互能力的计算机程序语言,被公认为具有简单、面向对象、分布式、健壮、安全、结构中立、可移植、高效、多线程和动态等优点。其中Ja va Applet(Java小程序)为Web服务提供了相当好的扩展能力,并且为各种通用的浏览器,如IE、Net scape2.0所支持。Java小程序由浏览器进行解释并在客户端执行,因此它把安全风险直接从服务器端转移到了客户端。
尽管在实现Java小程序时进行了很多安全方面的考虑,但在发行后的很短时间内,在Java中就发现了很多由于具体实现的BUG而引起的安全漏洞。
在Netscape2.0中的Java的实现中存在一些特殊的安全漏洞,例如任意执行机器指令的能力、App let(小程序)的相互竞争力和与随意的主机建立连接的能力。
此外,Java Script作为Java Applet在IE、Netscape中的实现语言,还存在着以下一些安全漏洞:
1)可以欺骗用户,将本地硬盘或连在网络上的磁盘上的文件传输到Internet上的任意主机;
2)能获得用户本地硬盘和任何网络盘上的目录列表;
3)能监视用户某段时间内访问过的所有网页,捕捉URL并将它们传送到Internet上的某台主机中;4)能够不经用户允许而触发Netscape Navigator发送出E-mail信息。
尽管在Netscape以后的版本中,对这些Bug进行了修正,但是谁也不能保证在新的Netscape浏览器中没有漏洞存在。
3. ActiveX控件所带来的威胁
ActiveX是微软在其组件对象模型(Component Object Model)之上建立的一种理论和概念,同时也是一种新的编程标准,可以用任何一种面向对象的语言加以实现,如VC、VB等,用这种规范建立起来的A ctiveX控件真正实现了多语言编程的无缝接,同时,这种控件也可以嵌入HTML文本中,形成一定功能的程序模块。
由于ActiveX控件被嵌入到HTML页面中,并下载浏览器端加以执行,因此会给浏览器端造成一定程度的安全威胁。此外,目前已有证据表明,在客户端的浏览器中,如IE中插入某些ActiveX控件,也将直接对服务器端造成意想不到的安全威胁。
同时,一些其他技术,如内嵌于IE的VB Script语言,用这种语言生成的客户端可执行的程序模块,也同 Java小程序一样,有可能给客户端带来安全性能上的漏洞。此外,还有一些新技术,如ASP(Active serv er Pages)技术,由于用户可以为ASP的输出随意增加客户脚本、ActiveX控件和动态HTML,因此在A SP脚本中同样也都存在着一定的安全隐患。
解决Web服务安全威胁的防御措施
为了确保Web服务的安全,通常采用下列技术措施:在现有的网络上安装防火墙,对需要保护的资源建立隔离区;对机密敏感的信息进行加密存储和传输;在现有网络协议的基础上,为C/S通信双方提供身份认证并通过加密手段建立秘密通道;对没有安全保证的软件实施数字签名,提供审计、追踪手段,保证一旦出现问题,可立即根据审计日志进行追查等。
1.安装防火墙
为自己的局域网或站点提供隔离保护,是目前普遍采用的一种安全有效的方法,这种方法不是只针对Web服务,对其他服务也同样有效。
防火墙是一个位于内部网络与Internet之间的计算机或网络设备中的一个功能模块,是按照一定的安全策略建立起来的硬件和软件的有机组成体,其目的是为内部网络或主机提供安全保护,控制谁可以从外部访问内部受保护的对象,谁可以从内部网络访问Internet,以及相互之间以哪种方式进行访问。从其运行机制上可以分为包过滤和代理两种。
包过滤主要是针对特定IP地址的主机所提供的服务,其基本原理是在网络传输的IP层截获往来的IP包,查找出 IP包的源地址和目的地址、源端口号和目的端口号,以及IP包包头中其他一些信息,并根据一定的过滤原则,确定是否对此IP包进行转发。简单的包过滤在路由器上即可实现,通常放置在路由器的后面,同时在过滤的基础上可以加上其他安全技术,如加密、认证等,从而实现较高的安全性。
代理在应用层实现,其基本原理是对Web服务单独构造一个代理程序,不允许客户程序与服务器程序直接交互,必须通过代理程序双方才能进行信息的交互;还可以在代理程序中实现其他的安全控制措施,如用户认证和报文加密等,从而达到更高的安全性能。代理根据所代理的对象及所放的位置,又可分为客户端代理和服务器端代理。客户端代理主要是保护浏览器一方主机的安全,服务器端代理主要是保护服务器的安全。
2.对机密信息实施加密保护
对机密信息进行加密存储和传输是传统而有效的方法,这种方法对保护机密信息的安全特别有效,能够防止搭线窃听和黑客入侵,在目前基于Web服务的一些网络安全协议中得到了广泛的应用。
在Web服务中的传输加密一般在应用层实现。WWW服务器在发送机密信息时,首先根据接收方的IP地址或其他标识,选取密钥对,信息进行加密运算;浏览器在接收到加密数据后,根据IP包中信息的源地址或其他标识对加密数据进行解密运算,从而得到所需的数据。在目前流行的WWW服务器和浏览器中,如微软公司的IIS服务器和浏览器IE,都可以对信息进行加解密运算,同时也留有接口,用户可以对这些加解密算法进行重载,构造自己的加解模块。此外,传输加解密也可以在IP层实现,对进出的所有信息进行加解密,以保证在网络层的信息安全。
3.为客户/服务器通信双方提供身份认证,建立安全信道
目前已经出现了建立在现有网络协议基础上的一些网络安全协议,如SSL和PCT。这两种协议主要是用于保护机密信息,同时也用于防止其他非法用户侵入自己的主机,给自己带来安全威胁。
SSL协议是美国Netscape公司最早提出的一种包括服务器的认证、签名、加密技术的私有通信,可提供对服务器的认证,根据服务器的选项,还可提供对客户端的认证。SSL协议可运行在任何一种可靠的传输协议之上,如TCP ,但它并不依赖于TCP,并能够运行在HTTP、FTP、TELNET等应用协议之下,为其提供安全的通信。SSL协议使用X.509 V3认证标准,RSA、diffie-Hellman和Fortezza-KEA算法作为其公钥算法,使用RC4-128、RC-128、DES、3层DWS或IDEA作为其数据加密算法。PCT提供了比SSL更加丰富的认证方案、加密算法,并在某些协议细节上作了改进。
4.对软件采用数字签名
为了维护自己公司的良好声誉,许多大公司纷纷对自己的软件采用数字签名技术,宣称对自己的软件,尤其是像Ja va小程序,ActiveX控件这样给Web服务带来隐患的软件的安全性负责。一些证书机构也开始提供这方面的服务,并且已有了相应的工业标准,如微软公司的Authenticode等。
数字签名是根据公钥算法,用自己的私钥对自己发布的软件进行签名,由用户用其公钥进行验证。这里的公钥是由证书机构发布的证书证实的。
微软的Authenticode2.0技术用于标识一份软件的发布者并且证明它还没有被损害。从证书机构(C A)处获得数字证书的软件发布者可以使用Authenticode签名工具来为他们的软件包进行数字化签名。其证书格式一般遵从ITU-X5.09 V3格式,公钥算法为RSA。Authenticode是客户方软件,它监视Acti veX控件、Cab文件、Java小应用程序或可执行文件的下载,在这些文件中寻找数字证书来进行验证,然后对可能出现的安全问题向用户显示警字、证书机构的名字及它是商业证书还是个人证书、证书的有效时间等等。
数字签名能够保护软件的完整性,对软件在传输过程中的非法更改比较敏感。软件一般来说规模都比较大,而目前的公钥算法,如RSA,在实现上比较慢,因此在对软件进行数字签名时,可先用一个杂凑函数对软件代码进行处理,然后再用用户的私钥对杂凑结果进行签名。当其他用户验证时,也是用同样的杂凑函数算出杂凑值,再对签名进行脱密,如果两个结果一致,则说明软件没有被更改过,否则,就说明软件在传输的过程中被非法更改了。
数字签名还能够确认软件的发布者。软件使用者导入证书机构(CA)发布给软件发布者的证书,就可以用软件发布者的公钥认定发布软件有的有效性。签过名的软件并不能保证没有安全问题,签名的作用在于一旦出现问题,就可以根据证书对软件发布者进行追查。
结束语
以上这些解决Web安全性的方法,在具体应用中也不是只使用某一项技术,而是把几种解决方法集成在一起,针对自己的服务器端或客户端的安全需求,构筑起实用的安全体系。 有 四通利方 新浪网
(,2000-04-13)
|