มีวิธีการปิดการใช้งานบัฟเฟอร์ป้องกันโอเวอร์โฟลว์ในเครื่องของฉันหรือไม่?


11

ฉันต้องการทำการทดลองบางอย่างกับ buffer overflow บนเครื่องเสมือนต่าง ๆ ของฉันรวมถึง (แต่ไม่ จำกัด เฉพาะ) Debian 6, Ubuntu 12.04, Fedora 16 แต่ทุกครั้งที่ฉันพยายามเรียกใช้ buffer overflow exploit ฉันได้รับข้อความต่อไปนี้:

stack smashing detected (core dumped)

หลังจากทำวิจัยของฉันฉันอ่านว่ามันเป็นคุณสมบัติที่เรียกว่าการป้องกันบัฟเฟอร์ล้นนำไปใช้ในคอมไพเลอร์ GCCเช่นใช้GCC-Stack Smashing Protector (ProPolice) , เสียงดังกราว / LLVMใช้สองเครื่องตรวจจับหน่วยความจำล้น, SafeCode และ AddressSanitizer

คำถามของฉันคือ: เนื่องจากฉันต้องการตรวจสอบบัฟเฟอร์การโจมตีล้นในเครื่องของฉันมีวิธี (ธงคอมไพเลอร์อาจเป็นไฟล์ config linux?) เพื่อปิดการป้องกันบัฟเฟอร์ล้น?

คำตอบ:


16

GCC

บน gcc ( man gcc) การตรวจสอบถูกเปิดใช้งานโดย

  -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-ต่อท้ายชื่อตัวเลือก

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

LLVM / เสียงดังกราว

ใน LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline ) เพื่อเปิด / ปิดการใช้งาน AdressSanitizer:

-f [no-] address-sanitizer: เปิด AddressSanitizer เครื่องตรวจจับข้อผิดพลาดของหน่วยความจำ

และ SAFECode ( http://safecode.cs.illinois.edu/docs/UsersGuide.html )

-f [ที่ไม่มี] memsafety


2
มีวิธี (ง่าย) ในการตรวจสอบหรือไม่ว่าโปรแกรมได้รับการคอมไพล์ด้วย SSP หรือไม่
Michuelnik

2
@Michuelnik คุณสามารถดูว่าไบนารีมีการอ้างอิงใด ๆ__stack_chk_fail(เช่นstrings /bin/mybinary | grep __stack_chk_fail
Matteo

6
ฉันเพียงแค่ทดสอบกับ GCC 4.7 และ 4.1: ตัวเลือก-fno-stack-protector-allไม่ได้รับการยอมรับ ( -fstack-protector, -fstack-protector-allและ-fno-stack-protectorได้รับการยอมรับ)
Marcin

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.