Die OWASP Top 10 werden vom Open Web Application Security Project (OWASP) erstellt – einer gemeinnützigen Organisation, die frei verfügbare Artikel und andere Informationen zur Sicherheit von Webanwendungen veröffentlicht.

Table of contents
  1. Was ist OWASP?
  2. Was ist die OWASP Top 10?
  3. Die OWASP Top 10 Liste

Was ist OWASP?

Die Open Web Application Foundation hat sich der Schaffung einer sichereren Webanwendungsumgebung verschrieben. Sie bietet kostenlos Artikel, Tools, Technologien und Foren an, um jeden Entwickler in die Lage zu versetzen, sicheren Code zu erstellen. Eines ihrer bekanntesten Projekte ist die OWASP Top 10.

Was ist die OWASP Top 10?

Die OWASP Top 10 ist eine öffentlich zugängliche Liste der 10 kritischsten Sicherheitslücken in Webanwendungen, die vom Open Web Application Security Project ermittelt wurden. Laut OWASP ist eine Sicherheitslücke eine Schwachstelle in einer Anwendung, die es einer böswilligen Partei ermöglicht, den Interessengruppen der Anwendung (Eigentümer, Benutzer usw.) Schaden zuzufügen. 

Diese Liste wird derzeit auch für mobile Anwendungen entwickelt.

Neben der Top-10-Liste veröffentlicht und pflegt OWASP auch die folgenden Informationen:

OWASP Top 10 List

Die OWASP Top 10 Liste

1. Injection Attacks

Eine Injection Attack bezieht sich auf die Eingabe von bösartigem Code durch einen Angreifer in eine Anwendung und zwingt diese, Befehle auszuführen, die Daten oder die gesamte Anwendung gefährden. Die häufigsten Arten von Injektionsangriffen sind SQL injections und Cross-Site-Scripting (XSS) attacks, aber es gibt auch code injections, command injections, CCS injections und andere.

Eine SQL Injection bezieht sich auf die Ausnutzung einer SQL-Datenbankschwachstelle, die durch die fehlende Maskierung oder Validierung von Meta-Zeichen in Benutzereingaben verursacht wird. 

Der Angreifer versucht, seine eigenen Datenbankbefehle über die Anwendung, die Zugriff auf die Datenbank hat, einzuschleusen. Da die Anfrage jedoch nicht korrekt validiert wird, ändert der eingefügte Code die ursprünglichen SQL-Befehle und verfälscht somit die Ergebnisse zugunsten des Angreifers. 

Bei einem erfolgreichen Eingriff kann der Angreifer Daten einsehen, sie verändern oder ganz löschen und den Server kontrollieren. Damit dies funktioniert, hat der Angreifer verschiedene Möglichkeiten, in das System einzudringen. So ist es zum Beispiel möglich, sich über die Antwortzeit oder Fehlermeldungen einen Weg in das System zu finden. 

Wie kann man SQL-Injection-Angriffe verhindern?

Die wichtigste Methode zur Vermeidung von Injektionsfehlern besteht darin, die Daten in der Datenbank von den Befehlen und Abfragen zu trennen, d. h. sie von der Logik der Webanwendung zu trennen. Dies kann auf verschiedene Weise erreicht werden, unter anderem durch:

  • Verwendung einer sicheren API, die den Einsatz des Übersetzungsprogramms überflüssig macht oder Abfragen mit Parametern verwendet 
  • Einführung einer positiven serverseitigen Eingabeüberprüfung (Whitelist)
  • Wenn in einer Anwendung Sonderzeichen erforderlich sind, sollten diese, wenn möglich, durch die Escape-Syntax des jeweiligen Übersetzungsprogramms vermieden werden.
  • Verwendung von Datenbankkontrollen innerhalb von Abfragen wie der SQL-Klausel LIMIT, um die Datenmenge zu minimieren, die bei einer erfolgreichen Injektion offengelegt wird

2. Broken Authentication

Anwendungsfunktionen im Zusammenhang mit der Authentifizierung und dem Session-Management sind häufig falsch implementiert, so dass Angreifer Passwörter, Schlüssel oder Session-Tokens kompromittieren oder andere Fehler in der Implementierung ausnutzen können, um vorübergehend oder dauerhaft die Identität von Benutzern zu übernehmen. 

Unter Ausnutzung dieser Schwachstelle kann ein Angreifer Benutzersitzungen übernehmen und auf Informationen zugreifen oder diese ändern, für die er keine Berechtigung hat.

Wie lassen sich Sicherheitslücken bei der Authentifizierung vermeiden?

Um Angriffe zu vermeiden, die eine fehlerhafte Authentifizierung ausnutzen, empfiehlt OWASP die folgenden Maßnahmen:

  • Einführung von Passwortprüfungen, die die Schwäche oder Stärke eines Passworts ermitteln
  • Anpassung von Passwortlänge, -komplexität und -rotation an starke, moderne und evidenz-basierte Passwortrichtlinien
  • Einführung einer Multi-Faktor-Authentifizierung, die die Verwendung gestohlener Zugangsdaten, Brute-Force-Angriffe, Stuffing und mehr verhindert
  • Verwenden Sie einen serverseitigen sicheren Sitzungsmanager, der neue und zufällige Sitzungs-IDs generiert, die zeitlich begrenzt sind
  • Vermeiden Sie Sitzungs-IDs in URLs, speichern Sie sie sicher und Sorgen Sie dafür, dass sie nach der Abmeldung des Benutzers, nach Ablauf der Sitzungszeit und im Ruhemodus unwirksam gemacht werden 
  • Der Einsatz von standardisierten Zugangsdaten muss vermieden werden 
  • Begrenzen oder verzögern Sie fehlgeschlagene Anmeldeversuche und überwachen Sie diese; Implementierung von Warnmeldungen für Administratoren bei entdecken Angriffen 

3. Sensitive Data Exposure

Sensitive data exposure ist einer der häufigsten Angriffe. Sie besteht darin, sich Zugang zu ungeschützten Daten im Ruhemodus oder bei der Übertragung (übertragene Daten) zu verschaffen, diese zu ändern oder zu stehlen. Zu diesen Daten gehören häufig personenbezogene Daten wie Ausweise, Gesundheitsdaten, Kreditkartennummern und vieles mehr. Das Fehlen einer Verschlüsselung ist eine der Möglichkeiten, wie Daten in die Hände von Angreifern gelangen können.

Die Methoden, um Zugang zu sensiblen Daten zu erhalten, sind unterschiedlich, aber sie können beinhalten, dass Angreifer Schlüssel stehlen, einen On-Path-Angriff (auch bekannt als Man-in-the-Middle) durchführen, Clear-Text-Daten vom Server oder den Benutzern stehlen und vieles mehr. 

Fuzzing ist eine Technik, bei der ungültige, zufällige oder unerwartete Daten verwendet werden, um entweder unerwartete Zustände zu erzeugen oder Zugang zu verborgenen Funktionen zu erhalten. Es gibt folgende zwei Arten von Fuzzing:

  • Fuzzing basierend auf beobachteter Daten
  • Fuzzing ohne Vorkenntnisse

Wie kann man die Offenlegung sensibler Daten verhindern?

Sie können verschiedene Maßnahmen ergreifen, um sensible Daten vor dem Zugriff zu schützen. Dazu gehören:

  • Implementierung einer Transport Layer Security (TLS) zum Schutz der Daten bei der Übertragung 
  • Vermeiden Sie, wenn möglich, die Speicherung sensibler Daten oder speichern Sie sie nicht länger als nötig
  • Verschlüsseln Sie alle Daten, die gespeichert werden müssen
  • Erzwingen Sie Verschlüsselung durch HTTP Strict Transport Security (HSTS) oder ähnliche Direktiven
  • Benutzerantworten, die sensible Daten enthalten, nicht in den Cache stellen
  • Daten (verarbeitet, gespeichert oder übertragen) klassifizieren  und je nach Klassifizierung Kontrollen durchführen
  • Implementierung starker Standardalgorithmen, -protokolle und -schlüssel
  • Verwendung von Verschlüsselungsfunktionen wie brcrypt, scrypt, Argon2, PBKDF2, die Passwörter immer mit einem Salz versehen und verschlüsseln

4. XML External Entities (XXE)

Viele ältere oder schlecht konfigurierte XML-Prozessoren werten standardmäßig externe Verweise auf Entitäten in XML-Dokumenten aus. Dies kann von Angreifern ausgenutzt werden, denen es gelingt, ein XML-Dokument (z. B. eine DOCX- oder SVG-Datei) hochzuladen oder bösartige Inhalte in ein XML-Dokument einzufügen.

In diesem Szenario können externe Entitäten verwendet werden, um interne Dateien mit Hilfe des File URI Handler zu extrahieren. Sie können auch interne Dateifreigaben, internes Port-Scanning, die Ausführung von Remote-Anfragen und die Durchführung von Denial-of-Service-Angriffen (DOS) ermöglichen.

Wie lassen sich Angriffe auf externe XML-Entities verhindern?

Um diesen Angriff zu verhindern, müssen Entwickler darin geschult werden, wie sie XXE testen, identifizieren und entschärfen können. Darüber hinaus empfiehlt OWASP die folgenden Maßnahmen:

  • Vermeiden Sie die Serienproduktion potenziell sensibler Informationen und verwenden Sie Datenformate wie JSON, die weniger komplex sind
  • Die serverseitige Eingabeüberprüfung muss zur Vermeidung bösartiger Daten über XML-Dokumente gewhitelistet sein 
  • Validieren Sie eingehende XML-Daten anhand eines XML-Schemas, d.h. einer XSD-Validierung
  • Stellen Sie sicher, dass XML-Bibliotheken und -Prozessoren regelmäßig gepatcht oder aktualisiert werden
  • Vollständige Deaktivierung der DTD-Verarbeitung (Document Type Definition) im Parser (dadurch wird der Parser auch gegen DOS geschützt)
  • Überprüfen Sie den Quellcode manuell auf Instanzen von XXE

5. Broken Access Control

Eine Broken access control bezieht sich auf eine Schwachstelle bei der Durchsetzung von Beschränkungen für die Aktionen authentifizierter Benutzer. Wenn Beschränkungen nicht ordnungsgemäß durchgesetzt werden, können Angreifer diese Schwachstelle nutzen, um unbefugten administrativen Zugriff auf Systemfunktionen sowie sensible und persönliche Daten zu erhalten. Sie können auch Daten erstellen, ändern oder löschen. 

Wie lässt sich eine fehlerhafte Zugangskontrolle verhindern?

Um die Zugriffskontrolle sinnvoll zu verhindern, muss sie entweder in vertrauenswürdigem serverseitigem Code oder in einer serverlosen API erzwungen werden. Dadurch wird verhindert, dass Angreifer die Prüfungen der Zugriffskontrolle oder die Metadaten verändern können. OWASP listet die folgenden Maßnahmen auf, um diese Art von Angriffen zu verhindern:

  • Öffentliche Ressourcen ausschließen, standardmäßig verweigern
  • Einführung von Zugriffskontrollmechanismen und deren wiederholte Verwendung in der gesamten Anwendung
  • Erzwingen von Besitzrechten an Datensätzen
  • Protokollierung und Überwachung von Fehlern bei der Zugriffskontrolle, ggf. Administratoren informieren (wiederholte Anmeldeversuche)
  • Entwerten von JSON-Web-Tokens (JWT) nach der Abmeldung
  • Durchsetzung eindeutiger geschäftlicher Grenzanforderungen für Anwendungen über Domainmodelle
  • Sicherstellen, dass Metadaten und Sicherungsdateien nicht in Web Roots vorhanden sind
  • Deaktivieren der Verzeichnisauflistung des Webservers
  • Durchführen von funktionalen Zugangsktonroll- und Integrationstests

Darüber hinaus können Sie Folgendes tun:

  • Inaktive oder unnötige Konten löschen
  • Implementieren Sie eine Multi-Faktor-Authentifizierung für alle Zugangspunkte
  • Reduzieren Sie die Anzahl der Zugangspunkte, wenn einige nicht benötigt werden
  • Das Prinzip der geringsten Privilegien (PoLP) einführen 
  • Abschalten von Diensten, die auf Ihrem Server nicht benötigt werden

6. Security Misconfiguration

Eine Security misconfiguration ist ein häufiges Problem, das Angriffsflächen eröffnet. Dies ist in der Regel das Ergebnis von: 

  • Unsichere Standardkonfigurationen
  • Unvollständige oder Ad-hoc-Konfigurationen
  • Ungepatchte Schwachstellen
  • Ungenutzte Seiten
  • Ungeschützte Dateien und Verzeichnisse
  • Offener Cloud-Speicher
  • Falsch konfigurierte HTTP-Header oder Verschlüsselung
  • Ausführliche Fehlermeldungen, die sensible Informationen enthalten

Alle Betriebssysteme, Frameworks, Bibliotheken und Anwendungen müssen nicht nur sicher konfiguriert sein, sondern auch rechtzeitig mit Patches und Upgrades versehen werden.

Automatisierte Pentest-Tools wie Crashtest Security können dabei helfen, Sicherheitslücken aufzuspüren, die über falsche Sicherheitskonfigurationen zu einem Einbruch führen können. Melden Sie sich für eine kostenlose Testversion an und starten Sie Ihren ersten Scan in wenigen Minuten.

Wie lassen sich Angriffe auf die Sicherheit durch Fehlkonfigurationen verhindern?

OWASP empfiehlt die Implementierung von sicheren Installationsprozessen. Damit verbunden sollten Sie:

  • Entwicklung und Automatisierung eines Prozesses, der eine schnelle und einfache Bereitstellung sicherer Umgebungen ermöglicht, die identisch konfiguriert, aber über unterschiedliche Anmeldeinformationen zugänglich sind
  • Bereitstellung einer minimalen Plattform und Entfernung ungenutzter Funktionen und Frameworks oder Nichtinstallation
  • Einführung einer segmentierten Anwendungsarchitektur, die Komponenten und Benutzer (Tenants) voneinander trennt
  • Überprüfen und aktualisieren Sie die Konfiguration aller Sicherheitshinweise, Updates und Patches und insbesondere die Berechtigungen für Cloud-Speicher
  • Automatisieren Sie die Überwachung und Überprüfung der Wirksamkeit von Sicherheitskonfigurationen in allen Umgebungen
  • Behebung von Sicherheitsproblemen in Echtzeit mit Hilfe automatisierter Workflows

7. Cross-Site Scripting (XSS)

Unter Cross-Site-Scripting versteht man die Integration von Skripten auf der Client-Seite in Webanwendungen, die dadurch ermöglicht wird, dass Benutzereingaben nicht validiert und korrekt kodiert werden. Die bösartigen Skripte werden im Browser des Endnutzers ausgeführt und ermöglichen verschiedene Angriffe – vom Diebstahl der Sitzung bis hin zur Überwachung und Änderung aller Aktionen, die der Nutzer auf der betroffenen Website durchführt. 

Es gibt verschiedene Arten von Cross-Site Scripting-Angriffen, je nachdem, ob die bösartigen Skripte auf nicht-persistente oder persistente Weise injiziert werden. Außerdem wird unterschieden, ob die Schwachstelle durch eine mangelhafte Validierung der Eingaben auf der Client- oder der Serverseite verursacht wird.

Wie kann man Cross-Site-Scripting (XSS) verhindern?

Laut OWASP besteht die wichtigste Methode zur Verhinderung dieser Art von Angriffen darin, nicht vertrauenswürdige und nicht validierte Dateneingaben von aktiven Browser-Inhalten zu trennen. Dies kann auf die folgenden Arten geschehen:

  • Verwenden Sie Frameworks wie React JS, Ruby on Rails und andere, die XSS von vornherein weitgehend vermeiden.
  • Vermeiden Sie nicht vertrauenswürdige HTTP-Anfragedaten in HTML, außer in erlaubten Slots, wie sie im OWASP Cheat Sheet Series “XSS Prevention” definiert sind
  • Verwenden Sie die HTML-Kodierung, ehe Sie nicht vertrauenswürdige Daten in HTML-Elemente einfügen
  • Anwendung kontextbezogener Kodierung gegen DOM-basierte XSS
  • Implementieren Sie eine Content Security Policy (CSP), die Zulässigkeitslisten für clientseitige Ressourcen erstellt. Dies ist hilfreich, wenn es keine Sicherheitslücken gibt, die das Einfügen von bösartigem Code über lokale Dateien ermöglichen

8. Insecure Deserialization

Bei der Insecure Deserialization handelt es sich um einen Angriff, bei dem ein manipuliertes Objekt in den Kontext der Webanwendung injiziert wird. Wenn Schwachstellen in der Anwendung bestehen, wird das Objekt deserialisiert und ausgeführt, was zu SQL Injection, Path Traversal, Application Denial of Service und Remote Code Execution führt.

Wie kann man eine Insecure Deserialization verhindern?

Zum Schutz vor einer Insecure Deserialization empfiehlt OWASP die folgenden Schritte:

  • Verweigerung der Serialisierung von Objekten aus nicht vertrauenswürdigen Quellen
  • Verwenden Sie nur Serialisierungsmedien, die primitive Datentypen zulassen
  • Implementierung digitaler Signaturen zur Überprüfung der Integrität serialisierter Objekte
  • Erzwingen Sie strenge Einschränkungen des Typs während der Deserialisierung, um unerwartete Klauseln zu erkennen
  • Wenn möglich, isolieren Sie den Deserialisierungscode und führen Sie ihn in Umgebungen mit geringen Zugriffsrechten aus, um nicht autorisierte Aktionen zu verhindern 
  • Protokollierung von Ausnahmen und Fehlern bei der Deserialisierung
  • Überwachung und/oder Einschränkung aller ausgehenden oder eingehenden Netzwerkverbindungen, die von Servern oder Containern ausgehen, die deserialisieren

9. Verwendung von Bestandteilen mit bekannten Sicherheitslücken

Die Berechtigungen von Bestandteilen wie Bibliotheken, Frameworks und anderen Softwaremodulen sind die gleichen wie die einer Anwendung. Datenverlust und Serverübernahmen sind möglich, wenn eine anfällige Komponente ausgenutzt wird. Anwendungen und APIs, die Komponenten mit bekannten Schwachstellen verwenden, können die Anwendungsabwehr untergraben und verschiedene Angriffe und Auswirkungen ermöglichen. Dies ist ein weit verbreitetes Problem.

Um festzustellen, ob Sie Komponenten mit bekannten Sicherheitslücken verwenden, versuchen Fingerprinting-Scanner, alle auf dem Server laufenden Webserver– oder Webanwendungs-Frameworks und die zugehörigen Versionen zu erkennen.

Wie lässt sich die Verwendung von Komponenten mit bekannten Schwachstellen vermeiden?

Um die Verwendung solcher Komponenten zu vermeiden, sollten Sie:

  • Verwenden Sie nur Komponenten aus offiziellen Quellen über sichere Links. Verwenden Sie signierte Pakete, um die Möglichkeit zu minimieren, dass eine bösartige Komponente im Paket enthalten ist 
  • Überwachen Sie alle Bibliotheken und Komponenten, die nicht gewartet werden und keine Sicherheits-Patches für ältere Versionen bereitstellen
  • Setzen Sie virtuelle Patches ein, um Probleme mit ungepatchten Komponenten zu überwachen, zu erkennen und zu verhindern 
  • Entfernen Sie alle ungenutzten Abhängigkeiten sowie Funktionen, Komponenten, Dateien und Dokumentationen, die nicht benötigt werden 
  • Führen Sie ein aktuelles Inventar von client- und serverseitigen Komponenten und deren Versionen und Abhängigkeiten. Überwachen Sie wichtige Quellen für Schwachstellen in Komponenten und automatisieren Sie den Prozess so weit wie möglich
  • Erstellen und kontinuierliches Ausführen von Überwachungs-, Fehlerbehebungs-, Aktualisierungs- oder Änderungskonfigurationen während der Lebensdauer einer Anwendung

10. Insufficient Logging And Monitoring

Unzureichende Protokollierung und Überwachung in Verbindung mit einer fehlenden oder ineffektiven Integration in die Reaktion auf Vorfälle ermöglichen es Angreifern, weitere Systeme anzugreifen, die Beständigkeit aufrechtzuerhalten, auf weitere Systeme auszuweichen und Daten zu manipulieren, zu extrahieren oder zu zerstören. 

Die meisten Studien zu Sicherheitsverletzungen zeigen, dass es mehr als 200 Tage dauert, bis eine Sicherheitsverletzung entdeckt wird, wobei diese in der Regel durch externe Parteien und nicht durch interne Prozesse oder Überwachung aufgedeckt wird.

How to avoid attacks due to insufficient logging and monitoring?

Wie lassen sich Angriffe aufgrund unzureichender Protokollierung und Überwachung vermeiden? 

  • Bei der Anmeldung, bei Fehlern in der Zugriffskontrolle und bei Fehlern in der serverseitigen Eingabeüberprüfung wird ein ausreichender Benutzerkontext protokolliert, und die Protokolldaten werden lange genug aufbewahrt. Dies hilft Ihnen, verdächtige Aktivitäten und Konten zu erkennen
  • Verwenden Sie Protokollformate, die von Protokollmanagementlösungen leicht verarbeitet werden können 
  • Implementieren Sie Prüfpfade mit Integritätskontrollen für alle wichtigen Transaktionen, um Löschungen oder Manipulationsversuche zu verhindern 
  • Nutzen Sie Überwachung und Warnungen, um verdächtige Aktivitäten rechtzeitig zu erkennen und Maßnahmen zu ergreifen
  • Einführung eines Reaktions- und Wiederherstellungsplans für Zwischenfälle, um Angriffe effizient abzuwehren