Callbacks (RPC)

Vaak vereist het programmeermodel een callback van een server naar een client via een externe procedureaanroep (RPC) of clientaanroepen naar een niet-vertrouwde server. Dit introduceert veel potentiële valkuilen.

Eerst moet callback naar de client worden uitgevoerd met een voldoende laag imitatieniveau. Als de server een systeemservice met hoge bevoegdheden is, kan het aanroepen van een lokale client met een imitatieniveau van imitatie of hoger de client voldoende bevoegdheden bieden om het systeem over te nemen. Het terugbellen van een externe client met een hoger imitatieniveau dan nodig is, kan ook leiden tot ongewenste gevolgen.

Ten tweede, als een aanvaller uw service aanzet om een callback uit te voeren, kan het een zogenaamde zwart gat- Denial of Service-aanval starten. Dergelijke aanvallen zijn niet specifiek voor RPC; bij deze aanvallen zorgt een machine ervoor dat u verkeer naar deze machine verzendt, maar deze reageert niet op uw aanvragen. Je zinkt steeds meer middelen in het aanroepen van het zwarte gat, maar ze komen nooit terug. Een algemeen voorbeeld van een dergelijke aanval is een TCP-niveau-aanval genaamd een TCP/IP SYN-overstromingsaanval.

Op RPC-niveau treedt een eenvoudige black-hole-aanval op wanneer een aanvaller een interface aanroept en de server vraagt om de interface terug te roepen. De interface voldoet, maar de aanvaller retourneert nooit de aanroep: één thread op de server is gekoppeld. De aanvaller doet dit 100 keer en koppelt 100 threads op de server. Uiteindelijk heeft de server onvoldoende geheugen. Foutopsporing op de server kan mogelijk de identiteit van de aanroeper voor zwarte gaten onthullen, maar vaak wordt de server opnieuw opgestart zonder verdacht spel, of er is mogelijk onvoldoende expertise beschikbaar om de aanvaller te bepalen.

De derde valkuil is op de cliënt. Vaak maakt een client een aanroep naar de server die de server informeert hoe deze terug moet worden aangeroepen (meestal een tekenreeksbinding) en wacht vervolgens tot een aanroep van de server binnenkomt, waarbij alle aanroepen van dat eindpunt worden geaccepteerd die afkomstig zijn van de server. Het callback-protocol van de server naar de client moet een verificatiemechanisme bevatten om ervoor te zorgen dat wanneer de callback naar de client komt, het daadwerkelijk afkomstig is van de server.