Jump to content

Переполнение кучи

Переполнение кучи , переполнение кучи или разрушение кучи — это тип переполнения буфера , который происходит в области данных кучи . Переполнение кучи можно использовать иначе, чем переполнение стека . Память в куче динамически выделяется во время выполнения и обычно содержит данные программы. Эксплуатация осуществляется путем повреждения этих данных определенным образом, что заставляет приложение перезаписывать внутренние структуры, такие как связанных списков указатели . Метод канонического переполнения кучи перезаписывает связь динамического распределения памяти (например, malloc метаданные) и использует полученный обмен указателями для перезаписи указателя функции программы .

Например, в старых версиях Linux два буфера, расположенные рядом друг с другом в куче, могут привести к тому, что первый буфер перезапишет метаданные второго буфера. Установив бит использования на ноль во втором буфере и установив длину на небольшое отрицательное значение, которое позволяет копировать нулевые байты, когда программа вызывает free() в первом буфере он попытается объединить эти два буфера в один. Когда это произойдет, ожидается, что буфер, который предположительно будет освобожден, будет содержать два указателя FD и BK в первых 8 байтах ранее выделенного буфера. BK записывается в FD и может использоваться для перезаписи указателя.

Последствия [ править ]

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

Например, уязвимость переполнения буфера Microsoft JPEG GDI+ может сделать возможным удаленное выполнение кода на уязвимом компьютере. [1]

При джейлбрейке iOS часто используется переполнение кучи для выполнения произвольного кода .

Обнаружение и предотвращение [ править ]

Как и в случае с переполнением буфера, существует три способа защиты от переполнения кучи. Некоторые современные операционные системы , такие как Windows и Linux, в некоторой степени реализуют все три.

Начиная с версии 2.3.6, библиотека GNU libc включает средства защиты, которые могут обнаружить переполнение кучи постфактум, например, проверяя согласованность указателя при вызове. unlink. Однако почти сразу же выяснилось, что эта защита от предыдущих эксплойтов также может быть использована. [2] [3] Кроме того, с 2005 года в Linux включена поддержка ASLR , хотя несколько лет назад PaX представил лучшую реализацию. Также с 2004 года в Linux включена поддержка NX-бита.

Microsoft включила защиту от переполнения резидентного буфера кучи с апреля 2003 года в Windows Server 2003 и с августа 2004 года в Windows XP с пакетом обновления 2 . Этими мерами по смягчению последствий были безопасное отсоединение и файлы cookie заголовков записи в куче. Более поздние версии Windows, такие как Vista , Server 2008 и Windows 7, включают: удаление часто используемых структур данных, рандомизацию метаданных записи кучи, расширенную роль файла cookie заголовка кучи, рандомизированный базовый адрес кучи, кодирование указателя функции , прекращение повреждения кучи и изменение алгоритма. . Предотвращение выполнения обычных данных (DEP) и ASLR также помогают смягчить эту атаку. [4]

Наиболее распространенным методом обнаружения переполнения кучи является онлайн-динамический анализ. Этот метод наблюдает за выполнением программ во время выполнения для выявления уязвимостей посредством обнаружения нарушений безопасности. [5]

См. также [ править ]

Ссылки [ править ]

  1. ^ «Бюллетень по безопасности Microsoft MS04-028, Переполнение буфера при обработке JPEG (GDI+) может разрешить выполнение кода (833987)» . Майкрософт . 14 сентября 2004 г. Проверено 29 марта 2016 г.
  2. ^ «Маллок Малефикарум» . Октябрь 2005 года . Проверено 24 апреля 2017 г. .
  3. ^ «МАЛЛОК ДЕ-МАЛЕФИКАРУМ» . 2009 . Проверено 29 марта 2016 г.
  4. ^ «Предотвращение использования уязвимостей повреждения кучи пользовательского режима» . Блог Technet, Microsoft Security Research & Defense. 4 августа 2009 г. Проверено 29 марта 2016 г.
  5. ^ Ассоциация USENIX, изд. (2005). Материалы второго семинара по реальным большим распределенным системам: 13 декабря 2005 г., Сан-Франциско, Калифорния, США . Ассоциация ЮСЕНИКС. ISBN  978-1-931971-40-9 .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 55c5bb55cecfb1b1cbdb2d65bb038f23__1708417200
URL1:https://arc.ask3.ru/arc/aa/55/23/55c5bb55cecfb1b1cbdb2d65bb038f23.html
Заголовок, (Title) документа по адресу, URL1:
Heap overflow - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)