Esiste un modo per disattivare la protezione da overflow del buffer sulla mia macchina?


11

Voglio fare alcuni esperimenti con i buffer overflow sulle mie varie macchine virtuali, tra cui (ma non limitato a) Debian 6, Ubuntu 12.04, Fedora 16, ma ogni volta che provo ad eseguire l'exploit di buffer overflow ricevo il seguente messaggio:

stack smashing detected (core dumped)

Dopo aver fatto le mie ricerche, ho letto che si tratta di una funzionalità chiamata protezione da buffer overflow implementata nel compilatore. GCC ad esempio utilizza GCC Stack-Smashing Protector (ProPolice) , Clang / LLVM utilizza due rilevatori di overflow del buffer, SafeCode e AddressSanitizer .

La mia domanda è: dato che voglio davvero controllare gli attacchi di overflow del buffer sui miei computer, esiste un modo (un flag di compilazione, forse? Un file di configurazione linux?) Per disattivare la protezione di overflow del buffer?

Risposte:


16

GCC

Su gcc ( man gcc) i controlli sono abilitati da

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

È possibile disabilitare entrambi anteponendo no-al nome dell'opzione

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

LLVM / Clang

Su LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline ) per abilitare / disabilitare AdressSanitizer:

-f [no-] disinfettante per indirizzi: attiva AddressSanitizer, un rilevatore di errori di memoria.

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

-f [no-] memsafety


2
Esiste un modo (semplice) per rilevare se un programma è stato compilato con SSP?
Michuelnik,

2
@Michuelnik potresti vedere se il binario contiene qualche riferimento a __stack_chk_fail(es.strings /bin/mybinary | grep __stack_chk_fail
Matteo

6
ho appena provato con GCC 4.7 e 4.1: l'opzione -fno-stack-protector-allnon viene riconosciuto ( -fstack-protector, -fstack-protector-alle -fno-stack-protectorsono riconosciuti)
Marcin

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.