Подтвердить что ты не робот

Как отключить защиту времени выполнения Glibc?

Я пытаюсь узнать о уязвимостях кода, и я тестирую некоторые простые программы, которые я написал. Однако многие проблемы Glibc улавливаются во время выполнения (например, Stack-Smashing, Double Free и т.д.). Таким образом, я хотел бы иметь возможность запускать мои программы без ошибок обнаружения времени выполнения Glibc. Есть ли способ отключить обнаружение Glibc? (например, с флагом компилятора и т.д.).

Я видел в предыдущей ссылке описано, как отключить ASLR и Canaries, но это не то, что я хотел бы сделать, поскольку он все еще останавливает ошибки, такие как Double Free и некоторые другие ошибки кучи, которые я хочу попробовать (http://stackoverflow.com/info/2340259/how-to-turn-off-gcc-compiler-optimization-to-enable-buffer-overflow).

Я также знаю, что вы можете отключить предупреждения во время компиляции с флагами -w, но это, похоже, не то, что я хочу. Я пробовал читать по флагам GCC и искать информацию о Glibc, но я пока ничего не получил. Поэтому я был бы очень признателен за любую помощь. Спасибо.

4b9b3361

Ответ 1

Проверьте справочную страницу для malloc (3) для использования переменной среды MALLOC_CHECK_. Используя это, вы можете отключить "прерывания" для этих двойных бесплатных ошибок и чего не играть с вещами.

man malloc

Итак, если ваша программа была вызвана "badfree", вы можете либо установить MALLOC_CHECK_ (отметить завершающий знак подчеркивания) с помощью команды export, либо просто установить для каждого выполнения badfree.

export MALLOC_CHECK_=0
./badfree

- или -

MALLOC_CHECK_=0 ./badfree

Просто помните, если вы используете первый метод, он устанавливает для ЛЮБОЙ программы, которую вы запускаете в этой оболочке.

Настройки для MALLOC_CHECK_ из справочной страницы malloc (3):

MALLOC_CHECK_ =
 0  Silently ignore any issues
 1  Send error message to stderr
 2  abort() is called immediately, killing your program.
 3  Do both '1' and '2' (MALLOC_CHECK_ is a bitfield)

Ответ 2

Вы можете перегрузить operator new и operator delete, но это не поможет с программой, которая использует malloc и free. Разумеется, вы можете сами написать свои собственные реализации, но перегрузка функций C-библиотеки может быть немного сложной на некоторых ОС.

Что, концептуально, является разницей между двойным свободным и free (unallocated_pointer)?

Ответ 3

Вы должны по крайней мере иметь возможность отключить защиту стека с помощью

-fno-stack-protector

в compiletime

Изменить: извините, только что видели, что этого недостаточно для вас

Кажется, это не так просто, потому что glibc является глобальным для всех программ, поэтому было бы неплохо, если бы вы могли отключить защиту. Мое предложение было бы установить старый дистрибутив Linux, который не имеет защиты кучи (в середине 2003 года или ранее он должен работать).