Beobachtbare Diskrepanz

Beschreibung

Beobachtbare Diskrepanz ist eine Schwachstelle, die auftritt, wenn ein Produkt unter verschiedenen Umständen unterschiedlich reagiert oder verschiedene Antworten sendet, auf eine Weise, die für unbefugte Akteure beobachtbar ist. Diese Verhaltensunterschiede legen sicherheitsrelevante Informationen über den internen Zustand des Systems offen. Die Diskrepanzen können sich durch mehrere Kanäle manifestieren, darunter Zeitvariationen (wie lange Operationen dauern), Kontrollflusunterschiede, Kommunikationsmuster, Stromverbrauch, elektromagnetische Emissionen oder allgemeine Verhaltensänderungen. Angreifer nutzen diese beobachtbaren Unterschiede als Seitenkanale aus, um sensible Informationen wie kryptografische Schlüssel, gültige Benutzernamen, Passworteigenschaften oder andere geschützte Daten abzuleiten, ohne direkt auf die Informationen selbst zuzugreifen.

Risiko

Schwachstellen durch beobachtbare Diskrepanzen ermöglichen Angreifern, sensible Informationen durch indirekte Beobachtung statt durch direkten Zugriff zu extrahieren. Timing-basierte Seitenkanale können enthüllen, ob Benutzernamen in einem System existieren, Password-Guessing-Angriffe ermöglichen oder kryptografische Geheimnisse durch sorgfältige Messung der Verarbeitungszeiten offenlegen. In kryptografischen Implementierungen können selbst Mikrosekunden-Unterschiede in der Operationsdauer Informationen über private Schlüssel preisgeben. Diese Schwachstellen sind besonders gefährlich, weil sie starken kryptografischen Schutz vollständig umgehen können – der Algorithmus selbst mag mathematisch sicher sein, aber seine Implementierung verrät Geheimnisse durch beobachtbares Verhalten. Cloud-Umgebungen haben erhöhte Risiken, da gemeinsam genutzte Hardware Möglichkeiten für mandantenübergreifende Informationslecks schafft.

Lösung

Implementieren Sie Constant-Time-Algorithmen für alle sicherheitskritischen Operationen, um sicherzustellen, dass die Ausführungszeit unabhängig von den verarbeiteten Eingabedaten identisch bleibt. Gestalten Sie Authentifizierungssysteme so, dass sie mit konsistentem Timing und identischen Nachrichten für gültige und ungültige Anmeldedaten antworten. Verwenden Sie kryptografische Bibliotheken, die speziell gegen Timing-Angriffe und Seitenkanalanalyse gehärtet sind. In Webanwendungen ergänzen Sie Antwortzeiten mit Randomisierung, um Timing-Korrelationsangriffe zu verhindern. Wenden Sie Rate-Limiting und CAPTCHA an, um automatisierte Enumerationsversuche zu vereiteln. Für Systeme, die sensible Daten verarbeiten, erwägen Sie Hardware-Isolation und Speicherschutzmechanismen. Aktivieren Sie Compiler-Flags, die timing-basierte Optimierungen in sicherheitskritischen Code-Pfaden verhindern, und testen Sie Anwendungen regelmäßig mit Seitenkanalanalyse-Tools.

Häufige Auswirkungen

AuswirkungDetails
Vertraulichkeit, ZugriffskontrolleBereich: Vertraulichkeit, Zugriffskontrolle

Angreifer können Verhaltensunterschiede beobachten, um auf sensible Systeminformationen zuzugreifen, einschließlich Authentifizierungsdaten, gültiger Benutzernamen und Systemkonfigurationsdetails. Diese Informationen ermöglichen gezielte Angriffe und umgehen Schutzmechanismen, die unbefugten Zugriff verhindern sollen.
VertraulichkeitBereich: Vertraulichkeit

Kryptografische Seitenkanalangriffe können unverschlüsselten Klartext, private Schlüssel und andere Geheimnisse offenlegen, die geschützt bleiben sollten. Selbst mathematisch sichere kryptografische Algorithmen werden anfällig, wenn ihre Implementierungen Zeitvariationen oder andere beobachtbare Diskrepanzen aufweisen.

Beispielcode

Anfälliger Code (Python)

Der folgende Code demonstriert eine anfällige Login-Funktion, bei der Zeitunterschiede enthüllen, ob ein Benutzername existiert:

import hashlib
import time

# Simulierte Benutzerdatenbank
users_db = {
    "admin": "5e884898da28047d9164d70b0dbf442b",  # password123
    "alice": "482c811da5d5b4bc6d497ffa98491e38",  # password456
}

def vulnerable_login(username, password):
    """Anfällig: Timing enthüllt gültige Benutzernamen"""

    # Prüfen ob Benutzer existiert - FRÜHE RÜCKGABE erzeugt Zeitdifferenz
    if username not in users_db:
        return False  # Gibt schnell für ungültige Benutzer zurück

    # Passwort hashen - benötigt messbare Zeit
    password_hash = hashlib.md5(password.encode()).hexdigest()

    # Hashes vergleichen - zusätzliche Verarbeitungszeit
    if password_hash == users_db[username]:
        return True

    return False

# Angriffsdemonstration
def timing_attack():
    """Angreifer misst Antwortzeiten um Benutzer zu enumerieren"""
    test_users = ["admin", "alice", "bob", "charlie", "david"]

    for user in test_users:
        start = time.perf_counter()
        vulnerable_login(user, "wrongpassword")
        elapsed = time.perf_counter() - start

        # Gültige Benutzer brauchen länger wegen Passwort-Hashing
        print(f"Benutzer '{user}': {elapsed*1000:.3f}ms")
        # Ausgabe zeigt admin und alice brauchen länger -> gültige Konten

Die Schwachstelle tritt auf, weil die Funktion sofort für ungültige Benutzernamen zurückkehrt, aber Passwort-Hashing für gültige durchführt. Ein Angreifer, der Antwortzeiten misst, kann identifizieren, welche Benutzernamen im System existieren.

Korrigierter Code (Python)

import hashlib
import hmac
import secrets
import time

users_db = {
    "admin": "5e884898da28047d9164d70b0dbf442b",
    "alice": "482c811da5d5b4bc6d497ffa98491e38",
}

# Dummy-Hash für nicht existierende Benutzer
DUMMY_HASH = "0" * 32

def secure_login(username, password):
    """Korrigiert: Constant-Time-Authentifizierung verhindert Timing-Angriffe"""

    # Immer einen Hash abrufen (echt oder Dummy) - konstante Zugriffszeit
    stored_hash = users_db.get(username, DUMMY_HASH)

    # Immer Passwort-Hash berechnen - eliminiert Zeitdifferenz
    password_hash = hashlib.md5(password.encode()).hexdigest()

    # Constant-Time-Vergleich verwenden um Timing-Lecks zu verhindern
    # hmac.compare_digest verhindert zeichenweise Timing-Analyse
    is_valid = hmac.compare_digest(password_hash, stored_hash)

    # Nur True zurückgeben wenn Benutzername existiert UND Passwort stimmt
    user_exists = username in users_db

    # Prüfungen in konstanter Zeit kombinieren
    return is_valid and user_exists

def secure_login_with_delay(username, password):
    """Alternative: Künstliche Verzögerung hinzufügen um Timing zu normalisieren"""
    MIN_RESPONSE_TIME = 0.1  # 100ms Minimum

    start = time.perf_counter()
    result = secure_login(username, password)
    elapsed = time.perf_counter() - start

    # Antwortzeit auf Mindestschwelle auffüllen
    if elapsed < MIN_RESPONSE_TIME:
        time.sleep(MIN_RESPONSE_TIME - elapsed)

    return result

Die Korrektur stellt sicher, dass alle Code-Pfade in konstanter Zeit ausgeführt werden, indem immer Passwort-Hashing durchgeführt und hmac.compare_digest() für Constant-Time-String-Vergleich verwendet wird. Das optionale Delay-Padding bietet zusätzlichen Schutz gegen Netzwerk-Timing-Variationen.


Ausgenutzt in der Praxis

Spectre und Meltdown CPU-Schwachstellen (Global, 2018)

Die Spectre-Schwachstellen (CVE-2017-5753, CVE-2017-5715) und Meltdown (CVE-2017-5754) nutzten Timing-Unterschiede bei spekulativer Ausführung in modernen Prozessoren von Intel, AMD und ARM aus, um sensible Daten aus dem Systemspeicher zu extrahieren. Angreifer könnten Zeitvariationen beim CPU-Cache-Zugriff messen, um Inhalte des Kernel-Speichers abzuleiten, einschließlich Passwörter, Verschlüsselungsschlüssel und Daten anderer Anwendungen. Diese Schwachstellen betrafen praktisch jeden Computer, Server und jedes Mobilgerät, das in den vorherigen zwei Jahrzehnten hergestellt wurde, und erforderten Betriebssystem-Patches, die erhebliche Leistungseinbußen verursachten.

Trezor Hardware-Wallet Seitenkanalangriff (Trezor, 2019)

Sicherheitsforscher demonstrierten, dass das Trezor Hardware-Kryptowährungs-Wallet anfällig für einen Stromverbrauchs-Seitenkanalangriff (CVE-2019-14353) war, der die PIN und den Wiederherstellungs-Seed des Geräts enthüllen könnte. Durch Analyse von Stromverbrauchsmustern während der PIN-Eingabe über die USB-Schnittstelle könnten Angreifer mit physischem Zugang die korrekte PIN innerhalb von Minuten ermitteln. Dieser Angriff demonstrierte, dass selbst Hardware-Sicherheitsgeräte, die speziell zum Schutz kryptografischer Geheimnisse entwickelt wurden, durch beobachtbare Diskrepanzen kompromittiert werden können.

CRIME und BREACH Kompressionsangriffe (Mehrere Organisationen, 2012-2013)

Die CRIME- (Compression Ratio Info-leak Made Easy) und BREACH-Angriffe nutzten beobachtbare Unterschiede in komprimierten HTTPS-Antwortgrößen aus, um Session-Tokens und andere Geheimnisse zu extrahieren. Durch Injektion geratener Klartexte und Messung der resultierenden komprimierten Größe könnten Angreifer ermitteln, ob ihre Vermutungen mit tatsächlichen Inhalten im verschlüsselten Stream übereinstimmten. Diese Angriffe betrafen große Websites und erzwangen die Abschaffung der TLS-Kompression und demonstrierten, wie Kompressionsverhältnisse als beobachtbarer Seitenkanal dienen.


Tools zum Testen/Ausnutzen

  • Burp Suite — Web-Sicherheitstest-Plattform mit Antwortzeit-Analysefähigkeiten zur Erkennung timing-basierter Benutzernamen-Enumeration und anderer beobachtbarer Diskrepanzen.

  • timing-attack — Ruby-Gem speziell entwickelt zum Testen auf timing-basierte Schwachstellen in Webanwendungen durch statistische Analyse von Antwortzeiten.

  • ChipWhisperer — Open-Source-Hardware- und Software-Plattform für Seitenkanal-Stromanalyse und Glitching-Angriffe, verwendet zum Testen eingebetteter Systeme und kryptografischer Implementierungen.


CVE-Beispiele

  • CVE-2017-5753 — Spectre Variante 1 (Bounds-Check-Bypass) ermöglicht Angreifern, beliebigen Speicher durch spekulative Ausführungs-Timing-Seitenkanale zu lesen.

  • CVE-2017-5754 — Meltdown-Schwachstelle ermöglicht User-Space-Programmen, Kernel-Speicher zu lesen, durch Ausnutzung von Out-of-Order-Execution-Timing-Diskrepanzen.

  • CVE-2020-8695 — Intel RAPL (Running Average Power Limit) Interface beobachtbare Diskrepanz ermöglicht Informationsoffenlegung durch Stromverbrauchsmessung.

  • CVE-2019-14353 — Trezor Hardware-Wallet Stromverbrauchs-Seitenkanal enthüllt PIN- und Passwortinformationen über USB-Interface-Analyse.

  • CVE-2003-0078 — SSL/TLS Timing-Angriff (Vaudenay-Angriff) nutzt Padding-Verifizierungs-Timing aus, um verschlüsselte Kommunikation zu entschlüsseln.


Referenzen

  1. MITRE Corporation. "CWE-203: Observable Discrepancy." Common Weakness Enumeration. https://cwe.mitre.org/data/definitions/203.html

  2. Kocher, Paul, et al. "Spectre Attacks: Exploiting Speculative Execution." 2019 IEEE Symposium on Security and Privacy. https://spectreattack.com/spectre.pdf

  3. OWASP Foundation. "Testing for Account Enumeration and Guessable User Account." OWASP Web Security Testing Guide. https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/03-Identity_Management_Testing/04-Testing_for_Account_Enumeration_and_Guessable_User_Account

  4. CISA. "Meltdown and Spectre Side-Channel Vulnerability Guidance." Januar 2018. https://www.cisa.gov/news-events/alerts/2018/01/04/meltdown-and-spectre-side-channel-vulnerability-guidance