Do you sudowin?
Uno dei commenti al mio post che spiegava come funziona UAC «dietro le quinte» mi segnalava l'esistenza di Sudowin un port per Windows del comando sudo disponibile su tutte le piattaforme *nix. Il tool l'avevo notato in precedenza, ma il commento è stata una buona scusa per approfondire: alla fine si è rivelato un utile esercizio e credo di aver capito qualcosa di più di come funziona sudo ad esempio su Ubuntu.
La prima sostanziale differenza tra il mondo Windows e il mondo *nix è la figura dell'amministratore. In Windows è amministratore qualsiasi utente appartenga al gruppo Administrators: in *nix c'è un unico amministratore - qualcuno mi corregga se sbaglio - che è root. Discutere sui pro ed i contro di ciascuna delle due soluzioni porterebbe ad una [in]utile guerra di religione, per cui non ci provo neanche. La seconda soluzione però ha qualche implicazione di tipo pratico su sistemi "condivisi": come dare la possibilità ad un utente di svolgere compiti amministrativi senza condividere la password di root (un'idea molto malvagia!)? Sudo colma appunto tale «lacuna» dando la possibilità ad altri utenti (i sudoers) di lanciare processi con permessi di root; il tutto è ampiamente configurabile tramite file di configurazione.
L'implementazione per Windows, per me più immediatamente comprensibile, esegue il «gioco di prestigio» in questo modo: durante l'installazione del tool viene installato un servizio che gira con le credenziali di LocalSystem e che si pone in ascolto di «richieste» sudo. In presenza di una richiesta legittima il servizio aggiunge l'utente al gruppo degli amministratori, lancia il processo richiesto usando il nuovo token, e subito dopo rimuove l'utente dal gruppo.
La differenza con l'approccio UAC è evidente: con sudowin un qualsiasi utente potrebbe essere messo in grado di lanciare alcuni processi senza necessariamente essere parte del gruppo degli amministratori.
Sudowin può essere usato per due scopi:
- dare la possibilità ad un amministratore di girare normalmente con credenziali non amministrative, esattamente come avviene con l'Admin Approval Mode (AAM) di Vista.
- dare la possibilità ad un utente "normale" di eseguire un numero limitato di applicazioni che potrebbe richiedere permessi amministrativi.
Per quanto riguarda il primo uso, sudowin potrebbe essere perfetto per XP in quanto l'AAM di Vista è sotto molti aspetti più sicuro e conveniente (ad esempio le credenziali vengono richieste in un desktop separato a prova di spoofing): perció ne sconsiglio l'uso - a tale scopo - su Vista; tuttavia qualcuno che ha più dimistichezza con il mondo *nix potrebbe trovarlo più «familiare».
Per quanto riguarda la seconda possibilità sudowin è perfetto: l'unico problema è che occorre estrema attenzione nel configurare quali applicazioni inserire in una eventuale white list. Dare ad un utente qualsiasi la possibilità di eseguire notepad con un token da amministratore non è molto diverso da aggiungere l'utente al gruppo degli amministratori (ovviamente se l'utente è scaltro ed ha cattive intenzioni): l'elevation of priviledges via notepad è una delle più banali da individuare.
Un'ultima nota a commento di un'affermazione contenuta nella documentazione di sudowin:
UAC also introduces Admin Approval Mode. This is what is confused for sudo. Essentially, administrators are prompted for their credentials or their consent whenever they need to perform a sensitive task. Because the administrators are being prompted for their own passphrase this may seem a lot like sudo, but there is one very important thing to remember – the administrator is not being granted any priviliges that she does not already have. There is no privilege escalation occurring.
In realtà per via dello split token la privilege escalation avviene eccome!
-quack