Zum Inhalt springen
Testversion

Uneingeschränkte Ressourcennutzung (API-Ratenbegrenzung)

Ein Leitfaden zu uneingeschränkter Ressourcenverbrauchs (API-Ratenbegrenzung) 

Die Bearbeitung einer API-Anfrage beansprucht Ressourcen: Netzwerkbandbreite, CPU, Arbeitsspeicher, Speicherplatz und manchmal auch kostenpflichtige Dienste von Drittanbietern wie SMS oder biometrische Authentifizierung. Ein uneingeschränkter Ressourcenverbrauch entsteht, wenn eine API nicht begrenzt, wie viel von dieser Ressource eine einzelne Client-Interaktion beansprucht. 

Die Risiken, die mit einem uneingeschränkten Ressourcenverbrauch einhergehen, gehen weit über die klassischen Bedenken hinsichtlich Denial-of-Service-Angriffen hinaus. Wenn eine API kostenpflichtige Dienste von Drittanbietern integriert, wird der Ressourcenverbrauch durch fehlende Ausgabenobergrenzen zu einem direkten finanziellen Angriff. Ein einziges automatisiertes Skript, das einen Endpunkt zum Auslösen von SMS-Nachrichten ansteuert, verursacht innerhalb weniger Minuten Kosten in Höhe von Tausenden von Dollar. 

GraphQL birgt eine besondere Ausprägung dieses Risikos: Dank seiner Batching-Fähigkeit kann ein Client Hunderte ressourcenintensiver Operationen in einer einzigen Anfrage bündeln, wodurch die für jede einzelne Anfrage geltende API-Ratenbegrenzung umgangen wird.

Wichtigste Erkenntnisse

  • Der uneingeschränkte Ressourcenverbrauch steht auf Platz 4 der OWASP API Security Top 10 2023 und tritt auf, wenn APIs keine Begrenzungen für Client-Interaktionen, die Größe von Anfragen oder die zur Bearbeitung von Anfragen erforderlichen Rechenressourcen durchsetzen.
  • Die Sicherheitslücke geht über herkömmliche DoS-Angriffe hinaus: Fehlende Ausgabenobergrenzen bei API-Integrationen von Drittanbietern (SMS, E-Mail, Biometrie) können ausgenutzt werden, um erheblichen finanziellen Schaden zu verursachen, wie in Szenario Nr. 1 gezeigt wird, in dem ein Angreifer innerhalb weniger Minuten SMS-Kosten in Höhe von mehreren Tausend Dollar verursachte.
  • Die Batching-Funktion von GraphQL stellt einen besonders risikoreichen Angriffsvektor dar, da sie es Angreifern ermöglicht, Hunderte ressourcenintensiver Operationen in einer einzigen Anfrage zu bündeln und so die Begrenzung der Anfragefrequenz vollständig zu umgehen.
  • Ressourcenbeschränkungen müssen auf mehreren Ebenen festgelegt werden: Zeitlimits für die Ausführung, Speicherzuweisung, Anzahl der Dateideskriptoren, Größe der hochgeladenen Dateien, Datensätze pro Seite und Anzahl der Operationen pro Batch-Anfrage; eine Lücke auf einer dieser Ebenen führt zu einer Sicherheitslücke.
  • Zur Prävention sind Ressourcenbeschränkungen auf Container-Ebene, eine fein abgestimmte Ratenbegrenzung pro Endpunkt entsprechend der geschäftlichen Sensibilität, eine serverseitige Parametervalidierung sowie Ausgabenwarnungen oder feste Obergrenzen für alle Integrationen von Drittanbieterdiensten erforderlich.

Warum ist das gefährlich?

Wird nichts dagegen unternommen, führt ein uneingeschränkter Ressourcenverbrauch dazu, dass: 

  • Denial-of-Service-Situationen, die die API für berechtigte Nutzer beeinträchtigen oder lahmlegen 
  • Direkter finanzieller Schaden durch Missbrauch von integrierten Drittanbieter-Diensten mit Datenmessung 
  • Ressourcenerschöpfung auf Infrastrukturebene: Speicher, Dateideskriptoren oder Prozessgrenzen 
  • Vollständige Umgehung der Ratenbegrenzung durch Batch- oder Massenoperationen

Typische Symptome

Diese Sicherheitslücke tritt häufig auf, wenn APIs: 

  • Es darf keine Obergrenze für die Größe der Nutzdaten, die Zeichenfolgenlänge oder die Anzahl der Array-Elemente festgelegt werden. 
  • Unbegrenzte Anzahl von Datensätzen pro Seite in paginierten Antworten zulassen 
  • Die Ratenbegrenzung für einzelne Endpunkte, insbesondere solche, die mit aufwendigen Vorgängen verbunden sind, überspringen 
  • Es wird versäumt, wiederholte Aufrufe einer einzelnen sensiblen Operation, wie z. B. die OTP-Validierung, zu drosseln 
  • Keine Ausgabenobergrenze für integrierte Dienste von Drittanbietern 

Wenn eine API davon ausgeht, dass Client-Anfragen in einem angemessenen Rahmen bleiben, jedoch keine Begrenzungen durchsetzt, ist das Unternehmen anfällig für Angriffe. 

Festlegen von API-Nutzungsgrenzen 

Ressourcenbeschränkungen müssen auf jeder Ebene durchgesetzt werden, die eine Anfrage durchläuft. 

  • Wenden Sie Einschränkungen auf Containerebene in Bezug auf Speicher, CPU, Neustarts, Dateideskriptoren und die Anzahl der Prozesse an 
  • Legen Sie für alle eingehenden Parameter maximale Nutzlastgrößen, Zeichenfolgenlängen und Array-Größen fest und setzen Sie diese durch 
  • Führen Sie endpunktspezifische Ratenbegrenzungen ein, die auf die geschäftliche Sensibilität abgestimmt sind, und verzichten Sie auf eine einheitliche Pauschalregel. 
  • Die wiederholte Ausführung desselben sensiblen Vorgangs pro Client, wie z. B. die OTP-Validierung oder die Passwortwiederherstellung, sollte begrenzt werden 
  • Fügen Sie eine serverseitige Validierung für jeden Parameter hinzu, der die Anzahl der in einer Antwort zurückgegebenen Datensätze steuert. 
  • Legen Sie für jede gemessene Drittanbieter-Integration feste Ausgabenobergrenzen oder Warnmeldungen fest 

APIs müssen selbst angemessene Beschränkungen durchsetzen, anstatt sich darauf zu verlassen, dass sich die Clients korrekt verhalten. 

< Zurück zu Glossar der Begriffe