Makinemde arabellek taşması korumasını devre dışı bırakmanın bir yolu var mı?


11

Debian 6, Ubuntu 12.04, Fedora 16 dahil (ancak bunlarla sınırlı olmamak üzere) çeşitli sanal makinelerimde arabellek taşmaları ile bazı deneyler yapmak istiyorum, ancak arabellek taşması istismarını yürütmeye çalıştığımda aşağıdaki iletiyi alıyorum:

stack smashing detected (core dumped)

Araştırmamı yaptıktan sonra derleyicide tampon taşması koruması adı verilen bir özellik olduğunu okudum . GCC örneği için kullandığı GCC Yığın-yıkıcı Koruyucu (ProPolice) , Clang / LLVM kullanan iki geçici bellek taşması dedektörleri, SafeCode ve AddressSanitizer .

Sorum şu: Makinelerimdeki arabellek taşması saldırılarını gerçekten kontrol etmek istediğimden , arabellek taşması korumasını devre dışı bırakmanın bir yolu (bir derleyici bayrağı, belki de bir linux yapılandırma dosyası?) Var mı?

Yanıtlar:


16

GCC

Gcc ( man gcc) üzerinde kontroller

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

no-Seçenek adına ekleyerek her ikisini de devre dışı bırakabilirsiniz

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

LLVM / Clang

AdressSanitizer'ı etkinleştirmek / devre dışı bırakmak için LLVM / Clang'da ( http://clang.llvm.org/docs/UsersManual.html#commandline ):

-f [hayır-] adres temizleyici: Bir bellek hata dedektörü olan AddressSanitizer'ı açın.

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

f [no-] memsafety


2
Bir programın SSP ile derlenmiş olup olmadığını tespit etmenin (basit) bir yolu var mı?
Michuelnik

2
@Michuelnik, ikili dosyanın herhangi bir referans içerip içermediğini görebilirsiniz __stack_chk_fail(örn.,strings /bin/mybinary | grep __stack_chk_fail
Matteo

6
ben sadece GCC 4.7 ve 4.1 ile test: seçenek -fno-stack-protector-alltanınmaz ( -fstack-protector, -fstack-protector-allve -fno-stack-protectortanınan)
marcin

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.