V5.4.1 Memory, String, and Unmanaged Code
Requirement:#
Verify that the application uses memory-safe string, safer memory copy and pointer arithmetic to detect or prevent stack, buffer, or heap overflows.
Explanation:#
Безопасная работа с памятью - это свойство компьютерных программ, где программа гарантирует, что она не вызывает ошибок доступа к памяти, таких как переполнение буфера, переполнение стека или переполнение кучи. Для предотвращения этих атак, связанных с памятью, важно использовать безопасные функции обработки строк, безопасные операции копирования памяти и соответствующую арифметику указателей, где это необходимо.
Remediation:#
Чтобы избежать атак, связанных с памятью, выполните следующие действия:
- Отдавайте предпочтения использованию безопасных языков программирования.
- Используйте безопасные для памяти строковые функции, такие как strncpy, strncat и snprintf, вместо уязвимых функций, таких как strcpy, strcat и sprintf.
- Используйте более безопасные функции копирования памяти, такие как memcpy_s или memmove вместо memcpy.
- Перед обработкой проверьте длину всех входных данных, чтобы убедиться, что они находятся в ожидаемых пределах.
- Всегда инициализируйте память перед использованием, особенно в структурах, массивах и указателях.
- Используйте инструменты и методы, такие как рандомизация адресного пространства (ASLR), предотвращение выполнения данных (DEP) и стековые канарейки, чтобы злоумышленникам было сложнее использовать уязвимости, связанные с памятью.
Вот пример кода на C:
В этом примере функция copy_string_safely используется для безопасного копирования строки из source_string в dest_string. Функция strncpy используется для выполнения копирования, а целевой буфер завершается нулем после dest_size - 1 символов, чтобы гарантировать отсутствие переполнения.