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


11

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

stack smashing detected (core dumped)

私の調査を行った後、それはコンパイラに実装されたバッファオーバーフロー保護と呼ばれる機能であると読みました。GCCインスタンスが使用GCCスタックスマッシングプロテクター(プロポリス)をクラン/ LLVMを使用し、二つのバッファオーバーフロー検出器、SafeCodeとAddressSanitizerを

私の質問は次のとおりです。私のマシンでのバッファオーバーフロー攻撃を本当にチェックアウトしたいので、バッファオーバーフロー保護を無効にする方法(コンパイラフラグ、たぶん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 / 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


2
プログラムがSSPでコンパイルされているかどうかを検出する(簡単な)方法はありますか?
ミチュエルニク2012

2
バイナリへの参照が含まれている場合@Michuelnikあなたは見ることができる__stack_chk_fail(例えば、strings /bin/mybinary | grep __stack_chk_fail
マッテオ

6
私はちょうどGCC 4.7と4.1でそれをテストした:オプションが-fno-stack-protector-all認識されない(-fstack-protector-fstack-protector-all-fno-stack-protector認識されている)
マルチン

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
クレマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.