Rückrufe (RPC)
Häufig erfordert das Programmiermodell einen Serverrückruf an einen Client über einen Remoteprozeduraufruf (RPC) oder Clientaufrufe an einen nicht vertrauenswürdigen Server. Dies führt zu vielen potenziellen Fallstricken.
Zunächst muss der Rückruf an den Client mit einer ausreichend niedrigen Identitätswechselebene erfolgen. Wenn es sich bei dem Server um einen Systemdienst mit hohen Berechtigungen handelt, kann das Aufrufen eines lokalen Clients mit der Identitätswechselebene oder höher dem Client berechtigungen zur Verfügung stellen, die für die Übernahme des Systems ausreichen. Das Aufrufen eines Remoteclients mit höherer Identitätswechselebene als erforderlich kann auch zu unerwünschten Folgen führen.
Zweitens: Wenn ein Angreifer Ihren Dienst zum Ausführen eines Rückrufs veranlasst, kann er eine sogenannte schwarze Lücke starten – Denial-of-Service-Angriff. Solche Angriffe sind nicht RPC-spezifisch. bei diesen Angriffen veranlasst ein Computer Sie, Datenverkehr an ihn zu senden, reagiert aber nicht auf Ihre Anforderungen. Sie senken immer mehr Ressourcen in den Aufruf des schwarzen Löchers, aber sie kommen nie wieder. Ein allgemeines Beispiel für einen solchen Angriff ist ein Angriff auf TCP-Ebene, der als TCP/IP SYN-Überflutungsangriff bezeichnet wird.
Auf RPC-Ebene tritt ein einfacher Black-Hole-Angriff auf, wenn ein Angreifer eine Schnittstelle aufruft und den Server anfordert, die Schnittstelle wieder aufzurufen. Die Schnittstelle entspricht, aber der Angreifer gibt den Aufruf nie zurück: Ein Thread auf dem Server ist gebunden. Der Angreifer führt dies 100-mal durch und bindet 100 Threads an den Server. Schließlich ist auf dem Server nicht mehr genügend Arbeitsspeicher verfügbar. Durch das Debuggen des Servers kann möglicherweise die Identität des Black-Hole-Aufrufers offengelegt werden. Häufig wird der Server jedoch neu gestartet, ohne dass ein verdächtiges Spiel auftritt, oder es ist möglicherweise nicht genügend Fachwissen verfügbar, um den Angreifer zu ermitteln.
Der dritte Fehler liegt auf dem Client. Häufig ruft ein Client den Server auf und informiert den Server darüber, wie er ihn zurückruft (in der Regel eine Zeichenfolgenbindung), und wartet dann darauf, dass ein Aufruf vom Server eingeht, und akzeptiert blind jeden Aufruf an diesem Endpunkt, der angibt, vom Server zu stammen. Das Rückrufprotokoll vom Server zum Client sollte einen Überprüfungsmechanismus enthalten, um sicherzustellen, dass der Rückruf tatsächlich vom Server stammt, wenn der Rückruf an den Client gesendet wird.