Secure Web Development - Exam.pdf

Secure Web Development - Exam
Secure Web Development - Exam Aufgabe 1) In einer modernen Webanwendung soll sichergestellt werden, dass mögliche Bedrohungen frühzeitig erkannt und behandelt werden können. Angenommen, Du arbeitest an einem Projekt, bei dem eine robuste Sicherheitslösung durch die Implementierung von Bedrohungsmodellen integriert werden muss. Verwende dafür die Informationen über Bedrohungsmodelle, insbesondere d...

© StudySmarter 2024, all rights reserved.

Secure Web Development - Exam

Aufgabe 1)

In einer modernen Webanwendung soll sichergestellt werden, dass mögliche Bedrohungen frühzeitig erkannt und behandelt werden können. Angenommen, Du arbeitest an einem Projekt, bei dem eine robuste Sicherheitslösung durch die Implementierung von Bedrohungsmodellen integriert werden muss. Verwende dafür die Informationen über Bedrohungsmodelle, insbesondere das STRIDE-Modell, um sowohl präventive als auch reaktive Sicherheitsmaßnahmen zu planen und umzusetzen.

a)

Teilaufgabe A: Definiere und erkläre die sechs Komponenten des STRIDE-Bedrohungsmodells (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege) ausführlich an Beispielen, die in einer typischen Webanwendung auftreten könnten.

Lösung:

Teilaufgabe A: Definiere und erkläre die sechs Komponenten des STRIDE-Bedrohungsmodells (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege) ausführlich an Beispielen, die in einer typischen Webanwendung auftreten könnten.

  • Spoofing (Vortäuschung):Spoofing bezieht sich auf die Täuschung, bei der ein Angreifer vorgibt eine andere Identität zu sein, um unerlaubten Zugang zu erhalten. Beispiel: Ein Angreifer könnte sich als ein legitimer Benutzer ausgeben, indem er gestohlene Anmeldedaten verwendet, um sich in ein Webanwendungskonto einzuloggen.
  • Tampering (Manipulation):Tampering bedeutet, dass Daten während der Übertragung oder Speicherung unrechtmäßig verändert werden.Beispiel: Ein Angreifer könnte die Daten einer Banküberweisung ändern, um den Betrag und/oder den Empfänger zu ändern, während die Daten im Transit sind.
  • Repudiation (Abstreitbarkeit):Repudiation tritt auf, wenn Benutzer Aktionen ausführen und dann abstreiten, diese durchgeführt zu haben, ohne dass das System dies beweisen kann.Beispiel: Ein Benutzer könnte eine Bestellung in einem Online-Shop aufgeben und anschließend behaupten, dass die Bestellung nie getätigt wurde, wenn keine ausreichenden Aufzeichnungen vorhanden sind.
  • Information Disclosure (Informationsoffenlegung):Information Disclosure bezieht sich auf die unbefugte Weitergabe von vertraulichen Informationen.Beispiel: Eine Sicherheitslücke in einem Webanwendung könnte es Angreifern ermöglichen, auf vertrauliche Benutzerinformationen wie Kreditkartendaten oder persönliche Identifikationsdetails zuzugreifen.
  • Denial of Service (Dienstverweigerung):Denial of Service tritt auf, wenn ein Angreifer die Ressourcen eines Systems so beansprucht, dass legitime Benutzer den Dienst nicht nutzen können.Beispiel: Ein Angreifer könnte eine Webanwendung mit einer großen Anzahl von Anfragen überfluten, sodass das System überlastet wird und legitime Benutzer sich nicht einloggen oder auf die Dienste zugreifen können.
  • Elevation of Privilege (Erhöhung von Berechtigungen):Elevation of Privilege tritt auf, wenn ein Angreifer mit niedrigen Zugriffsebenen Zugriff auf höhere, privilegierte Zugriffsebenen erhält.Beispiel: Ein Angreifer könnte eine Schwachstelle in der Webanwendung ausnutzen, um administrative Berechtigungen zu erlangen und somit auf vertrauliche Daten zuzugreifen oder Systemkonfigurationen zu ändern.

b)

Teilaufgabe B: Entwickle ein Bedrohungsmodell für eine E-Commerce-Anwendung, unter besonderer Berücksichtigung der STRIDE-Komponenten. Identifiziere mindestens zwei Bedrohungen für jede der sechs Kategorien und bewerte die Risiken anhand der möglichen Auswirkungen und der Eintrittswahrscheinlichkeit.

Lösung:

Teilaufgabe B: Entwickle ein Bedrohungsmodell für eine E-Commerce-Anwendung, unter besonderer Berücksichtigung der STRIDE-Komponenten. Identifiziere mindestens zwei Bedrohungen für jede der sechs Kategorien und bewerte die Risiken anhand der möglichen Auswirkungen und der Eintrittswahrscheinlichkeit.

  • Spoofing (Vortäuschung):
    • Bedrohung 1: Ein Angreifer nutzt gestohlene Anmeldedaten, um sich als legitimer Benutzer einzuloggen und auf persönliche Daten sowie Bestellhistorien zuzugreifen.Auswirkung: HochEintrittswahrscheinlichkeit: Mittel
    • Bedrohung 2: Ein Angreifer täuscht die Identität eines Administrators vor, um administrative Privilegien zu erlangen.Auswirkung: Sehr hochEintrittswahrscheinlichkeit: Niedrig
  • Tampering (Manipulation):
    • Bedrohung 1: Manipulation von Preisdaten im Warenkorb, um Waren zu einem niedrigeren Preis zu erwerben.Auswirkung: MittelEintrittswahrscheinlichkeit: Mittel
    • Bedrohung 2: Ändern von Transaktionsdaten während des Übertragungsprozesses, um Geld auf ein falsches Konto umzuleiten.Auswirkung: HochEintrittswahrscheinlichkeit: Niedrig
  • Repudiation (Abstreitbarkeit):
    • Bedrohung 1: Benutzer bestreiten, eine Bestellung aufgegeben zu haben, um eine Rückgabe oder Rückerstattung zu erzwingen.Auswirkung: MittelEintrittswahrscheinlichkeit: Hoch
    • Bedrohung 2: Abstreiten von durchgeführten Zahlungen, um finanzielle Verpflichtungen zu umgehen.Auswirkung: HochEintrittswahrscheinlichkeit: Mittel
  • Information Disclosure (Informationsoffenlegung):
    • Bedrohung 1: Durchführungen eines SQL-Injections, um auf vertrauliche Kundendaten zugreifen zu können.Auswirkung: Sehr hochEintrittswahrscheinlichkeit: Mittel
    • Bedrohung 2: Abfangen von nicht verschlüsselten Datenpaketen während der Übertragung, um auf Zahlungsinformationen zuzugreifen.Auswirkung: HochEintrittswahrscheinlichkeit: Niedrig
  • Denial of Service (Dienstverweigerung):
    • Bedrohung 1: Überflutung des Servers mit Anfragen, um die Verfügbarkeit der E-Commerce-Anwendung zu beeinträchtigen.Auswirkung: HochEintrittswahrscheinlichkeit: Hoch
    • Bedrohung 2: Durchführung einer DNS-Amplification-Attacke, um den Zugang zu dem Webserver zu blockieren.Auswirkung: Sehr hochEintrittswahrscheinlichkeit: Niedrig
  • Elevation of Privilege (Erhöhung von Berechtigungen):
    • Bedrohung 1: Ausnutzen einer Schwachstelle in der Anwendung, um unautorisierten Zugang auf administrative Funktionen zu erlangen.Auswirkung: Sehr hochEintrittswahrscheinlichkeit: Mittel
    • Bedrohung 2: Verwenden von sozialen Techniken, um einen Administrator dazu zu bringen, dem Angreifer erweiterte Rechte zu gewähren.Auswirkung: HochEintrittswahrscheinlichkeit: Niedrig

c)

Teilaufgabe C: Beschreibe die Schritte bei der Erstellung eines Bedrohungsmodells und werde dabei spezifisch. Wie würdest Du vorgehen, um die Bedrohungen zu identifizieren und zu bewerten? Welche Werkzeuge und Methoden würdest Du einsetzen?

Lösung:

Teilaufgabe C: Beschreibe die Schritte bei der Erstellung eines Bedrohungsmodells und werde dabei spezifisch. Wie würdest Du vorgehen, um die Bedrohungen zu identifizieren und zu bewerten? Welche Werkzeuge und Methoden würdest Du einsetzen?

  • 1. Systemverständnis schaffen:
    • Erfassung der Architektur der Webanwendung inklusive aller Komponenten, Datenflüsse, Interaktionen und Schnittstellen.
    • Erstellung von Diagrammen (z.B. Datenflussdiagramme, Architekturdiagramme) zur visuellen Darstellung.
  • 2. Identifikation von Assets:
    • Bestimmung der wichtigsten Ressourcen und Daten, die geschützt werden müssen (z.B. Benutzerdaten, Zahlungsinformationen).
    • Erstellen einer Asset-Liste mit Prioritäten basierend auf ihrem Schutzbedarf.
  • 3. Identifikation möglicher Bedrohungen:
    • Anwendung des STRIDE-Modells auf die identifizierten Assets und Systeme.
    • Hinzuziehen von Bedrohungsbibliotheken und Mustern zu Unterstützung (z.B. OWASP).
    • Nutzung von Brainstorming-Sitzungen und Szenario-Workshops mit dem Entwicklungsteam, um mögliche Bedrohungen zu ermitteln.
  • 4. Bedrohungen dokumentieren:
    • Erstellung einer Bedrohungsmatrix mit einer Beschreibung jeder Bedrohung, den betroffenen Assets und den potenziellen Auswirkungen.
    • Verwendung von Tools wie Microsoft Threat Modeling Tool zur systematischen Dokumentation und Analyse.
  • 5. Bewertung der Risiken:
    • Analyse der Eintrittswahrscheinlichkeit und potenziellen Auswirkungen jeder identifizierten Bedrohung.
    • Einstufung der Bedrohungen basierend auf einer Risikoanalyse-Matrix (z.B. Verknüpfung von Wahrscheinlichkeiten mit Auswirkungen).
    • Priorisierung basierend auf dem Ergebnis der Risikoanalyse.
  • 6. Entwickeln von Sicherheitsmaßnahmen:
    • Definition von präventiven Maßnahmen (z.B. Multi-Faktor-Authentifizierung, Verschlüsselung, Input-Validierung).
    • Planung von reaktiven Maßnahmen (z.B. Incident-Response-Pläne, Logging und Monitoring).
    • Einbeziehung von Sicherheitsstandards und Best Practices (z.B. OWASP Top 10, NIST-Framework).
  • 7. Implementierung und Test:
    • Einführung der definierten Sicherheitsmaßnahmen in die Webanwendung.
    • Durchführen von Sicherheitstests wie Penetrationstests und Schwachstellen-Scans mit Tools wie Burp Suite oder Nessus.
    • Regelmäßige Überprüfung und Aktualisierung des Bedrohungsmodells und der Sicherheitsmaßnahmen basierend auf neuen Bedrohungen und Veränderungen in der Architektur.
  • Werkzeuge und Methoden:
    • Microsoft Threat Modeling Tool: Für die strukturierte Erstellung und Analyse von Bedrohungsmodellen.
    • OWASP Ressourcen: Bedrohungsbibliotheken und Sicherheitsstandards.
    • Burp Suite, Nessus: Für Durchführung von Penetrationstests und Schwachstellen-Scans.
    • Jira oder ein ähnliches Projektmanagement-Tool: Zur Verfolgung von Sicherheitslücken und deren Behebung.

d)

Teilaufgabe D: Angenommen, Du hast zwei Bedrohungen in Deinem Modell identifiziert: einen möglichen Denial-of-Service (DoS) Angriff und die Gefahr der Informationspreisgabe durch unzureichende Verschlüsselung. Entwickle präventive und reaktive Gegenmaßnahmen für diese zwei Bedrohungen. Nutze dabei konkrete Technologien und Praktiken, die das Risiko dieser Bedrohungen reduzieren bzw. beseitigen können. Berechne auch, wie sich eine Erhöhung der Serverkapazität auf die Widerstandsfähigkeit der Anwendung gegen DoS-Angriffe auswirken könnte. Angenommen, die aktuelle Serverkapazität kann 1000 Anfragen pro Sekunde verarbeiten und mit der Erhöhung um 20% würden 1200 Anfragen pro Sekunde unterstützt werden. Berechne die prozentuale Verbesserung der Widerstandsfähigkeit gegenüber einem DoS-Angriff.

Lösung:

Teilaufgabe D: Angenommen, Du hast zwei Bedrohungen in Deinem Modell identifiziert: einen möglichen Denial-of-Service (DoS) Angriff und die Gefahr der Informationspreisgabe durch unzureichende Verschlüsselung. Entwickle präventive und reaktive Gegenmaßnahmen für diese zwei Bedrohungen. Nutze dabei konkrete Technologien und Praktiken, die das Risiko dieser Bedrohungen reduzieren bzw. beseitigen können. Berechne auch, wie sich eine Erhöhung der Serverkapazität auf die Widerstandsfähigkeit der Anwendung gegen DoS-Angriffe auswirken könnte. Angenommen, die aktuelle Serverkapazität kann 1000 Anfragen pro Sekunde verarbeiten und mit der Erhöhung um 20% würden 1200 Anfragen pro Sekunde unterstützt werden. Berechne die prozentuale Verbesserung der Widerstandsfähigkeit gegenüber einem DoS-Angriff.

  • Denial-of-Service (DoS) Angriff:
    • Präventive Maßnahmen:
      • Implementierung eines Content Delivery Network (CDN) wie Cloudflare oder Akamai, um den Traffic zu verteilen und zu verwalten.
      • Verwendung von Rate Limiting Techniken, um die Anzahl der Anfragen pro IP-Adresse zu beschränken.
      • Einsatz von Web Application Firewalls (WAFs) wie die von AWS WAF oder Azure Front Door, um verdächtige Aktivitäten zu erkennen und zu blockieren.
      • Elastische Skalierung der Infrastruktur durch Cloud-Services wie AWS Auto Scaling oder Google Cloud AutoScaler, um die Kapazität bei höherem Traffic automatisch zu erhöhen.
    • Reaktive Maßnahmen:
      • Einsatz eines Incident-Response-Teams, das in der Lage ist, Echtzeit-Abwehrmaßnahmen zu ergreifen.
      • Isolierung und Blockierung verdächtiger IP-Adressen und Traffic-Quellen sofort nach Erkennung der Anomalie.
      • Aktive Nutzung von Monitoring- und Logging-Tools wie Prometheus und Grafana, um Denial-of-Service-Angriffe in Echtzeit zu erkennen und Gegenmaßnahmen zu ergreifen.
    • Berechnung der prozentualen Verbesserung der Widerstandsfähigkeit:
      • Angenommen: Aktuelle Serverkapazität = 1000 Anfragen pro Sekunde
      • Neue Serverkapazität nach Erhöhung um 20% = 1200 Anfragen pro Sekunde
      • Die prozentuale Verbesserung der Widerstandsfähigkeit = \frac{{1200 - 1000}}{{1000}}\times100 = 20%
  • Informationspreisgabe durch unzureichende Verschlüsselung:
    • Präventive Maßnahmen:
      • Verwendung von HTTPS und TLS (z.B. TLS 1.2 oder höher) für alle Datenübertragungen, um Transportverschlüsselung zu gewährleisten.
      • Einführung von Ende-zu-Ende-Verschlüsselung für besonders sensible Daten.
      • Regelmäßige Aktualisierung und Patching von Kryptografiebibliotheken und Protokollen.
      • Verwendung von starken Verschlüsselungsalgorithmen wie AES-256 für die Verschlüsselung gespeicherter Daten.
    • Reaktive Maßnahmen:
      • Sofortige Prüfung und Behebung von erkannten Sicherheitslücken in der verschlüsselten Kommunikation.
      • Einführung eines transparenten Incident-Response-Plans, der die Benachrichtigung betroffener Benutzer und die Untersuchung von Datenschutzverletzungen beinhaltet.
      • Regelmäßige Durchführung von Sicherheitsüberprüfungen und Penetrationstests, insbesondere auf die Verschlüsselungsimplementierungen.

Aufgabe 2)

In diesem Kontext behandeln wir die Erkennung und Verhinderung von Cross-Site Scripting (XSS)-Angriffen auf einer Webanwendung. XSS ist eine Schwachstelle, die es einem Angreifer ermöglicht, schädliche Skripte in vertrauenswürdige Webseiten einzuschleusen und im Browser des Opfers auszuführen. Es gibt drei Haupttypen von XSS: Reflektiertes XSS, Gespeichertes XSS und DOM-basiertes XSS. Die Erkennung von XSS kann durch Eingabeüberprüfung und Sicherheitswerkzeuge wie Content Security Policy (CSP) erfolgen. Zur Verhinderung von XSS-Angriffen können Techniken wie das Sanitisieren und das Escapen von Eingaben, die Nutzung von Sicherheitsheaders und framework-spezifische Schutzmaßnahmen verwendet werden. Als Beispiel für einen PHP-Code zur Sanitisierung von Ausgaben könnte eine Funktion wie folgt aussehen:

<?phpfunction sanitizeOutput($data) {  return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');} ?>

a)

  • Erkläre den Unterschied zwischen reflektiertem XSS, gespeichertem XSS und DOM-basiertem XSS und gib für jeden Typ ein Beispiel an, wie ein Angreifer diesen ausnutzen könnte.

Lösung:

Um den Unterschied zwischen den verschiedenen Arten von Cross-Site Scripting (XSS) zu verstehen, betrachten wir die folgenden drei Haupttypen: Reflektiertes XSS, Gespeichertes XSS und DOM-basiertes XSS. Für jede Art werde ich Beispiele geben, wie ein Angreifer dies ausnutzen könnte.

  • Reflektiertes XSS:Beschreibung: Bei reflektiertem XSS wird bösartiger Code in die Webanfrage eingebettet und direkt als Antwort auf den Benutzer zurückgesendet. Dies ist oft in Suchfeldern oder URLs zu finden.Beispiel: Ein Angreifer könnte eine URL wie diese an ein Opfer senden:http://example.com/search?q=<script>alert('XSS')</script>Wenn die Suchseite die Eingabe des Benutzers ohne Überprüfung widerspiegelt, wird das Skript ausgeführt, sobald das Opfer die URL aufruft.
  • Gespeichertes XSS:Beschreibung: Gespeichertes XSS liegt vor, wenn bösartiger Code dauerhaft auf der Zielseite gespeichert wird. Dies tritt oft in Foren, Kommentarbereichen oder Gästebüchern auf.Beispiel: Ein Angreifer postet in einem Forum einen Kommentar wie:
    <script>alert('XSS')</script>
    Wenn andere Benutzer die Seite mit dem Kommentar anzeigen, wird das Skript im Browser des Benutzers ausgeführt.
  • DOM-basiertes XSS:Beschreibung: Bei DOM-basiertem XSS wird der Angriff ausschließlich durch die Manipulation des Document Object Model (DOM) im Browser des Benutzers durchgeführt. Der Angriff erfolgt auf der Client-Seite, ohne dass eine HTTP-Anfrage an den Server geschickt wird.Beispiel: Angenommen, eine Webanwendung hat folgenden JavaScript-Code:
    <script>var userInput = location.hash.substring(1); document.getElementById('output').innerHTML = userInput; </script>
    Ein Angreifer könnte die URL wie folgt manipulieren:http://example.com/#<script>alert('XSS')</script>Wenn das Opfer die URL aufruft, wird das Skript ausgeführt, wenn das Element mit der ID 'output' aktualisiert wird.

b)

  • Implementiere eine einfache Webanwendung mit einer Unsicherheitslücke, die ein reflektiertes XSS ermöglicht. Zeige anschließend, wie diese Schwachstelle durch Nutzung von PHP's htmlspecialchars Funktion behoben werden kann. Stelle den originalen und den modifizierten Code nebeneinander dar und erkläre die Änderungen.

Lösung:

Wir werden eine einfache Webanwendung implementieren, die eine Sicherheitslücke für reflektiertes XSS aufweist, und zeigen, wie diese Schwachstelle durch Nutzung der htmlspecialchars-Funktion in PHP behoben werden kann.

  • Originaler Code (mit Sicherheitslücke):
<!DOCTYPE html><html><head><title>Suchseite</title></head><body><form method="get" action="">  <label for="query">Suche:</label>  <input type="text" id="query" name="query">  <input type="submit" value="Suchen"></form><?phpif (isset($_GET['query'])) {  $searchQuery = $_GET['query'];  echo 'Suchergebnisse für: ' . $searchQuery;}?></body></html>

Dieser Code reflektiert die Benutzereingabe direkt in der HTML-Ausgabe, was zu einer XSS-Schwachstelle führt.

  • Modifizierter Code (mit Sicherheitsfix):
<!DOCTYPE html><html><head><title>Suchseite</title></head><body><form method="get" action="">  <label for="query">Suche:</label>  <input type="text" id="query" name="query">  <input type="submit" value="Suchen"></form><?phpif (isset($_GET['query'])) {  $searchQuery = htmlspecialchars($_GET['query'], ENT_QUOTES, 'UTF-8');  echo 'Suchergebnisse für: ' . $searchQuery;}?></body></html>

Durch die Nutzung der htmlspecialchars-Funktion wird die Benutzer-Eingabe in eine sichere Zeichenkette umgewandelt, indem Sonderzeichen wie <, >, " und ' in ihre HTML-Entitäten (&lt;, &gt;, &quot; und &#039;) umgewandelt werden. Dies verhindert, dass schädliches HTML oder JavaScript ausgeführt wird.

c)

  • Berechne und erläutere die Auswirkungen eines XSS-Angriffs in einer Szenarioanalyse. Angenommen, es gibt eine Webseite, die monatlich von 100.000 Nutzern besucht wird und 10% dieser Nutzer fallen auf den XSS-Angriff herein. Der Angriff zielt darauf ab, Authentifizierungs-Cookies zu stehlen. Nimm an, dass jeder gestohlene Cookie im Durchschnitt einen Verlust von 50€ für das Unternehmen bedeutet. Berechne den potenziellen finanziellen Schaden und diskutiere Maßnahmen, die das Unternehmen ergreifen könnte, um solche Verluste in Zukunft zu verhindern.

Lösung:

Um die Auswirkungen eines XSS-Angriffs in einer Szenarioanalyse zu berechnen und zu erläutern, betrachten wir die gegebenen Informationen:

  • Die Webseite hat monatlich 100.000 Nutzer.
  • 10% dieser Nutzer fallen auf den XSS-Angriff herein.
  • Jeder gestohlene Authentifizierungs-Cookie verursacht im Durchschnitt einen Verlust von 50€ für das Unternehmen.

Berechnung des potenziellen finanziellen Schadens:

  • Anzahl der betroffenen Nutzer: 10% von 100.000 Nutzern = 0.10 \times 100.000 = 10.000 Nutzer
  • Verlust pro betroffenen Nutzer: 50€
  • Gesamtschaden: 10.000 Nutzer \times 50€ pro Nutzer = 500.000€

Der potenzielle finanzielle Schaden für das Unternehmen beträgt also 500.000€ pro Monat.

Maßnahmen zur Verhinderung solcher Verluste:

  • Sanitisieren und Escapen: Alle Eingaben sollten gründlich sanitisiert und escaped werden, um bösartige Skripte zu entfernen. Funktionen wie htmlspecialchars in PHP sind nützlich, um HTML-Entitäten zu escapen.
  • Eingabeüberprüfung: Verwende strikte Eingabeüberprüfungen und Filtersysteme, um sicherzustellen, dass nur erlaubte Eingaben verarbeitet werden.
  • Content Security Policy (CSP): Eine CSP kann helfen, schädliche Skripte daran zu hindern, im Kontext der Webseite ausgeführt zu werden.
  • Sicherheitsheader: Setzen von Sicherheitsheadern wie X-XSS-Protection und X-Content-Type-Options kann zusätzliche Sicherheitsmaßnahmen bieten.
  • Regelmäßige Sicherheitsüberprüfungen: Regelmäßige Penetrationstests und Sicherheitsüberprüfungen sind wichtig, um vorhandene Schwachstellen zu identifizieren und zu beheben.
  • Schulung der Entwickler: Entwickler sollten regelmäßig geschult werden, um Bewusstsein und Kenntnisse über sichere Programmierpraktiken zu fördern.
  • Sicherheitsupdates: Halte alle verwendeten Softwarekomponenten und Frameworks stets auf dem neuesten Stand, um bekannte Sicherheitslücken zu schließen.

Aufgabe 3)

Angenommen, Du entwickelst eine Webanwendung zur Verwaltung von Kundendaten. Beschreibe mögliche Angriffsszenarien durch SQL-Injections und wie diese verhindert werden können. Die Webanwendung soll Kundennamen und -adressen aus einer Datenbank abfragen und anzeigen.

a)

Identifikation: Beschreibe ein Szenario, in dem eine SQL-Injection durch eine unsichere Benutzereingabe möglich ist. Gib ein konkretes Beispiel für eine SQL-Injection in einem Login-Formular, das eine SQL-Abfrage wie die folgende verwendet:

 'SELECT * FROM users WHERE username = 'USERNAME' AND password = 'PASSWORD';' 
Was könnte ein Angreifer eingeben, um Zugriff zu erlangen, und warum funktioniert das?

Lösung:

Identifikation:

Ein mögliches Angriffsszenario durch SQL-Injection entsteht, wenn eine Webanwendung unsichere Benutzereingaben direkt in eine SQL-Abfrage einfügt, ohne diese vorher zu validieren oder zu bereinigen. In diesem speziellen Fall könnte ein Login-Formular betroffen sein, das die Eingaben des Benutzernamens und des Passworts direkt in eine SQL-Abfrage einfügt.

Angenommen, das Login-Formular verwendet die folgende SQL-Abfrage:

 SELECT * FROM users WHERE username = 'USERNAME' AND password = 'PASSWORD'; 

Ein Angreifer könnte versuchen, Zugriff auf die Anwendung zu erlangen, indem er eine spezielle Zeichenkette eingibt, zum Beispiel im Feld für den Benutzernamen:

  • Benutzername: ' OR '1'='1
  • Passwort: Beliebig

Die resultierende SQL-Abfrage würde dann wie folgt aussehen:

 SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'Beliebig'; 

In diesem Fall wird die Bedingung ' OR '1'='1' immer wahr sein, weil '1'='1' eine immer wahre Bedingung ist. Das Passwortfeld wird irrelevant, da der OR-Operator vorrangig ist und die erste Bedingung bereits genug ist, um einen Benutzer zu authentifizieren.

Dadurch kann der Angreifer sich Zugang zur Anwendung verschaffen, ohne das eigentliche Passwort des Benutzers zu kennen.

b)

Abwehr: Erörtere, wie Du mittels vorbereiteter Anweisungen (Prepared Statements) die Webanwendung gegen SQL-Injection schützen kannst. Recherchiere die Verwendung von Prepared Statements in einer Programmiersprache Deiner Wahl (z.B. Python) und zeige mit Code-Beispielen, wie die Abfrage aus dem vorherigen Punkt sicherer gestaltet werden kann.

Lösung:

Abwehr:

Eine effektive Methode, um sich gegen SQL-Injections zu schützen, ist die Verwendung von vorbereiteten Anweisungen (Prepared Statements). Diese Technik sorgt dafür, dass SQL-Abfragen und Benutzereingaben strikt voneinander getrennt werden. Vorbereitete Anweisungen verhindern, dass Benutzereingaben als Teil der SQL-Syntax interpretiert werden.

Hier zeigen wir, wie Prepared Statements in Python mit der Bibliothek sqlite3 verwendet werden können. Angenommen, wir haben dieselbe SQL-Abfrage wie zuvor:

 SELECT * FROM users WHERE username = 'USERNAME' AND password = 'PASSWORD'; 

Hier ist die sichere Version dieser Abfrage mit Prepared Statements:

 import sqlite3# Verbindung zur Datenbank herstellenconn = sqlite3.connect('your_database.db')# Cursor-Objekt erstellencur = conn.cursor()# Benutzereingabenusername = input('Enter your username:')password = input('Enter your password:')# Prepared Statementquery = 'SELECT * FROM users WHERE username = ? AND password = ?'# Ausführung der Abfrage mit Platzhalterncur.execute(query, (username, password))# Ergebnisse abrufenresults = cur.fetchall()# Ergebnisse verarbeitenif results:    print('Login successful!')else:    print('Login failed.')# Verbindung schließenconn.close()

In diesem Beispiel wird die SQL-Abfrage mit Platzhaltern (?) statt direkter Einfügung der Benutzereingaben formuliert. Die Methode cur.execute() nimmt die Abfrage zusammen mit einem Tupel der Eingabewerte ((username, password)) und sorgt dafür, dass diese Werte sicher in die Abfrage eingefügt werden.

Vorteile von Prepared Statements:

  • SQL-Injection wird verhindert, da Eingaben nicht als SQL-Code interpretiert werden.
  • Bessere Lesbarkeit und Wartbarkeit des Codes.
  • Verbesserte Performance bei mehrfacher Ausführung derselben Abfrage mit verschiedenen Parametern.

Durch die Verwendung von Prepared Statements kann sichergestellt werden, dass die Webanwendung gegenüber SQL-Injections geschützt ist und die Nutzerdaten sicher abgefragt und angezeigt werden können.

c)

Least Privilege Principle: Erläutere das Verfahren zur Umsetzung des 'Least Privilege Principles' bei der Datenbanknutzung. Wie würdest Du die Rolle und Berechtigungen eines Datenbankbenutzers so einstellen, dass ein potenzieller Schaden durch einen erfolgreichen SQL-Injection-Angriff minimiert wird? Veranschauliche Deine Erklärung mit einem SQL-Beispiel, das zeigt, wie man einen eingeschränkten Benutzer erstellt und ihm selektive Zugriffsrechte gewährt.

Lösung:

Least Privilege Principle:

Das 'Least Privilege Principle' bedeutet, dass ein Benutzer nur die minimal notwendigen Berechtigungen erhalten soll, die er benötigt, um seine Aufgaben auszuführen. Bei der Datenbanknutzung bedeutet dies, dass Benutzerkonten nur jene Rechte erhalten, die für ihre spezifischen Aufgaben erforderlich sind. Dies minimiert das Risiko und den möglichen Schaden durch erfolgreiche SQL-Injection-Angriffe.

Um dieses Prinzip umzusetzen, folgen wir diesen Schritten:

  • Erstellen eines eingeschränkten Benutzers: Erstellen eines neuen Datenbankbenutzers mit minimalen Rechten.
  • Gewährleistung selektiver Zugriffsrechte: Dem neuen Benutzer nur die notwendigen Rechte für bestimmte Tabellen und Operationen gewähren.

Betrachten wir ein Beispiel in MySQL, um diese Konzepte zu verdeutlichen.

1. Schritt: Erstellen eines eingeschränkten Benutzers

CREATE USER 'webapp_user'@'localhost' IDENTIFIED BY 'securePassword';

In diesem Schritt erstellen wir einen neuen Benutzer webapp_user mit einem sicheren Passwort securePassword.

2. Schritt: Gewährleistung selektiver Zugriffsrechte

GRANT SELECT ON customer_database.customer_table TO 'webapp_user'@'localhost';

In diesem Schritt geben wir dem Benutzer webapp_user nur das Recht, Daten aus der Tabelle customer_table in der Datenbank customer_database abzurufen. Die SELECT-Berechtigung erlaubt dem Benutzer nur den Lesezugriff auf die Tabelle.

3. Schritt: Anwenden und Überprüfen der Änderungen

FLUSH PRIVILEGES;

Dieser Befehl sorgt dafür, dass die Änderungen an den Berechtigungen sofort wirksam werden.

Durch die Vergabe minimaler Berechtigungen an den Benutzer webapp_user gewährleistest Du, dass dieser Benutzer nur die notwendigen Aktionen ausführen kann. Im Falle eines erfolgreichen SQL-Injection-Angriffs wird der Schaden minimiert, da der Angreifer sich nur auf lesenden Zugriff beschränken und keine schädigenden Aktionen wie das Löschen oder Verändern von Daten durchführen kann.

Zusammenfassung:

  • Erstelle Benutzer nur mit den notwendigen Rechten.
  • Erlaube nur begrenzte Aktionen (z.B. nur Lesezugriff auf bestimmte Tabellen).
  • Überprüfe und aktualisiere regelmäßig die Benutzerrechte, um sicherzustellen, dass keine unnötigen Berechtigungen vergeben wurden.

Dieses Vorgehen trägt dazu bei, potenziellen Schaden durch SQL-Injections und andere Sicherheitslücken zu minimieren.

Aufgabe 4)

Du bist der Sicherheitsverantwortliche einer Webanwendung, die sensible Benutzerdaten speichert. Um die Integrität und Vertraulichkeit dieser Daten zu gewährleisten, müssen Passwörter sicher gespeichert und verwaltet werden. Im Folgenden sollst Du verschiedene Aspekte der sicheren Passwortspeicherung und -verwaltung analysieren und umsetzen.

a)

Erläutere, warum Passwörter nicht im Klartext gespeichert werden sollten. Nenne und beschreibe mindestens zwei Risiken, die mit dem Speichern von Passwörtern im Klartext verbunden sind. Gib außerdem an, welche kryptographische Methode verwendet werden kann, um diese Risiken zu minimieren.

Lösung:

Warum Passwörter nicht im Klartext gespeichert werden sollten

Das Speichern von Passwörtern im Klartext stellt ein erhebliches Sicherheitsrisiko dar. Hier sind die Hauptgründe und die damit verbundenen Risiken:

  • Risiko 1: Datenlecks Wird ein System gehackt oder Daten durch ein Datenleck veröffentlicht, können Angreifer sofort auf alle im Klartext gespeicherten Passwörter zugreifen. Dies ermöglicht ihnen, sich in die Konten der Benutzer einzuloggen und potenziell sensiblen oder persönlichen Daten zu stehlen.
  • Risiko 2: Weiterverwendung von Passwörtern Viele Benutzer verwenden dasselbe Passwort für mehrere Konten. Wenn ein Passwort im Klartext kompromittiert wird, können Angreifer dieses Passwort auch für andere Konten des Benutzers auf verschiedenen Plattformen verwenden. Dies erhöht die Schadenspotenzial erheblich.

Kryptographische Methoden zur Minimierung der Risiken

Um diese Risiken zu minimieren, sollten Passwörter niemals im Klartext gespeichert werden. Stattdessen können kryptographische Methoden verwendet werden, um eine sichere Speicherung zu gewährleisten:

  • Hashing Beim Hashing wird ein Passwort durch eine Hash-Funktion in eine fixe, nicht umkehrbare Zeichenkette umgewandelt. Selbst wenn der Angreifer den Hash-Wert kennt, ist es praktisch unmöglich, das ursprüngliche Passwort zurückzugewinnen. Beispiele für sichere Hash-Funktionen sind SHA-256 und bcrypt.
  • Salting Beim Salting wird vor dem Hashing einem Passwort eine zufällige Zeichenfolge, der sogenannte Salt, hinzugefügt. Der Salt wird zusammen mit dem Passwort in den Hash-Prozess einbezogen. Dies verhindert, dass gleiche Passwörter denselben Hash-Wert haben und macht es Angreifern schwerer, vorgefertigte Rainbow-Tables zu verwenden.

b)

Implementiere ein Python-Skript, das sicherstellt, dass jedes Passwort mittels der \texttt{bcrypt} Bibliothek gehasht wird. Das Skript soll außerdem einen einzigartigen Salt für jeden Benutzer generieren und diesen zusammen mit dem gehashten Passwort speichern. Nutze dazu die folgende Datenstruktur:

 'Benutzer = { 

Lösung:

Implementierung eines Python-Skripts zur sicheren Speicherung von Passwörtern mit \texttt{bcrypt}

Um die Sicherheit der Passwörter zu gewährleisten, nutzen wir die \texttt{bcrypt}-Bibliothek. Diese ermöglicht es uns, Passwörter zu hashen und für jeden Benutzer einen einzigartigen Salt zu generieren.

Hier ist ein Beispielskript, das diese Anforderungen erfüllt:

 import bcrypt # Initialisiere die Datenstruktur Benutzer = {} def passwort_hasher(benutzername, passwort):     # Generiere einen einzigartigen Salt     salt = bcrypt.gensalt()     # Hash das Passwort mit dem Salt     gehashtes_passwort = bcrypt.hashpw(passwort.encode('utf-8'), salt)     # Speichere den Benutzernamen, das gehashte Passwort und den Salt in der Datenstruktur     Benutzer[benutzername] = {'salt': salt, 'gehashtes_passwort': gehashtes_passwort} # Beispielaufruf der Funktion if __name__ == '__main__':     benutzername = input('Gib den Benutzernamen ein: ')     passwort = input('Gib das Passwort ein: ')     passwort_hasher(benutzername, passwort)     print(Benutzer) 

Dieses Skript führt folgende Schritte aus:

  • Importiert die \texttt{bcrypt}-Bibliothek.
  • Initialisiert die Datenstruktur \texttt{Benutzer}.
  • Definiert die Funktion \texttt{passwort_hasher}, die einen Benutzernamen und ein Passwort als Eingaben nimmt.
  • Generiert einen Salt mit der Funktion \texttt{bcrypt.gensalt()}.
  • Hasht das Passwort zusammen mit dem Salt.
  • Speichert den Benutzernamen, das gehashte Passwort und den Salt in der Datenstruktur.
  • Beinhaltet ein Beispielskript, das die Funktionalität demonstriert.

Auf diese Weise stellt das Skript sicher, dass Passwörter durch den Einsatz von Salt und Hashing sicher gespeichert werden.

Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden