Sichere APIs in einem API Gateway

Zeping Bai

November 4, 2022

Technology

Vorwort

Im Juni 2021 wurden fast 92 % der Daten von LinkedIn-Nutzern durch öffentliche APIs ohne Sicherheitskontrollen geleakt. Die offengelegten Daten, die auf dem Schwarzmarkt verkauft wurden, enthielten 700 Millionen Benutzernamen, persönliche Daten, E-Mail-Adressen, Telefonnummern und andere spezifische Informationen. Obwohl LinkedIn dieses Ereignis als das Crawlen öffentlicher Daten und nicht als unbefugten Zugriff betrachtet, unterstreicht es dennoch die Bedeutung von API-Sicherheitsmaßnahmen.

Als externe Schnittstelle für Anwendungen, um Dienste bereitzustellen, sind APIs ständig externem Datenverkehr ausgesetzt und treffen auf feindliche Angreifer, die Denial-of-Service-, Injektions- und bekannte Schwachstellen nutzen, um Angriffe durchzuführen. Beispielsweise nutzten Angreifer im Dezember 2020 die log4j 2-Schwachstellen aus, um unkonfigurierte Angriffe gegen APIs durchzuführen. Daher ist es notwendig, die Fähigkeit der API zu stärken, diese bösartigen Angreifer fernzuhalten. Bevor wir jedoch Maßnahmen zur Sicherung einer API ergreifen, lassen Sie uns zunächst verstehen, was eine API ist.

Was ist eine API?

Traditionell steht API (Application Programming Interface) für die statischen oder dynamischen Link-Bibliotheken der Software, um deren Funktionen aufzurufen. Entwickler können die von bestehender Software bereitgestellten Funktionen basierend auf Aufrufen ihrer APIs wiederverwenden, wie z. B. TCP/IP, das von Betriebssystemen bereitgestellt wird.

Mit der Entwicklung von Softwaresystemen und Netzwerken bezieht sich der Begriff "API" nun auf Systemschnittstellen, die über ein Netzwerk zugänglich sind. Clients rufen diese Schnittstellen über Protokolle wie HTTP auf, um Client-Funktionen auszuführen, wie z. B. das Abfragen der Wetter-API nach Wetterinformationen.

Im ursprünglichen Sinne bezieht sich API auf einen Kanal, den das Softwaresystem für andere Dienste bereitstellt, der die Spezifikation der Interoperabilität zwischen verschiedenen Subsystemen definiert. Der Authentifizierungsdienst stellt beispielsweise Schnittstellen für Benutzeranmeldung, -registrierung und den Abruf von Benutzerinformationen bereit. Andere Dienste können diese Aufrufschnittstellen verwenden, um die Funktion der Benutzerauthentifizierung zu vervollständigen. Ebenso können Subsysteme über die API zusammenarbeiten, um die Aufgabe der gesamten Anwendung zu erfüllen.

Was ist API-Sicherheit?

Nach der Übersicht über APIs werden wir nun die API-Sicherheit einführen. API-Sicherheit umfasst drei Hauptperspektiven:

Informationssicherheit (InfoSec): Aus der Informationsperspektive sicherstellen, dass die Informationen während ihrer Erzeugung, Übertragung, Speicherung und Zerstörung im gesamten Lebenszyklus geschützt sind.

Netzwerksicherheit (NetSec): Aus der Netzwerkperspektive sicherstellen, dass die über das Netzwerk übertragenen Daten nicht abgehört oder manipuliert werden und dass keine unbefugten Personen auf das Netzwerk zugreifen.

Anwendungssicherheit (AppSec): Aus der Anwendungssystemperspektive sicherstellen, dass die entwickelten Anwendungen bösartige Angriffe verhindern können.

API-Sicherheit ist der Schnittpunkt dieser drei Aspekte, was bedeutet, dass alle drei Aspekte unverzichtbar sind, wenn man API-Sicherheit gut machen möchte.

image.png

Häufige API-Sicherheitsangriffe

OWASP, das Open Web Application Security Project, hat eine Liste von 10 häufigen API-Sicherheitsproblemen veröffentlicht OWASP API Security Project | OWASP Foundation.

Es enthält die folgenden Probleme:

Broken Object Level Authorization: Benutzer greifen auf Datenobjekte zu, auf die sie keinen Zugriff haben.

Broken User Authentication: Fehlerhafte Implementierung des Authentifizierungsdienstes ermöglicht es Benutzern, den Authentifizierungsmechanismus zu umgehen und illegal auf die API zuzugreifen.

Excessive Data Exposure: Ermöglicht es Benutzern, übermäßig sensible Daten zu erhalten, die eigentlich verboten sein sollten.

Lack of Resources & Rate Limiting: Fehlende Einschränkungen der Anzahl der Ressourcen, die zur Erfüllung der Kundenanforderungen benötigt werden, sowie realistische Anforderungsvolumina.

Broken Function Level Authorization: Benutzer greifen auf eine Funktions-API zu, auf die sie keinen Zugriff haben. Mass Assignment: Benutzer ändern unbeabsichtigt Daten, die sie nicht bearbeiten dürfen, über eine falsch entwickelte Schnittstelle.

Security Misconfiguration: Unsachgemäß konfigurierte Sicherheitsmaßnahmen für die API.

Injection: Nicht vertrauenswürdige Dateneingaben lösen SQL-, Befehlsinjektionen, unvorhergesehene Befehlsausführungen oder Datenzugriffe aus.

Improper Assets Management: Unsachgemäße Verwaltung der API-Ressourcen, wie z. B. das Freigeben von APIs für Testumgebungen oder frühere falsche Offline-API-Versionen.

Insufficient Logging & Monitoring: Es ist schwierig, Sicherheitsanomalien mit Auditmethoden zu identifizieren, da keine Protokollierungs- und Überwachungstools für den API-Zugriff vorhanden sind.

Nachdem wir die häufigen Probleme im Zusammenhang mit der API-Sicherheit bemerkt haben, was sollte implementiert werden, um die API zu schützen?

Wie schützt man seine API?

In Bezug auf den Schutz der API ist es auch möglich, Maßnahmen aus drei Perspektiven zu ergreifen:

InfoSec: Wir können ein Vertraulichkeitssystem für Informationen in Übereinstimmung mit rechtlichen Richtlinien und Sicherheitsanforderungen aufbauen, um die Offenlegung persönlicher Informationen zu vermeiden.

NetSec: Verschlüsselung und Überprüfung der Datenübertragung sind notwendig.

AppSec: Wir müssen die Sicherheit der Anwendung härten.

Hier sind einige zusätzliche Praktiken für die API-Sicherheit.

Konstante Verschlüsselung: Wir können Datenabhören und Datenmanipulationen, die durch unverwaltete Netzwerke verursacht werden, durch eine vollständige TLS-Einrichtung verhindern. Darüber hinaus ist es auch notwendig, mTLS zu aktivieren, um die Korrektheit der Client-Seite zu überprüfen und unbefugten Zugriff zu verhindern.

Vorsichtiger Umgang mit Tokens: Wir müssen vorsichtig mit der Verwendung von JWTs umgehen, da es dem Client ermöglicht, sie zu decodieren, was bei unsachgemäßer Nutzung vertrauliche Informationen preisgeben könnte. Außerdem werden wir Schwierigkeiten haben, wenn wir eine bestimmte Anmeldesitzung widerrufen möchten, da die Anwendung eines Widerrufsverfahrens aufgrund seiner Einschränkungen kompliziert ist.

Kleinere Berechtigungsgranularität: Weisen Sie minimale Berechtigungen für den API- und Datenzugriff zu, um die Möglichkeit eines unbefugten Zugriffs zu umgehen.

Eingabevalidierung: Vertrauen Sie niemals den Eingabewerten des Clients. Sie müssen die Eingabewerte des Clients validieren, um sicherzustellen, dass sie den Sicherheitsanforderungen entsprechen.

Rate Limiting: Begrenzen Sie die Geschwindigkeit des API-Zugriffs. Diese Maßnahme verhindert Denial-of-Access-Angriffe, die auftreten, wenn ein System mit Anfragen überlastet ist, die es nicht alle auf einmal verarbeiten kann.

Protokollierung und Überwachung: Die Gestaltung eines geeigneten Protokollierungs- und Überwachungsmechanismus für das System ermöglicht es uns, Sicherheitsereignisse zu identifizieren und schnell geeignete Maßnahmen zu ergreifen. Wir können auch nach einem Informationssicherheitsereignis zurückblicken, um die betroffenen Systeme und Daten zu identifizieren und das Ausmaß möglicher Datenlecks zu bestimmen.

Die oben genannten Maßnahmen erfordern, dass wir spezifische Änderungen am Anwendungssystem vornehmen, indem wir einzelne Komponenten verarbeiten, was nicht nur sehr kostspielig ist, sondern auch zu weiteren Problemen führen kann.

Wie können wir Sicherheitsmaßnahmen umsetzen, ohne die Anwendungsdienste zu gefährden?

API-Gateways

API-Gateways bieten einen neuen Weg außerhalb der Systemtransformation, der die Transformationskosten erheblich reduziert und eine zentralisierte und einheitliche Verwaltung des eingehenden Datenverkehrs bietet. API-Gateways bieten auch umfangreiche Sicherheitsfunktionen, die es uns ermöglichen, unbefugte Besuche zu verbieten und zu protokollieren.

Am Beispiel von Apache APISIX wird der folgende Abschnitt mehrere API-Gateway-Anwendungsszenarien zur Sicherung von APIs beschreiben.

Verschlüsselung (TLS/mTLS)

Sie können nicht nur TLS für die API aktivieren, um HTTPS-Zugriff zu bieten, sondern auch mTLS aktivieren, um die Identität des Clients zu überprüfen. Natürlich ist es auch möglich, TLS/mTLS für Upstream-Dienste zu aktivieren, um die Sicherheit des Datenverkehrs während der Übertragung durch das interne Netzwerk zu gewährleisten. Sie können das mTLS-Handbuch konsultieren, um die erforderliche Funktionalität zu aktivieren.

Identitätsüberprüfung

Alle Verbindungen können verschlüsselt werden, aber dies garantiert nicht die Sicherheit der API. Daher müssen wir in realen Geschäftsszenarien Komponenten im Zusammenhang mit der Authentifizierung einbeziehen. Um dieses Problem zu lösen, bietet APISIX eine Vielzahl von Plugins, die mit der Authentifizierung verbunden sind und einfach mit externen Authentifizierungsdiensten oder direkt über das Gateway verbunden werden können. Diese Plugins reichen von den einfacheren LDAP, OpenID Connect und Open Policy Agent bis hin zu den komplexeren wie Basic Auth, Key Auth, JWT Auth und Forward Auth.

Rate Limiting

Mangelnde Ressourcen und Rate Limiting sind zwei häufige Angriffe. Für diese Situationen enthalten Gateways oft Plugins im Zusammenhang mit Rate-Limiting; so auch Apache APISIX. Es bietet drei Plugins: limit-count, limit-req und limit-conn, die die API-Anfragegeschwindigkeit, Anfragemessung und Verbindungsbegrenzung bieten. Sie können helfen, den API-Zugriffsdruck effektiv zu kontrollieren und zu verhindern, dass das System mit unüberschaubaren Mengen von Anfragen überlastet wird.

Sicherheitseinschränkungen

APISIX bietet CORS und CSRF-Plugins, um Cross-Domain- und Cross-Site-Request-Forgery-Schutz für die API zu bieten, was ihre Fähigkeit zur Sicherung ihrer Sicherheit weiter verbessert. Darüber hinaus ermöglichen seine Einschränkungs-Plugins die Blockierung von IP, UA, Referer und URI, was die meisten API-Angriffe abwehren kann.

Eingabeüberprüfung

APISIX bietet das request-validation-Plugin, das API-Anbietern ermöglicht, Benutzereingaben über jsonschema zu validieren. Die strukturierten Daten und die Validierungsregelbeschreibungssprache können gut für die Datenvalidierung verwendet werden.

Beobachtbarkeit

Die oben aufgeführten Methoden sind alle Möglichkeiten, die API zu schützen. Allerdings ist kein System vollständig sicher. Sobald ein System angegriffen wird, müssen wir schnell handeln, um die Ursache des Angriffs zu bestimmen und weitere Schäden durch den Angriff zu verhindern. Daher bietet APISIX auch eine Vielzahl von Protokollierungs-Plugins, die Protokolle an verschiedene Ziele senden können, darunter Kafka, Clickhouse und Logging-as-a-Service-Lösungen, die von Cloud-Anbietern wie Google Cloud, Splunk usw. angeboten werden.

Darüber hinaus bietet APISIX Link-Tracking-Funktionalität mit Anbindung an Skywalking, OpenTelemetry und andere Tracing-Programme.

Zusätzlich bietet APISIX das Prometheus-Plugin, das Metriken im Zusammenhang mit API-Anfragen berechnen und an den Prometheus-Überwachungsdienst exportieren kann, um bei der Identifizierung von Leistungsproblemen und der Abwendung von systemischen Dienstunterbrechungen zu helfen.

Wir können potenzielle Sicherheitsvorfälle rechtzeitig identifizieren, indem wir das System ausreichend beobachtbar machen.

Programmierfähigkeiten

Last but not least bietet APISIX auch ein serverless-Plugin, um 0-Day-Schwachstellen zu adressieren, das es Benutzern ermöglicht, Lua-Code zu verwenden, um bei der Ankunft einer Anfrage einige Logiken auszuführen. Wir können diese Funktionalität nutzen, um einige 0-Day-Schwachstellen vorübergehend zu blockieren, sobald sie auftreten.

Fazit

API-Sicherheit ist für Dienstanbieter unerlässlich, daher müssen Entwickler sich bemühen, sie auf dem neuesten Stand zu halten. Um zu demonstrieren, wie API-Gateways in verschiedenen Anwendungsszenarien verwendet werden können, verwendet dieser Artikel Apache APISIX als Beispiel, was eine neuartige Strategie darstellt, die sich von der Systemmodifikation unterscheidet und Entwicklern hilft, die Kosten für Sicherheitsbedenken zu senken.

Tags: