Debian 6、Ubuntu 12.04、Fedora 16など、さまざまな仮想マシンでバッファオーバーフローを試したいのですが、バッファオーバーフローエクスプロイトを実行しようとするたびに、次のメッセージが表示されます。
stack smashing detected (core dumped)
私の調査を行った後、それはバッファオーバーフロー保護と呼ばれる機能であり、コンパイラに実装されていることを読みました。 [〜#〜] gcc [〜#〜]使用例GCC Stack-Smashing Protector(ProPolice)、Clang/LLVM使用- 2つのバッファオーバーフロー検出器、SafeCodeおよびAddressSanitizer。
私の質問は、私は本当にバッファオーバーフロー攻撃をチェックしたいので私のマシンで方法があります(コンパイラフラグ、たぶん?Linuxの設定ファイル?)バッファオーバーフロー保護を無効にする?
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( 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