首页 理论教育 远程调用与组件安全优化措施

远程调用与组件安全优化措施

时间:2023-06-09 理论教育 版权反馈
【摘要】:在Java系列中,RMI技术是远程过程调用的一种实现。3)服务器接收消息,服务器存根根据消息中的过程和参数等信息,调用服务器端的过程。在RPC通信机制中,调用组件和返回客户信息都是通过传送消息进行的,由于消息在传送过程中采取的安全措施比较简单,因此很容易被非法用户截获,造成信息泄露。

远程调用与组件安全优化措施

1.远程调用安全

传统的网络分布式程序需要进行复杂的底层通信编程,但是有了远程过程调用(Remote Procedure Call,RPC)后,开发网络分布式应用程序变得更加容易了。RPC的出现,让开发者不需要了解底层网络通信协议,就可以直接通过网络从远程计算机程序上请求服务。RPC通信模型是基于客户端/服务器通信模型的,是一种同步通信方式,即调用方必须等待服务器响应。在客户端,RPC为远程过程提供了抽象,在调用时,其底层消息传递机制对客户来说都是透明的。

在Java系列中,RMI(Remote Method Invocation)技术是远程过程调用的一种实现。RMI使用Java远程消息交换协议(Java Remote Messaging Protocol,JRMP)进行通信。用RMI开发的应用系统可以部署在任何支持Java运行环境的平台上,如图3-9所示。

978-7-111-39843-1-Chapter03-33.jpg

图3-9 RPC/RMI通信过程

在RPC中,服务以过程的形式存储在服务器端,客户端负责请求服务,服务器执行客户端的请求,运行被调用的过程。RPC在整个调用过程中需要经过的步骤如下:

1)客户端请求进行远程调用,激活客户端存根,指定目标服务器。

2)客户端存根将被调用的过程和参数打包,作为消息发送给服务器,等待数据消息的返回。

3)服务器接收消息,服务器存根根据消息中的过程和参数等信息,调用服务器端的过程。

4)服务器将结果作为消息返回给客户端存根。

5)客户端存根将结果返回给用户。

举一个例子,某公司内部办公系统使用远程调用,结构如图3-10所示。

978-7-111-39843-1-Chapter03-34.jpg

图3-10 公司办公系统结构

客户端使用桌面应用程序。很显然,为了应对数据库的迁移或改变,访问数据库的代码不应该写在客户端,否则会造成大量客户端的改变。此时,访问数据库的代码应写在服务器端,作为一个方法或过程的形式对外发布,客户端可在不知道服务器细节和底层通信协议的基础上,访问服务器端的这些方法,就好像调用自己机器上的方法一样。如果用Java实现,就可以使用RMI技术。以上面应用为例,服务器端访问数据库(如查询)的代码如下:

978-7-111-39843-1-Chapter03-35.jpg

978-7-111-39843-1-Chapter03-36.jpg

很显然,服务器端的P03_07_QueryInterface接口内并没有核心代码。接下来将服务器对象对外发布:

978-7-111-39843-1-Chapter03-37.jpg

运行以上代码,服务器端的对象即对外发布。客户端得到服务器端发布的接口,然后远程调用服务器端的方法代码如下:

978-7-111-39843-1-Chapter03-38.jpg

运行以上代码,即可调用服务器端的Query方法。

通过上面的例子可以看出,客户端无须知道服务器端的核心代码,只需要知道接口即可。当然,在该例子中省略了底层的一些通信细节的支持类。

RPC提供了强大的网络编程功能,给编程带来了极大方便,并为分布式计算提供了支持,但是还存在一些安全问题。主要体现在:

1)攻击者可能会恶意地调用RPC服务器中的过程,或者输入一些恶意的数据导致服务器失效。

在RPC处理过程中,底层使用的仍然是TCP/IP,而TCP/IP本身存在缓冲区溢出的问题,攻击者可能利用这一漏洞,对系统进行攻击。一般情况下,RPC使用的是135端口(RMI使用的是1099)。攻击者可伪装成合法客户端,向RPC端口传送信息,并让该信息溢出服务器端的RPC缓冲区,如果客户端发送的信息经过了精心的设计,那么很有可能加入恶意代码。

通常,如果服务器被攻击,一些基于RPC的服务(如DCOM)都将无法正常运行。更有甚者,攻击者有可能获得对远程服务器的完全控制,对服务器随意执行操作,如安装程序、篡改数据、格式化硬盘、创建用户或增加权限等。通常利用以下方法来解决上述问题:

●利用防火墙封堵端口。可以设置防火墙的分组过滤规则,过滤掉RPC端口和影响到DCOM函数调用的数据包,通过这种方法,可以避免防火墙内的系统被外部攻击。

●临时禁用某些服务,如DCOM。如果因为一些特殊原因无法过滤RPC端口,也可临时关闭DCOM服务,保证网络安全。不过,该方法将会导致系统运行异常,因此不建议使用。

2)客户端和服务器之间传递的信息可能被窃听,攻击者可能会对传输中的数据进行篡改。在RPC通信机制中,调用组件和返回客户信息都是通过传送消息进行的,由于消息在传送过程中采取的安全措施比较简单,因此很容易被非法用户截获,造成信息泄露。为了保证网络系统中的消息信息的安全,可以采用数据加密和解密的方法来实现。

2.ActiveX安全

ActiveX,也称ActiveX插件、组件或者控件,为开发人员和用户提供了一个快速、简便的方法,将某些内容和功能集成在一起。它是一些软件组件或对象的集合,可以被重用地包含在应用程序中执行。以Web网页为例,ActiveX组件实际上是一些可执行的代码的集合,可以复用,这些可复用的组件可以被嵌入到网页中,当客户请求时,被客户端浏览器下载,在客户端执行。一般这个组件可以为exe文件、dll文件或者ocx文件等。(www.xing528.com)

随着Web程序的发展,ActiveX在Web中的应用越来越广泛,在缓解B/S模式服务器端负担方面,做出了较大贡献。例如,在一个股票查询页面中,用户希望得到以某种图表形状显示的结果,传统的Web程序中,该图表必须先由服务器根据查询的数据生成,然后再送给客户。由于图片占用空间较大,因此服务器端的响应很慢,给客户不好的用户体验。如果使用ActiveX,则可以将画出各种图表的功能写在ActiveX内,客户查询时,该控件被下载并注册到客户端系统上,服务器只需将查询的结果数据传递给客户端,图表生成工作则由客户端上的ActiveX控件来完成,大大减少了用户等待时间,减轻了网络带宽压力和服务器的负担。

以Web程序为例,ActiveX运行过程如图3-11所示。

978-7-111-39843-1-Chapter03-39.jpg

图3-11 ActiveX运行过程

由于具有可重用性方面的优势,ActiveX被广泛应用,ActiveX的开发工具也逐渐增加。由于在Microsoft系列中,ActiveX不依赖于语言,所以传统的开发工具基本上都能进行开发。如Delphi、Visual Basic、VisualC++、.NET等,都可以成为ActiveX的开发工具,整个过程比较简单。

不过,目前只有Windows系列的操作系统才支持ActiveX的运行,在浏览器方面,也只有IE提供了对ActiveX的有效支持。如果使用的是其他浏览器,则必须配置第三方所提供的插件才能支持ActiveX控件。

ActiveX控件实际上是一个可执行文件,提供了特定功能,具有某些属性和方法,甚至具备外界可以捕获的事件,方便了应用的开发和执行。ActiveX的安全问题主要体现在:ActiveX控件由于可以被嵌入到某些程序中,因此可能在客户端计算机上运行。如果攻击者在ActiveX内编写一些恶意代码,就可能在用户执行这个ActiveX时,攻击其计算机。例如,不知不觉被格式化硬盘;客户浏览网页时,注册表被修改;客户的保密信息被“后门”程序传往攻击者的服务器等。

上述问题一般出现在Web程序中,对于用户来说,可以通过以下方法解决:

1)在使用ActiveX控件时,必须确认其签名。

2)不能让ActiveX控件被自动下载,下载前必须有提示。

3)不下载未签名的ActiveX控件。

4)如果要求非常严格,可以禁用任何ActiveX控件等。

具体的做法:依次选择IE中的“工具”→“Internet选项”→“安全”,然后在“自定义级别”中进行设置。

3.JavaApplet安全

同ActiveX在Web程序中的应用一样,Java系列也推出了相应的技术,那就是JavaApplet。JavaApplet是用Java语言编写的基于HTML的小应用程序,也可以直接嵌入到网页中,并能够产生特殊的效果。当客户端访问服务器Web页时,客户端浏览器就会下载JavaApplet,将其暂存到用户的硬盘上,并以一定的生命周期在本地运行。JavaApplet运行过程如图3-12所示。

978-7-111-39843-1-Chapter03-40.jpg

图3-12 JavaApplet运行过程

不过,要使用JavaApplet,前提是用户使用的浏览器必须支持Java,这可以通过安装一些Java运行插件来实现。当前流行的网络浏览器基本上都可以通过一些方法来支持Java。

同样,以股票查询系统为例,将图表生成的工作交给JavaApplet在客户端实现,也可以减少用户等待时间,减轻服务器的负担。以下是一段简单的Applet代码:

978-7-111-39843-1-Chapter03-41.jpg

978-7-111-39843-1-Chapter03-42.jpg

编译代码,接下来在一个网页文件中嵌入其.Class文件:

978-7-111-39843-1-Chapter03-43.jpg

由于Java是一门安全性要求很高的语言,因此,JavaApplet安全性比ActiveX要好—些。在默认情况下,JavaApplet的安全限制如下:

1)Applet放在客户端,但是不能在客户端执行任何的可执行文件。

2)Applet不能读写客户端文件系统中的文件。

3)在通信方面,Applet只能与它下载的源服务器进行通信,而不能与网络上其他机器通信。

4)在获取敏感信息方面,Applet只能获取客户端计算机的部分信息,如操作系统名称和版本号、文件及路径分隔符等,而不会泄露其他敏感信息,如注册表、系统安全配置等。

5)Applet还可通过数字签名进行不同的安全授权。

因此,对于Applet的安全问题,可以考虑得简单一些。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈