Verbroken gebruikersauthenticatie
Een 6-cijferige code is slechts geheim, terwijl het raden beperkt is.
Wat is Verbroken gebruikersauthenticatie?
Een eindpunt kan een inloggegevens correct controleren en de controle nog steeds nooit verdedigen tegen automatisering: geen pogingslimiet, geen uitsluiting, geen snelheidslimiet. Wanneer de inloggegevens een zescijferige code zijn, loopt een aanvaller de hele ruimte, verzoek voor verzoek, door. U start een aanmelding met alleen het e-mailadres van een doelwit, bekijkt een verkeerd code-antwoord 200 zonder dat er iets meetelt, en schrijft u vervolgens een weg naar een livesessie. De oplossing houdt mislukte pogingen bij aan de serverzijde, retourneert 429 bij de limiet, gebruikt een code bij match en houdt de vervaldatum kort.
Wat je leert in Verbroken gebruikersauthenticatie
- Herken gebroken gebruikersauthenticatie waarbij een eindpunt een inloggegevens correct valideert, maar geen limiet stelt aan pogingen, dus het valt onder brute kracht
- Begrijp dat een korte numerieke code (een OTP of inlogcode) alleen geheim is zolang het aantal gissingen beperkt is, en dat een niet-afgekrompen eindpunt een aanvaller de hele coderuimte, één verzoek tegelijk, overhandigt
- Maak onderscheid tussen tokendiefstal, tokenvervalsing en toegangsfouten op objectniveau; hier is de referentiecontrole correct en is de ontbrekende controle anti-automatisering op het eindpunt
- Pas de oplossing toe: tel mislukte pogingen in de status van de server die zijn gekoppeld aan het account, blokkeer na een drempelwaarde en retourneer 429, gebruik codes bij gebruik en houd codes van korte duur
- Controleer elk aanmeldings-, verificatie- en wachtwoordreset-eindpunt op een ontbrekende poginglimiet, aangezien één onbeperkte authenticatiestap voldoende is voor het overnemen van accounts
Verbroken gebruikersauthenticatie — Trainingsstappen
-
Eén code houdt de wacht
Kelvo is een app voor consumentengeld en meldt mensen aan met een zescijferige code die naar hun adres wordt gemaild, zonder wachtwoord. Vul je e-mailadres in, Kelvo stuurt een code, je typt deze terug, je bent binnen. Bob heeft geen code. Wat hij heeft, van een gehackte mailinglijst, is het e-mailadres van één klant: renata.voss@gmail.com.. Hij opent de Kelvo-inlogpagina om te zien waar hij precies mee te maken heeft.
-
Activeer de code
Bob start een aanmelding voor het account dat hij target. Hij typt de e-mail van het slachtoffer en vraagt Kelvo om de code te sturen. De code belandt in Renata's inbox, niet in de zijne, maar Kelvo laat hem nu het scherm zien dat erom vraagt. Dat scherm, en het verzoek erachter, is wat hij vervolgens bestudeert.
-
Bekijk het verzoek
Het code-invoerscherm bevindt zich nu voor Bob. Hij heeft de echte code van Renata niet, maar voordat hij deze probeert te kraken, wil hij zien hoe het scherm een code controleert en waar deze naartoe wordt gestuurd. Hij typt een verkeerde code, verzendt deze en bekijkt vervolgens het verzoek dat zijn browser doet in het netwerkpaneel.
-
Het eindpunt, in het volle zicht
De browser van Bob stuurde de code naar de API van Kelvo en het netwerkpaneel registreerde het hele verzoek. Het geeft hem het enige dat hij nodig heeft om dit zonder scherm aan te pakken: het exacte eindpunt dat codes controleert.
-
Het brute-force-script
Met het eindpunt in de hand raadt Bob niet met de hand. Hij opent het korte script dat hij ermee gaat uitvoeren: een lus die elke mogelijke code naar Kelvo's verificatie-eindpunt verzendt totdat er één geaccepteerd wordt.
-
Hoe de lus werkt
De hele aanval bestaat uit een handvol lijnen. Bekijk wat elk onderdeel doet en waarom niets op de kwetsbare server dit tegenhoudt.
-
Loop elke code door
Bob voert het script uit op basis van Kelvo's verificatie-eindpunt. Het vuurt steeds opnieuw hetzelfde verzoek af, waarbij de code elke keer wordt verhoogd, en wacht tot er één wordt geaccepteerd.
-
Een code die werkt
Het script draaide zonder tegenstand en vond een code die de server accepteert.
-
Gebruik de code
Bob neemt de code die zijn script heeft gevonden en stuurt deze nog een keer met de hand naar het eindpunt, om te bevestigen dat het account van hem is en om te zien wat hij nu in zijn bezit heeft.
-
Een livesessie, van zes cijfers
Het eindpunt accepteerde de geraden code en gaf een echte sessie terug.
Dekking van beveiligingsframeworks
OWASP API Top 10
- API2:2023 Broken Authentication
CWE
- CWE-287 Improper Authentication
- CWE-307 Improper Restriction of Excessive Authentication Attempts
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