Czy istnieje sposób na wyłączenie ochrony przed przepełnieniem bufora na moim komputerze?


11

Chcę wykonać kilka eksperymentów z przepełnieniem buforu na różnych maszynach wirtualnych, w tym (ale nie tylko) Debian 6, Ubuntu 12.04, Fedora 16, ale za każdym razem, gdy próbuję wykonać exploit przepełnienia bufora, otrzymuję następujący komunikat:

stack smashing detected (core dumped)

Po przeprowadzeniu badań przeczytałem, że jest to funkcja zwana ochroną przed przepełnieniem bufora zaimplementowana w kompilatorze. GCC na przykład używa GCC Stack-Smashing Protector (ProPolice) , Clang / LLVM używa dwóch detektorów przepełnienia bufora, SafeCode i AddressSanitizer .

Moje pytanie brzmi: skoro naprawdę chcę sprawdzić ataki przepełnienia bufora na moje komputery, czy istnieje sposób (flaga kompilatora, być może plik konfiguracyjny Linux?), Aby wyłączyć ochronę przed przepełnieniem bufora?

Odpowiedzi:


16

GCC

W gcc ( man gcc) kontrole są włączone przez

  -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.

Możesz wyłączyć oba, przygotowując się no-do nazwy opcji

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

LLVM / Clang

W LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline ), aby włączyć / wyłączyć AdressSanitizer:

-f [no-] sanitizer adresu: Włącz AddressSanitizer, wykrywacz błędów pamięci.

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

-f [no-] memsafety


2
Czy istnieje (prosty) sposób na wykrycie, czy program został skompilowany z SSP?
Michuelnik

2
@Michuelnik można zobaczyć, czy plik binarny zawiera jakiekolwiek odniesienia do __stack_chk_fail(np.strings /bin/mybinary | grep __stack_chk_fail
Matteo

6
I tak przetestowane GCC 4.7 i 4.1: opcja -fno-stack-protector-allnie jest uznawane ( -fstack-protector, -fstack-protector-alli -fno-stack-protectorsą rozpoznawane)
marcin

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.