Een veld met het label rekeningnummer is niet automatisch een openbare referentie, en het label is niet de test. De test is wat het bezit toestaat: als het kennen van het nummer iemand aanmeldt, een verbindingsprofiel downloadt of een apparaat autoriseert, dan is dat nummer een inloggegeven met een levenscyclus. Ik voer de vijf onderstaande controles uit telkens wanneer een dienst een numerieke identiteit uitgeeft en die onschadelijk noemt. Elk levert een regel op in een kort verslag, en dat verslag is het resultaat, niet een oordeel over het product.

Inventariseer wat het bezit werkelijk verleent

Noteer elke actie die het nummer ontgrendelt, afzonderlijk. Aanmelden bij een portaal, een configuratiebestand ophalen, een nieuw apparaat autoriseren en een geaccepteerde tunnel-login leveren zijn verschillende bevoegdheden, en een dienst kan er één implementeren zonder de andere. Een portaal dat het nummer als enige veld accepteert, zegt niets over hoe de tunnel zijn peer authenticeert later of hoe verkeerssleutels worden afgeleid.

Het algemene model is gemakkelijk te formuleren: een bearer-inloggegeven is er een dat de houder kan gebruiken zonder het bezit van een afzonderlijke cryptografische sleutel te bewijzen, wat het onderscheid is dat RFC 6750 voor tokens trekt. Dat is een vergelijking, geen bewering dat een op een nummer gebaseerde dienst OAuth implementeert. Als de houder niets anders nodig heeft, behandel het nummer dan als een bearer-geheim en classificeer de rest van het ontwerp dienovereenkomstig.

Bescherm het als een geheim, niet als een referentie

Opslag volgt uit de classificatie. Een waarde die aanmeldt, hoort in een wachtwoordmanager, niet in een schermafbeelding, een klembordgeschiedenis, een chatbericht of een browsernotitie. Schermafbeeldingen zijn het gebruikelijke lek: het nummer is kort en lijkt onschadelijk, dus belandt het in een supportthread die het apparaat waaruit het kwam overleeft.

Phishing is de andere faalmodus, en het maakt niet uit hoe willekeurig het nummer is. Een bedrieger die de waarde wil, zal je vragen hem in een formulier te plakken, en een inloggegeven dat nooit verloopt en geen tweede factor heeft, is de moeite waard. Bereik het aanmeldpad via een bladwijzer of een bekend adres, niet via een link in een bericht dat ook om het nummer vraagt.

Behandel herstelmateriaal als deel van het geheim. Als de operator ook een herstelcode, een pincode of een e-mailadres heeft uitgegeven waarmee het account kan worden gereset, zijn dat afzonderlijke inloggegevens met dezelfde beschermingseis. Eén onbeschermd resetkanaal maakt elke andere controle tot decoratie.

Controleer raadweerstand en snelheidsbeperking samen

Lengte is alleen zinvol naast de generatiemethode. Een lang nummer uit een voorspelbare reeks is zwakker dan een korte waarde uit een cryptografische generator, en een indrukwekkend aantal cijfers bewijst geen onvoorspelbaarheid. Vraag hoe de waarde wordt gegenereerd voordat je redeneert over hoe moeilijk hij te raden is.

Raadweerstand alleen overleeft ook geen onbeperkte pogingssnelheid. De controles die ertoe doen, zijn degene die de operator implementeert: tellers voor mislukte pogingen, vergrendelingen, beperking per bron en of een verkeerd nummer te onderscheiden is van een niet-bestaand nummer. Als de dienst het ondersteunt, laat één mislukte poging zien hoe de fout eruitziet en of er een hertellingsteller verschijnt:

# one attempt, then read the response and any counter or delay
# do not script repeated guesses against a live account
curl -i -X POST https://portal.example.invalid/login -d "account=000000000000"

Noteer wat de reactie onthult. Een afzonderlijke fout voor een onbekend account is een enumeratie-orakel, zelfs wanneer het nummer onraadbaar is, en die bevinding hoort in het verslag, of je haar nu aan de clientzijde kunt verhelpen of niet.

Plan rotatie en intrekking voordat je ze nodig hebt

Zoek het ondersteunde proces voor een verloren of blootgesteld nummer en schrijf het op terwijl alles werkt. Kan het accountgegeven überhaupt worden vervangen? Maakt vervanging reeds ingeschreven apparaten, actieve sessies of gedownloade configuratie ongeldig? Welk herstelmateriaal vraagt het proces? Een dienst zonder e-mailafhankelijkheid kan meer herstelverantwoordelijkheid naar de gebruiker verschuiven, wat de procedure belangrijker maakt, niet minder.

Scheid accountvervanging van intrekking van inloggegevens. Als het nummer het downloaden van een sleutel, certificaat of profiel autoriseert, kan vervanging van het nummer dat gedownloade materiaal geldig laten, en het intrekken van het gedownloade materiaal kan een andere bewerking met een andere eigenaar zijn. Ga er niet van uit dat één gewijzigd veld elke verbinding beëindigt; controleer het werkelijke model van de operator en noteer waar je het hebt geverifieerd.

Documenteer de beslissing en controleer haar later opnieuw

Houd per dienst een verslag van één pagina bij: welke bevoegdheden het nummer verleent, waar het is opgeslagen, wie het kan resetten, welk bewijs van gebruik bestaat en wat je in het eerste uur na openbaarmaking zou doen. Dat verslag is wat een discussie over terminologie verandert in een beslissing die iemand kan auditen.

Privacyclaims hebben hun eigen reikwijdte nodig. Een willekeurig gegenereerd nummer kan nog steeds een stabiele identificator zijn die accountgebeurtenissen in de tijd koppelt; onvoorspelbaarheid is niet hetzelfde als niet-koppelbaarheid, en geen van beide eigenschappen zegt iets over bewaarde netwerkmetadata. Vergelijk volledige ontwerpen in plaats van velden op een aanmeldscherm te tellen.

Voordat je het vastlegt:

  • Elke bevoegdheid die het nummer verleent, is vermeld, inclusief downloads en apparaatautorisatie.
  • Opslag- en herstelkanalen zijn met dezelfde standaard beschermd als het nummer zelf.
  • De generatiemethode en de snelheidslimieten zijn bekend, niet aangenomen op basis van lengte.
  • Er bestaan een vervangingsprocedure en een intrekkingsprocedure, en je weet welke welke opheft.
  • Het verslag noemt wie de waarde kan resetten en welk bewijs na gebruik achterblijft.

Gerelateerde artikelen