[PLUTO-help] Perche' il bit setuid e` pericoloso

Gian Uberto Lauri GianUberto.Lauri a eng.it
Mar 29 Giu 2004 14:17:57 CEST


Dato che in  questa mailing list si e` spiegato  come impostare il bit
setuid ad un file senza  peraltro spiegare perhce' questo non andrebbe
fatto, provo a mettere giu` un paio di righe.

0.02 EUR di teoria

Il bit  setuid e` uno dei bit  che codificano i permessi  dei file che
sono 12. I 9 bassi li conoscono credo tutti e sono quelli che regolano
i permessi di lettura, scrittura ed esecuzione. Rimangono i 3 bit alti

Set UID
Set GID
Sticky

Linux usa sticky solo per le directory (vedi man chown).

Gli altri due  indicano al sistema che l'esecuzione  del programma non
deve  avvenire  con  l'uid  dell'utente  collegato ma  con  l'uid  del
proprietario del file.

L'uid  e` l'identita`  utilizzata, per  il sistema  c'e`  anche quella
reale, per  cui un  programma e` comunque  in grado di  conoscere l'id
dell'utente che lo usa se serve).

Scopo  dell'ambaradan  ?  Ci  sono  risorse che  non  devono  rimanere
liberamente  accessibili ma  che  l'utente deve  poter utilizzare,  ad
esempio, con determinati programmi. X e` uno di questi.

"WOW, quindi se io metto  setuid un certo programma posso usarlo anche
da utente peone..."

##     	##   ######    ##
##	##   ######    ##
####    ## ##  	   ##  ##
####	## ##	   ##  ##
##  ## 	## ##	   ##  ##
##  ##	## ##	   ##  ##
##    #### ##	   ##
##    #### ##  	   ##
##     	##   ######    ##
##	##   ######    ##

Il bit setuid non va usato se non quando e` veramente l'unica risorsa,
sopratutto se l'utente proprietario del file e` root.

1) Certe operazioni  sono lasciate solo  a root perche'  sono critiche
   per il  sistema ed il loro  uso deve avvenire in  modo "protetto da
   abusi".  

   Se si mette  setuid root un file, questa  protezione salta. Cio` e`
   male (E. Spengler).

   Ci  sono  vari meccanismi  (sudo,  o  file  di configurazione  come
   shutdown.allow descritto  in man  shutdown) per delegare  ad alcuni
   utenti  certe  operazioni  senza  peraltro  permettere  a  loro  di
   diventare root a tutti gli effetti.

2) Mettere setuid root un file che generalmente non lo e` puo` aprire
   falle di sicurezza.

   Ad esempio, e` poco probabile che tale file sia stato sottoposto ad
   auditing per l'uso di  tecniche di programmazione poco sicure (i.e.
   buffer  overflow).  C'e` gia`  abbastanza  da  tenere d'occhio  per
   quello che "istituzionalmente" gira con l'uid 0:0.

   Il programma potrebbe avere una shell escape: "Mi metto setuid less
   cosi` non ho  problemi di permessi. Ho tutti i  servizi di rete che
   girano come nobody, anche se  li sfondano...". Peccato che la prima
   cosa che si fa quando si  sfonda una macchina con utente diverso da
   root la  prima cosa  che si va  a vedere  sono i file  setuid root:
   "WOW", esclama l'intruso, "less  setuid!", fa less /etc/motd, preme
   !, scrive sh, preme return ed ha una shell di root.

   Non  parliamo  del  fatto che  se  un  utente  riesce ad  avere  la
   scrivibilita` di  un file  setuid allora ha  la porta  aperta verso
   l'account 0:0:

	     copia il file incriminato, tanto per avere un backup
	     e cancellare le prove.

	     cat /bin/sh > file_incriminato

	     esegue file incriminato

	     cat copia_backup > file_incriminato #via le prove

   Sembra  uno  scenario  stupido  ma  e`  gia`  successo  perche'  il
   sistemista era troppo facilone.

Oh, se fate questa prova sotto Linux:

    fate uno shell script che contenga il solo comando id

    diventate root e fate chmod 4755 file_di_prova

    tornate utenti

    richiamate il file

vi ritornera` i vostri dati di utente normale e non quelli di root.

Il perche' e`  banale. Chi ha scritto la bash sa  che gli shell script
setuid root sono estremamente pericolosi, e quindi per default bash va
a vedere chi siete veramente e ripristina la vostra identita`.

E' anche vero che puo` essere _realmente_ necessario avere uno shell
script setuid.

bash vi  chiede di "esserne consci"  e richiede il  parametro -p sulla
command line, parametro che sta a dire "sono perfettamente conscio che
potrebbe essere una cazzata, ma hai l'ordine di eseguirlo setuid".

Si puo`  fare, ma  e` meglio  non farlo. Si  puo` percuotere  i propri
geniali con un martellone, ma e` meglio non farlo.


	      E`   M E G L I O   N O N   F A R L O ! ! !
	      E`   M E G L I O   N O N   F A R L O ! ! !
	      E`   M E G L I O   N O N   F A R L O ! ! !
	      E`   M E G L I O   N O N   F A R L O ! ! !
	      E`   M E G L I O   N O N   F A R L O ! ! !
	      E`   M E G L I O   N O N   F A R L O ! ! !
	      E`   M E G L I O   N O N   F A R L O ! ! !


/*
 * Nota decisamente polemicosa :)
 *
 * Questo e`  IMNSHO il  modo corretto di  parlare di cose  potenti ma
 * pericolose agli utenti non preparati.
 *
 * E forse ci sono ancora dei buchi di sicurezza in quello che ho detto.
 */

/*
 * Nota storica:
 *
 * Come ho gia` detto, ho gia` visto gente che si supponeva essere "un
 * professionista" agire in maniera facilona. Il problema e` che gli
 * altri utenti meno esperti, pur non essendo degli scemi, si fidavano
 * del suo operato e bene o male imparavano da lui. Ci sono voluti 6
 * anni per sentirne uno dire "ma sai che pensavo che quelle cose di
 * sicurezza fossero solo paranoie"...
 */

-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico, fancazzista 
\/                  e coltivatore diretto di software
 



More information about the pluto-help mailing list