現在、 Linux のセキュリティ強化のためにカーネルにどのような
工夫をすべきか研究しています。
よく、バッファオーバーフローによって root 権限でシェルを起動される
恐れがあるという話を聞くのですが、シェルコードを見ると
私が知る限りでは /bin/sh を exec する数百バイト程度のものしか
ありません。何故、 /bin/sh を実行させるだけしかしないのでしょうか?
/bin/sh さえ開始できればあとは自由に弄れるから、わざわざ一連の処理
(例:ファイル一覧を取得→ホームページ改竄→トロイの木馬を設置)を
自動的に行うプログラムを作って送り込むのが面倒だからなのでしょうか?
それとも、広範なメモリ領域を上書きしてしまうとセグメント違反等が
発生してしまうため大きなプログラムを送り込むことができないから
なのでしょうか?
#クラッカーの心理として、標的のサーバで /bin/sh を開始できない
#場合は、そういう全自動シェルコードを書きたいと思うかを知りたいです。
#まぁ、クラッカー本人からの回答が得られるわけが無いので、
#サーバ管理者として、そういうクラッカーもいると思うかどうかでも
#結構です。
よろしくお願いします。
In article <3EF466F7...@anet.ne.jp>, 名称不定<dev_...@anet.ne.jp> writes
> 現在、 Linux のセキュリティ強化のためにカーネルにどのような
> 工夫をすべきか研究しています。
名称不定<dev_...@anet.ne.jp> ていうのが、自分自身のセキュリティ
に自信が無いってのは良くわかるよね。
> よく、バッファオーバーフローによって root 権限でシェルを起動される
> 恐れがあるという話を聞くのですが、シェルコードを見ると
> 私が知る限りでは /bin/sh を exec する数百バイト程度のものしか
> ありません。何故、 /bin/sh を実行させるだけしかしないのでしょうか?
それで十分だから。良くやられるのは、exec /usr/X11R6/bin/xterm
でしょう。あとは、自由自在ってわけですね。
> それとも、広範なメモリ領域を上書きしてしまうとセグメント違反等が
> 発生してしまうため大きなプログラムを送り込むことができないから
> なのでしょうか?
やろうと思えばできますが、root 権限のxterm 以上のことが
期待できるわけでもないですし。
> #クラッカーの心理として、標的のサーバで /bin/sh を開始できない
> #場合は、そういう全自動シェルコードを書きたいと思うかを知りたいです。
さぁ.. なんかの root kit みたいなものがなければ、ほとんどの
「ハッカー」は何にもしないんじゃないですか?
ちなみに、そういう全自動シェルコードってのがCで書いてどれく
らいのコードになるかっていうと、泣きたくなる程、短いんだな。
10行とはいわないが、100行あれば楽勝です。#include も数えると
か言われるときついけど。それならそれで、数千行ぐらい楽勝で
include できるわけだけどさ。
かんたんなことを、さも難しそう、大変そうに大騒ぎするのが
セキュリティってことなのは知ってますがね。自分の技量の
低さを反省した方が得るものは大きいかもね。
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球大学工学部情報工学科,
科学技術振興事業団さきがけ研究21(機能と構成)
At Sat, 21 Jun 2003 23:08:55 +0900,
名称不定 wrote:
> わざわざ一連の処理(例:ファイル一覧を取得→ホームページ改竄→
> トロイの木馬を設置)を自動的に行うプログラムを作って送り込むの
> が面倒だからなのでしょうか?
僕がcracker なら,それだけで満足しないでしょう.高々ホームページの
改竄だけで満足してしまうとは思えません.もっと色んなことをやりたい.
だからでしょ.
> #クラッカーの心理として、標的のサーバで /bin/sh を開始できない
> #場合は、そういう全自動シェルコードを書きたいと思うかを知りたいです。
標的のサーバでシェルを実行出来ない場合はシェルスクリプトを実行させ
るってどういう意味なんでしょう.
--
柏崎 礼生 (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
こんにちは、河野真治さん。
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 等を含まないように綿密に計算して
書かないとできないものだと思ってました。
どうもありがとうございました。
Hiroki Kashiwazaki wrote:
> > #クラッカーの心理として、標的のサーバで /bin/sh を開始できない
> > #場合は、そういう全自動シェルコードを書きたいと思うかを知りたいです。
>
> 標的のサーバでシェルを実行出来ない場合はシェルスクリプトを実行させ
> るってどういう意味なんでしょう.
>
exec を制限するようなポリシーが設定されていて、プロセスイメージの
置換が実行できない場合に、(現在のプロセスを /bin/sh に置き換える
必要のあるシェルスクリプトではなく)現在のプロセスを /bin/sh に
置き換えないまま破壊活動を行うバイナリのコードを書きたいと
思うかどうかという意味です。
今、気がついたのですが、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権限は奪取できません
でしたが.