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 i386
j'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/shutdown
sachant 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  i386
et 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/shutdown
et je finis avec OpenSolaris – encore le uname -a avant :
SunOS machine 5.11 snv_105 i86pc i386 i86pc Solaris

ce 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