パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

オーバフローを防げ:「exec-shield」」記事へのコメント

  • by Anonymous Coward
    > ライブラリがロードされる仮想アドレスを工夫して、
    > (0x00が表現できない)ASCII文字を使ったバッファオーバフローでは
    > ライブラリのルーチンへジャンプが難しくなっている。

    わたしゃix86のアセンブラ知らないのですが、間接ジャンプ命令だけで、回避できませんか?この対策。
    • by Anonymous Coward on 2003年05月08日 20時33分 (#311828)
      間接ジャンプで何とかなりそうな感じはしますね。
      あと、コードを持ち込むのではなく、コードの一部をスキップさせたりは簡単にできそうな気がします。

      たとえば、何らかの認証をするプログラムでバッファオーバーフローがあったとします。

      0x00123456 : 認証関数をコールしてる所のアドレス
      0x00123478 : 認証OKの場合の処理のアドレス

      という形で、認証関数で次のようにバッファが取られている場合

      char buf[10];

      スタックは

      低位←  →高位
      buf[10] 0x00123456

      となっているはず。(かなり省略してますが)
      ここで、buf[10]に14byte書き込んで直後の0x00123456を0x00123478に書換えできれば認証をスルーする事ができる(事にする)

      この書換えが本当にできるかどうかですが、x86というかリトルエンディアンの場合、0x00123456は0x56 0x34 0x12 0x00という順番でメモリ上にあるので、0x78 0x34 0x12 0x00 が書ければ良い訳ですが、0x00が明示的に書けなくてもASCIIZ文字列(文字列の終端が\0)である、たとえばC言語などでは、0x78 0x34 0x12まで書いたら、勝手にその後に0x00を補ってくれてしまいます。
      ですから、それ程難しい話ではないような予感。

      親コメント
      • by Anonymous Coward
        あ、ちなみにこれは、元記事の「制限」の所に
        しかし、スタック内のリターン・アドレスやヒープ内の関数 ポインタを狙った純粋なオーバーフロー攻撃はすべて阻止できると思う。
        とあったので、「そうでもないんじゃない?」という事で書いてみました。
        元ACさんの「間接ジャンプで・・・」というのとは別の話ね。

アレゲは一日にしてならず -- アレゲ見習い

処理中...