Apakah ada cara untuk menonaktifkan perlindungan buffer overflow pada mesin saya?

11

Saya ingin melakukan beberapa percobaan dengan buffer overflows di berbagai mesin virtual saya, termasuk (tetapi tidak terbatas pada) Debian 6, Ubuntu 12.04, Fedora 16, tetapi setiap kali saya mencoba untuk mengeksploitasi buffer overflow exploit saya mendapatkan pesan berikut:

stack smashing detected (core dumped)

Setelah melakukan penelitian saya, saya membaca bahwa itu adalah fitur yang disebut perlindungan buffer overflow diimplementasikan dalam kompiler. GCC misalnya menggunakan GCC Stack-Smashing Protector (ProPolice) , Dentang / LLVM menggunakan dua detektor buffer overflow, SafeCode dan AddressSanitizer .

Pertanyaan saya adalah: Karena saya benar-benar ingin memeriksa serangan buffer overflow pada komputer saya apakah ada cara (flag compiler, mungkin? File konfigurasi linux?) Untuk menonaktifkan perlindungan buffer overflow?

NlightNFotis
sumber

Jawaban:

16

GCC

Pada gcc ( man gcc) pemeriksaan diaktifkan oleh

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

Anda dapat menonaktifkan keduanya dengan menambahkan terlebih dahulu no-ke nama opsi

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

LLVM / Dentang

Pada LLVM / Dentang ( http://clang.llvm.org/docs/UsersManual.html#commandline ) untuk mengaktifkan / menonaktifkan AdressSanitizer:

-f [no-] address-sanitizer: Nyalakan AddressSanitizer, detektor kesalahan memori.

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

-f [no-] memsafety

Matteo
sumber
2
Apakah ada cara (sederhana) untuk mendeteksi, apakah suatu program telah dikompilasi dengan SSP?
Michuelnik
2
@Michuelnik Anda bisa melihat apakah biner berisi referensi ke __stack_chk_fail(misalnya,strings /bin/mybinary | grep __stack_chk_fail
Matteo
6
saya baru saja mengujinya dengan GCC 4.7 dan 4.1: opsi -fno-stack-protector-alltidak dikenali ( -fstack-protector, -fstack-protector-alldan -fno-stack-protectordikenali)
marcin
gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément