Có cách nào để hủy kích hoạt bảo vệ chống tràn bộ đệm trên máy của tôi không?


11

Tôi muốn thực hiện một số thử nghiệm với lỗi tràn bộ đệm trên các máy ảo khác nhau của mình, bao gồm (nhưng không giới hạn) Debian 6, Ubuntu 12.04, Fedora 16, nhưng mỗi khi tôi cố gắng thực hiện khai thác tràn bộ đệm, tôi nhận được thông báo sau:

stack smashing detected (core dumped)

Sau khi thực hiện nghiên cứu của tôi, tôi đọc được rằng đó là một tính năng được gọi là bảo vệ chống tràn bộ đệm được triển khai trong trình biên dịch. GCC ví dụ sử dụng GCC stack-Smashing Protector (ProPolice) , Clang / LLVM sử dụng hai máy dò lỗi tràn bộ đệm, SafeCode và AddressSanitizer .

Câu hỏi của tôi là: Vì tôi thực sự muốn kiểm tra các cuộc tấn công tràn bộ đệm trên các máy của mình, có cách nào (một cờ trình biên dịch, có lẽ là một tập tin cấu hình linux?) Để tắt chức năng bảo vệ chống tràn bộ đệm?

Câu trả lời:


16

GCC

Trên gcc ( man gcc) kiểm tra được kích hoạt bởi

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

Bạn có thể vô hiệu hóa cả hai bằng cách thêm vào no-tên tùy chọn

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

LLVM / Clang

Trên LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline ) để bật / tắt AdressSanitizer:

-f [no-] address-sanitizer: Bật addressSanitizer, một bộ phát hiện lỗi bộ nhớ.

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

-f [no-] memsafe


2
Có cách nào (đơn giản) để phát hiện, liệu một chương trình đã được biên dịch với SSP chưa?
Michuelnik

2
@Michuelnik bạn có thể xem liệu nhị phân có chứa bất kỳ tham chiếu nào không __stack_chk_fail(ví dụ:strings /bin/mybinary | grep __stack_chk_fail
Matteo

6
tôi chỉ thử nghiệm nó với GCC 4.7 và 4.1: Tùy chọn -fno-stack-protector-allkhông được công nhận ( -fstack-protector, -fstack-protector-all-fno-stack-protectorđược công nhận)
Marcin

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.