こんにちは、河野真治さん。
Shinji KONO wrote:
> > よく、バッファオーバーフローによって root 権限でシェルを起動される
> > 恐れがあるという話を聞くのですが、シェルコードを見ると
> > 私が知る限りでは /bin/sh を exec する数百バイト程度のものしか
> > ありません。何故、 /bin/sh を実行させるだけしかしないのでしょうか?
>
> それで十分だから。良くやられるのは、exec /usr/X11R6/bin/xterm
> でしょう。あとは、自由自在ってわけですね。
では、特定の条件下でのみ特定のアプリのみの exec を許可するように
(例えば SE Linux とか SubDomain を使って)ポリシーを設定すれば、
不要なアプリの実行を防げそうですね。でも・・・、
> > それとも、広範なメモリ領域を上書きしてしまうとセグメント違反等が
> > 発生してしまうため大きなプログラムを送り込むことができないから
> > なのでしょうか?
>
> やろうと思えばできますが、root 権限のxterm 以上のことが
> 期待できるわけでもないですし。
う~む、やっぱり出来てしまうんですね。(泣)
そうなると、 /bin/* を纏めたコードを丸ごとスタックセグメント等に
送り込まれた場合には( exec を制限しても)対処不能なんですね。
> ちなみに、そういう全自動シェルコードってのがCで書いてどれく
> らいのコードになるかっていうと、泣きたくなる程、短いんだな。
Cで書けてしまうんですか。(gets() 等にうまく飲み込ませるために
するために)0x0A や 0x00 等を含まないように綿密に計算して
書かないとできないものだと思ってました。
どうもありがとうございました。
今、気がついたのですが、1回の gets() で送り込むことに拘らなければ、
リターンアドレスの改竄と Base64 デコーダと malloc() と
malloc() で確保したメモリ領域に対して read() させるためのシェル
コードを送り込むができてしまえば、シェルコード内の read() を使って
後から Base64 エンコードされたCのプログラムを送り込むことで
どんなに複雑な処理を行うコードでも実行できてしまいますよね。
そうすると、 exec を制限してもあんまり効果を期待できないのかなぁ。
At Sun, 22 Jun 2003 11:02:04 +0900,
名称不定 wrote:
> > ちなみに、そういう全自動シェルコードってのがCで書いてどれく
> > らいのコードになるかっていうと、泣きたくなる程、短いんだな。
>
> Cで書けてしまうんですか。(gets() 等にうまく飲み込ませるために
> するために)0x0A や 0x00 等を含まないように綿密に計算して
> 書かないとできないものだと思ってました。
先日,やむにやまれず利用したIRIX用 xtermクラックプログラムは50行
でした..Xdefaultsを書き換えて xtermを起動するというもの.数年前
のコードで,既に対策が行われていたため,root権限は奪取できません
でしたが.
--
柏崎 礼生 (Hiroki Kashiwazaki)@HUIIC
Ph.D candidate in the Division of Electronics & Information
Engineering, Hokkaido University
mailto:r...@cc.hokudai.ac.jp
Tel:+81-11-706-2998