web-dev-qa-db-ja.com

私のマシンでバッファオーバーフロー保護を無効にする方法はありますか?

Debian 6、Ubuntu 12.04、Fedora 16など、さまざまな仮想マシンでバッファオーバーフローを試したいのですが、バッファオーバーフローエクスプロイトを実行しようとするたびに、次のメッセージが表示されます。

stack smashing detected (core dumped)

私の調査を行った後、それはバッファオーバーフロー保護と呼ばれる機能であり、コンパイラに実装されていることを読みました。 [〜#〜] gcc [〜#〜]使用例GCC Stack-Smashing Protector(ProPolice)Clang/LLVM使用- 2つのバッファオーバーフロー検出器、SafeCodeおよびAddressSanitizer

私の質問は、私は本当にバッファオーバーフロー攻撃をチェックしたいので私のマシンで方法があります(コンパイラフラグ、たぶん?Linuxの設定ファイル?)バッファオーバーフロー保護を無効にする?

11
NlightNFotis

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/Clang

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 [no-] memsafety

16
Matteo