2011-07-19 5 views
12

私はコードの脆弱性について学び、私が書いた簡単なプログラムを試してみようとしています。しかし、実行時にGlibcが抱える問題の多く(例:Stack-Smashing、Double Freeなど)。したがって、私はGlibcのランタイム検出エラーなしでプログラムを実行できるようにしたいと考えています。 Glibcの検出を無効にする方法はありますか? (コンパイラフラグなどのように)。Glibcランタイム保護をオフにするにはどうすればいいですか?

以前のリンクでは、ASLRとCanariesを無効にする方法が説明されていましたが、これは私がしたいことではありません。Double Freeや他のヒープエラー(http://stackoverflow.com/questions/2340259/how-to-turn-off-gcc-compiler-optimization-to-enable-buffer-overflow)を試してみてください。

また、-wフラグを指定してコンパイル時の警告を無効にすることもできますが、それはどちらかとは思えません。私はGCCのフラグを読み込み、Glibcについての情報を調べようとしましたが、私はまだどこにもいませんでした。したがって、私はどんな助けにも大いに感謝します。ありがとう。

答えて

24

MALLOC_CHECK_環境変数の使用については、malloc(3)のマニュアルページを参照してください。これを使うと、ダブルフリーのエラーや物で遊ぶためのその他のものについては、「中止」をオフにすることができます。

man malloc 

は、あなたのプログラムが「badfree」と呼ばれたのであれば、あなたはどちらかexportコマンドでMALLOC_CHECK_(ノート末尾のアンダースコア)を設定することができ、または単にそれをbadfreeのすべての実行を設定します。

export MALLOC_CHECK_=0 
./badfree 

- または -

MALLOC_CHECK_=0 ./badfree 

ちょうどあなたが最初のメソッドを使用している場合、それはあなたがそのシェルで実行するすべてのプログラムに設定しています覚えています。

malloc関数からMALLOC_CHECK_の設定(3)のmanページは以下のとおりです。

MALLOC_CHECK_ = 
0 Silently ignore any issues 
1 Send error message to stderr 
2 abort() is called immediately, killing your program. 
3 Do both '1' and '2' (MALLOC_CHECK_ is a bitfield) 
+0

これはあなたが言ったとおりに動作します。あなたの助けに感謝します。 – Billy

+1

素敵な一人。良い質問、素晴らしい答え。:)歓声。 –

+0

とにかく実行時にそれをするには?つまり、環境変数がなければ、関数またはCが定義されます。 –

-1

あなたは、少なくともコンパイル時

-fno-stack-protector 

編集をスタック保護をオフにすることができるはずです。申し訳ありませんが、単に「これはあなた

doesnのために十分ではないことを見てきましたglibcはすべてのプログラムでグローバルなので簡単ではないようですので、保護を無効にすることができればかなり悪くなります。 私の提案は、ヒーププロテクションを持たない古いLinuxディストリビューションをインストールすることです(2003年半ば以前に動作するはずです)。

+0

私はどこでも検索してきたが、何かを見つけることができません。私が見つけた唯一の他の旗はFORTIFY_SOURCEでしたが、それは私を助けませんでした。本当に古いバージョンのgccをインストールしたいのですか、それとも本当に配布全体を行う必要がありますか? – Billy

+0

glibcはあなたのディストリビューションの中核部分であるため、古いバージョンのgccをインストールするには不十分だと思います。 しかし、VirtualBoxやそれに類似したものでも、配布物全体をインストールすることはかなり面倒です。 – Daniel

+0

本「ハッキング。搾取の技術」。例えば、Jon Ericksonによると、さまざまなハッキングを試みるための保護メカニズムのないLinuxディストリビューションが含まれています。私はそれをVirtualBoxにインストールし、非常に速く起動します。 – Daniel

0

あなたはoperator newoperator deleteをオーバーロードすることができますが、それはmallocfreeを使用するプログラムを支援するつもりはありません。もちろん、それらの独自の実装を書くこともできますが、Cライブラリ関数のオーバーロードは、一部のOSで少し難しい場合があります。

概念的には、ダブルフリーとfree (unallocated_pointer)の違いは何ですか?

+0

私はまだフォローしていないかもしれませんが、どうすれば新しい/私は明示的にこれをメモするのを忘れていたと思うが、私はCコードで作業している間にDouble Freeが出てくる。 – Billy

+0

あなたはそれを言い忘れたと思います!また、脆弱性を検出するためのツールを作成しようとしているのですか、または脆弱性を作成しようとしていますか? –

+0

多くのマシンでは、C標準ライブラリはコンパイラの一部ではないため、コンパイラでは何もできません** **オプションはありません。代わりに、標準ライブラリはシステムの一部です。例えば、LinuxとMac OSXの両方のシステムにバンドルされています。 GNUコンパイラの収集はこれに依存します。標準ライブラリはgccの一部ではありません。 –

関連する問題