RPC还是Socket


不论是程序员在编写基于C/S(客户端服务器)的程序时,还是网络工程师在处理RPC问题时,他们问的最多的就是RPC和Socket有什么区别 和联系?
RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像 IPC(本地过程调用).RPC带来了开发C/S程序的简单可靠的手段,它通过一种叫XDR的数据表达方法描述数据,程序员书写伪代码,然后由 rpcgen程序翻译为真正的可编译的C语言源代码,再编译成真正的Client端和Server端程序。
RPC作为普遍的C/S开发方法,开发效率高效,可靠.但RPC方法的基本原则是--以模块调用的简单性忽略通讯的具体细节,以便程序员不用 关心C/S之间的通讯协议,集中精力对付实现过程.这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽.
RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.另外,在对程序优化时,程序员虽然可以直接修改由 rpcgen产生的令人费解的源程序,但对于追求程序设计高效率的RPC而言,获得的简单性则被大大削弱.
RPC与是Socket的类比

两个老板手下各有一个负责接通MSN的秘书.这两个秘书就是基于RPC协议建立的会话层通信.老本不需要知道怎么使用MSN,只要告诉秘书,秘书 就会通过MSN与对方建立会话请求和响应.而基于Socket的通信,老板需要会使用MSN,这样尽管老板需要事先培训一下MSN的简单使用常识,但若与 对方通信时,无需经过秘书,效率更高.

--------------------------------------------------------------------------------------------

英文原义:Remote Procedure Call Protocol

中文释义:(RFC-1831)远过程调用协议

注解:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间 携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等 待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调 用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。

目前,有多种RPC模式和执行。最初由Sun公司提出。IETF ONC宪章重新修订了Sun版本,使得ONC PRC协议成为IETF标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。

--------------------------------------------------------------------------------------------


Remote Procedure Call (RPC)

RPC是Windows操作系统使用的一个协议,它提供了一种进程间通信机制。通过这一机制,在一台计算机上运行的程序可以顺畅地执行某个远程系 统上的代码,该协议本身是从 OSF(开放式软件基础)RPC协议衍生出来的,只是增加了一些Microsoft特定的扩展。




--------------------------------------------------------------------------------------------


Microsoft RPC :Remote Procedure Call (RPC)调用是WINDOWS使用的一个协议,提供进程间交互通信,允许程序在远程机器上运行任意程序。

RPC在处理通过TCP/IP进行信息交换过程中存在漏洞,问题由于不正确处理畸形消息造成。主要此漏洞影响使用RPC的DCOM接口,监听 RPC使能的接口,这个接口处理DCOM对象激活请求。攻击者如果成功利用此漏洞,可以以系统用户权限执行任意代码。

要利用这个漏洞,可以发送畸形请求给远程服务器监听的特定RPC端口。如135、139、445等任何配置了RPC端口的机器。

MS WINDOWS 2000 RPC :WINDOWS的RPC服务(RPCSS)存在漏洞,当发送一个畸形包的时候,会导致RPC服务无提示的崩溃掉。由于RPC服务是一个特殊的系统服务, 许多应用和服务程序都依赖于他,因为可以造成这些程序与服务的拒绝服务。同时可以通过劫持epmapper管道和135端口的方法来提升权限和获取敏感信 息。

技术分析

问题主要发生在RPC服务为DCOM服务提供__RemoteGetClassObject接口上,当传送一个特定包导致解析一个结构的指针 参数为NULL的时候, __RemotoGetClassObject 未对此结构指针参数有有效性检查,在后续中就直接引用了此地址(此时为0)做读写操作,这样就导致了内存访问违例,RPC服务进程崩溃。

危害

攻击之后,许多基于RPC的应用无法使用,如使用网络与拨号连接拨号,配置本地连接等,一些基于RPC,DCOM的服务与应用将无法正常运 行。由于RPC服务是MS WINDOWS中一个重要的服务,他开放的135端口同时用于DCOM的认证,epmapper管道用于RPC端点的影射,并默认为系统信任,如果一个攻 击者能够以低权限在被攻击机器上运行一个程序,在RPC服务崩溃以后,就可以通过劫持epmapper管道和135端口的方法来提升权限或获得DCOM客 户端认证的信息。

解决方案

Microsoft RPC为:

采用防火墙过滤这些配置了RPC的端口。

猜你喜欢

转载自jipengyun2008.iteye.com/blog/1289295
RPC
今日推荐