memologue RSSフィード

書いている人

日記というよりは備忘録、ソフトウェア技術者の不定期メモ。あるいはバッドノウハウ集。プライベートで調査した細々した諸々のスナップショット。嘘が散りばめられています。ISO/IEC 14882(C++)とPOSIX, GCC, glibc, ELFの話ばかりで、WindowsやMacの話はありません。特に記載がなければLinux/x86とILP32が前提です。時間の経過と共に古い記事は埋もれてしまいます。検索エンジンから飛んできた場合は、ページ内検索をご利用いただくかgoogleキャッシュを閲覧してみてください。技術的な記事を書きためる場所として使っています。言及してもらえると喜びます。主要な記事の一覧を書いておきます:

にんきコンテンツ: [GCC] mainを一度も呼ばないばかりか蹂躙する / Binary2.0 Conference 2006 発表資料 / C++ で SICP / ついカッとなって実行バイナリにパッチ / hogetrace - 関数コールトレーサ

昔のPOSIX関係の記事: シグナルの送受に依存しない設計にしよう / シグナルハンドラで行ってよい処理を知ろう / マルチスレッドのプログラムでのforkはやめよう / スレッドの「非同期キャンセル」を行わない設計にしよう / スレッドの「遅延キャンセル」も出来る限り避けて通ろう / マルチスレッドプログラミングの「常識」を守ろう / C++でsynchronized methodを書くのは難しい / シグナルハンドラからのforkするのは安全か? / g++ の -fthreadsafe-statics ってオプション知ってます? / 非同期シグナルとanti-pattern / localtimeやstrtokは本当にスレッドセーフにできないのか / UNIXの規格について / マルチスレッドと共有変数 - volatile?なにそれ。 / type punning と strict aliasing / アセンブラで遊ぶ時に便利なgdb設定 / 最近の記事は一覧から

2006-06-25

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


これの続きです。さて、

  • NXあり (exec-shield)
  • ASLRあり (exec-shield-randomize)
  • SSPあり
  • PIEあり
  • RELROなし
  • FORTIFY_SOURCEなし

という条件で、

  1. format string bug を利用して、PIEなバイナリが貼り付けられたアドレスを知り
  2. format string bug を利用して、<__stack_check_fail@plt>が参照しているGOTを塗りつぶしてSSPを無効にして
  3. stack based buffer overflow で return into libc して*1、shellをexecする

というのをやってみます。CTスキャンして(1.)、麻酔して(2.)、手術(3.)みたいな感じです。ほとんど檻脱出系のイリュージョンかなんかに近いですな...。


(あとで書く。もしうまくいかなければ没 :-)


対策


最近のFedoraのように、デフォルトで gcc -D_FORTIFY_SOURCE=2 を指定し、かつ(できるだけ) ld -z relro を指定するようにすれば、「このケースでは」かつ「私の知る限りでは」大丈夫そうです。


とりあえず、「NXだけで大丈夫」とか「NXとSSPで完璧さ!」とかいう風潮はどうかなー、ということで。ひとつ。

*1:return into __dl_runtime_resolve のほうが格好いいんですが、面倒なのでパス

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yupo5656/20060625/p3