Kozupon.com    
 
 余計なsetuidバイナリを無効にする!


みなさんは、setuidを知ってるだろうか?
setuidについては、 ここ の3項のsetuid(0)の恐怖の読んで欲しい。
つまり、ユーザがユーザ自らの権限で実行できて、実行するときにroot権限にチェンジ出来てしまう。
そう言うものである。言い換えればrootが設定するファイルもユーザ権限で書き換えられてしまうと言うことである。これはバグではなく必要な機能なのだが、UNIXの世界では平気で行われている。
考えてみれば、単なるユーザの権限さえ有れば誰でも簡単にrootになることが出来てしまうのも恐ろしい話だ!
したがって、このようなsetuidバイナリファイルはセキュリティホールとなり得るので必要最小限にとどめたいものだ。つまり、使わないファイルは、ユーザ権限で「setuidできない」ようにすべきと考える。


1.setuidされているバイナリファイルを見つける
そんじゃ、そのsetuidされたバイナリファイルってどんな物があるの?って疑問がわいてくる。早速、それらを見つけよう。

jerry:~# find / -perm +6000 -type f -exec ls -ld {} \; > setuid.txt &

このコマンドを常駐させて、setuid.txtのテキストファイルへ書き込む。
俺の場合、以下のバイナリファイルがヒットした。以下のように、setuidビット(sビット)が付いてるのが解る。

jerry:~# more setuid.txt
-rwxr-sr-x 1 root tty 9784 Sep 18 2005 /usr/bin/wall
-rwsr-xr-x 1 root root 22872 May 18 2005 /usr/bin/newgrp
-rwxr-sr-x 1 root shadow 34488 May 18 2005 /usr/bin/chage
-rwsr-xr-x 1 root root 28056 May 18 2005 /usr/bin/chfn
-rwsr-xr-x 1 root root 28088 May 18 2005 /usr/bin/chsh
-rwxr-sr-x 1 root shadow 16696 May 18 2005 /usr/bin/expiry
-rwsr-xr-x 1 root root 34904 May 18 2005 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 26616 May 18 2005 /usr/bin/passwd
-rwsr-xr-x 1 root root 34488 Jan 18 2002 /usr/bin/at
-rwxr-sr-x 1 root tty 7992 Nov 2 2004 /usr/bin/bsd-write
-rwxr-sr-x 1 root crontab 26872 Jul 29 2004 /usr/bin/crontab
-rwxr-sr-x 1 root mail 9860 Jun 5 2004 /usr/bin/dotlockfile
-rwsr-sr-x 1 root utmp 61464 Apr 19 2005 /usr/bin/jfbterm
-rwsr-xr-x 1 root root 18136 Dec 1 2004 /usr/bin/traceroute.lbl
-rwsr-xr-x 1 root root 809836 Mar 10 20:19 /usr/bin/gpg
-rwxr-sr-x 1 root mail 7764 May 23 2005 /usr/bin/mutt_dotlock
-rwsr-sr-x 1 root lp 24184 Jul 28 2004 /usr/bin/lpq
-rwsr-sr-x 1 root lp 22232 Jul 28 2004 /usr/bin/lprm
-rwsr-sr-x 1 root lp 24440 Jul 28 2004 /usr/bin/lpr
-rwsr-xr-x 1 root root 44024 Dec 13 2004 /usr/bin/mtr
-rwsr-sr-x 1 root mail 71640 Mar 2 2005 /usr/bin/procmail
-rwxr-sr-x 1 root mail 12712 Mar 2 2005 /usr/bin/lockfile
-rwxr-sr-x 1 root ssh 57304 Nov 29 2004 /usr/bin/ssh-agent
-rwsr-xr-x 1 root root 5668 May 11 2005 /usr/lib/pt_chown
-rwxr-sr-x 1 root mail 18680 Mar 18 2005 /usr/lib/emacs/21.4/i386-linux/movemail
-rwxr-s--- 1 proxy shadow 7480 Sep 18 2005 /usr/lib/squid/getpwnam_auth
-rwxr-s--- 1 proxy shadow 10776 Sep 18 2005 /usr/lib/squid/pam_auth
-r-xr-sr-x 1 root postdrop 8444 Mar 1 2005 /usr/sbin/postdrop
-r-xr-sr-x 1 root postdrop 8440 Mar 1 2005 /usr/sbin/postqueue
-rwsr-xr-- 1 root dip 265880 May 6 2005 /usr/sbin/pppd
-rwsr-xr-- 1 root dip 29420 Sep 30 2004 /usr/sbin/pppoe
-rwxr-sr-x 1 root lp 32248 Jul 28 2004 /usr/sbin/lpc
-rwsr-xr-x 1 root root 35512 May 18 2005 /bin/login
-rwsr-xr-x 1 root root 23416 May 18 2005 /bin/su
-rwsr-xr-x 1 root root 68440 Sep 18 2005 /bin/mount
-rwsr-xr-x 1 root root 40920 Sep 18 2005 /bin/umount
-rwsr-xr-x 1 root root 30764 Dec 23 2003 /bin/ping
-rwsr-xr-x 1 root root 26604 Dec 23 2003 /bin/ping6
-r-sr-xr-x 1 root root 15000 Jun 29 2004 /sbin/unix_chkpwd


2.setuidされてるバイナリファイルを無効にする

この中で、普段全然使ってないのでsetuidビットを無効にしても差し支えないものが沢山ある。そう言うときは、以下のようにして無効にするか、本当に使わないので有ればターゲットのコマンド関連機能そのものをアンインストールすべきだと思う。
例えば、サーバなので、プリンタは必要ないので lpr 関係を無効にしてみる。

jerry:~# cd /usr/bin/
jerry:/usr/bin# chmod a-s {lpr,lpq,lprm}
jerry:/usr/bin# ls -al {lpr,lpq,lprm}
-rwxr-xr-x 1 root lp 24184 Jul 28 2004 lpq
-rwxr-xr-x 1 root lp 24440 Jul 28 2004 lpr
-rwxr-xr-x 1 root lp 22232 Jul 28 2004 lprm

次に、 BBルータを使用してるので pppd も使わないので無効にしてみる。

jerry:/usr/bin# cd /usr/sbin/
jerry:/usr/sbin# chmod a-s pppd
jerry:/usr/sbin# ls -al pppd
-rwxr-xr-- 1 root dip 265880 May 6 2005 pppd

また、wallなどはホスト内のアカウント全員にメッセージを送りたい場合に使う。俺の機能の場合、ユーザに提供する必要がないので、これも無効にする。

jerry:/usr/bin# chmod a-s wall
jerry:/usr/bin# ls -al wall
-rwxr-xr-x 1 root tty 9784 Sep 18 2005 wall

他にも有ると思うので、こんな感じに使わないバイナリファイルは sビット を無効にして行く。

以上


 
 
 



Copyright 2005 Kozupon.com.