Obsługa haseł

Nazwa użytkownika i hasło pozostają powszechnie stosowanymi poświadczeniami do uwierzytelniania, mimo że silniejsze metody, takie jak certyfikaty, dane biometryczne i klucze dostępu, stają się coraz bardziej rozpowszechnione. Klucze szyfrowania i inne wpisy tajne wymagają również ochrony. Systemy informatyczne muszą bezpiecznie przetwarzać te poświadczenia, aby chronić się przed kradzieżą poświadczeń, atakami odtworzeniowymi i ruchem bocznym napastników.

Warning

Nigdy nie należy kodować haseł, kluczy interfejsu API, parametrów połączenia lub innych wpisów tajnych w kodzie źródłowym. Zakodowane na stałe wpisy tajne są trywialnie wyodrębniane przez osoby atakujące przy użyciu dekompilatorów, inspekcji pamięci lub przecieków kodu źródłowego. Jest to jedna z najczęstszych luk w zabezpieczeniach poświadczeń wykorzystywana w środowisku naturalnym.

Ważna

Po zakończeniu korzystania z haseł lub wpisów tajnych w pamięci natychmiast zastąp bufor przez wywołanie metody SecureZeroMemory. W przeciwieństwie do memset, kompilator nie może zoptymalizować SecureZeroMemory, co zapewnia, że tajne dane są faktycznie usuwane z pamięci.

Nowoczesne zarządzanie poświadczeniami

W przypadku nowego programowania w Windows użyj tych metod w kolejności preferencji:

  1. W miarę możliwości eliminuj hasła. Użyj Windows Hello, kluczy dostępu (FIDO2/WebAuthn) lub uwierzytelniania opartego na certyfikatach, aby całkowicie uniknąć obsługi haseł.
  2. Użyj menedżera poświadczeń Windows. Wywołaj CredWrite i CredRead, aby przechowywać i pobierać poświadczenia w magazynie poświadczeń systemu operacyjnego, który szyfruje je przy użyciu klucza sesji logowania danego użytkownika.
  3. Użyj DPAPI do lokalnego przechowywania sekretów. Wywołaj metodę CryptProtectData , aby zaszyfrować wpisy tajne, które muszą być utrwalane lokalnie. Interfejs DPAPI łączy szyfrowanie z kontem użytkownika lub maszyną, zapewniając ochronę w głębi systemu.
  4. W przypadku poświadczeń usługi użyj tożsamości zarządzanych lub usługi Key Vault. Usługi uruchomione na Azure powinny używać tożsamości zarządzanych. Usługi lokalne powinny pobierać sekrety z bezpiecznego magazynu w czasie działania, zamiast przechowywać je w plikach konfiguracji.

Zasady obsługi haseł

Gdy hasła muszą być obsługiwane w kodzie:

  • Zbierz hasła tak późno, jak to możliwe, i odrzuć je tak szybko, jak to możliwe. Zminimalizuj okres, przez który tajny klucz znajduje się w pamięci.
  • Nigdy nie rejestruj haseł ani wpisów tajnych. Upewnij się, że dzienniki diagnostyczne, dzienniki zdarzeń i zrzuty po awarii nie zawierają danych uwierzytelniających.
  • Nigdy nie przesyłaj haseł w postaci zwykłego tekstu. Zawsze używaj protokołu TLS/HTTPS lub równoważnego szyfrowanego kanału.
  • Monituj bezpiecznie. Użyj CredUIPromptForWindowsCredentials, aby pobrać poświadczenia za pomocą standardowego okna dialogowego poświadczeń systemu Windows, które zapewnia bezpieczną izolację pulpitu.

Aby uzyskać więcej informacji na temat zagrożeń i środków zaradczych: