前の投稿からちょっとしか時間がたってないけど、もう一度読み返して解決したかなぁといった感じ。
uninformedの方のPDFには、スタック上の_EXCEPTION_REGISTRATION_RECORDのnextを0xffffffffに攻撃者が書き換えたらどうなるか、ということを考察してあって、その場合はpop,pop,ret命令に飛ばすことで、このnextのコードを実行するという利点が生かせなくなるため、そうする意味がなくなると書いてある。これが僕の考えていたことであって、そうなんだったら、わざわざ終端用フレームを入れる必要がない。でも、さらに付け加えて、それでも何らかのコードを任意に実行されることは確かなので、念のためにランダムな終端フレームを入れてチェックするように下ほうがいい、と言っている。
つまりは念のためにそうしているという感じなのかもしれない。まあ、pop,pop,retを利用できないとなれば、基本的にはスタックオーバーフローならリターンアドレス書き換えの方が素直な方法だし、SEH Overwritingの利点がなくなっちゃうし。
とりあえず、こんな感じで解決と言うことにしておきます。
My Daily Programming Life...
Showing posts with label _EXCEPTION_REGISTRATION_RECORD. Show all posts
Showing posts with label _EXCEPTION_REGISTRATION_RECORD. Show all posts
SEH and SEHOP 現在の疑問
SEHについて今いろいろ調べている。そのうちまとめてこのサイトにも載せる予定。
最初は単純にSEHの仕組みを知りたかったのだけれど、だんだんと深くなってしまい、
まずは下のを読んで
http://uninformed.org/?v=5&a=2&t=pdf
それから
http://blogs.technet.com/srd/archive/2009/02/02/preventing-the-exploitation-of-seh-overwrites-with-sehop.aspx
を読んだ。
他にもいろいろ読んだのだけれど、とりあえずこの二つで今のところ疑問なのは、
なぜスレッドの開始時に終端例外フレームを挿入しておかないといけないのかということ。例外フレーム(_EXCEPTION_REGISTRATION_RECORD)のnextポインタが0xffffffffに突き当たればそれでOKなんじゃないのか?と思った。でもきっと違うんだろう。入れておかないといけないんだろうなぁ。でもなんでだか今のところよく分からない。
誰か分かる人教えてください。
最初は単純にSEHの仕組みを知りたかったのだけれど、だんだんと深くなってしまい、
まずは下のを読んで
http://uninformed.org/?v=5&a=2&t=pdf
それから
http://blogs.technet.com/srd/archive/2009/02/02/preventing-the-exploitation-of-seh-overwrites-with-sehop.aspx
を読んだ。
他にもいろいろ読んだのだけれど、とりあえずこの二つで今のところ疑問なのは、
なぜスレッドの開始時に終端例外フレームを挿入しておかないといけないのかということ。例外フレーム(_EXCEPTION_REGISTRATION_RECORD)のnextポインタが0xffffffffに突き当たればそれでOKなんじゃないのか?と思った。でもきっと違うんだろう。入れておかないといけないんだろうなぁ。でもなんでだか今のところよく分からない。
誰か分かる人教えてください。
