Wachtwoorden verwerken

Gebruikersnaam- en wachtwoordreferenties blijven gebruikelijk voor verificatie, zelfs als sterkere methoden, zoals certificaten, biometrie en wachtwoordsleutels, breder worden. Versleutelingssleutels en andere geheimen vereisen ook beveiliging. Softwaresystemen moeten deze referenties veilig verwerken om diefstal van referenties, herhalingsaanvallen en laterale verplaatsing door aanvallers te weerstaan.

Warning

Codeer nooit wachtwoorden, API-sleutels, verbindingsreeksen of andere geheimen in broncode. Hardgecodeerde geheimen kunnen door aanvallers eenvoudig worden buitgemaakt met behulp van decompilers, geheugeninspectie of gelekte broncode. Dit is een van de meest voorkomende kwetsbaarheden in inloggegevens die actief worden misbruikt.

Important

Wanneer u klaar bent met het gebruik van wachtwoorden of geheimen in het geheugen, overschrijft u de buffer onmiddellijk door SecureZeroMemory aan te roepen. In tegenstelling tot memset kan de compiler SecureZeroMemory niet wegoptimaliseren, waardoor geheimen daadwerkelijk worden gewist.

Modern referentiebeheer

Voor nieuwe ontwikkeling op Windows gebruikt u deze benaderingen in voorkeursvolgorde:

  1. Verwijder waar mogelijk wachtwoorden. Gebruik Windows Hello, wachtwoordsleutels (FIDO2/WebAuthn) of verificatie op basis van certificaten om te voorkomen dat wachtwoorden helemaal worden verwerkt.
  2. Gebruik de Windows Credential Manager. Roep CredWrite en CredRead aan om referenties op te slaan en op te halen in de referentiekluis van het besturingssysteem, waarmee ze worden versleuteld met de aanmeldingssessiesleutel van de gebruiker.
  3. Gebruik DPAPI voor lokale geheime opslag. Roep CryptProtectData aan om geheimen te versleutelen die lokaal moeten worden bewaard. DPAPI koppelt versleuteling aan het gebruikersaccount of de computer en biedt diepgaande verdediging.
  4. Gebruik beheerde identiteiten of sleutelkluizen voor servicereferenties. Services die worden uitgevoerd op Azure moeten beheerde identiteiten gebruiken. On-premises services moeten geheimen ophalen uit een beveiligde kluis tijdens runtime in plaats van ze op te slaan in configuratiebestanden.

Principes voor het afhandelen van wachtwoorden

Wanneer wachtwoorden moeten worden verwerkt in code:

  • Verzamel wachtwoorden zo laat mogelijk en verwijder ze zo vroeg mogelijk. Minimaliseer het venster waarin het geheim zich in het geheugen bevindt.
  • Nooit wachtwoorden of geheimen registreren. Zorg ervoor dat diagnostische logboekregistratie, gebeurtenislogboeken en crashdumps geen referentiemateriaal bevatten.
  • Verzend nooit wachtwoorden in tekst zonder opmaak. Gebruik altijd TLS/HTTPS of een gelijkwaardig versleuteld kanaal.
  • Prompt veilig. Gebruik CredUIPromptForWindowsCredentials om aanmeldingsgegevens te verzamelen via het standaardvenster voor Windows-aanmeldingsgegevens, dat beveiligde isolatie van het bureaublad afdwingt.

Voor meer informatie over bedreigingen en oplossingen: