Gibt es eine Möglichkeit, den Pufferüberlaufschutz auf meinem Computer zu deaktivieren?

11

Ich möchte einige Experimente mit Pufferüberläufen auf meinen verschiedenen virtuellen Maschinen durchführen, einschließlich (aber nicht beschränkt auf) Debian 6, Ubuntu 12.04, Fedora 16, aber jedes Mal, wenn ich versuche, den Pufferüberlauf-Exploit auszuführen, erhalte ich die folgende Meldung:

stack smashing detected (core dumped)

Nach meinen Recherchen habe ich gelesen, dass es sich um eine Funktion handelt, die als Pufferüberlaufschutz bezeichnet wird und im Compiler implementiert ist. GCC verwendet beispielsweise GCC Stack-Smashing Protector (ProPolice) , Clang / LLVM verwendet zwei Pufferüberlaufdetektoren, SafeCode und AddressSanitizer .

Meine Frage ist: Gibt es eine Möglichkeit (ein Compiler-Flag, vielleicht? Eine Linux-Konfigurationsdatei?), Den Pufferüberlaufschutz zu deaktivieren, da ich wirklich Pufferüberlauf-Angriffe auf meinen Computern überprüfen möchte .

NlightNFotis
quelle

Antworten:

16

GCC

Auf gcc ( man gcc) werden die Prüfungen von aktiviert

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

Sie können beide deaktivieren, indem Sie no-dem Optionsnamen voranstellen

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

LLVM / Clang

Auf LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline ) zum Aktivieren / Deaktivieren von AdressSanitizer:

-f [no-] address-sanitizer: Aktivieren Sie AddressSanitizer, einen Speicherfehlerdetektor.

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

-f [no-] memsafety

Matteo
quelle
2
Gibt es eine (einfache) Möglichkeit festzustellen, ob ein Programm mit SSP kompiliert wurde?
Michuelnik
2
@Michuelnik Sie konnten sehen, ob die Binärdatei einen Verweis auf enthält __stack_chk_fail(z. B.strings /bin/mybinary | grep __stack_chk_fail
Matteo
6
Getestet habe ich es nur mit GCC 4.7 und 4.1: Option -fno-stack-protector-allnicht erkannt wird ( -fstack-protector, -fstack-protector-allund -fno-stack-protectoranerkannt ist)
marcin
gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément