OpenBSD, FreeBSD et OpenSolaris : examen des binaires suid
La sécurité des plates-formes *nix anime régulièrement les débats dans la communauté des développeurs et utilisateurs. Un point sur trois d'entre elles avec un critère intéressant : les permissions suid.
En train de regarder quelques aspects sur la sécurité d'un de mes serveurs sous OpenBSD encore en 4.3 dont voici le uname -a :
OpenBSD host.monserveur.com 4.3 GENERIC#698 i386j'en profite pour jeter un oeil sur les fichiers en suid sur le système :
root@monserveur:# /usr/bin/find / -perm -u=s -exec /bin/ls -l {} \;
et il ne s'en trouve que 29 en l'état dont voici la liste complète :
-r-sr-xr-x 3 root bin 21252 Mar 12 2008 /usr/bin/chfn -r-sr-xr-x 3 root bin 21252 Mar 12 2008 /usr/bin/chpass -r-sr-xr-x 3 root bin 21252 Mar 12 2008 /usr/bin/chsh -r-sr-sr-x 1 root daemon 20444 Mar 12 2008 /usr/bin/lpr -r-sr-sr-x 1 root daemon 22204 Mar 12 2008 /usr/bin/lprm -r-sr-xr-x 1 root bin 22500 Mar 12 2008 /usr/bin/passwd -r-sr-xr-x 1 root bin 10340 Mar 12 2008 /usr/bin/rsh -r-sr-xr-x 1 root bin 14948 Mar 12 2008 /usr/bin/su -r-sr-xr-x 2 root bin 111172 Mar 12 2008 /usr/bin/sudo -r-sr-xr-x 2 root bin 111172 Mar 12 2008 /usr/bin/sudoedit -r-sr-xr-x 1 root auth 16004 Mar 12 2008 /usr/libexec/auth/login_chpass -r-sr-xr-x 1 root auth 10148 Mar 12 2008 /usr/libexec/auth/login_krb5 -r-sr-xr-x 1 root auth 10436 Mar 12 2008 /usr/libexec/auth/login_krb5-or-pwd -r-sr-xr-x 1 root auth 15556 Mar 12 2008 /usr/libexec/auth/login_lchpass -r-sr-xr-x 1 root auth 10148 Mar 12 2008 /usr/libexec/auth/login_passwd -r-sr-xr-x 1 root auth 15172 Mar 12 2008 /usr/libexec/auth/login_tis -r-sr-xr-x 1 root bin 9988 Mar 12 2008 /usr/libexec/lockspool -r-sr-xr-x 1 root bin 135196 Sep 16 23:06 /usr/libexec/ssh-keysign -r-sr-sr-x 2 root authpf 18084 Mar 12 2008 /usr/sbin/authpf -r-sr-x--- 1 root network 362180 Mar 12 2008 /usr/sbin/ppp -r-sr-x--- 1 root network 94500 Mar 12 2008 /usr/sbin/pppd -r-sr-x--- 1 root network 10660 Mar 12 2008 /usr/sbin/sliplogin -r-sr-xr-x 1 root bin 145312 Mar 12 2008 /usr/sbin/traceroute -r-sr-xr-x 1 root bin 153312 Mar 12 2008 /usr/sbin/traceroute6 -r-sr-sr-x 2 root authpf 18084 Mar 12 2008 /usr/sbin/authpf-noip -rwsr-xr-x 1 root wheel 1750980 Mar 8 2008 /usr/X11R6/bin/Xorg -r-sr-xr-x 1 root bin 157408 Mar 12 2008 /sbin/ping -r-sr-xr-x 1 root bin 181024 Mar 12 2008 /sbin/ping6 -r-sr-x--- 1 root operator 161632 Mar 12 2008 /sbin/shutdownsachant que l'un des plus problématiques d'entre eux, Xorg, n'est pas activé (normal : X sur un serveur, ça n'a pas vraiment d'intérêt).
Je fais maintenant la même manipulation sur mon laptop sous FreeBSD 7.1-RELEASE avec le traditionnel uname -a :
FreeBSD nomdemachine 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan 1 14:37:25 UTC 2009 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386et voici ce que ça donne :
-r-sr-xr-x 4 root wheel 21564 Oct 25 22:32 /usr/bin/at -r-sr-xr-x 4 root wheel 21564 Oct 25 22:32 /usr/bin/atq -r-sr-xr-x 4 root wheel 21564 Oct 25 22:32 /usr/bin/atrm -r-sr-xr-x 4 root wheel 21564 Oct 25 22:32 /usr/bin/batch -r-sr-xr-x 6 root wheel 18560 Oct 25 22:32 /usr/bin/chpass -r-sr-xr-x 6 root wheel 18560 Oct 25 22:32 /usr/bin/chfn -r-sr-xr-x 6 root wheel 18560 Oct 25 22:32 /usr/bin/chsh -r-sr-xr-x 6 root wheel 18560 Oct 25 22:32 /usr/bin/ypchpass -r-sr-xr-x 6 root wheel 18560 Oct 25 22:32 /usr/bin/ypchfn -r-sr-xr-x 6 root wheel 18560 Oct 25 22:32 /usr/bin/ypchsh -r-sr-xr-x 1 root wheel 8320 Oct 25 22:32 /usr/bin/lock -r-sr-xr-x 1 root wheel 21596 Oct 25 22:32 /usr/bin/login -r-sr-xr-x 1 root wheel 4612 Oct 25 22:32 /usr/bin/opieinfo -r-sr-xr-x 1 root wheel 11688 Oct 25 22:32 /usr/bin/opiepasswd -r-sr-xr-x 2 root wheel 6048 Oct 25 22:32 /usr/bin/passwd -r-sr-xr-x 2 root wheel 6048 Oct 25 22:32 /usr/bin/yppasswd -r-sr-xr-x 1 root wheel 10880 Oct 25 22:32 /usr/bin/rlogin -r-sr-xr-x 1 root wheel 8684 Oct 25 22:32 /usr/bin/rsh -r-sr-xr-x 1 root wheel 14492 Oct 25 22:32 /usr/bin/su -r-sr-xr-x 1 root wheel 26112 Oct 25 22:32 /usr/bin/crontab -r-sr-sr-x 1 root daemon 25944 Oct 25 22:32 /usr/bin/lpq -r-sr-sr-x 1 root daemon 29436 Oct 25 22:32 /usr/bin/lpr -r-sr-sr-x 1 root daemon 24708 Oct 25 22:32 /usr/bin/lprm -r-sr-xr-x 1 root wheel 3416 Oct 25 22:34 /usr/libexec/pt_chown -r-sr-xr-x 1 root wheel 1641884 Feb 13 2008 /usr/local/bin/Xorg -rws--x--x 1 root wheel 289680 Dec 8 2007 /usr/local/bin/xterm ---s--x--x 2 root wheel 108640 Dec 8 2007 /usr/local/bin/sudo ---s--x--x 2 root wheel 108640 Dec 8 2007 /usr/local/bin/sudoedit -rws--x--x 1 root wheel 3604 Feb 13 2008 /usr/local/bin/Eterm -rws--x--x 1 root wheel 110952 Feb 13 2008 /usr/local/bin/aterm -r-sr-xr-x 1 games wheel 14308 Feb 13 2008 /usr/local/libexec/emacs/22.1/i386-freebsd/update-game-score -r-sr-xr-x 1 root wheel 9448 Feb 13 2008 /usr/local/libexec/gnome-pty-helper -r-sr-sr-x 1 root authpf 18660 Oct 25 22:34 /usr/sbin/authpf -r-sr-x--- 1 root network 368540 Oct 25 22:34 /usr/sbin/ppp -r-sr-x--- 1 root dialer 117200 Oct 25 22:34 /usr/sbin/pppd -r-sr-x--- 1 root network 14348 Oct 25 22:34 /usr/sbin/sliplogin -r-sr-xr-x 1 root wheel 15652 Oct 25 22:34 /usr/sbin/timedc -r-sr-xr-x 1 root wheel 23812 Oct 25 22:34 /usr/sbin/traceroute -r-sr-xr-x 1 root wheel 18444 Oct 25 22:34 /usr/sbin/traceroute6 -r-sr-xr-x 1 root wheel 18568 Oct 25 22:31 /bin/rcp -r-sr-x--- 1 root operator 5288 Oct 25 22:32 /sbin/mksnap_ffs -r-sr-xr-x 1 root wheel 23868 Oct 25 22:32 /sbin/ping -r-sr-xr-x 1 root wheel 31500 Oct 25 22:32 /sbin/ping6 -r-sr-x--- 1 root operator 10756 Oct 25 22:32 /sbin/shutdownet je finis avec OpenSolaris – encore le uname -a avant :
SunOS machine 5.11 snv_105 i86pc i386 i86pc Solarisce qui donne :
-rwsr-xr-x 1 root bin 64436 nov 12 11:08 /sbin/wificonfig -r-sr-xr-x 1 root bin 2181604 janv 24 10:26 /proc/564/object/a.out -r-sr-xr-x 1 root bin 347976 janv 24 10:27 /proc/716/object/a.out -r-sr-xr-x 1 root bin 55680 nov 12 11:08 /usr/sbin/ping -r-sr-xr-x 1 root bin 37200 nov 12 11:04 /usr/sbin/pmconfig -r-sr-xr-x 1 root bin 18220 nov 12 11:02 /usr/sbin/i86/whodo -rwsr-xr-x 1 root sys 33032 nov 12 11:02 /usr/sbin/sacadm -r-sr-xr-x 3 root bin 41448 nov 12 11:02 /usr/sbin/deallocate -r-sr-xr-x 3 root bin 41448 nov 12 11:02 /usr/sbin/allocate -r-sr-xr-x 1 root bin 24656 nov 12 11:02 /usr/sbin/amd64/whodo -r-sr-xr-x 1 root bin 42504 nov 12 11:02 /usr/sbin/traceroute -r-sr-xr-x 3 root bin 41448 nov 12 11:02 /usr/sbin/list_devices -rwsr-xr-x 1 root sys 47892 nov 12 11:10 /usr/xpg4/bin/at -r-sr-xr-x 1 root bin 29088 nov 12 11:10 /usr/xpg4/bin/crontab -r-s--x--x 1 root bin 44008 nov 12 11:08 /usr/lib/print/lpd-port -r-sr-xr-x 1 root bin 13120 nov 12 11:02 /usr/lib/utmp_update -rwsr-xr-x 1 root adm 12528 nov 12 11:06 /usr/lib/acct/accton -r-sr-xr-x 1 root bin 106720 nov 12 11:02 /usr/lib/fs/ufs/ufsdump -r-sr-xr-x 1 root bin 23120 janv 24 10:21 /usr/lib/fs/ufs/quota -r-sr-xr-x 1 root bin 111432 janv 24 10:21 /usr/lib/fs/ufs/ufsrestore -r-sr-xr-x 1 root bin 205172 janv 24 10:26 /usr/lib/ssh/ssh-keysign -r-s--x--x 1 root bin 27744 nov 12 11:09 /usr/lib/lp/bin/netpr -rwsr-xr-x 1 root bin 84004 déc 8 15:29 /usr/bin/cdrw -r-sr-xr-x 1 root bin 39624 nov 12 11:02 /usr/bin/fdformat -r-s--x--x 2 root bin 182164 janv 24 10:28 /usr/bin/sudoedit -r-sr-sr-x 1 root sys 31540 nov 12 11:02 /usr/bin/passwd -r-sr-xr-x 1 root bin 29068 nov 12 11:02 /usr/bin/crontab -r-sr-xr-x 1 root bin 68792 nov 12 11:08 /usr/bin/rmformat -r-s--x--x 2 root bin 182164 janv 24 10:28 /usr/bin/sudo -r-sr-xr-x 1 root bin 33732 janv 24 10:24 /usr/bin/rsh -rwsr-xr-x 1 root bin 19132 janv 24 10:26 /usr/bin/virt-console -rwsr-xr-x 1 root sys 19068 nov 12 11:02 /usr/bin/atrm -r-sr-xr-x 1 root sys 22872 nov 12 11:02 /usr/bin/i86/newtask -r-sr-xr-x 2 root bin 22220 nov 12 11:02 /usr/bin/i86/w -r-sr-xr-x 2 root bin 22220 nov 12 11:02 /usr/bin/i86/uptime -r-sr-xr-x 1 root sys 29616 nov 12 11:02 /usr/bin/amd64/newtask -r-sr-xr-x 2 root bin 24568 nov 12 11:02 /usr/bin/amd64/w -r-sr-xr-x 2 root bin 24568 nov 12 11:02 /usr/bin/amd64/uptime -r-sr-xr-x 1 root sys 55332 nov 12 11:10 /usr/bin/chkey -r-sr-xr-x 1 root bin 42620 janv 24 10:21 /usr/bin/login -r-sr-xr-x 1 root sys 34896 janv 24 10:21 /usr/bin/su -rwsr-xr-x 1 root sys 47768 nov 12 11:02 /usr/bin/at -rwsr-xr-x 1 root bin 33584 déc 28 21:09 /usr/bin/mmsmnt -r-sr-xr-x 1 root bin 18352 nov 12 11:02 /usr/bin/pfexec -r-sr-xr-x 1 root bin 39460 janv 24 10:24 /usr/bin/rlogin -r-sr-xr-x 1 root bin 8392 nov 12 11:10 /usr/bin/mailq -rwsr-xr-x 1 root sys 13820 nov 12 11:02 /usr/bin/newgrp -r-sr-xr-x 1 root bin 257008 nov 12 11:06 /usr/bin/pppd -rwsr-xr-x 1 svctag daemon 106804 juil 5 2008 /usr/bin/stclient -r-sr-xr-x 1 root bin 53316 janv 24 10:24 /usr/bin/rcp -r-s--x--x 1 uucp bin 70188 nov 12 11:02 /usr/bin/tip -rwsr-xr-x 1 root sys 18708 nov 12 11:02 /usr/bin/atq -r-sr-xr-x 1 root bin 78696 janv 24 10:24 /usr/bin/rdist -r-s--x--x 1 root lp 17288 nov 12 11:04 /usr/bin/lpset -r-sr-xr-x 1 root bin 347976 janv 24 10:27 /usr/X11/bin/xscreensaver -rwsr-xr-x 1 root bin 96952 nov 12 10:51 /usr/X11/bin/xlock -r-sr-xr-x 1 root bin 2181604 janv 24 10:26 /usr/X11/bin/i386/Xorg -r-sr-xr-x 1 root bin 2450016 janv 24 10:26 /usr/X11/bin/amd64/Xorg
Quelques remarques :
- la comparaison n'est pas équitable dans la mesure où rien ne tourne sous X côté serveur OpenBSD comme mentionné plus haut;
- il existe des doublons pour certains binaires sous OpenSolaris car deux architectures (x86 et amd64) sont supportées;
- certains binaires existent ici et pas là (comme pfexec sous OpenSolaris, qui dans une logique différente fait office de sudo – notez par ailleurs que l'on peut aussi installer sudo disponible dans les packages);
- les choix de conception de chacun des systèmes doivent être rapportés à leur utilisation; personnellement, j'ai quelques avis sur la question que je vais approfondir, et je ne manquerai pas de commettre sur le sujet d'ici là.
En attendant je ne peux que vous recommander de tester chacune de ces solutions et de les passer au crible des tests de sécurité élementaires. Elles s'installent (assez) rapidement et sans (trop de) problèmes sur n'importe quelle plate-forme récente en i80 ou amd64.
tags : OpenBSD, FreeBSD, OpenSolaris, suid, sécurité
mis en ligne : Sun Mar 8 10:03:37 CET 2009