Condividi tramite


Come viene implementato il meccanismo di integrità in Windows Vista

Il meccanismo di integrità di Windows viene usato in diversi modi in Windows Vista. Lo scopo principale è limitare le autorizzazioni di accesso delle applicazioni in esecuzione nello stesso account utente meno affidabile. Il meccanismo impedisce al codice meno attendibile di modificare gli oggetti a un livello superiore. La maggior parte degli oggetti sotto il controllo del gruppo Administrators o del sistema ha un elenco di controllo di accesso discrezionale (DACL) che in genere concede l'autorizzazione di controllo completo agli amministratori e al sistema ed eseguire l'autorizzazione per l'autenticazione degli utenti. Esempi di risorse sotto controllo del gruppo Administrators e System sono la directory Programmi per le applicazioni o l'hive HKEY_LOCAL_MACHINE del Registro di sistema. Il meccanismo di integrità non migliora la sicurezza degli oggetti già configurati correttamente per limitare gli account utente o i gruppi diversi dall'accesso. Lo scopo principale del meccanismo di integrità è quello di gestire autorizzazioni diverse per i programmi per accedere alle risorse sotto il controllo completo dello stesso entità di sicurezza utente.

Le risorse sotto il controllo della stessa entità di sicurezza utente che richiedono una protezione aggiuntiva sono principalmente sotto il profilo dell'utente (C:\Users\<>username directory e HKEY_CURRENT_USER hive nel Registro di sistema) e i programmi dell'applicazione attualmente in esecuzione per conto di tale utente. Windows Vista usa il meccanismo di integrità nei modi seguenti.

  • Nell'interfaccia utente limita l'accesso tra i processi in esecuzione con privilegi utente standard e processi elevati in esecuzione con diritti amministrativi completi in Amministrazione modalità approvazione.
  • La sicurezza COM è consapevole dei livelli di integrità e non consente ai client di integrità inferiore di associare le istanze di classe in esecuzione a un livello di integrità superiore.
  • Nelle impostazioni di sicurezza predefinite limita l'accesso alla cartella radice del volume di sistema.
  • In Modalità protetta Internet Explorer limita la possibilità di eseguire codice nel browser Internet per modificare i dati utente o le impostazioni del profilo utente.
  • Per abilitare le applicazioni in esecuzione a bassa integrità per avere un percorso di file scrivibile, assegna cartelle specifiche nel profilo utente a un livello di integrità basso.

Il meccanismo di integrità fa parte dell'architettura di sicurezza di Windows Vista. Nel tempo, le applicazioni specifiche che gestiscono l'input non attendibile (principalmente con connessione Internet) vengono aggiornate per sfruttare la possibilità di eseguire a un livello di integrità basso. Le applicazioni di produttività personale sono corrette a livello di integrità medio, purché gli utenti conoscono l'origine dei dati di input. Per la maggior parte delle applicazioni, il meccanismo di integrità è completamente trasparente e non interferisce con le funzionalità dell'applicazione. I servizi applicazione possono essere aggiornati per offrire un migliore isolamento delle risorse server per i processi client a livelli di integrità diversi.

Livelli di integrità e interfaccia utente

L'interfaccia utente in Windows Vista esegue più programmi a livelli diversi di accesso nello stesso desktop quando si usa Amministrazione modalità approvazione. I programmi dispongono di privilegi diversi in base al token di accesso alla sicurezza assegnato al processo al momento della creazione del processo. Gli utenti con account che sono utenti standard hanno un solo token di accesso alla sicurezza creato durante l'accesso. Il token di accesso utente standard viene assegnato a un livello di integrità medio. Il token di accesso utente standard di integrità media viene assegnato a quasi tutti i processi dell'applicazione eseguiti dall'utente. Applicazioni specifiche, ad esempio Internet Explorer in modalità protetta, sono un'eccezione descritta di seguito.

Gli utenti con account membri del gruppo Administrators hanno due token di accesso alla sicurezza creati all'accesso collegati. Un token di accesso è un token di accesso utente standard assegnato a un livello di integrità medio, che ha il gruppo Administrators usato solo per i controlli di accesso negati e determinati privilegi amministrativi rimossi. Il secondo token di accesso è un token completo di accesso con privilegi elevati assegnato a un livello di integrità elevato perché il gruppo Administrators e i privilegi amministrativi sono presenti nel token di accesso. I token di accesso sono collegati perché sono correlati allo stesso accesso interattivo per l'account utente. Entrambi i token di accesso hanno lo stesso SID utente e gli stessi gruppi globali di Active Directory (ad eccezione dei gruppi filtrati per Domain and Enterprise Amministrazione).

Esplora risorse (nota anche come shell) e tutte le attività non di amministratore vengono assegnate al token di accesso standard per l'utente, l'integrità media. Per l'account utente membro del gruppo Administrators, quasi tutte le applicazioni vengono eseguite con il token di accesso a integrità media. I criteri di integrità NO_WRITE_UP non limitano le autorizzazioni di accesso dei processi di livello medio per accedere agli oggetti con un'etichetta obbligatoria per oggetti medio impliciti. Il meccanismo di integrità è trasparente alle applicazioni a livello di integrità medio, a meno che non siano progettate per controllare altri processi che possono essere in esecuzione a un livello di privilegi più elevato. Windows Automazione interfaccia utente è un esempio di applicazione progettata per controllare altri processi.

La modalità di approvazione dell'interfaccia utente Amministrazione consente all'utente di avviare attività amministrative e applicazioni dopo aver fornito il consenso con il token completo di accesso con privilegi elevati. Il sistema operativo deve limitare la possibilità del processo con privilegi inferiori (utente standard) di manomettere direttamente il processo con privilegi più elevati (amministratore) in esecuzione con lo stesso SID utente. Il meccanismo di integrità di Windows limita le autorizzazioni di accesso che il processo di integrità media può avere nel processo di integrità elevata. Gestione processi (parte del kernel di Windows) assegna le opzioni di criteri obbligatorie NO_READ_UP e NO_WRITE_UP per limitare i processi di integrità inferiore dall'apertura di un processo di integrità superiore per l'accesso in lettura o scrittura.

Il processo di integrità inferiore ha solo l'accesso generico per l'esecuzione. L'accesso a esecuzione generica include quanto segue:

  • SYNC, PROCESS_QUERY_LIMITED_INFORMATION
  • PROCESS_TERMINATE

L'accesso generico in lettura a un processo di integrità superiore (PROCESS_VM_READ l'accesso alla memoria virtuale di un processo e PROCESS_QUERY_INFORMATION) è limitato per impedire la possibilità di processi con privilegi inferiori di ottenere l'accesso in lettura alla memoria che può contenere dati password o altro materiale chiave usato per l'autenticazione. L'accesso in scrittura generico al processo di integrità superiore viene bloccato dai criteri di NO_WRITE_UP. I diritti di accesso al processo di scrittura generici includono:

  • PROCESS_CREATE_THREAD
  • PROCESS_VM_OPERATION
  • PROCESS_VM_WRITE
  • PROCESS_DUP_HANDLE
  • PROCESS_SET_QUOTA
  • PROCESS_SET_INFORMATION
  • PROCESS_SET_PORT

Hive del Registro di sistema utente corrente

La maggior parte degli oggetti nel profilo utente non viene assegnata un'etichetta obbligatoria esplicita e quindi ha un livello di integrità predefinito implicito di media. Ciò si applica all'hive HKEY_CURRENT_USER (HKCU) del Registro di sistema. Le chiavi create in HKCU hanno un livello di integrità medio implicito. Ciò significa che, per gli utenti che sono membri del gruppo Administrators, l'hive HKCU è scrivibile dalle applicazioni in esecuzione con un token di accesso utente standard di integrità media o con il token di accesso completo completo di integrità elevata. Questo deve essere il caso per motivi di compatibilità dell'applicazione. Si ricordi che l'hive HKEY_LOCAL_MACHINE (HKLM) ha un criterio di sicurezza predefinito che concede agli amministratori e al sistema il controllo completo e gli utenti leggono ed eseguono l'accesso. L'hive HKLM è modificabile solo da processi con privilegi elevati assegnati al token di accesso amministratore completo. L'hive HKLM non è protetto da un'etichetta obbligatoria elevata.

Poiché il livello di integrità predefinito per gli oggetti che non dispongono di un'etichetta obbligatoria esplicita è medio, è chiaro che gli utenti che sono membri del gruppo di amministratori possono eseguire programmi a livelli di privilegi diversi (medio e alto) che condividono i dati del profilo utente e HKCU. Windows Vista non applica un limite rigoroso tra processi di integrità media e di integrità elevata. Il processo di integrità elevata è consentito per "leggere". È comune per le applicazioni in esecuzione con un token di accesso completo, a integrità elevata per leggere le informazioni di configurazione da HKCU o per accettare i file di input che influiscono sul comportamento del processo di integrità elevata. Le applicazioni eseguite con privilegi completi devono usare HKLM per archiviare le informazioni di configurazione modificabili solo dagli amministratori. Anche le applicazioni con privilegi completi devono verificare che i dati di input utente siano ben formati prima di elaborare i file modificabili dall'utente.

COM è consapevole dell'integrità

COM è il framework per la creazione di componenti dell'applicazione e servizi a oggetti. L'infrastruttura COM è consapevole del livello di integrità di un client che chiama CoCreateInstance e del processo del server che esegue un'istanza di classe. Le aree della funzionalità COM in cui i livelli di integrità influiscono sul comportamento:

  • Il moniker di elevazione COM consente ai client di avviare servizi con privilegi elevati a un livello di integrità elevato dopo che l'amministratore fornisce il consenso o un utente standard fornisce credenziali di amministratore esplicite.
  • Le classi server eseguite con privilegi elevati al di sopra del livello di integrità medio devono avere CLSID definito nell'hive del Registro di sistema HKLM.
  • COM impedisce ai client di un livello di integrità inferiore l'associazione a istanze di server a un livello di integrità superiore, a meno che il server non consenta l'accesso da client inferiori.

Il moniker di elevazione COM consente alle applicazioni a un livello di integrità basso o medio di avviare i servizi COM in un processo in esecuzione con diritti elevati a un'integrità elevata. Il moniker di elevazione consente attività specifiche progettate per l'esecuzione con privilegi elevati e non destinate alla compatibilità completa dell'applicazione. L'elevazione COM è integrata con l'elevazione dell'interfaccia utente. Il processo del server COM con privilegi elevati viene assegnato a un token di accesso con privilegi elevati con integrità elevata. COM non consente ai client di eseguire il binding a un'istanza in esecuzione del server a un livello di integrità superiore.

Se un server COM è progettato per supportare le connessioni dai client di integrità inferiore, il server può modificare a livello di codice le autorizzazioni di avvio/attivazione nel Registro di sistema per consentire l'associazione da un client di integrità inferiore. COM usa i criteri obbligatori NO_EXECUTE_UP in un ace di etichette obbligatorie per controllare se i client possono eseguire l'associazione a un'istanza del server a livello di integrità superiore. Le autorizzazioni di accesso di avvio/attivazione COM vengono mappate ai diritti di accesso di esecuzione generici nella GENERIC_MAPPING usata da COM per controllare l'attivazione. Il livello di integrità in un'etichetta obbligatoria associata all'oggetto identifica il livello di integrità più basso di un client autorizzato a eseguire l'associazione al server. Analogamente all'accesso al file system, il criterio obbligatorio implicito predefinito consente ai client di integrità media di associare ai server.

Per i server COM progettati per consentire a un client a bassa integrità di associare a un'istanza del server, le autorizzazioni di attivazione COM vengono impostate dal codice del server.

Per consentire a un client di integrità bassa di associare al server

  1. Definire un'etichetta obbligatoria con un criterio di NO_EXECUTE_UP (NX) per un livello di integrità basso. L'SDDL per il descrittore di sicurezza dell'oggetto con i criteri di etichetta obbligatori per l'integrità ridotta è il seguente:

    O:BAG:BAD:(A;;0xb;;;WD)S:(ML;;NX;;;LW)

  2. Convertire il descrittore di sicurezza stringa in un descrittore di sicurezza binario.

  3. Impostare le autorizzazioni di avvio per CLSID per il server CLSID usando il descrittore di sicurezza binario.

L'interfaccia utente di sicurezza COM, dcomcfg.exe, non supporta i livelli di integrità.

Gli esempi di codice per impostare i criteri obbligatori per l'avvio COM sono disponibili nelle risorse del meccanismo di integrità di Windows per altre informazioni sul supporto a livello di integrità e COM.

I servizi vengono assegnati al livello di integrità del sistema

Service Control Manager (SCM) avvia i processi di servizio usando un account di servizio speciale o un nome utente e una password. Gli account di servizio speciali sono LocalSystem, LocalService e NetworkService. I servizi in esecuzione in uno di questi account di servizio hanno privilegi speciali, ad esempio il privilegio SE_IMPERSONATE_NAME che consente al servizio di eseguire azioni durante la rappresentazione di altri utenti. Windows Vista assegna un livello di integrità del sistema all'oggetto processo per i servizi in esecuzione in uno degli account di servizio speciali. L'immagine seguente di Esplora processi mostra il livello di integrità del sistema assegnato al token di accesso per account di servizio speciali.

Figura 6 Livello di integrità del sistema per i servizi

Anche se il processo di servizio ha un livello di integrità del sistema, gli oggetti a protezione diretta creati da questi soggetti non vengono assegnati a un'etichetta obbligatoria del sistema. Gli oggetti creati dai servizi (ad eccezione di processi figlio, thread, token di accesso e processi) hanno un livello di integrità medio implicito.

Le modifiche apportate al servizio per Windows Vista descrivono le modifiche ai servizi per migliorare la sicurezza, l'affidabilità e la gestibilità. Le modifiche per i servizi migliorano la sicurezza del sistema isolando i servizi nella sessione 0 e isolando le risorse a cui i servizi possono accedere usando i SID del servizio. Il livello di integrità del sistema per gli account di servizio speciali è coerente con gli obiettivi di isolamento del servizio. I processi di servizio in esecuzione a livello di integrità del sistema sono protetti dall'accesso a un processo di integrità inferiore. I diritti di accesso al processo disponibili per i processi di integrità inferiore per aprire un processo di servizio sono limitati ai seguenti:

  • SYNCHRONIZE
  • PROCESS_QUERY_LIMITED_INFORMATION
  • PROCESS_TERMINATE

Alcune applicazioni sono progettate usando più processi cooperativi che possono essere in esecuzione in uno o più account di servizio. La maggior parte dei meccanismi di comunicazione interprocesso (IPC) tra processi e servizi, ad esempio RPC, non è limitata dal livello di integrità. I servizi devono essere particolarmente attenti per convalidare l'input dai client a bassa integrità.

Handle duplicati tra i servizi

Le applicazioni di servizio che usano più processi sono talvolta progettate per duplicare gli handle agli oggetti, ad esempio file, tra processi server. Se tutti i processi vengono eseguiti nello stesso account del servizio speciale, la sicurezza predefinita nei processi di servizio non introduce restrizioni. L'elenco dati predefinito nei processi di servizio in esecuzione in account di servizio speciali non concede l'accesso PROCESS_DUP_HANDLE, necessario per le chiamate DuplicateHandle. Le finestre di progettazione del servizio applicazioni devono implementare funzionalità per concedere PROCESS_DUP_HANDLE accesso all'oggetto processo del servizio a un altro account utente usato da un co-processo per condividere gli handle tra i processi dell'applicazione eseguiti in account utente diversi. Tuttavia, se il servizio in cui si vuole duplicare l'handle è un account di servizio speciale in esecuzione a livello di integrità del sistema, un co-processo in esecuzione a un livello di integrità elevato o medio non sarà in grado di ottenere PROCESS_DUP_HANDLE a causa dei criteri di etichetta obbligatori. Anche se l'elenco dati concede l'accesso PROCESS_DUP_HANDLE, i criteri di etichetta obbligatori non consentono ai chiamanti di integrità inferiore che accedono. Se questa situazione influisce sulla progettazione dell'applicazione del servizio, il codice del servizio applicazione dovrà modificare in modo che il processo che avvia DuplicateHandle sia a un livello di integrità superiore al livello di integrità del processo che è l'origine dell'handle. Vale a dire, un servizio di integrità superiore può duplicare un handle nel proprio processo come destinazione da un processo di integrità inferiore come origine di handle.

Criteri di rappresentazione

Il privilegio SE_IMPERSONATE_NAME consente a un processo server di rappresentare il contesto di sicurezza di un processo client. Il privilegio Impersonate è un privilegio potente. Il meccanismo di integrità associa il privilegio di rappresentazione ai token di accesso con un livello di integrità elevato o di sistema. Il meccanismo di integrità applica i criteri che un soggetto può rappresentare un client a un livello di integrità superiore, solo se ha il privilegio Rappresentazione.

Uno scenario in cui questa restrizione dei criteri si applica sarebbe quando un'interfaccia utente di un processo di integrità ridotta per convincere un utente amministratore a immettere le credenziali di amministratore. Il codice dannoso usa le credenziali per chiamare LsaLogonUser e ImpersonateLoggedOnUser per tentare di avviare un processo a un livello di privilegi superiore. I criteri di integrità per i token di accesso di rappresentazione sono che il livello di integrità del token di accesso restituito da LsaLogonUser non deve essere superiore al livello di integrità del processo chiamante.

Cartella radice a livello elevato di integrità

La cartella radice della partizione di sistema, in genere C:\ è stata usata storicamente come luogo pratico per archiviare programmi o file temporanei, anche se la pratica non è incoraggiata. I programmi di installazione che richiedono privilegi di amministratore vengono spesso copiati nella cartella radice prima dell'avvio. I criteri di sicurezza predefiniti per la cartella radice sono progettati per consentire agli utenti autenticati di creare sottocartelle nella cartella radice, ma consentono solo agli amministratori di creare file nella cartella radice. Inoltre, idealmente il criterio non consente agli utenti non amministrativi di modificare i file nella cartella creata dagli amministratori. Questo criterio è difficile da definire usando solo l'ACL per la cartella radice.

Impostando un'etichetta obbligatoria con un livello di integrità elevato che si applica agli oggetti figlio, ma non ai contenitori figlio, la sicurezza predefinita per la cartella radice soddisfa questo criterio. Gli utenti standard che eseguono programmi a livello di integrità media non possono modificare i file creati dagli amministratori nella cartella radice, anche se l'ACL concede agli utenti l'accesso. La cartella radice ha un'etichetta obbligatoria ereditabile ad alta integrità ereditata dall'oggetto e che non viene propagata alle sottocartelle.

L'immagine seguente mostra le impostazioni di sicurezza predefinite in C:\ cartella radice, incluso l'oggetto ereditano l'etichetta obbligatoria ad alta integrità. La tabella 9 mostra le definizioni per le abbreviazioni nell'immagine.

Abbreviazioni di immagine tabella 9

Abbreviazione Definizione

(OI)

Oggetto eredita

(NP)

Propagazione senza propagazione

(IO)

Eredita solo

(NW)

Nessuna scrittura

Figura 7 Etichetta obbligatoria nella cartella radice

Internet Explorer in modalità protetta a bassa integrità

Internet Explorer è un esempio di applicazione progettata per accettare dati arbitrari ed estendibili da Internet. Poiché l'origine del contenuto Internet è raramente autenticata (firmata), è necessario presupporre che tutto l'input da Internet non sia attendibile. Attacchi a Internet Explorer o a qualsiasi altro browser Internet, illustrano la natura non attendibile del contenuto dinamico e dei dati disponibili da Internet. Dal punto di vista della sicurezza si presuppone che il processo di Internet Explorer stesso sia compromesso e non attendibile e si cercano soluzioni che limitano i potenziali danni eseguiti dagli attacchi sul browser. Alcune soluzioni proposte agli attacchi basati su browser tentano di isolare completamente il Web browser da altre applicazioni e dati. Sfortunatamente, l'isolamento completo del browser ha un impatto significativo sull'esperienza di esplorazione dell'utente, ad esempio la possibilità di avviare automaticamente programmi per leggere vari tipi di file, ad esempio .pdf file. L'isolamento completo impedisce le esperienze utente comuni, ad esempio il caricamento di immagini nei siti Web, se il browser non dispone dell'accesso in lettura ai file di dati utente.

L'obiettivo di Internet Explorer in modalità protetta è ridurre i diritti di accesso disponibili per il processo, per limitare la capacità di un exploit in esecuzione nel browser per creare file di avvio indesiderati, modificare i file di dati utente, apportare modifiche fastidiose alle impostazioni di configurazione del browser o guidare il comportamento di altri programmi in esecuzione sul desktop. Tutto il codice in esecuzione in Modalità protetta Internet Explorer in un processo di bassa integrità è considerato non attendibile. Il livello di integrità medio predefinito per gli oggetti impedisce al browser di aprire qualsiasi directory, file o chiavi del Registro di sistema per l'accesso in scrittura, ad eccezione di quelli etichettati in modo esplicito a bassa integrità. UIPI impedisce al codice del browser di integrità bassa di inviare messaggi di finestra potenzialmente dannosi ad altre applicazioni in esecuzione sul desktop.

Il browser in esecuzione a bassa integrità ha accesso in lettura ai file di dati utente. Poiché il meccanismo di integrità di Windows non applica la riservatezza, non limita il flusso di informazioni. Il processo può anche usare le credenziali predefinite per avviare le connessioni di rete, ad esempio a un server proxy di rete (necessario quando l'autenticazione è necessaria per connettersi a Internet) o a un dispositivo stampante di rete per stampare una pagina Web. Il processo di bassa integrità può anche avviare una connessione autenticata ad altri servizi di rete e quindi autenticare tali server come utente corrente.

La progettazione dell'applicazione di Internet Explorer richiedeva una ristrutturazione da eseguire in modalità protetta a basso livello di integrità. La modifica primaria è che alcune operazioni del programma sono state spostate in un processo separato, noto come processo broker, in esecuzione a un livello di integrità medio. Il processo broker viene avviato a livello di integrità medio quando l'utente fa clic sull'icona di Internet Explorer o su un collegamento URL. Il broker controlla i criteri URL e zona e avvia un processo figlio, iexplore.exe, a basso livello di integrità per rendere la connessione Internet e eseguire il rendering della pagina Web. L'immagine seguente da Esplora processi mostra il processo ieuser.exe, il processo broker a livello di integrità medio e il processo di iexplore.exe a basso livello di integrità.

Figura 8 Processi di Internet Explorer in modalità protetta

Tutte le esperienze utente nel Web browser Internet Explorer sono eseguite all'interno del processo di integrità basso. Alcune operazioni specifiche, ad esempio la modifica delle impostazioni opzioni Internet o la finestra di dialogo Salva come file , vengono gestite dal processo broker. Se l'URL è un sito attendibile, in base alle impostazioni dei criteri di zona predefinite, il processo broker avvia un'istanza diversa di iexplore.exe in un processo di integrità media. Tutte le estensioni del browser e i controlli ActiveX vengono eseguiti all'interno del processo di integrità ridotta. Questo ha il vantaggio che qualsiasi potenziale exploit per un'estensione del browser è in esecuzione anche a bassa integrità.

Internet Explorer è leggermente più complicato di altre applicazioni perché ospita estensioni del browser e controlli ActiveX che non sono sviluppati da Microsoft, avvia altre applicazioni basate su tipi mime per estensioni di file diverse e integra la finestra client da applicazioni diverse all'interno di un singolo frame di finestra padre. Gli utenti scaricano anche software da Internet tramite il browser e avviano immediatamente un pacchetto applicazione o un programma di installazione dell'applicazione. Molte di queste operazioni richiedono assistenza dal processo broker a un livello di integrità superiore per mediare tramite l'utente per confermare un'operazione. In caso contrario, il codice in esecuzione nel browser potrebbe installare software dannoso nel sistema e provare a modificare o eliminare i dati dell'utente. L'installazione dei controlli ActiveX viene eseguita usando un'attività con privilegi elevati avviata dall'interfaccia utente che richiede diritti di amministratore.

Poiché Internet Explorer supporta un'ampia gamma di interazioni utente tra il browser e altre applicazioni locali (copia e incolla è un esempio ovvio), il meccanismo di integrità che limita l'accesso in scrittura agli oggetti non è un meccanismo di isolamento completo. La progettazione di Internet Explorer in modalità protetta ha esaminato molte interazioni diverse e in particolare ha personalizzato il comportamento del broker e dei diritti bassi iexplore.exe processo per mantenere la funzionalità con privilegi minimi, fornendo un'esperienza utente altamente collaborativa.

Per altre informazioni su Internet Explorer in modalità protetta, vedere Informazioni e utilizzo in modalità protetta Internet Explorer (https://go.microsoft.com/fwlink/?LinkId=90931).