Windows Vista è un nuovo sistema operativo. Le aree coinvolte nella ristrutturazione sono numerose, e anche se gli anti-Microsoft dicono che "... è sempre il solito Windows...non è sicuro.. non è stabile, ecc.ecc." in realtà se si va a guardare un po' più a fondo si può capire che non è proprio così o per lo meno grandi passi in avanti sono stati fatti. Proprio ieri stavo parlando con un collega e amico, Teo, che aveva alcuni problemi a far girare un servizio su Windows Vista che richiedeva accesso interattivo per mostrare all'utente una dialog box. Subito ho detto che probabilmente si trattava di un blocco dovuto a nuove misure di sicurezza introdotte in Vista. Teo nel frattempo ha fatto un po' di ricerche e mi ha sottoposto un po' di documentazione risolvendo il problema.
Vediamo quindi qualche novità circa la gestione dei servizi su Vista. Spesso negli Windows precedenti i servizi giravano tutti o quasi come LocalSystem. Questo contesto dà accesso completo al sistema locale e quindi si può facilmente capire che eventuali vulnerabilità del sistema sarebbero potute essere utilizzate da pezzi di codice maligno (exploit) per impossessarsi del sistema e avere libero accesso a tutto e fare danni. In Windows Vista c'è stata una rivisitazione dei contesti di sicurezza in cui girano i servizi e sono stati riorganizzati in questo modo:
Come potete notare ora i servizi girano in un contesto sufficiente con privilegi minimi per garantire la loro corretta esecuzione ("least privilege"). Tutti gli altri privilegi vengono rimossi. Così facendo si taglia a zero il rischio che un exploit possa minare la sicurezza e la stabilità del sistema.
Un'altra modifica sostanziale che è stata apportata è che i servizi ora girano tutti in Session0 e, a differenza di ciò che succedeva con gli altri Windows, quando un utente si logga non entra più nella Session0 ma va a finire in una nuova sessione Session1 scollegata dalla precedente ("Session0 Isolation"). La Session0 quindi è riservata ai servizi non associati con l'utente interattivo. Questa sessione quindi non consente processi che interagiscano con l'utente corrente e quindi non consente di visualizzare dialog box o comunque comunicare con Sessioni diverse dalla 0. Ecco perchè teo aveva dei problemi! C'è comunque un sistema per interagire con l'utente ed è tramite questa API WTSSendMessage.
L'argomento è quindi abbastanza importante e sarebbe da approfondire, rimando qui di seguito ad alcuni link di approfondimento:
Blog di Ken Shaefer
Documentazione API WTSSendMessage
Impact of Session 0 Isolation on Services and Drivers in Windows Vista
MSDN Service changes for Windows Vista
MSDN Interactive Services