Чи є спосіб відключити захист від переливу буфера на моїй машині?


11

Я хочу зробити кілька експериментів із переповненням буфера на моїх різних віртуальних машинах, включаючи (але не обмежуючись ними) Debian 6, Ubuntu 12.04, Fedora 16, але кожен раз, коли я намагаюся виконати експлуатувати переповнення буфера, я отримую таке повідомлення:

stack smashing detected (core dumped)

Провівши своє дослідження, я прочитав, що це функція, яка називається захистом від переповнення буфера, реалізованої в компіляторі. GCC , наприклад , використовує GCC-Стек розбивається протектор (ProPolice) , Clang / LLVM використовує два детектора переповнення буфера, SafeCode і AddressSanitizer .

Моє запитання: Оскільки я дуже хочу перевірити атаки переповнення буфера на моїх машинах, чи існує спосіб (прапор компілятора, можливо? Файл конфігурації Linux?) Відключити захист від переповнення буфера?

Відповіді:


16

GCC

У gcc ( man gcc) перевірки увімкнено

  -fstack-protector
      Emit extra code to check for buffer overflows, such as stack smashing attacks.  >This is done by adding a guard variable to functions with
      vulnerable objects.  This includes functions that call alloca, and functions with >buffers larger than 8 bytes.  The guards are initialized when
      a function is entered and then checked when the function exits.  If a guard check >fails, an error message is printed and the program exits.

  -fstack-protector-all
      Like -fstack-protector except that all functions are protected.

Ви можете відключити обидва, попередньо додавши no-ім'я параметра

-fno-stack-protector -fno-stack-protector-all

LLVM / Clang

У LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline ), щоб увімкнути / відключити AdressSanitizer:

-f [no-] address-sanitizer: Увімкніть AddressSanitizer, детектор помилок пам'яті.

та SAFECode ( http://safecode.cs.illinois.edu/docs/UsersGuide.html )

-f [no-] безпека


2
Чи є (простий) спосіб виявити, чи була складена програма з SSP?
Мічуельник

2
@Michuelnik ви могли побачити, чи містить бінарний файл посилання на __stack_chk_fail(наприклад,strings /bin/mybinary | grep __stack_chk_fail
Маттео

6
Я щойно перевірив його за допомогою GCC 4.7 та 4.1: варіант -fno-stack-protector-allне розпізнається ( і розпізнається)-fstack-protector-fstack-protector-all-fno-stack-protector
1313

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Клімент
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.