Zwakke willekeur
Willekeurig kijken is niet hetzelfde als onvoorspelbaar.
Wat is Zwakke willekeur?
Zwakke willekeur is het creëren van een onvoorstelbare waarde met een snelle, niet-cryptografische generator. Statistische uniformiteit betekent niet onvoorspelbaarheid: de toestand is klein en de transitiefunctie deterministisch. Math.random() in V8 is xorshift128+, 128 statusbits die kunnen worden gereconstrueerd op basis van vier waargenomen uitgangen. Je verzamelt reset-tokens van een account die je beheert, lost de status op, voorspelt het volgende token en neemt de spaarrekening van een vreemde over zonder hun inbox aan te raken. De oplossing is één regel, crypto.randomBytes(32).toString('hex') , en het hashen van zwakke uitvoer verandert niets.
Wat je leert in Zwakke willekeur
- Onderscheid een PRNG (snel, statistisch uniform) van een CSPRNG (resistent tegen herstel van de toestand op basis van waargenomen outputs)
- Erken dat het hashen van de output van een zwakke PRNG deze niet veilig maakt, de hash is deterministisch en de input nog steeds voorspelbaar
- Pas <code>crypto.randomBytes</code> / <code>crypto.randomUUID</code> (Node), <code>crypto.getRandomValues</code> (Web Crypto) of <code>os.urandom</code> (Python) toe voor elke beveiligingsgevoelige waarde
- Controleer de codebasis voor aangrenzende oproepsites, reset tokens, uitnodigingstokens, MFA-back-upcodes, OAuth-status, ondertekende URL-nonces en beheerderswachtwoordgeneratoren delen allemaal dezelfde kwetsbaarheid wanneer ze zijn afgeleid van <code>Math.random</code>
- Internaliseer de regel: een waarde waarvan een aanvaller baat zou hebben bij het voorspellen, moet standaard afkomstig zijn van een cryptografische bron. Elke taal maakt hiervan een keuze die in één keer geïmporteerd kan worden, dus de verkeerde standaard heeft geen excuus
Zwakke willekeur — Trainingsstappen
-
Maak het doel groter
Bob verdient zijn geld door op de rekeningen van anderen te komen en het geld naar binnen te halen. Tegenwoordig is zijn doelwit Nestward, een spaarapp waar één enkele rekening echte saldi kan bewaren. Hij begint op de pagina voor het opnieuw instellen van het wachtwoord, de voordeur waar hij doorheen wil lopen, om te zien hoe het herstel werkt voordat hij deze aanraakt.
-
Hoe herstel werkt
Eén detail op die pagina is de hele reden waarom Bob geïnteresseerd is.
-
Vraag een reset voor zichzelf aan
Bob begint met codes die hij mag zien. Hij is eigenaar van het wegwerpaccount bob.reeve@proton.me, dus vraagt hij een reset aan en opent de e-mail die Nestward terugstuurt. De resetlink in die e-mail bevat de volledige code.
-
Verzamel een tweede code
Eén code is niet genoeg om een patroon te zien, dus vraagt Bob een nieuwe reset aan voor hetzelfde account en leest de tweede e-mail.
-
Nog een code
Een derde reset geeft Bob de drie codes die zijn oplosser nodig heeft. Hij leest de laatste e-mail en zet de codes op een rij.
-
Voorspel de volgende code
Nestward combineert deze codes met een snelle, niet-cryptografische generator met een kleine interne status. Bob voert de drie codes die hij uit zijn inbox heeft gelezen in een oplosser in die die toestand reconstrueert en doorstuurt. De tool drukt de exacte code af die de app zal plaatsen in de eerstvolgende resetlink die hij verzendt, voor welk account de reset ook is bedoeld.
-
Activeer de reset van het slachtoffer
De voorspelde code is de volgende die de generator zal uitgeven, dus Bob moet ervoor zorgen dat hij die code nu uitgeeft. Hij vraagt om een reset voor een echte klant, renata.voss@gmail.com. Nestward slaat de volgende code op, plaatst deze in een link en e-mailt deze naar Renata, een inbox die Bob niet kan lezen.
-
Wissel de voorspelde code in
Nu geeft Bob de code uit die hij voorspelde. Hij stuurt het rechtstreeks naar het reset-eindpunt met een nieuw wachtwoord, en omdat het overeenkomt met de code die Nestward zojuist naar Renata heeft gestuurd, accepteert de server het en stelt zijn wachtwoord in op haar account.
-
De rekening is van hem
Het eindpunt heeft de code geaccepteerd en het wachtwoord gewijzigd. Bob is nu ingelogd op een spaarrekening die niet van hem is.
-
Kennis check
Je hebt zojuist gezien hoe een aanvaller een resetcode voorspelde die hem nooit werd getoond. Ontdek waarom dat mogelijk was.
Dekking van beveiligingsframeworks
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