Myst - stock.adobe.com
Wie man gängige API-Schwachstellen in den Griff bekommt
Für einen reibungslosen Geschäftsbetrieb sind APIs als Verbindungsglieder wichtiger denn je. Dennoch weisen viele von ihnen bekannte und leicht zu behebende Schwachstellen auf.
APIs sind für den Erfolg einer Anwendung von entscheidender Bedeutung, aber diese kleinen Codestücke sind ein äußerst beliebter Angriffsvektor. APIs ermöglichen Anwendungen und Nutzern den einfachen Zugriff auf und die Interaktion mit den digitalen Daten und Diensten eines Unternehmens. Sie sind so beliebt, dass sie für einen Großteil des weltweiten Internetverkehrs von Bedeutung sind. Doch APIs bieten auch offene Einstiegspunkte in gut geschützte IT-Infrastrukturen. Ohne entsprechenden Schutz können böswillige Akteure über eine API leicht in einem Netzwerk Fuß fassen.
Sicherheitsteams müssen sich darauf konzentrieren, die folgenden fünf Schwachstellen zu beseitigen, die - obwohl sie gut bekannt sind - in den gängigen APIs noch häufig vorhanden und ausnutzbar sind.
1. Schwache Authentifizierung
Schwachstelle
Durch die Authentifizierung wird überprüft, ob ein Benutzer oder ein Gerät derjenige ist, für den er sich ausgibt. Dadurch wird verhindert, dass Personen oder Geräte ohne die richtigen Berechtigungen auf Informationen und Ressourcen zugreifen können. Wenn der Authentifizierungsprozess leicht zu umgehen oder zu kompromittieren ist – zum Beispiel durch schwache oder leicht zu erratende Passwörter - kann sich ein Angreifer einmalig oder dauerhaft als rechtmäßiger Benutzer ausgeben.
Lösung
Erzwingen Sie die Verwendung von sicheren Passwörtern und eine mehrstufige Authentifizierung für den Zugang zu sensiblen Ressourcen. Noch wichtiger ist es, sicherzustellen, dass Kennwort- und Authentifizierungsverfahren wie erwartet funktionieren. Dies erfordert umfangreiche Tests, insbesondere der Verwaltung von Sitzungscookies, da diese leicht ausnutzbare Schwachstellen enthalten können. Sitzungscookies sollten völlig zufällig und unvorhersehbar sein und nach jeder erfolgreichen Anmeldung oder Änderung der Zugriffsebene aktualisiert werden. Jeder Versuch, auf Ressourcen zuzugreifen, ohne korrekt authentifiziert zu sein, sollte den Antwortstatuscode „401 Unauthorized“ erhalten. Begrenzen Sie die Anzahl der fehlgeschlagenen Anmeldeversuche, nach denen das Konto gesperrt wird. Verwenden Sie API-Schlüssel, um Benutzer zu identifizieren, aber nicht, um sie zu authentifizieren oder zu autorisieren, da Schlüssel zu leicht offengelegt und missbraucht werden können.
2. Fehlende Objektberechtigung
Schwachstelle
Dies tritt auf, wenn serverseitige Prüfungen nicht bestätigen, dass der Anfragende berechtigt ist, auf die in der Anfrage aufgeführten Daten und Objekte zuzugreifen oder sie zu ändern. Ein Angreifer könnte beispielsweise die Benutzer-ID in einer Anfrage ändern, um zu sehen, ob Informationen über einen anderen Benutzer zurückgegeben werden, was zu einem nicht autorisierten Zugriff auf Daten führen könnte. Diese Schwachstelle wurde 2019 in einer Uber-API entdeckt, die es Fahrern ermöglichte, auf die Daten anderer Fahrer zuzugreifen, indem sie einfach die Benutzer-ID änderten. Wenn bei Funktionen zum Ändern von Daten auch keine ordnungsgemäß implementierten Berechtigungsprüfungen vorhanden sind, können Angreifer möglicherweise Daten ändern oder löschen und sogar das Konto eines anderen Nutzers vollständig übernehmen.
Lösung
Die Bezeichner für Objekte sollten zufällig und unvorhersehbar sein und nicht aus vorhersehbaren sequenziellen Werten bestehen, die leicht erraten werden können. Serverseitige Prüfungen sollten auch Folgendes überprüfen:
- Der Benutzer ist berechtigt, auf das angeforderte Objekt zuzugreifen.
- Der Benutzer verfügt über die erforderlichen Berechtigungen, um eine bestimmte Operation am Objekt auszuführen.
3. Injection-Schwachstelle
Schwachstelle
Wenn eine API vom Benutzer bereitgestellte Daten empfängt, diese aber vor der Verarbeitung der Anfrage nicht analysiert und validiert werden, können Angreifer bösartige Daten oder Befehle senden, um einen Injektionsangriff auszulösen. Datenbankabfragen und Betriebssystembefehle können über XML-, JSON-, Cross-Site-Scripting- (XSS), SQL- und NoSQL-Injektionen ausgeführt werden, um Zugriff auf Daten zu erhalten oder bösartige Befehle ohne Autorisierung auszuführen.
Lösung
Anstatt eigene Funktionen für die Validierung und Bereinigung eingehender Daten zu entwickeln, sollten Sie die zahlreichen Spezialbibliotheken nutzen, die Allowlists implementieren. So lässt sich sicherzustellen, dass die Daten dem erforderlichen Typ und der erforderlichen Länge entsprechen, und unerwartete Zeichen oder Parameter sowie bekannte Injektionsbefehle entfernen. Führen Sie diese Prüfungen bei jeder eingehenden Anfrage durch.
4. Übermäßige Offenlegung von Daten (Datenexposition)
Schwachstelle
API-Antworten auf eine Anfrage geben oft weit mehr Daten zurück, als zur Erfüllung der Anfrage erforderlich sind. Dies geschieht in der Regel, weil es für einen Entwickler einfacher ist, einen Code zu schreiben, der eine ganze Zeile aus einer Tabelle zurückgibt, als nur das oder die spezifischen benötigten Felder. Eine Profilseite in einer Messaging-App kann beispielsweise den Namen und das Alter einer Person anzeigen, aber oft geben API-Anfragen alle über den Benutzer gespeicherten Informationen zurück und nicht nur den Namen und das aus dem Geburtsdatum berechnete Alter des Benutzers. Obwohl die App die Antwort filtern und nur den Namen und das Alter anzeigen kann, ist es für Angreifer ein Leichtes, andere in der Anfrage zurückgegebene Details zu lesen und zu sammeln, einschließlich persönlich identifizierbarer Informationen wie Geburtsdatum, E-Mail-Adresse und Standort. Diese Offenlegung sensibler Daten kann gegen Datenzugriffsrichtlinien und Compliance-Vorschriften verstoßen.
Lösung
API-Antworten sollten nur die Daten zurückgeben, die für die Erfüllung einer Anfrage erforderlich sind. Von der API durchgeführte Datenbankabfragen sollten nur den/die relevanten Datensatz/Datensätze und das/die Feld/Felder auswählen. In der Dokumentation einer API sollte angegeben werden, welche Daten zur Erfüllung einer Anfrage erforderlich sind. So sollte es ein Leichtes sein, sicherzustellen, dass die Datenbankabfragen den angeforderten Feldern und Datensätzen entsprechen. Denken Sie daran, dass die Client-Anwendung nur filtern kann, welche Daten für den Benutzer sichtbar sind, nicht aber, welche Daten sie erhält.
5. Ungenügend konfigurierte Sicherheit
Schwachstelle
APIs laufen auf komplexen Infrastrukturen, deren Ressourcen je nach Bedarf automatisch auf- und abwärts skaliert werden. Wenn die Sicherheitskontrollen nicht auf jeder Ebene korrekt konfiguriert sind, können sensible Daten und Systeme gefährdet sein. Zu den häufigen Fehlkonfigurationen gehören ungepatchte Geräte und Anwendungen, unsichere Standardkonfigurationen, unverschlüsselte Daten bei der Übertragung sowie offene und unsichere Cloud-Speicher und -Dienste.
Lösung
APIs sollten nur HTTPS-Endpunkte bereitstellen. Da HTTPS-Endpunkte jedoch offen für das Internet sind, ist es auch wichtig, dass die Ratenbegrenzung korrekt angewendet wird, um die Rate der Anfragen und die Anzahl der angeforderten Ressourcen zu kontrollieren. Andernfalls sind sie anfällig für DoS- und Brute-Force-Angriffe. Deaktivieren Sie ungenutzte HTTP-Methoden wie TRACE und fügen Sie die entsprechenden HTTP-Antwort-Sicherheits-Header hinzu, zum Beispiel X-Content-Type-Options: nosniff, um XSS zu verhindern, und X-Frame-Options: deny, um Clickjacking-Versuche zu verhindern. Außerdem sollten alle Fehlermeldungen, die eine API-Anfrage generiert, nur minimale Informationen enthalten, um sicherzustellen, dass keine sensiblen Daten über das System preisgegeben werden, wie zum Beispiel technische Details des Fehlers.
Die allgemeine API-Sicherheit verbessern
Um sicherzustellen, dass APIs keine anfälligen Kanäle in die IT-Infrastruktur öffnen, muss man sich auf den Schutz der Ressourcen konzentrieren, auf die sie zugreifen, und auf die Aktionen, die Benutzer mit ihnen durchführen können. Dies bedeutet, dass Authentifizierungs- und Autorisierungsprüfungen nicht nur einmal, sondern kontinuierlich mit einer Zero-Trust-Strategie durchgeführt werden müssen.
Nutzen Sie die Bedrohungsmodellierung, um den Design Ihrer APIs so zu gestalten, dass Sicherheitskontrollen, wie zum Beispiel starke Identitätskontroll- und Zugriffsverwaltungsfunktionen, zu Beginn der Build-Phase integriert werden. Damit lassen sich erkannte Risiken zu mindern. Testen Sie, dass diese Kontrollen innerhalb des DevOps-Workflows funktionieren.
Angreifer können Tage mit der Erkundung und Erforschung verbringen, bevor sie eine API erfolgreich als Teil eines Cyberangriffs ausnutzen. Unternehmen sollten eine umfassende Protokollierung und Überwachung des API-Datenverkehrs einrichten, um Angriffe zu erkennen und zu stoppen, bevor sie Schaden anrichten. Arbeiten Sie mit einem aktuellen API-Inventar und überprüfen Sie regelmäßig die Sicherheitskontrollen und -konfigurationen, um sicherzustellen, dass sie weiterhin angemessen und wirksam sind.
Herkömmliche perimeterbasierte Sicherheit reicht nicht aus, um Angriffe in stark verteilten API-Infrastrukturen abzuwehren. Regelmäßige Sicherheitsprüfungen von Containern, Microservices, Cloud-Speichern und Pipelines für die kontinuierliche Integration/kontinuierliche Bereitstellung sind unerlässlich, um ungenutzte oder vergessene Zugangspunkte zu verhindern, die vor Angriffen ungeschützt sind.
Der Vorrang von Sicherheit vor Geschwindigkeit während der Entwicklung kann ein wichtiger Schritt sein, um API-Sicherheitslücken zu beseitigen, die Daten und Benutzer gefährden, bevor sie die produktive Version erreichen.