Методы устранения угроз

Существует ряд методов устранения угроз, которые можно использовать для повышения безопасности паролей. Эти методы реализуются с помощью одной или нескольких следующих основных технологий.

Технология Description
Криптография: следующее поколение (CNG) CNG — это предпочтительный криптографический API для разработки Windows. Он поддерживает современные алгоритмы, изоляцию ключей и гибкость шифрования. Дополнительные сведения см. в разделе "Функции CNG".
Списки управления доступом Список управления доступом (ACL) — это список защиты безопасности, которая применяется к объекту. Объект может быть файлом, процессом, событием или любым другим элементом дескриптора безопасности. Дополнительные сведения о списках управления доступом см. в контроль доступа списках.
API защиты данных DPAPI предоставляет функции для шифрования и расшифровки конфиденциальных данных, привязанных к учетной записи пользователя или компьютеру: CryptProtectData, CryptUnprotectData, CryptProtectMemory и CryptUnprotectMemory.
Диспетчер учетных данных Windows Обеспечивает безопасное хранилище учетных данных пользователя (пароли, сертификаты и другие секреты). Используйте CredWrite и CredRead для программного доступа. Также доступен через CredUIPromptForWindowsCredentials.

Note

CryptoAPI (устаревшие функции) по-прежнему поддерживается для обратной Crypt* совместимости, но новый код должен использовать API CNG (Cryptography: Next Generation) для современной поддержки алгоритмов и улучшенной архитектуры безопасности.

Следующие методы устранения угроз используют одну или несколько описанных выше технологий.

Получение паролей от пользователя

Если пользователь разрешает настраивать пароль, принудительно используйте надежные пароли. Например, требуется, чтобы пароли были минимальной длиной, например восемь символов или более. Пароли также должны включать в себя прописные и строчные буквы, цифры и другие символы клавиатуры, такие как знак доллара ($), восклицательный знак (!) или больше (>).

После получения пароля используйте его быстро (используя как можно меньше кода), а затем удалите все остатки пароля. Это сводит к минимуму время, доступное для злоумышленника, чтобы "ловушка" пароля. Компромисс с этим методом — это частота, с которой должен быть получен пароль от пользователя; однако принцип должен использоваться везде, где это возможно. Сведения о том, как правильно получить пароли, см. в разделе "Запрос пользователя для учетных данных".

Избегайте предоставления параметров пользовательского интерфейса "запомнить пароль". Часто пользователям потребуется использовать этот параметр. Если вы должны предоставить его, то по крайней мере убедитесь, что пароль сохраняется в безопасном режиме. Дополнительные сведения см. в разделе "Хранение паролей" далее в этом разделе.

Ограничение попыток ввода пароля. После определенного количества попыток без успеха заблокируйте пользователя в течение определенного периода времени. При необходимости устраните время отклика для каждой попытки на максимальное значение. Эта техника направлена на поражение от угадывающей атаки.

Хранение паролей

Warning

Никогда не сохраняйте пароли в виде открытого текста (незашифрованных) — не в файлах, реестре, конфигурации или исходном коде. Шифрование паролей значительно повышает их безопасность.

Сведения о хранении зашифрованных паролей см. в разделе CryptProtectData. Сведения о шифровании паролей в памяти см. в разделе CryptProtectMemory. Храните пароли в максимально возможном месте. Чем больше места хранится пароль, тем больше вероятность того, что злоумышленник может найти его. Никогда не хранить пароли на веб-странице или в веб-файле. Хранение паролей на веб-странице или в веб-файле позволяет легко скомпрометировать пароли.

После шифрования пароля и его хранения используйте безопасные списки управления доступом к файлу. Кроме того, можно хранить пароли и ключи шифрования на съемных устройствах. Хранение паролей и ключей шифрования на съемных носителях, таких как смарт-карта, помогает создать более безопасную систему. После получения пароля для данного сеанса карточку можно удалить, тем самым удаляя возможность того, что злоумышленник может получить доступ к нему.