Лекция
Привет, Вы узнаете о том , что такое переполнение кучи, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое переполнение кучи , настоятельно рекомендую прочитать все из категории Алгоритмизация и программирование. Структурное программирование. Язык C.
Переполнение , кучи переполнения или куча ломка представляет собой тип переполнения буфера , что происходит в кучах области данных.
переполнение кучи может использоваться иначе, чем переполнение на основе стека . Память в куче динамически выделяется во время выполнения и обычно содержит данные программы. Эксплуатация выполняется путем повреждения этих данных определенными способами, чтобы приложение перезаписало внутренние структуры, такие как указатели связанных списков . Канонический метод переполнения кучи перезаписывает привязку распределения динамической памяти (например,malloc
метаданные) и использует полученный в результате обмен указателем для перезаписи указателя программной функции .
Например, в более старых версиях Linux два буфера, расположенные рядом друг с другом в куче, могут привести к тому, что первый буфер перезапишет метаданные второго буфера. Установив нулевой бит использования второго буфера и установив длину небольшого отрицательного значения, которое позволяет копировать нулевые байты, когда программа вызывает free()первый буфер, она попытается объединить эти два буфера в один буфер. . Когда это произойдет, ожидается, что буфер, который предполагается освобожденным, будет содержать два указателя FD и BK в первых 8 байтах ранее выделенного буфера. BK записывается в FD и может использоваться для перезаписи указателя.
void unlink(S, BK, FD){
BK = S->bk;
FD = S->fd;
FD->bk=BK;
FD->fd=FD;
}
Разберем как работает mmap. Об этом говорит сайт https://intellect.icu . На первом шаге происходит проверка массивов необходимых размеров (к примеру 24 байт). Если есть необходимый блок, то он отделяется с помощью unlink.
На втором шаге, если данный блок достаточно большой, то он делится на две части. Первая часть аллоцируется, а вторая перераспределяется в другой массив.
На третьем шаге, если не было выделена блока необходимого размера, то проверяется W-блок. Есои он удовлетворяет, то с ним проводятся мероприятия шага два. Если W-блок окаался мал, то для расширения доступной памяти испольуются sbrk() и mmap(). Метод Free полность противоположен mmap.
Переполнение кучи — это тип переполнения буфера, который происходит в области данных кучи. Память в куче динамически распределяется приложением во время выполнения и обычно содержит данные программы. Эксплуатация выполняется путем повреждения этих данных особым образом, чтобы приложение перезаписывало внутренние структуры, такие как указатели на связанный список. Метод канонического переполнения кучи перезаписывает связь динамического выделения памяти (например, метаданные malloc) и использует обмен указателями для перезаписи указателя на программную функцию.
Случайное переполнение может привести к повреждению данных или неожиданному поведению любого процесса, обращающегося к затронутой области памяти. В операционных системах без защиты памяти это может быть любой процесс в системе.
Например, уязвимость, связанная с переполнением буфера Microsoft JPEG GDI +, может сделать возможным удаленное выполнение кода на уязвимом компьютере.
Взлом iOS часто использует переполнение кучи для выполнения произвольного кода .
Как и в случае с переполнением буфера, существует три основных способа защиты от переполнения кучи. Некоторые современные операционные системы, такие как Windows и Linux, предоставляют некоторую реализацию всех трех.
Начиная с версии 2.3.6, GNU libc включает средства защиты, которые могут обнаруживать переполнение кучи постфактум, например, проверяя согласованность указателя при вызове unlink
. Однако почти сразу же было показано, что эти средства защиты от предыдущих эксплойтов тоже могут быть использованы. Кроме того, Linux включает поддержку ASLR с 2005 года, хотя PaX представил лучшую реализацию за несколько лет до этого. Также Linux с 2004 года поддерживает NX-bit.
Microsoft включила средства защиты от переполнения резидентного буфера кучи с апреля 2003 г. в Windows Server 2003 и с августа 2004 г. в Windows XP с пакетом обновления 2 . Этими смягчениями были безопасное отключение и файлы cookie заголовка записи в куче. Более поздние версии Windows, такие как Vista , Server 2008 и Windows 7, включают: удаление часто используемых структур данных, рандомизацию метаданных записи кучи, расширенную роль файла cookie заголовка кучи, рандомизированный базовый адрес кучи, кодирование указателя функций , прекращение повреждения кучи и изменение алгоритма. . Нормальное предотвращение выполнения данных (DEP) и ASLR также помогают смягчить эту атаку.
Исследование, описанное в статье про переполнение кучи, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое переполнение кучи и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Алгоритмизация и программирование. Структурное программирование. Язык C
Из статьи мы узнали кратко, но содержательно про переполнение кучи
Комментарии
Оставить комментарий
Алгоритмизация и программирование. Структурное программирование. Язык C
Термины: Алгоритмизация и программирование. Структурное программирование. Язык C