Поделиться через


Рекомендации по безопасности для C++

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

Средства безопасности в Visual C++

Эти средства обеспечения безопасности приложений встроены в компилятор и компоновщик Visual C++.

  • Параметр /GS (проверка безопасности буфера)
    Указывает компилятору на необходимость вставки кода, обнаруживающего переполнения, в функции, которыми могут воспользоваться злоумышленники.При обнаружении переполнения выполнение программы прекращается.По умолчанию этот параметр включен.

  • Параметр /SAFESEH (образ содержит обработчики безопасных событий)
    Указывает компоновщику на необходимость включения в выходной образ таблицы, содержащей адрес каждого обработчика исключений.Во время выполнения операционная система проверяет по этой таблице, действительно ли используются только допустимые обработчики исключений.Это помогает предотвратить запуск обработчиков исключений, внедряемых злоумышленниками в среду выполнения.По умолчанию этот параметр выключен.

  • /NXCOMPAT , /NXCOMPAT (совместимо с предотвращением исполнения данных (DEP))
    Эти возможности компилятора и компоновщика реализуют совместимость с функцией предотвращения исполнения данных (DEP).Функция DEP защищает ЦП от исполнения страниц, не содержащих кода.

  • /analyze (анализ кода)
    Этот параметр компилятора запускает анализ кода с целью выявления потенциальных проблем безопасности, таких как переполнение буфера, отмена инициализации памяти, разыменование нулевого указателя и утечки памяти.По умолчанию этот параметр выключен.Дополнительные сведения см. в разделе Общие сведения об анализе кода в C/C++.

  • /DYNAMICBASE (использование технологии Address Space Layout Randomization (ASRL))
    Этот параметр компоновщика позволяет собрать исполняемый образ, который можно загрузить в другое расположение в памяти в начале выполнения.Этот параметр также делает расположение стека в памяти значительно менее прогнозируемым.

Среда выполнения повышенной безопасности

В библиотеку времени выполнения C (CRT) были добавлены безопасные версии функций, которые могут создать угрозу безопасности, например функция копирования непроверенной строки strcpy.Поскольку устаревшие, небезопасные версии этих функций использовать не рекомендуется, во время компиляции они выводят предупреждения.Рекомендуется использовать безопасные версии этих функций CRT, а не подавлять вывод предупреждений компилятора.Дополнительные сведения см. в разделе Функции безопасности в CRT.

Библиотека SafeInt

Библиотека SafeInt помогает предотвращать переполнение емкости целочисленных переменных и другие ошибки, которые можно использовать в злонамеренных целях, возникающие в ходе выполнения математических операций приложением.Библиотека SafeInt включает Класс SafeInt, Класс SafeIntException и несколько функций Функции SafeInt.

Класс SafeInt защищает от ошибок переполнения емкости целочисленных переменных и деления на нуль, которые могут использоваться в злонамеренных целях.Его можно использовать для обработки сравнений значений различных типов.I предоставляет две политики обработки ошибок.Политика по умолчанию класса SafeInt заключается в выдаче исключения класса SafeIntException, сообщающего о причинах невозможности выполнения математической операции.Вторая политика заключается в том, что класс SafeInt останавливает выполнение программы.Также можно определить пользовательскую политику.

Каждая функция класса SafeInt защищает от злонамеренного использования ошибок одной из математических операций.Можно использовать параметры двух различных типов без преобразования их к одному типу.Для защиты множества математических операций используйте класс SafeInt.

Установленные итераторы

Проверяемый итератор обеспечивает принудительное соблюдение ограничений контейнера.По умолчанию при превышении ограничений проверяемого итератора создается исключение, и выполнение программы прекращается.Проверяемый итератор обеспечивает другие уровни реагирования, зависящие от значений, назначенных в определениях препроцессора, таких как _SECURE_SCL_THROWS и _ITERATOR_DEBUG_LEVEL.Например, при использовании уровня _ITERATOR_DEBUG_LEVEL=2 проверяемый итератор выполняет комплексные проверки правильности в режиме отладки, возможность использования которых обеспечивается использованием утверждений.Дополнительные сведения см. в разделе Проверяемые итераторы.

Анализ управляемого кода

Инструмент анализа управляемого кода, также известный как FxCop, выполняет проверку сборок на соответствие рекомендациям, изложенным в Правилах разработки приложений платформы .NET Framework.FxCop анализирует код и метаданные в каждой сборке и выявляет дефекты по следующим направлениям:

  • Разработка библиотек

  • Локализация

  • Соглашения об именах

  • Производительность

  • Безопасность

Средство проверки приложений Windows

Верификатор приложений (AppVerifier) может помочь выявить потенциальные проблемы совместимости, стабильности и безопасности приложений.

Средство AppVerifier контролирует использование операционной системы приложением.Он следит за файловой системой, реестром, памятью и API-интерфейсами во время работы приложения, а при обнаружении ошибок выдает рекомендации по исправлению исходного кода.

Можно использовать AppVerifier в следующих целях:

  • Тестирование приложения на наличие возможных проблем совместимости, возникающих в результате типичных ошибок программирования.

  • Исследовать приложения для определения утечек памяти.

  • Выявлять потенциальные проблемы безопасности в приложениях.

AppVerifier является частью набора средств обеспечения совместимости приложений, который можно найти в разделе Совместимость приложений на веб-сайте TechNet.

Средства обеспечения безопасности в платформе .NET Framework

Configuring Security Policy содержит перечень рекомендаций и описание инструментов настройки политик безопасности для платформы .NET Framework.

Учетные записи пользователей Windows

Для разработчиков и в конечном счете пользователей использование учетных записей Windows, относящихся к группе "Администраторы", создает повышенный риск для безопасности.Дополнительные сведения см. в разделах Запуск от имени участника группы "Пользователи" и Влияние контроля учетных записей пользователей на приложение.

См. также

Ссылки

System.Security

Основные понятия

Влияние контроля учетных записей пользователей на приложение

Другие ресурсы

Безопасность в .NET Framework