Erzeugung emergenter Ressourcen

Beschreibung

Erzeugung emergenter Ressourcen tritt auf, wenn ein Produkt Ressourcen verwaltet oder sich so verhält, dass indirekt eine neue, eigenständige Ressource entsteht, die von Angreifern entgegen der beabsichtigten Richtlinie genutzt werden kann. Systeme erzeugen manchmal durch komplexes Verhalten unbeabsichtigte Ressourcentypen. Anstatt Ressourcen wie geplant explizit zuzuweisen, kann indirekte Ressourcenerzeugung entstehen -- wie verdeckte Kanäle, die Angreifer ausnutzen. Ein klassisches Beispiel ist "parasitäres Rechnen", bei dem ein Produkt unwissentlich Berechnungen für externe Parteien durchführen kann.

Risiko

Emergente Ressourcenerzeugung hat erhebliche Sicherheitsauswirkungen. Verdeckte Kanäle können unbeabsichtigt erzeugt werden. Timing-Seitenkanale können sensible Informationen preisgeben. Ressourcen können von unautorisierten Parteien verbraucht werden. Systemverhalten kann für unbeabsichtigte Zwecke ausgenutzt werden. Informationen können durch unüberwachte Kanäle fließen. Zugriffskontrollen können durch emergente Pfade umgangen werden. Kryptographische Geheimnisse können durch Seitenkanale durchsickern. Systemressourcen können für parasitäres Rechnen missbraucht werden.

Lösung

Analysieren Sie das Systemverhalten auf unbeabsichtigte Ressourcenerzeugung. Implementieren Sie Constant-Time-Algorithmen, wo Timing relevant ist. Überwachen Sie auf unerwartete Ressourcennutzungsmuster. Gestalten Sie Systeme mit minimalen beobachtbaren Zustandsänderungen. Implementieren Sie korrekte Isolation zwischen Komponenten. Verwenden Sie formale Methoden, um emergente Verhaltensweisen zu identifizieren. Testen Sie auf Timing-Variationen, die Informationen preisgeben könnten. Dokumentieren und überprüfen Sie alle externen Schnittstellen. Betrachten Sie alle beobachtbaren Systemverhaltensweisen als potenzielle Kanäle.

Häufige Auswirkungen

AuswirkungDetails
SonstigesBereich: Sonstiges

Variiert je nach Kontext – Die Auswirkung hängt von der spezifischen erzeugten emergenten Ressource ab. Kann verdeckte Kanäle, Seitenkanalangriffe oder unautorisierte Ressourcennutzung ermöglichen.
VertraulichkeitBereich: Vertraulichkeit

Informationsoffenlegung – Emergente Kanäle können sensible Informationen durch Timing, Stromverbrauch oder andere beobachtbare Verhaltensweisen preisgeben.

Beispielcode und Lösung

Verwundbarer Code

# VERWUNDBAR: Timing-basierter Seitenkanal bei Passwortvalidierung

def vulnerable_validate_password(actual_pw, typed_pw):
    # VERWUNDBAR: Frühe Rückgabe erzeugt Timing-Seitenkanal
    if len(actual_pw) != len(typed_pw):
        return False

    # VERWUNDBAR: Zeichenweiser Vergleich verrät Position
    for i in range(len(actual_pw)):
        if actual_pw[i] != typed_pw[i]:
            return False  # Gibt früh bei Nichtübereinstimmung zurück

    return True

# Angriff: Zeit messen, um Passwortlänge und Zeichen zu bestimmen
// VERWUNDBAR: Timing-Leck bei kryptographischem Vergleich

#include <stdbool.h>
#include <string.h>

// VERWUNDBAR: memcmp kann bei Nichtübereinstimmung früh zurückkehren
bool vulnerable_verify_mac(const uint8_t* expected, const uint8_t* actual, size_t len) {
    return memcmp(expected, actual, len) == 0;
}

Sichere Lösung

# SICHER: Constant-Time-Passwortvalidierung

import hmac

def secure_validate_password(actual_pw, typed_pw):
    # Constant-Time-Vergleich verwenden
    # hmac.compare_digest ist darauf ausgelegt, Timing-Angriffe zu verhindern

    actual_bytes = actual_pw.encode('utf-8')
    typed_bytes = typed_pw.encode('utf-8')

    # Immer gleich lange Werte vergleichen
    return hmac.compare_digest(actual_bytes, typed_bytes)
// SICHER: Constant-Time kryptographischer Vergleich

#include <stdbool.h>
#include <stdint.h>

// Constant-Time-Vergleich – prüft immer alle Bytes
bool secure_compare(const uint8_t* a, const uint8_t* b, size_t len) {
    volatile uint8_t result = 0;

    for (size_t i = 0; i < len; i++) {
        result |= a[i] ^ b[i];
    }

    return result == 0;
}

CVE-Beispiele

Seitenkanal-Schwachstellen wurden in zahlreichen kryptographischen Implementierungen entdeckt, darunter Spectre und Meltdown (CPU-Cache-Timing), Lucky 13 (TLS Padding Oracle) und verschiedene Passwort-Timing-Angriffe.


Verwandte CWEs

  • CWE-664: Improper Control of a Resource Through its Lifetime (übergeordnet)
  • CWE-514: Covert Channel (untergeordnet)
  • CWE-208: Observable Timing Discrepancy (verwandt)

Referenzen

  1. MITRE Corporation. "CWE-1229: Creation of Emergent Resource." https://cwe.mitre.org/data/definitions/1229.html
  2. Wikipedia. "Parasitic computing"
  3. Richtlinien zur Abwehr von Seitenkanalangriffen