2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

余計な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ビット を無効にして行く。

以上

コメント