Seit mehreren Jahren nutze ich den Owasp Zap - Schwachstellentester für meine Projekte und dies immer sehr erfolgreich. Gerade hinsichtlich der Flexibilität, auch hinsichtlich einer Testautomatisierung, der schier großen Dichte von Erweiterungen, und der Open Source Lizenzierung, bietet Owasp Zap eine solide Basis, die man immer wieder nutzen kann.

Die Notwendigkeit eines neuen Ansatzes

In der sich schnell entwickelnden Welt der Cybersicherheit ist es für Produktsicherheitsteams entscheidend, Schwachstellen nicht nur zu erkennen und zu beheben, sondern auch sicherzustellen, dass diese Probleme nicht wieder auftauchen. Ein wesentlicher Bestandteil dieses Prozesses ist das Regressionstesten. Traditionelle Methoden des manuellen Regressionstestens stoßen jedoch an ihre Grenzen. In diesem Blogbeitrag möchte ich eine innovative Methode vorstellen, die den Prozess der Regressionstests in der Cybersicherheit revolutioniert und an die Anforderungen der heutigen Zeit anpasst – basierend auf OWASP ZAP.

 

Das Problem mit manuellen Tests

Viele von uns kennen die Situation: Eine Schwachstelle wird gemeldet, sei es durch einen aufmerksamen Nutzer, ein Bug-Bounty-Programm oder einen Penetrationstest. Der Entwickler behebt das Problem schnell, und alles scheint in Ordnung. Doch nach einiger Zeit taucht dieselbe Schwachstelle wieder auf. Die Ursache? Eine unbedachte Änderung hat den ursprünglichen Patch rückgängig gemacht. Dies ist ein klassischer Fall von Regression, und genau hier kommen Regressionstests ins Spiel.

Traditionell wurden diese Tests manuell durchgeführt. Dies bedeutete, dass Sicherheitstechniker jede behobene Schwachstelle erneut überprüfen mussten. Dieser Prozess war nicht nur zeitaufwendig, sondern auch fehleranfällig und ineffizient. Zudem fehlte es an Skalierbarkeit, um mit der zunehmenden Anzahl von Schwachstellen und deren Behebungen Schritt zu halten. In meinen Projekten der letzten 26 Jahren, führte dies zu einer endlosen Flut von Jira-Tickets, die alle erneut getestet werden mussten. Und das ist eine Endlose fummelei, und nur mit dem Einsatz von mehreren Leuten überhaupt zu bewältigen.

Eine neue Herangehensweise mit OWASP ZAP

Um diese Herausforderungen zu meistern, haben ich einen neuen Ansatz entwickelt, der Automatisierung und Skalierbarkeit miteinander verbindet, indem ich OWASP ZAP als Grundlage nutzen. ZAP (Zed Attack Proxy) ist ein Open-Source-Webanwendungsscanner, der sich ideal für die Automatisierung von Sicherheitstests eignet.

Der neue Prozess im Detail

  • Identifikation und Triage: Sobald eine Schwachstelle entdeckt wird, prüft ein Security-Tester, ob sie sich für einen automatisierten Regressionstest eignet. Erfüllt sie die Kriterien, wird sie mit einem speziellen Jira-Label versehen (natürlich geht auch jedes andere System, was über eine Tag-Funktion verfügt).
    • Erstbewertung der Schwachstelle: Die Schwachstelle wird entweder durch interne Tests, Bug-Bounty-Programme, Penetrationstests oder Benutzerberichte entdeckt.
      • Dies schließt ausdrücklich auch den Einsatz durch eine CI/CD Lösung mit ein, die auf Owasp Zap beruht. Aktive und passive Scanner, die z. B. in wöchentlichen Testruns entsprechend eure Projekte auf Schwachstellen vertestet.
    • Dokumentation und Risikobewertung: Alle relevanten Details der Schwachstelle werden dokumentiert, einschließlich der betroffenen Systeme, der Art der Schwachstelle und möglicher Auswirkungen.
    • Eignungsprüfung für die Automatisierung: 
      • Reproduzierbarkeit: Der Security-Tester überprüft, ob die Schwachstelle einfach und zuverlässig reproduzierbar ist. Dies bedeutet, dass die Schwachstelle mit einer einfachen Anfrage und einer spezifischen Antwort auftritt.
      • Automatisierungspotential: Es wird beurteilt, ob die Schwachstelle durch ein automatisiertes Skript reproduziert und getestet werden kann. Beispiele hierfür sind Schwachstellen wie offengelegte Anmeldeinformationen im Antwortkörper oder API-Aufrufe ohne Sitzungsvalidierung.
    • Kategorisierung und Priorisierung:
      • Kritikalität: Die Schwachstelle wird nach ihrer Kritikalität eingestuft. Kritische Schwachstellen, die sofortige Aufmerksamkeit erfordern, werden höher priorisiert. Eine Bewertung für Risiko behaftete Schwachstellen findet ihr bei OWASP, oder hier.
      • Wiederholungswahrscheinlichkeit: Schwachstellen, die eine hohe Wahrscheinlichkeit haben, wieder aufzutreten, werden ebenfalls höher priorisiert.
    • Spezielle Kennzeichnung im Jira (oder vergleichbares Testmanagement-System):
      • Label-Zuweisung: Erfüllt die Schwachstelle die Kriterien für die Automatisierung, wird sie im Jira-System mit einem speziellen Label versehen. Dieses Label identifiziert die Schwachstelle als geeignet für automatisierte Regressionstests.
  • Erstellung eines benutzerdefinierten ZAP-Skripts: Für jede geeignete Schwachstelle erstellen wir ein individuelles ZAP-Skript, das speziell darauf ausgelegt ist, die Regression dieser Schwachstelle zu überprüfen.
  • Integration ins Repository: Das neue Skript wird in unser Code-Repository für automatisierte Regressionstests eingefügt. Ein automatisierter Job plant regelmäßige Ausführungen, zieht Updates und führt die ZAP-Skripte aus.
  • Automatisierte Überprüfung und Wiedereröffnung von Tickets: Schlägt ein Regressionstest fehl, wird das entsprechende Jira-Ticket automatisch wieder geöffnet – dies kann man über Xray lösen. Dazu wird es aber einen gesonderten Beitrag geben.

Diese Struktur ermöglicht eine nahtlose Integration in ZAP und stellt sicher, dass jedes benutzerdefinierte Skript mit dem Jira-Ticket der Schwachstelle verknüpft ist.

Beispielprozess für ein OWASP ZAP-basiertes Regressionstest-Skript in Python

Hier ist ein Beispiel für ein Python-Skript, das OWASP ZAP verwendet, um eine Schwachstelle auf Regression zu testen:

import requests
from zapv2 import ZAPv2

# ZAP API Konfiguration
zap = ZAPv2(apikey='your_zap_api_key', proxies={'http': 'http://localhost:8080', 'https': 'http://localhost:8080'})

# Ziel-URL
target_url = 'http://example.com/vulnerable_endpoint'

# Schwachstelle: Überprüfung auf offengelegte Anmeldeinformationen im Antwortkörper
def check_vulnerability(response):
    if 'sensitive_information' in response.text:
        print("Vulnerability still exists!")
        reopen_jira_ticket("JIRA-1234")

# Funktion zum Wiederöffnen eines Jira-Tickets
def reopen_jira_ticket(ticket_id):
    jira_url = f"http://your_jira_instance/rest/api/2/issue/{ticket_id}/transitions"
    headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Basic your_jira_auth_token'
    }
    payload = {
        'transition': {
            'id': 'your_reopen_transition_id'
        }
    }
    response = requests.post(jira_url, headers=headers, json=payload)
    if response.status_code == 204:
        print(f"Jira ticket {ticket_id} reopened successfully.")
    else:
        print(f"Failed to reopen Jira ticket {ticket_id}: {response.text}")

# Testen der Schwachstelle mit OWASP ZAP
def run_regression_test():
    # Starten des ZAP-Scans
    zap.urlopen(target_url)
    print(f"Scanning target: {target_url}")
    
    # Warten auf Scan-Ergebnisse
    while int(zap.spider.status) < 100:
        print(f"Spider progress: {zap.spider.status}%")
    
    # Abrufen der HTTP-Antwort
    response = requests.get(target_url, proxies={'http': 'http://localhost:8080'})
    
    # Überprüfen auf Schwachstelle
    check_vulnerability(response)

# Hauptfunktion
if __name__ == "__main__":
    run_regression_test()

Die Vorteile der Automatisierung

Der Wechsel zu einem automatisierten Regressionstestsystem auf Basis von OWASP ZAP bringt zahlreiche Vorteile mit sich:

  • Erhöhte Effizienz: Der Automatisierungsprozess reduziert den Zeitaufwand für manuelle Tests erheblich und minimiert menschliche Fehler.
  • Kontinuierliche Tests: Anstatt punktuelle Tests durchzuführen, ermöglicht die Automatisierung kontinuierliche Überprüfungen.
  • Zeitersparnis: Sicherheitstechniker können sich auf komplexere und wertvollere Aufgaben konzentrieren, da die Routinearbeiten durch Automatisierung erledigt werden.

Fazit: Ein Schritt in die Zukunft

Regressionstests sollten ein integraler Bestandteil des Lebenszyklus von Schwachstellen in jedem Unternehmen sein. Durch die Implementierung eines automatisierten Ansatzes mit OWASP ZAP haben wir die Effizienz und Genauigkeit in unserem Team erheblich verbessert und wertvolle Zeit gespart. Ich ermutige andere Unternehmen und Sicherheitsexperten, ähnliche Methoden zu übernehmen, um ihre Sicherheitsprozesse weiter zu optimieren und einen Schritt in Richtung einer sichereren digitalen Zukunft zu machen.