Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Учетные данные пользователя и пароля остаются общими для проверки подлинности, даже если более надежные методы, такие как сертификаты, биометрические данные и ключи доступа становятся более распространенными. Ключи шифрования и другие секреты также требуют защиты. Программные системы должны обеспечивать безопасную обработку этих учетных данных, чтобы предотвратить их кражу, атаки повторного воспроизведения и горизонтальное перемещение злоумышленников.
Warning
Никогда не жестко кодировать пароли, ключи API, строки подключения или другие секреты в исходном коде. Жестко закодированные секреты извлекаются злоумышленниками с помощью декомпилеров, проверки памяти или утечки исходного кода. Это одна из наиболее распространенных уязвимостей учетных данных, эксплуатируемых в дикой природе.
Important
Завершив использование паролей или секретов в памяти, немедленно перезаписать буфер путем вызова SecureZeroMemory. В отличие от memset, компилятор не может удалить SecureZeroMemory в ходе оптимизации, что гарантирует фактическую очистку секретных данных.
Современное управление учетными данными
Для новой разработки на Windows используйте следующие подходы в порядке предпочтения:
- По возможности исключите пароли. Используйте Windows Hello, секретные ключи (FIDO2/WebAuthn) или проверку подлинности на основе сертификатов, чтобы избежать обработки паролей в целом.
- Используйте диспетчер учетных данных Windows. Вызовите CredWrite и CredRead для хранения и получения учетных данных в хранилище учетных данных ОС, который шифрует их с помощью ключа сеанса входа пользователя.
- Используйте DPAPI для локального хранилища секретов. Вызовите CryptProtectData для шифрования секретов, которые должны храниться локально. DPAPI связывает шифрование с учетной записью пользователя или компьютером, обеспечивая глубинную защиту.
- Для учетных данных службы используйте управляемые удостоверения или хранилища ключей. Службы, работающие на Azure, должны использовать управляемые удостоверения. Локальные службы должны получать секреты из безопасного хранилища во время выполнения, а не хранить их в файлах конфигурации.
Принципы обработки паролей
Когда пароли должны обрабатываться в коде:
- Как можно скорее соберите пароли и удалите их как можно раньше. Сведите к минимуму время, в течение которого секретные данные хранятся в памяти.
- Никогда не регистрируют пароли или секреты. Убедитесь, что журналы диагностики, журналы событий и дампы сбоев не содержат учетных данных.
- Никогда не передавать пароли в виде обычного текста. Всегда используйте TLS/HTTPS или эквивалентный зашифрованный канал.
- Вводите запросы безопасно. Используйте CredUIPromptForWindowsCredentials для сбора учетных данных через стандартное диалоговое окно учетных данных Windows, которое обеспечивает безопасную изоляцию рабочего стола.
Дополнительные сведения об угрозах и устранении рисков: