Qu'est-ce que le RPC et pourquoi est-il si important?

15

Depuis le début, j'ai entendu dire que vous ne désactiviez jamais le service d'appel de procédure distante dans Windows. Cela conduit à des choses horribles qui étaient difficiles à renverser (je pense que ce n'est plus facile à faire mais qu'il est maintenant beaucoup plus facile à réparer). Cependant, je n'ai aucune idée de ce qu'il fait ou pourquoi il est si important pour l'ensemble du système d'exploitation.

Est-il possible de résumer l'objectif du service RPC et pourquoi tant d'autres services / applications / opérations en dépendent pour fonctionner?

redknightalex
la source

Réponses:

24

Les concepteurs de Windows ont décidé de faire parler beaucoup de choses entre eux via RPC - afin qu'ils puissent parler localement ou via un réseau.

Cela inclut des éléments comme Active Directory, la plupart des consoles MMC, la fonctionnalité de certaines applets du panneau de configuration comme le Gestionnaire de périphériques, la plupart des éléments des outils d'administration et éventuellement des composants internes de Windows.

Je crois que même lorsque vous accédez à une console MMC, comme compmgmt.mscpour voir des choses sur la machine locale, il s'agit essentiellement de RPC sur localhost (je peux me tromper cependant).

Considérez RPC comme quelque chose d'un niveau au-dessus de TCP / IP qui est utilisé comme cadre de communication en réseau de bas niveau (et non sécurisé) par de nombreux composants Windows. Pourquoi ne pas utiliser directement TCP / IP? Au moment où Windows NT a été conçu (version initiale publiée en 1993), vous aviez d'autres protocoles réseau en plus de TCP / IP en usage courant, tels que Netware (SPX / IPX), NetBIOS, AppleTalk (je pense que Windows l'a pris en charge à l'époque) , pourrait être faux ...) et autres. Il s'agit donc d'un moyen indépendant du réseau pour que les composants Windows puissent communiquer avec d'autres composants sur la machine locale ou la machine distante.

LawrenceC
la source
2
Sérieusement? Pas de votes positifs? Ceci est une excellente réponse +1
Dave
6

La vérité est: RPC est largement utilisé dans les machines LOCALES , mais pour une utilisation HÔTE à HÔTE , il est principalement utilisé par Microsoft en interne, rarement utilisé par des tiers .


Utilisation principale du RPC LOCAL :

  • Composant RPC brut, tel que Registry, Netlogon, Firewall, Service Control, SQL Server ... Vous pouvez en voir certains dans la liste dans la section "HOST-to-HOST".

  • de nombreux composants DCOM (basés sur RPC, comme un wrapper C ++ de C), incluent des composants COM +.

Vous pouvez exécuter dcomcnfg pour voir combien de composants DCOM sur votre machine:

Excel, Internet Explorer, Visual Studio ... peuvent être automatisés car ils sont des composants DCOM:

entrez la description de l'image ici

Même la boîte de dialogue des propriétés de fichier d'Explorer est également un composant DCOM, drôle? Si vous supprimez toutes les listes de contrôle d'accès des «Modifier les limites» des autorisations de lancement de DCOMCNFG, vous ne pourrez presque rien faire non seulement des travaux de gestion !, même afficher la propriété du fichier dans l'explorateur!

entrez la description de l'image ici


Utilisation principale du RPC HÔTE à HÔTE :

  • Des trucs de gestion à distance comme lorsque "Gestion de l'ordinateur", "Editeur de registre", vous pouvez le laisser se connecter à une machine distante! Ce qui se passe est le protocole RPC sur SMB (port TCP 445, connu sous le nom de partage de fichiers).

    entrez la description de l'image ici

Vous pouvez utiliser l'outil rpcdump ou ifids pour vider tous les interfaces RPC sur une machine distante, voir les résultats suivants, vous pouvez voir de nombreuses interfaces de gestion du système (elles peuvent également être utilisées localement bien sûr):

[MS-RSP]: Remote Shutdown Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-EVEN6]: EventLog Remoting Protocol 
Adh APIs
AppInfo
Base Firewall Engine API
DHCP Client LRPC Endpoint
DHCPv6 Client LRPC Endpoint
DfsDs service
EFSK RPC Interface
Event log TCPIP
Fw APIs
Group Policy RPC Interface
IP Transition Configuration endpoint
IdSegSrv service
Impl friendly name
KeyIso
LicenseManager
NRP server endpoint
NSI server endpoint
NetSetup API
Ngc Pop Key Service
Proxy Manager client server endpoint
Proxy Manager provider server endpoint
Secure Desktop LRPC interface
Security Center
UserMgrCli
WM_WindowManagerRPC\Server
WinHttp Auto-Proxy Service
Witness Client Test Interface
Witness Client Upcall Server
XactSrv service
...

Received 499 endpoints.

Pourquoi le RPC est-il important? Tout simplement parce que chaque système mature a besoin d'un mécanisme de communication inter-processus, un ensemble d'outils pour générer stub / proxy, un standard pour emballer / décompresser un objet. Chaque système a des choses similaires. Vous devez connaître Android, son Binder est très similaire à la conception de DCOM.

En fait, le RPC HÔTE à HÔTE n'est pas très répandu, principalement parce qu'il est compliqué et opaque, peu convivial pour Internet en raison du fait que les ports 445 ou 135 sont souvent bloqués et que l'expérience d'authentification est mauvaise. Les gens préfèrent choisir un serveur HTTPS pour invoquer un composant distant, il est plus simple et contrôlable.

osexp2003
la source
2

Appel de procédure à distance (RPC)

source: http://searchsoa.techtarget.com/definition/Remote-Procedure-Call

L'appel de procédure à distance (RPC) est un protocole qu'un programme peut utiliser pour demander un service à un programme situé sur un autre ordinateur d'un réseau sans avoir à comprendre les détails du réseau. (Un appel de procédure est également parfois appelé appel de fonction ou appel de sous-programme.) RPC utilise le modèle client / serveur. Le programme demandeur est un client et le programme fournisseur de services est le serveur. Comme un appel de procédure normal ou local, un RPC est une opération synchrone nécessitant la suspension du programme demandeur jusqu'à ce que les résultats de la procédure distante soient renvoyés. Cependant, l'utilisation de processus ou de threads légers qui partagent le même espace d'adressage permet à plusieurs RPC d'être exécutés simultanément.

Lorsque les instructions de programme qui utilisent RPC sont compilées dans un programme exécutable, un stub est inclus dans le code compilé qui agit en tant que représentant du code de procédure distante. Lorsque le programme est exécuté et que l'appel de procédure est émis, le talon reçoit la demande et la transmet à un programme d'exécution client sur l'ordinateur local. Le programme d'exécution client a la connaissance de l'adresse de l'ordinateur distant et de l'application serveur et envoie le message sur le réseau qui demande la procédure distante. De même, le serveur comprend un programme d'exécution et un stub qui s'interface avec la procédure distante elle-même. Les résultats sont renvoyés de la même manière.

Il existe plusieurs modèles et implémentations RPC. Un modèle et une implémentation populaires sont l'environnement de calcul distribué (DCE) de l'Open Software Foundation. L'Institut des ingénieurs électriciens et électroniciens définit le RPC dans sa spécification d'appel de procédure à distance ISO, ISO / IEC CD 11578 N6561, ISO / IEC, novembre 1991.

RPC couvre la couche Transport et la couche Application dans le modèle OSI (Open Systems Interconnection) de communication réseau. RPC facilite le développement d'une application qui comprend plusieurs programmes distribués dans un réseau.

Les méthodes alternatives de communication client / serveur incluent la mise en file d'attente des messages et la communication avancée de programme à programme (APPC) d'IBM.


En savoir plus de Microsoft: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651(v=vs.85).aspx

Objectif
Microsoft Remote Procedure Call (RPC) définit une technologie puissante pour créer des programmes client / serveur distribués. Les stubs et bibliothèques d'exécution RPC gèrent la plupart des processus relatifs aux protocoles réseau et à la communication. Cela vous permet de vous concentrer sur les détails de l'application plutôt que sur les détails du réseau.
Le cas échéant,
RPC peut être utilisé dans toutes les applications client / serveur basées sur les systèmes d'exploitation Windows. Il peut également être utilisé pour créer des programmes client et serveur pour des environnements réseau hétérogènes qui incluent des systèmes d'exploitation tels qu'Unix et Apple.

Devid
la source