Schwache Zufälligkeit
Zufälliges Aussehen ist nicht dasselbe wie unvorhersehbar.
Was ist Schwache Zufälligkeit?
Schwache Zufälligkeit bedeutet, mit einem schnellen, nicht kryptografischen Generator einen unvorhersehbaren Wert zu prägen. Statistische Einheitlichkeit ist keine Unvorhersehbarkeit: Der Zustand ist klein und die Übergangsfunktion deterministisch. Math.random() in V8 ist xorshift128+, 128 Bit Zustand, rekonstruierbar aus vier beobachteten Ausgaben. Sie sammeln Reset-Token von einem von Ihnen kontrollierten Konto, lösen den Status, sagen den nächsten Token voraus und übernehmen das Sparkonto eines Fremden, ohne dessen Posteingang zu berühren. Der Fix ist eine Zeile, crypto.randomBytes(32).toString('hex') , und das Hashing der schwachen Ausgabe ändert nichts.
Was Sie lernen in Schwache Zufälligkeit
- Einen PRNG (schnell, statistisch gleichverteilt) von einem CSPRNG (resistent gegen Zustandsrekonstruktion aus beobachteten Ausgaben) unterscheiden
- Erkennen, dass das Hashing der Ausgabe eines schwachen PRNG sie nicht sicher macht: Der Hash ist deterministisch und die Eingabe bleibt vorhersagbar
- Für jeden sicherheitsrelevanten Wert <code>crypto.randomBytes</code> / <code>crypto.randomUUID</code> (Node), <code>crypto.getRandomValues</code> (Web Crypto) oder <code>os.urandom</code> (Python) einsetzen
- Die Codebasis auf verwandte Aufrufstellen prüfen: Reset-Token, Einladungs-Token, MFA-Backup-Codes, OAuth-State, Nonces signierter URLs und Administrator-Passwortgeneratoren weisen dieselbe Schwachstelle auf, wenn sie von <code>Math.random</code> abgeleitet sind
- Die Regel verinnerlichen: Ein Wert, dessen Vorhersage einem Angreifer nützt, muss standardmäßig aus einer kryptografischen Quelle stammen. Jede Sprache ermöglicht dies mit einem Import; für den falschen Standard gibt es keine Ausrede
Schwache Zufälligkeit — Trainingsschritte
-
Das Ziel auskundschaften
Bob verdient seinen Lebensunterhalt damit, die Konten anderer zu übernehmen und deren Guthaben zu stehlen. Heute hat er Nestward im Visier, eine Spar-App, auf deren einzelnen Konten echte Guthaben liegen können. Er beginnt auf der Passwort-Reset-Seite, dem Eingang, den er nutzen will, und prüft zunächst, wie die Kontowiederherstellung funktioniert.
-
So funktioniert die Kontowiederherstellung
Ein Detail auf dieser Seite ist der ganze Grund für Bobs Interesse.
-
Einen Reset für das eigene Konto anfordern
Bob beginnt mit Codes, die er rechtmäßig sehen darf. Das Wegwerfkonto bob.reeve@proton.me gehört ihm; daher fordert er dafür einen Reset an und öffnet die Antwort-E-Mail von Nestward. Der Reset-Link in dieser E-Mail enthält den vollständigen Code.
-
Einen zweiten Code sammeln
Ein Code reicht nicht aus, um ein Muster zu erkennen. Bob fordert deshalb für dasselbe Konto einen weiteren Reset an und liest die zweite E-Mail.
-
Noch einen Code sammeln
Ein dritter Reset verschafft Bob die drei Codes, die sein Solver benötigt. Er liest die letzte E-Mail und ordnet die Codes an.
-
Den nächsten Code vorhersagen
Nestward erzeugt diese Codes mit einem schnellen, nicht kryptografischen Generator mit einem kleinen internen Zustand. Bob übergibt die drei Codes aus seinem Postfach an einen Solver, der diesen Zustand rekonstruiert und weiterberechnet. Das Tool gibt den exakten Code aus, den die Anwendung in den nächsten versendeten Reset-Link einfügt – unabhängig davon, für welches Konto der Reset angefordert wird.
-
Den Reset des Opfers auslösen
The predicted code is the next one the generator will issue, so Bob has to make it issue that code now. He requests a reset for a real customer, renata.voss@gmail.com. Nestward mints the next code, drops it into a link, and emails it to Renata, an inbox Bob cannot read.
-
Den vorhergesagten Code einlösen
Nun verwendet Bob den vorhergesagten Code. Er sendet ihn zusammen mit einem neuen Passwort direkt an den Reset-Endpunkt. Weil er dem gerade an Renata versendeten Code entspricht, akzeptiert der Server ihn und setzt Bobs Passwort für ihr Konto.
-
Das Konto gehört ihm
Der Endpunkt hat den Code akzeptiert und das Passwort geändert. Bob ist jetzt bei einem Sparkonto angemeldet, das nicht ihm gehört.
-
Wissenscheck
Sie haben gerade gesehen, wie ein Angreifer einen Reset-Code vorhersagte, der ihm nie gezeigt wurde. Prägen Sie sich ein, warum das möglich war.
Abdeckung der Sicherheits-Frameworks
OWASP Top 10
- A04:2025 Cryptographic Failures
- A02:2021 Cryptographic Failures
CWE
- CWE-330 Use of Insufficiently Random Values
- CWE-338 Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security