Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для разработки безопасного программного обеспечения рекомендуется использовать следующие рекомендации при разработке приложений. Дополнительные сведения см. в статье о жизненном цикле разработки безопасности Майкрософт.
Жизненный цикл разработки безопасности
Жизненный цикл разработки безопасности (SDL) — это процесс, который предусматривает выполнение ряда действий, направленных на безопасность, на каждом этапе разработки программного обеспечения. К этим действиям и конечным предложениям относятся:
- Разработка моделей угроз
- Использование средств сканирования кода
- Проведение проверок кода и тестирования безопасности
Дополнительные сведения о SDL см. в разделе жизненный цикл разработки защищенных приложений (Майкрософт).
Модели угроз
Анализ модели угроз поможет вам обнаружить потенциальные точки атаки в коде. Дополнительные сведения об анализе модели угроз см. в статье Говард, Майкл и LeBlanc, Дэвид [2003], Записывающий безопасный код, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Вашингтон. (Этот ресурс может быть недоступен на некоторых языках и странах.)
Пакеты обновления и обновления безопасности
Среды сборки и тестирования должны зеркально отображать те же уровни пакетов обновления и обновлений безопасности целевой пользовательской базы. Мы рекомендуем установить последние пакеты обновления и обновления системы безопасности для любой платформы или приложения Microsoft, которая входит в среду сборки и тестирования, и поощрять пользователей выполнять то же самое для готовой среды приложения. Дополнительные сведения о пакетах обновлениях и обновлениях системы безопасности см. в разделе Update Windows и Microsoft Security.
Авторизация
Необходимо создать приложения, требующие наименьших возможных привилегий. Использование наименьших возможных привилегий снижает риск компрометации вашей компьютерной системы вредоносным кодом. Дополнительные сведения о выполнении кода в минимально возможном уровне привилегий см. в разделе "Выполнение с специальными привилегиями".
Рекомендации по шифрованию
При реализации криптографии в приложениях Windows:
- Используйте API шифрования: следующее поколение (CNG) для всех новых разработок. CryptoAPI поддерживается только для обратной совместимости.
- Проектируйте с учетом криптографической гибкости и планируйте переход к постквантовой криптографии. Не разбрасывайте жёстко заданные идентификаторы алгоритмов и размеры ключей по всему коду — вынесите их в одно место, чтобы алгоритмы можно было заменять без переписывания кода. Платформа переходит на постквантовые стандарты NIST: ML-KEM (FIPS 203) для установления ключей и ML-DSA (FIPS 204) для цифровых подписей, поэтому уже сейчас отдавайте предпочтение криптографически гибким решениям — особенно для данных, которые должны сохранять конфиденциальность длительное время, — чтобы противостоять атакам типа «собери сейчас — расшифруй позже».
- Предпочитайте аутентифицированное шифрование (AEAD). Используйте AES-GCM, чтобы шифрование также обнаружило изменение. Если необходимо использовать неаутентифицированный режим, например CBC, используйте его вместе с отдельным механизмом контроля целостности (encrypt-then-MAC) — одна лишь конфиденциальность не защищает от модификации.
- Никогда не используйте повторно nonce (IV) с тем же ключом в AES-GCM. Повторное использование nonce в GCM имеет катастрофические последствия: оно может раскрыть ключ аутентификации и позволить подделывать сообщения. Создайте уникальный nonce для каждой операции шифрования — например, используйте инкрементируемый счётчик или новое случайное 96-битное значение.
- Никогда не используйте режим шифра блоков ECB. ECB шифрует блоки независимо, что приводит к раскрытию паттернов в открытом тексте.
- Никогда не прописывайте криптографические ключи жёстко в исходном коде. Используйте DPAPI для защиты локальных ключей или поставщика хранилища ключей CNG для постоянных ключей.
- Очищайте память от секретов после завершения работы с ними. Перезаписывайте ключевой материал, пароли и другие чувствительные буферы с помощью SecureZeroMemory. В отличие от
memset, компилятор не выполняет его оптимизацию. - Используйте длину ключей 256 бит для AES, 2048+ битов для RSA (3072+ предпочтительный) и 256+ битов для ECDSA.
- Используйте SHA-256 или более сильный для хэширования. Не используйте MD5 или SHA-1 в целях безопасности.
- Всегда проверяйте возвращаемые значения из криптографических функций. Сбой вызова шифрования, произошедший без явного уведомления об ошибке, может привести к тому, что данные будут сохранены в открытом виде.
-
Создание случайных чисел с помощью BCryptGenRandom (CNG) — не
rand()или других не криптографических PRNG. ПередайтеBCRYPT_USE_SYSTEM_PREFERRED_RNG, чтобы использовать генератор, выбранный системой по умолчанию, не управляя дескриптором алгоритма.
Дополнительные сведения
Дополнительные сведения о лучших практиках см. в следующих разделах.
| Тема | Описание |
|---|---|
|
Запуск с особыми привилегиями |
Описывает последствия для безопасности привилегий. |
|
Предотвращение переполнения буфера |
Предоставляет сведения о предотвращении переполнения буфера. |
|
Control Flow Guard (CFG) |
Описывает уязвимости повреждения памяти. |
|
Создание DACL |
В этой статье показано, как создать список управления доступом (DACL) с помощью языка определения дескриптора безопасности (SDDL). |
|
Обработка паролей |
Обсуждается последствия использования паролей. |
|
Dynamic контроль доступа расширяемость разработчика |
Базовая ориентация на некоторые точки расширяемости разработчика для новых решений Динамической контроль доступа. |