web-dev-qa-db-fra.com

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

Dès le début, j'ai entendu dire que vous ne désactiviez jamais, jamais, le service Appel de procédure distante dans Windows. Cela conduit à des choses horribles qui étaient difficiles à renverser (je crois que ce n'est plus facile à faire, mais qu'il est maintenant beaucoup plus facile de le réparer). Cependant, je n'ai aucune idée de ce qu'il fait ou de la raison pour laquelle il est si important de fondamentalement utiliser tout le 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?

14
redknightalex

Les concepteurs de Windows ont décidé de faire en sorte que beaucoup de choses se parlent via RPC - afin de pouvoir parler localement ou sur un réseau.

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

Je crois que même lorsque vous accédez à une console MMC, telle que compmgmt.msc pour afficher des informations sur la machine locale, il s’agit essentiellement de RPC sur localhost (je peux toutefois me tromper).

Considérez le protocole RPC comme un niveau supérieur à TCP/IP, utilisé comme infrastructure de communication réseautable de bas niveau (et non sécurisée) par de nombreux composants Windows. Pourquoi ne pas utiliser directement TCP/IP? Au moment de la conception de Windows NT (version initiale publiée en 1993), vous utilisiez couramment d'autres protocoles réseau que TCP/IP, tels que Netware (SPX/IPX), NetBIOS, AppleTalk (je pense que Windows l'avait déjà pris en charge , pourrait être faux ...) et tel. 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 distante.

23
LawrenceC

La vérité est la suivante: RPC est largement utilisé sur les machines LOCALES, mais pour un usage entre hôtes , il est principalement utilisé en interne par Microsoft rarement utilisé par des tiers .


LOCAL utilisation principale de RPC:

  • Composant RPC brut, tel que Registre, Netlogon, Pare-feu, Contrôle de service, SQL Server ... Vous pouvez en voir certains dans la liste de la section "Hôte à hôte".

  • 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 sont installés sur votre ordinateur:

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

enter image description here

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

enter image description here


Utilisation principale hôte à hôte RPC:

  • Des tâches de gestion à distance telles que lorsque "Gestion de l'ordinateur", "Éditeur de registre", vous pouvez le laisser se connecter à une machine distante! Ce qui se passe est souligné par le protocole RPC sur SMB (port TCP 445, appelé partage de fichiers).

    enter image description here

Vous pouvez utiliser l'outil rpcdump ou ifids pour vider toutes les interfaces internes RPC sur une machine distante. Voir les résultats suivants. Vous pouvez voir de nombreuses interfaces de gestion de système (elles peuvent également être utilisées localement):

[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 tous les systèmes matures ont besoin d’un mécanisme de communication inter-processus, d’un ensemble d’outils permettant de générer un stub/proxy, un standard permettant de compresser/décompresser un objet. Tous les systèmes ont des choses similaires. Vous devez connaître Android, son classeur est très similaire à celui de DCOM.

En fait, le RPC entre hôtes n'est pas très répandu, principalement parce qu'ils sont compliqués et opaques, qu'ils ne sont pas conviviaux pour Internet en raison du blocage des ports 445 ou 135 et que l'expérience d'authentification est mauvaise. Les gens préfèrent choisir un serveur HTTPS pour appeler un composant distant, c'est plus simple et contrôlable.

6
osexp2003