kentoh - Fotolia
Zwölf Best Practices für die Sicherheit von APIs
Bei der Softwareentwicklung sollte API-Sicherheit von Anfang an berücksichtigt werden. Diese Best Practices unterstützen dabei, APIs zu entwerfen, bereitzustellen und zu schützen.
Eine API ermöglicht es Softwareanwendungen, miteinander zu interagieren, indem sie steuert, wie Anfragen gestellt und bearbeitet werden. Dank des Aufschwungs des Cloud Computing und des Übergangs von monolithischen Anwendungen zu Microservices sind sie zu einem zentralen Element in der heutigen digitalen Welt geworden.
Mittlerweile gibt es mehr als 24.000 öffentliche APIs, die von Millionen von Entwicklern und Hunderttausenden von Unternehmen auf der ganzen Welt genutzt werden.
Laut einer Umfrage von RapidAPI vom November 2021 stimmten fast alle Befragten darin überein, dass die erfolgreiche Umsetzung einer API-Strategie für die Sicherung der zukünftigen Einnahmen und des Wachstums ihres Unternehmens von entscheidender Bedeutung ist. Das bedeutet, dass APIs zum Rückgrat der meisten modernen Anwendungen werden, so dass ihre Sicherheit für die moderne Informationssicherheit von zentraler Bedeutung ist.
Was ist API-Sicherheit?
APIs ermöglichen Benutzern, Anwendungen und IoT-Geräten den Zugriff auf sensible Daten und andere Netzwerkressourcen. Ohne robuste Sicherheitsvorkehrungen sind sie jedoch äußerst anfällig für eine Vielzahl von Angriffen, die zu Datendiebstahl und gefährdeten Netzwerken führen können.
Das Ziel der API-Security besteht darin, sicherzustellen, dass API-Anfragen authentifiziert, autorisiert, validiert und bereinigt werden und auch dann noch verarbeitet werden können, wenn der Dienst unter Last steht. Eine moderne Anwendung oder ein moderner Dienst verfügt über zahlreiche API-Endpunkte, die unterschiedliche Protokolle und Anfrageformate verwenden, so dass sich die Merkmale der API-Sicherheit von Standard-Webservern unterscheiden, die nur einige wenige Standard-Ports und -Anfragen schützen müssen.
Die API-Sicherheit beruht nicht nur auf Netzwerksicherheitskontrollen, sondern auch auf robust kodierten APIs, die ungültige und böswillige eingehende Anfragen verarbeiten und abweisen, um die Vertraulichkeit, Verfügbarkeit und Integrität der Daten und Ressourcen zu gewährleisten, die von den APIs bereitgestellt werden.
Warum ist API-Sicherheit so wichtig?
Da immer mehr Unternehmen den Zugriff auf Daten und Dienste über APIs ermöglichen, stellen diese Vektoren ein attraktives Ziel für Datendiebstahl und Softwareangriffe dar.
Unsichere APIs sind eine ernsthafte Bedrohung. Sie sind in der Regel die am stärksten gefährdete Komponente eines Netzwerks, anfällig für DoS-Angriffe und lassen sich leicht zurückentwickeln und ausnutzen. So könnten beispielsweise API-Schwachstellen in Online-Diensten von Coinbase, Experian, John Deere und Peloton die persönlichen Daten von Benutzern preisgegeben oder betrügerische Transaktionen ermöglicht haben.
Die Kundendaten des API-Security-Unternehmens Salt Security zeigen, dass der gesamte API-Traffic pro Kunde zwischen Juli 2021 und Juli 2022 um 168 Prozent zugenommen hat, wobei der bösartige API-Angriffs-Traffic um 117 Prozent gestiegen ist und 2,1 Prozent des gesamten API-Traffics ausmacht. Und ein Bericht von Noname Security ergab, dass 76 Prozent der Befragten zwischen September 2021 und September 2022 von einem API-Sicherheitsvorfall betroffen waren.
Die häufigsten API-Sicherheitsrisiken
Die folgenden API-Sicherheitsrisiken sollten während der Entwicklung und bei jeder Aktualisierung einer API berücksichtigt werden:
Defekte Autorisierung auf Objektebene (Broken Object Level Authorization, BOLA). BOLA tritt auf, wenn eine Anfrage auf Daten zugreifen oder diese ändern kann, auf die der Anfragende keinen Zugriff haben sollte, zum Beispiel wenn er durch Manipulation eines Identifier in der Anfrage auf das Konto eines anderen Benutzers zugreifen kann.
Defekte Autorisierung auf Funktionsebene (Broken Function Level Authorization). Dies tritt auf, wenn das Prinzip der minimalen Rechtevergabe (Principle of least Privilege, POLP) nicht umgesetzt wird, oft als Ergebnis zu komplexer Zugriffskontrollrichtlinien. Dies führt dazu, dass ein Angreifer in der Lage ist, sensible Befehle auszuführen oder auf Endpunkte zuzugreifen, die für privilegierte Konten vorgesehen sind.
Manipulierte Benutzerauthentifizierung. Ähnlich wie bei BOLA kann sich ein Angreifer, wenn sich der Authentifizierungsprozess kompromittieren lässt, einmalig oder sogar dauerhaft als ein anderer Benutzer ausgeben.
Übermäßige Offenlegung von Daten. API-Antworten auf eine Anfrage geben oft mehr Daten zurück, als relevant oder notwendig sind. Auch wenn die Daten dem Benutzer nicht angezeigt werden, können sie leicht untersucht werden und zu einer potenziellen Offenlegung sensibler Informationen führen.
Unsachgemäßes Asset Management. Die Entwicklung und Bereitstellung von APIs geht in der Regel schnell vonstatten. Bei einer übereilten Veröffentlichung neuer oder aktualisierter APIs wird eine gründliche Dokumentation oft vernachlässigt. Dies führt zu ungeschützten Endpunkten und einem mangelnden Verständnis dafür, wie ältere APIs funktionieren und implementiert werden müssen.
Mangel an Ressourcen und fehlende Beschränkungen. API-Endpunkte sind in der Regel offen für das Internet und, wenn es keine Beschränkungen für die Anzahl oder Größe der Anfragen gibt, anfällig für DoS- und Brute-Force-Angriffe.
Schwachstellen bei der Injection. Wenn Anfragedaten nicht korrekt geparst und validiert werden, kann ein Angreifer möglicherweise einen Command- oder SQL-Injection-Angriff starten, um darauf zuzugreifen oder bösartige Befehle ohne Autorisierung auszuführen.
Massenzuweisung (Mass Assignment). Softwareentwicklungs-Frameworks verfügen häufig über die Funktion, alle von einem Online-Formular empfangenen Daten mit nur einer Codezeile in eine Datenbank oder ein Objekt einzufügen – sogenanntes Mass Assignment –, wodurch die Notwendigkeit entfällt, immer wieder neue Zeilen für die Formularzuordnung zu schreiben. Wenn dies geschieht, ohne zu spezifizieren, welche Daten akzeptabel sind, eröffnet dies eine Vielzahl von Angriffsvektoren.
Best Practices für die API-Sicherheit
Die folgenden zwölf Best Practices tragen dazu bei, die Sicherheit der APIs eines Unternehmens zu erweitern und zu verbessern:
1. Setzen Sie auf Authentifizierung und Autorisierung
Um den Zugriff auf API-Ressourcen zu kontrollieren, müssen Sie alle zugehörigen Benutzer und Geräte sorgfältig und umfassend identifizieren. Dies erfordert in der Regel, dass clientseitige Anwendungen ein Token in den API-Aufruf aufnehmen, damit der Dienst den Client validieren kann.
Verwenden Sie Standards wie OAuth 2.0, OpenID Connect und JSON-Web-Tokens, um den API-Traffic zu authentifizieren und Zugriffskontrollregeln oder Gewährungstypen zu definieren, die festlegen, welche Benutzer, Gruppen und Rollen auf bestimmte API-Ressourcen zugreifen können.
Befolgen Sie immer das Prinzip der minimalen Rechtevergabe. Wenn ein Benutzer nur einen Blog lesen oder einen Kommentar abgeben möchte, sind dies die einzigen Berechtigungen, die zugewiesen werden sollten.
2. Implementieren Sie eine Zugriffskontrolle
Unternehmen, die Dritten den Zugriff auf interne Daten und Systeme über APIs ermöglichen wollen, müssen Kontrollen zur Verwaltung dieses Zugriffs einführen und testen: wer, was und wann, sowie Kontrollen des Datenzugriffs, der Erstellung, Aktualisierung und Löschung – das Null-Vertrauens-Sicherheitsmodell.
Halten Sie APIs hinter einer Firewall, einer Web Application Firewall (WAF) oder einem API-Gateway, auf die über ein sicheres Protokoll wie HTTPS zugegriffen wird, um einen Basisschutz zu gewährleisten, zum Beispiel durch Scannen auf Signature-basierte Bedrohungen und auf Injection-basierende Angriffe.
Gut konzipierte APIs können auch Rate Limits (Ratenbegrenzung) und Geovelocity-Checks anwenden sowie als Durchsetzungspunkt für Richtlinien wie Geo-Fencing und I/O Content Validation und Sanitization fungieren. Geovelocity-Checks ermöglichen eine kontextbasierte Authentifizierung, indem der Zugriff auf der Grundlage der erforderlichen Zeit zwischen dem vorherigen und dem aktuellen Anmeldeversuch bestimmt wird.
All diese Prüfungen werden von Middleware-Code durchgeführt, der Teil der API-Anwendung ist. Die Middleware bearbeitet die Anfragen, bevor sie zur Erfüllung weitergeleitet werden.
3. Verschlüsseln Sie Anfragen und Antworten
Der gesamte Netzwerkverkehr sollte verschlüsselt werden – insbesondere API-Anfragen und -Antworten, da sie wahrscheinlich sensible Anmeldeinformationen und Daten enthalten. Alle APIs sollten HTTPS verwenden und voraussetzen. Die Aktivierung von HTTP Strict Transport Security, wo immer möglich, ist besser als die Umleitung von HTTP-Verkehr auf HTTPS, da sich API-Clients möglicherweise nicht wie erwartet verhalten.
4. Überprüfen Sie die Daten
Gehen Sie niemals davon aus, dass die API-Daten korrekt bereinigt oder validiert wurden. Implementieren Sie Ihre eigenen Datenbereinigungs- und Validierungsroutinen auf Serverseite, um Standardinjektions-Injection-Fehler und Cross-Site-Request-Forgery-Angriffe zu verhindern. Debugging-Tools wie Postman und Chrome DevTools können helfen, den Datenfluss der API zu untersuchen und Fehler und Anomalien zu verfolgen.
5. Bewerten Sie Ihre API-Risiken
Eine weitere wichtige Best Practice für die API-Sicherheit ist die Durchführung einer Risikobewertung für alle APIs in Ihrer bestehenden Registrierung. Legen Sie Maßnahmen fest, um sicherzustellen, dass sie den Sicherheitsrichtlinien entsprechen und nicht für bekannte Risiken anfällig sind. Die Liste der API Security Top 10 Schwachstellen des Open Web Application Security Project ist eine gute Quelle, um sich über bestehende Angriffe und bösartige Software zu informieren.
Eine Risikobewertung sollte alle Systeme und Daten identifizieren, die im Falle eines Angriffs auf eine API betroffen sind, und dann einen Behandlungsplan und die erforderlichen Kontrollen aufstellen, um alle Risiken auf ein akzeptables Niveau zu reduzieren.
Dokumentieren Sie die Überprüfungsdaten und wiederholen Sie die Bewertungen, wenn neue Bedrohungen auftreten oder die API geändert wird. Diese Dokumentation sollte vor jeder nachfolgenden Codeänderung überprüft werden, um sicherzustellen, dass die Sicherheits- und Datenverarbeitungsanforderungen nicht beeinträchtigt werden.
6. Geben Sie nur notwendige Informationen weiter
API-Antworten enthalten oft den gesamten Datensatz und nicht nur die relevanten Felder, so dass sich die Client-Anwendung darauf verlässt, dass der Benutzer die angezeigten Informationen filtert. Dies ist eine faule Programmierung, die nicht nur die Antwortzeiten verlangsamt, sondern auch Angreifern zusätzliche Informationen über die API und die Ressourcen liefert, auf die sie zugreift.
Antworten sollten die Mindestinformationen enthalten, die zur Erfüllung einer Anfrage erforderlich sind. Wird zum Beispiel das Alter eines Mitarbeiters abgefragt, sollte nicht auch noch das Geburtsdatum zurückgegeben werden.
7. Wählen Sie Ihre Webservices-API
Es gibt zwei dominierende Optionen für den Zugriff auf Webdienste über APIs: Simple Object Access Protocol (SOAP), ein Kommunikationsprotokoll; und Representational State Transfer API (REST API oder RESTful API), eine Reihe von Architekturprinzipien für die Datenübertragung. Sie verwenden unterschiedliche Formate und Semantiken und erfordern unterschiedliche Strategien zur Gewährleistung einer robusten Sicherheit.
Bei SOAP wird die Sicherheit auf der Nachrichtenebene durch digitale Signaturen und verschlüsselte Teile innerhalb der XML-Nachricht selbst gewährleistet. REST stützt sich in hohem Maße auf Zugriffskontrollregeln, die mit der universellen Ressourcenkennung der API verbunden sind, wie zum Beispiel HTTP-Tags und der URL-Pfad.
Verwenden Sie SOAP, wenn Standardisierung und Sicherheit Ihre Hauptanliegen sind. Zwar unterstützen beide Optionen Secure Sockets Layer/Transport Layer Security (SSL/TLS), doch SOAP bietet darüber hinaus Web Services Security, Identitätsüberprüfung durch Vermittler und nicht nur die von SSL/TLS gebotene Punkt-zu-Punkt-Verifizierung sowie integrierte Fehlerbehandlung. SOAP stellt jedoch Komponenten der Anwendungslogik als Dienste und nicht als Daten zur Verfügung, was die Implementierung von SOAP komplex machen kann und möglicherweise eine Umgestaltung der Anwendung erfordert.
REST hingegen ist mit verschiedenen Datenausgabetypen kompatibel, darunter JSON, kommagetrennte Werte und HTTP, während SOAP nur XML und HTTP verarbeiten kann. Darüber hinaus greift REST lediglich auf Daten zu und ist daher eine einfachere Methode für den Zugriff auf Webdienste. Aus diesen Gründen bevorzugen Unternehmen oft REST für Webentwicklungsprojekte. Allerdings muss für den Datenaustausch, die Bereitstellung und die Interaktion mit den Kunden die Security integriert werden.
8. Speichern Sie die APIs in einer API-Registry
Niemand kann sichern, was er nicht kennt. Es ist daher unerlässlich, alle APIs in einer Registry zu erfassen, um Merkmale wie Name, Zweck, Nutzlast, Verwendung, Zugriff, Live-Datum, End-Datum und Eigentümer zu definieren. Dadurch werden Schatten- oder Silo-APIs vermieden, die vergessen, nie dokumentiert oder außerhalb eines Hauptprojekts entwickelt wurden, möglicherweise durch Fusionen, Übernahmen, Test- oder veraltete Versionen.
Zeichnen Sie Details zu den zu protokollierenden Informationen auf, zum Beispiel wer, was und wann, um Compliance- und Audit-Anforderungen zu erfüllen und die forensische Analyse im Falle eines Sicherheitsvorfalls zu unterstützen.
Eine gute Dokumentation ist besonders wichtig für Drittentwickler, die diese APIs in ihre eigenen Projekte einbinden möchten. Die API-Registry sollte Links zu dem Dokument oder Handbuch enthalten, das alle technischen API-Anforderungen enthält, einschließlich Funktionen, Klassen, Rückgabetypen, Argumente und Integrationsprozesse.
9. Testen Sie regelmäßige die API-Sicherheit
Zusätzlich zu den gründlichen Tests von APIs während der Entwicklung müssen die Sicherheitsteams regelmäßig die Sicherheitskontrollen überprüfen, die die aktiven APIs schützen, um sicherzustellen, dass sie wie erwartet funktionieren und sich wie dokumentiert verhalten.
Incident-Response-Teams sollten einen Plan für den Umgang mit Alerts erstellen, die von der Bedrohungserkennung und anderen Sicherheitskontrollen erzeugt werden und auf einen API-Angriff hindeuten.
10. Verstecken Sie Ihre API-Schlüssel
API-Schlüssel identifizieren und verifizieren den Zugriff für die Anwendung oder Website, die eine API aufruft. Sie können auch Aufrufe an eine API blockieren oder drosseln und Nutzungsmuster identifizieren.
API-Schlüssel sind weniger sicher als Authentifizierungs-Tokens und müssen sorgfältig verwaltet werden. Vermeiden Sie es, API-Schlüssel direkt in ihren Code oder in Dateien innerhalb des Quellbaums der Anwendung einzubetten, wo sie versehentlich offengelegt werden können. Speichern Sie sie stattdessen in Umgebungsvariablen oder in Dateien außerhalb des Quellbaums der Anwendung. Noch besser ist es, einen Dienst zur Verwaltung von Geheimnissen zu verwenden, der die API-Schlüssel einer Anwendung schützt und verwaltet.
Auch mit diesen Maßnahmen sollten Sie nicht benötigte Schlüssel immer löschen, um die Anfälligkeit für Angriffe zu minimieren, und die Schlüssel in regelmäßigen Abständen neu generieren – insbesondere, wenn Sie den Verdacht haben, dass eine Bedrohung vorliegt.
11. Ergänzen Sie API-Überwachung und Bedrohungserkennung durch KI
Eine KI-gestützte Verhaltensanalyse kann die API-Sicherheit insgesamt erheblich verbessern. Sie vergleicht den normalen API-Traffic und gibt Aufschluss darüber, wie Benutzer auf APIs zugreifen und diese nutzen. Dies kann Entwicklern dabei helfen, die Schwellenwerte für die Sicherheitsprüfungen im Kontext fein abzustimmen. Tools zur Erkennung von Bedrohungen können diese Informationen nutzen, um nach anomalem Verhalten zu suchen und einen Missbrauch oder einen potenziellen Angriff zu stoppen.
Angreifer müssen eine API wiederholt untersuchen, um Schwachstellen oder Logik zu finden, die sie ausnutzen können, daher ist die Echtzeitüberwachung für die Angriffserkennung und -reaktion unerlässlich. Dieser Ansatz erfordert keine vordefinierten Richtlinien, Regeln oder Angriffssignaturen, so dass weniger ständige Aktualisierungen erforderlich sind, um neue und sich entwickelnde Angriffe zu stoppen.
12. Verstehen Sie den vollen Umfang der sicheren API-Nutzung
Die API-Sicherheit umfasst auch die APIs von Drittanbietern, die sie nutzt. Bevor Sie eine Anwendung oder einen Dienst entwickeln, der Daten von Drittanbietern über APIs verarbeitet, müssen Sie genau wissen, wie diese funktionieren und wie sie korrekt integriert werden.
Lesen Sie die API-Dokumentation gründlich und achten Sie dabei auf die Prozess- und Sicherheitsaspekte der API-Funktionen und -Routinen, zum Beispiel die erforderliche Authentifizierung, die Aufrufprozesse, die Datenformate und die zu erwartenden potenziellen Fehlermeldungen. Ein guter Ansatz hierfür ist die Erstellung eines Bedrohungsmodells, das Ihnen hilft, die Angriffsfläche zu verstehen, potenzielle Sicherheitsprobleme zu erkennen und von Anfang an geeignete Sicherheitsmaßnahmen einzubauen.
APIs bieten Unternehmen zahllose Möglichkeiten zur Verbesserung und Bereitstellung von Dienstleistungen, zur Einbindung von Kunden und zur Steigerung von Produktivität und Gewinn – allerdings nur, wenn sie sicher implementiert werden.