Skip to main content

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:

Безопасная работа со строками
#include <string.h>
#include <stdio.h>
void copy_string_safely(char *destination, const char *source, size_t dest_size) {
strncpy(destination, source, dest_size - 1);
destination[dest_size - 1] = '\0';
}
int main() {
char source_string[] = "This is a source string.";
char dest_string[10];
copy_string_safely(dest_string, source_string, sizeof(dest_string));
printf("Destination string: %s\n", dest_string);
return 0;
}

В этом примере функция copy_string_safely используется для безопасного копирования строки из source_string в dest_string. Функция strncpy используется для выполнения копирования, а целевой буфер завершается нулем после dest_size - 1 символов, чтобы гарантировать отсутствие переполнения.

Additional:#