2006-06-01から1ヶ月間の記事一覧

return into libc アタックについて

GCC

(あとで書く..と思う) Exec-Shield時代のスタンダードな攻撃だけど、日本語の資料が見当たらない(ので書く) NXでもシェル起動は簡単 Phrack Magazineの記事はおもしろい バイナリ中の任意の addl; ret; を "間借り" して、複数のcallをchainする話 都合の…

結局どうすりゃいいのさ (攻撃されないCFLAGS/LDFLAGS)

GCC

最近のエントリの総まとめ。適当なネットワークデーモンなどを手動でmakeする際におすすめのgccのオプション。ソフトウェアにbuffer overflowをはじめとするありがちな欠陥があった場合でも、攻撃者にプロセスを乗っ取られないよう、コンパイラやカーネルで…

GOTをほげほげする NX+ASLR+PIE+SSP(ProPolice) の突破デモ

GCC

これの続きです。さて、 NXあり (exec-shield) ASLRあり (exec-shield-randomize) SSPあり PIEあり RELROなし FORTIFY_SOURCEなし という条件で、 format string bug を利用して、PIEなバイナリが貼り付けられたアドレスを知り format string bug を利用して…

memo: SSP(ProPolice)を突破できるパターン?

GCC

GCCは4.1以降からデフォルトでSSP(a.k.a. ProPolice)というスタック保護の仕組みが搭載されています*1。この仕組みを使うと、スタック上に確保した配列のオーバーフローを実行時に検出できます。 % gcc -fstack-protector-all ssp_test.c % ./a.out *** stac…

書き終わる前に休日が終わってしまいました。あとで埋めます。 昨日に続き、リハビリです。

補足3: .dtors overwrite をちゃんとformat string bugでやってみるか (別名 -D_FORTIFY_SOURCE=2 のすすめ)

GCC

これの続きです。 GOT overwrite でも .dtors overwrite でもなんでもいいんですけど、main関数で直接メモリを4バイト書き換えるのではなくて、ちゃんと(?) format string bug を悪用した書き換えを試してみます。リハビリです。format string bug の解説は…

補足2: .dtors overwrite について

GCC

これの続き。 前に書いたGOT overwriteとほぼ同じ手口なんですが、.dtorsセクションに登録されている(関数の)アドレスを書き換えて、お好きな関数を呼ぶという攻撃方法があります。.dtor overwrite とか呼ばれてます。この手口を、 NXあり ASLRあり RELRO…

補足: ld -z relro でどこがreadonlyになるのか (とelfutilsについて)

GCC

前に書いたrelro記事の補足です。ld -z relro すると (.got 以外は) どこがreadonlyになるのか、について。 これは、readelf -S でセクション一覧を表示して、/proc//maps の出力とセクションのアドレスを見比べる方法で知ることができますが、elfutilsを使…

プログラムを書くのと一緒で、攻撃方法についても定期的に手を動かさないと忘れるので、休日使ってリハビリしてまーす(趣味)。

SUSv3検索プラグイン

mozdev.org に、The Single UNIX Specification, Version 3*1 を検索するためのプラグインがありました。Windowsはもちろん、FC5(x86_64)のfirefoxでも無事動きました。 (デフォルトで)firefoxのウィンドウの右上にある検索窓からSUSv3全体を検索できるって…

ld -z relro で GOT overwrite attack から身を守る

GCC

GOT overwrite? "GOT overwrite" という、(ここでは特にLinuxの)プログラムに対する攻撃方法があります。攻撃が成功すると、そのプロセスの権限での任意コード実行等、深刻な被害を受けます。最近のGNU ld(リンカ)のオプションを用いると、この攻撃から身を…

ふつケル

書くのが2日遅れになってしまいましたが、ふつケル写経会、第4回目も参加。3章の練習問題から4章の終わりまで。RubyCocoaの藤本さんとペアで写本しました(ありがとうございました、理解が進みました)。この進捗具合だと、結構早い時期に読み終わってしまう…

IPA

IPAからテクニカルエンジニア(情報セキュリティ)の合格証書が送られてきました。Webで成績を調べたら、745-625-715点とのこと。午後Iがギリギリだけど(想定外...)、他は上位5%以内でした。2001年の情報セキュリティアドミニストレータ試験も新設後初回試験…

N要素の分岐しない odd-even mergesort (GCC+Linux/x86_64用)

GCC

(こちらの記事の続き)

4要素の分岐しないソート (GCC用)

GCC

(こちらの記事の続き、おまけです) 「分岐しないソート」の、VC++向けのコードをGCC+Linux向けに修正してみました。

分岐しないソート (のジェネレータ)

GCC

分岐しない4要素のソート、GCC/Linux/x86,x86_64,arm版 こちらに、「分岐しないソート」という記事があります。短いので読んでいただくほうがよいと思いますが、文章&アセンブリ言語のコードの内容を要約すると、 4要素のソートは、頑張れば5回の比較と5回…

インラインアセンブラと \n\t

GCC

小ネタ2。 GCCで複数行からなるインラインアセンブラを書くとき、 __asm__ ("movl %0,r9\n\t" "movl %1,r10\n\t" "call _foo" :: "g" (from), "g" (to) : "r9", "r10");のように \n\t 区切りで書くひとと、\n\t のかわりにセミコロン区切りで書く*1ひとがい…

はてな/ふつける

昨日は はてな を見学させていただき、今日はふつける写経会に参加。両方とも刺激的でした。id:mizuno_takaaki さん、あまの id:beakmark さん、どうもありがとうございました。

RAIIもどき in C

GCC

gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです…