Existe uma maneira de desativar a proteção contra estouro de buffer na minha máquina?

10

Eu quero fazer alguns experimentos com buffer overflows em minhas várias máquinas virtuais, incluindo (mas não limitado a) Debian 6, Ubuntu 12.04, Fedora 16, mas toda vez que eu tento executar a exploração do estouro de buffer recebo a seguinte mensagem :

stack smashing detected (core dumped)

Depois de fazer minha pesquisa, li que é um recurso chamado buffer overflow protection implementado no compilador. O GCC por exemplo usa o Protetor Smashing do GCC (ProPolice) , o Clang / LLVM usa dois detectores de estouro de buffer, SafeCode e AddressSanitizer .

A minha pergunta é: Desde que eu realmente quero verificar os ataques de estouro de buffer nas minhas máquinas existe uma maneira (um sinalizador de compilador, talvez? um arquivo de configuração do Linux? ) para desativar a proteção contra estouro de buffer?

    
por NlightNFotis 30.08.2012 / 14:07

1 resposta

16

GCC

No gcc ( man gcc ) as verificações são ativadas por

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

Você pode desativar ambos, inserindo no- no nome da opção

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

LLVM / Clang

Em LLVM / Clang ( link ) para ativar / desativar o AdressSanitizer:

-f[no-]address-sanitizer: Turn on AddressSanitizer, a memory error detector.

e SAFECode ( link )

-f[no-]memsafety

    
por 30.08.2012 / 14:21