Co to jest RPC i dlaczego jest tak ważna?

15

Od początku słyszałem, że nigdy nie wyłączasz usługi zdalnego wywoływania procedur w systemie Windows. Takie postępowanie prowadzi do okropnych rzeczy, które kiedyś były trudne do obalenia (uważam, że nie jest to już łatwe do zrobienia, ale teraz jest o wiele łatwiejsze do naprawienia). Nie mam jednak pojęcia, co robi ani dlaczego tak ważne jest zasadniczo cały system operacyjny.

Czy można podsumować cel usługi RPC i dlaczego tak wiele innych usług / aplikacji / operacji zależy od jej uruchomienia?

redknightalex
źródło

Odpowiedzi:

24

Projektanci systemu Windows zdecydowali, aby wiele rzeczy rozmawiało ze sobą przez RPC - aby mogli rozmawiać lokalnie lub przez sieć.

Obejmuje to między innymi Active Directory, większość konsol MMC, funkcjonalność niektórych apletów panelu sterowania, takich jak Menedżer urządzeń, wiele rzeczy w Narzędziach administracyjnych i ewentualnie wewnętrzne składniki systemu Windows.

Wierzę, że nawet kiedy uzyskujesz dostęp do konsoli MMC, na przykład w compmgmt.msccelu przeglądania rzeczy na temat lokalnego komputera, jest to w zasadzie RPC dla lokalnego hosta (choć mogę się mylić).

Pomyśl o RPC jako o jeden poziom wyżej niż TCP / IP, który jest używany jako niskopoziomowa (i niepewna) sieć komunikacyjna możliwa do pracy przez wiele składników systemu Windows. Dlaczego nie użyć bezpośrednio protokołu TCP / IP? W czasie projektowania systemu Windows NT (wersja początkowa wydana w 1993 r.) Istniały inne protokoły sieciowe oprócz TCP / IP w powszechnym użyciu, takie jak Netware (SPX / IPX), NetBIOS, AppleTalk (myślę, że Windows obsługiwał to w przeszłości) , może się mylić ...) i tak dalej. Jest to więc niezależny od sieci sposób, w którym składniki systemu Windows mogą rozmawiać z innymi komponentami na komputerze lokalnym lub zdalnym.

LawrenceC
źródło
2
Poważnie? Brak opinii? To świetna odpowiedź +1
Dave
6

Prawda jest taka: RPC jest szeroko stosowany w maszynie LOKALNEJ , ale do użytku HOST-to-HOST jest głównie używany przez Microsoft wewnętrznie, rzadko używany przez strony trzecie .


Główne zastosowanie LOCAL RPC:

  • Surowy komponent RPC, taki jak Rejestr, Netlogon, Zapora, Kontrola usług, SQL Server ... Niektóre z nich można zobaczyć na liście w sekcji „HOST-to-HOST”.

  • wiele komponentów DCOM (opartych na RPC, takich jak opakowanie C ++ w C), zawiera komponenty COM +.

Możesz uruchomić dcomcnfg, aby zobaczyć, ile komponentów DCOM na twoim komputerze:

Excel, Internet Explorer, Visual Studio ... można zautomatyzować, ponieważ są one składnikiem DCOM:

wprowadź opis zdjęcia tutaj

Nawet okno dialogowe Właściwości pliku Eksploratora jest również składnikiem DCOM, zabawne? Jeśli usuniesz wszystkie listy ACL z „Edycji limitów” uprawnień do uruchamiania DCOMCNFG, nie będziesz w stanie zrobić prawie nic, nie tylko działa zarządzanie !, nawet pokazać właściwości pliku w eksploratorze!

wprowadź opis zdjęcia tutaj


Główne użycie RPC HOST-to-HOST :

  • Funkcje zdalnego zarządzania, takie jak „Zarządzanie komputerem”, „Edytor rejestru”, możesz pozwolić mu połączyć się ze zdalnym komputerem! Podkreślono, że RPC przez protokół SMB (port TCP 445, znany jako udostępnianie plików).

    wprowadź opis zdjęcia tutaj

Możesz użyć narzędzia rpcdump lub ifids, aby zrzucić wszystkie interfejsy RPC na zdalnej maszynie, zobacz następujące wyniki, możesz zobaczyć wiele interfejsów zarządzania systemem (można ich również użyć lokalnie):

[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.

Dlaczego RPC jest ważne? Tylko dlatego, że każdy dojrzały system potrzebuje mechanizmu komunikacji międzyprocesowej, zestawu narzędzi do generowania kodu pośredniczącego / proxy, standardu do pakowania / rozpakowywania obiektu. Każdy system ma podobne rzeczy. Musisz znać Androida, jego Binder jest bardzo podobny do projektu DCOM.

W rzeczywistości HOST-to-HOST RPC nie jest szeroko rozpowszechniony, głównie dlatego, że są skomplikowane i nieprzejrzyste, nieprzyjazne dla Internetu z powodu często blokowanych portów 445 lub 135, a uwierzytelnianie jest złe. Ludzie wolą wybrać serwer HTTPS, aby wywołać zdalny komponent, jest to prostsze i łatwiejsze do kontrolowania.

osexp2003
źródło
2

Zdalne wywołanie procedury (RPC)

źródło: http://searchsoa.techtarget.com/definition/Remote-Procedure-Call

Zdalne wywołanie procedury (RPC) to protokół, którego jeden program może użyć do żądania usługi od programu znajdującego się na innym komputerze w sieci bez konieczności rozumienia szczegółów sieci. (Wywołanie procedury jest również czasami nazywane wywołaniem funkcji lub wywołaniem podprogramu). RPC używa modelu klient / serwer. Program żądający jest klientem, a programem świadczącym usługi jest serwer. Podobnie jak zwykłe lub lokalne wywołanie procedury, RPC jest operacją synchroniczną wymagającą zawieszenia programu żądającego do czasu zwrócenia wyników procedury zdalnej. Jednak zastosowanie lekkich procesów lub wątków, które współużytkują tę samą przestrzeń adresową, pozwala na jednoczesne wykonywanie wielu RPC.

Gdy instrukcje programu korzystające z RPC są kompilowane w programie wykonywalnym, do skompilowanego kodu dołączany jest kod pośredniczący, który działa jako reprezentant kodu procedury zdalnej. Po uruchomieniu programu i wydaniu wywołania procedury kod pośredniczący odbiera żądanie i przekazuje je do programu wykonawczego klienta na komputerze lokalnym. Program wykonawczy klienta ma wiedzę na temat sposobu adresowania aplikacji do zdalnego komputera i serwera i wysyła komunikat przez sieć, który żąda zdalnej procedury. Podobnie, serwer zawiera program wykonawczy i kod pośredniczący, który łączy się z samą procedurą zdalną. Wyniki są zwracane w ten sam sposób.

Istnieje kilka modeli i implementacji RPC. Popularnym modelem i implementacją jest rozproszone środowisko obliczeniowe Open Software Foundation (DCE). Instytut Inżynierów Elektryków i Elektroników definiuje RPC w specyfikacji ISO Remote Call Call Call, ISO / IEC CD 11578 N6561, ISO / IEC, listopad 1991.

RPC obejmuje warstwę transportową i warstwę aplikacji w modelu komunikacji sieciowej Open Systems Interconnection (OSI). RPC ułatwia opracowanie aplikacji zawierającej wiele programów rozproszonych w sieci.

Alternatywne metody komunikacji klient / serwer obejmują kolejkowanie wiadomości i zaawansowaną komunikację program-program (IBM PCPC).


Tutaj więcej od Microsoft: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651(v=vs.85).aspx

Cel
Zdalne wywołanie procedury Microsoft (RPC) definiuje zaawansowaną technologię tworzenia rozproszonych programów klient / serwer. Kody i biblioteki wykonawcze RPC zarządzają większością procesów związanych z protokołami sieciowymi i komunikacją. Umożliwia to skupienie się na szczegółach aplikacji, a nie na szczegółach sieci.
W stosownych przypadkach
RPC można stosować we wszystkich aplikacjach klient / serwer opartych na systemach operacyjnych Windows. Można go również używać do tworzenia programów klienckich i serwerowych dla heterogenicznych środowisk sieciowych, które obejmują takie systemy operacyjne jak Unix i Apple.

Devid
źródło