Переполнение кучи - Heap overflow

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

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

Последствия

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

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

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

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

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

  • Предотвратите выполнение полезной нагрузки, разделив код и данные, обычно с помощью таких аппаратных функций, как NX-бит
  • Ввести рандомизацию, чтобы куча не находилась с фиксированным смещением, обычно с ядро такие функции, как ASLR (Рандомизация макета адресного пространства )
  • Ввести проверки работоспособности в диспетчер кучи

Начиная с версии 2.3.6 GNU libc включает средства защиты, которые могут обнаруживать переполнение кучи постфактум, например, путем проверки указатель последовательность при звонке разорвать связь. Однако почти сразу же было показано, что эти средства защиты от предыдущих эксплойтов тоже могут быть использованы.[2][3] Кроме того, в 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 также помогают смягчить эту атаку.[4]

Смотрите также

Рекомендации

  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.

внешняя ссылка