Как отключить защиту Glibc во время выполнения? - PullRequest
12 голосов
/ 19 июля 2011

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

Я видел в предыдущей ссылке, как описано, как отключить ASLR и Canaries, но это не то, что я хотел бы сделать, так как он по-прежнему останавливает ошибкикак Double Free и некоторые другие ошибки кучи, которые я хочу попробовать (/1768809/kak-otklychit-optimizatsiy-kompilyatora-gcc-dlya-vklycheniya-perepolneniya-bufera).

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

Ответы [ 3 ]

25 голосов
/ 22 сентября 2011

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

man malloc

Таким образом, если ваша программа называлась badfree, вы можете либо установить MALLOC_CHECK_ (подчеркивание в конце заметки) с помощью команды экспорта, либо просто установить ее при каждом выполнении 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)
0 голосов
/ 19 июля 2011

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

В чем концептуальная разница между double free и free (unallocated_pointer)?

0 голосов
/ 19 июля 2011

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

-fno-stack-protector

во время компиляции

Редактировать: извините, только что увидел, что вам этого недостаточно

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

...