Strategia di sicurezza di WPF - Sicurezza della piattaforma
Oltre a fornire molteplici servizi di sicurezza, Windows Presentation Foundation (WPF) sfrutta le funzionalità di sicurezza della piattaforma sottostante, ovvero del sistema operativo, di CLRe di Internet Explorer. Questi livelli forniscono a WPF un modello di sicurezza solido per evitare vulnerabilità, come illustrato di seguito:
Nella parte rimanente di questo argomento verranno illustrate le funzionalità specifiche di questi livelli che riguardano in modo specifico WPF.
Nel presente argomento sono contenute le seguenti sezioni.
- Sicurezza del sistemi operativo
- Sicurezza di Common Language Runtime (CLR)
- Sicurezza di Microsoft Internet Explorer
- Argomenti correlati
Sicurezza del sistemi operativo
Il livello minimo di sistema operativo richiesto daWPF è Windows XP SP2. In Windows XP SP2 sono disponibili numerose funzionalità di sicurezza che insieme costituiscono il modello di sicurezza di base di tutte le applicazioni Windows, incluse quelle compilate con WPF. Windows Vista incorpora, ed estende, le funzionalità di sicurezza di WPF. In questo argomento vengono illustrate queste funzionalità di sicurezza importanti per WPF e viene descritto come si integrano in WPF per formare un solido sistema di difesa.
Microsoft Windows XP Service Pack 2 (SP2)
Oltre a fornire una revisione generale e un approfondimento su Windows, in questo argomento verranno illustrate tre funzionalità chiave disponibili in Windows XP SP2:
Compilazione /GS
Microsoft Windows Update.
Compilazione /GS
Windows XP SP2 offre protezione ricompilando molte librerie di sistema principali, incluse tutte le dipendenze WPF quali CLR, per limitare i sovraccarichi del buffer. A tale scopo, è necessario utilizzare il parametro /GS con il compilatore da riga di comando di C/C++. Anche se i sovraccarichi del buffer dovrebbero essere evitati in modo esplicito, la compilazione /GS rappresenta un esempio di difesa da potenziali vulnerabilità create accidentalmente o intenzionalmente.
Storicamente, i sovraccarichi del buffer sono stati la causa di molte violazioni della sicurezza ad impatto elevato. Si verifica un sovraccarico del buffer quando un utente malintenzionato sfrutta una vulnerabilità del codice per introdurre codice dannoso che viene scritto oltre i limiti di un buffer. Il malintenzionato sarà così in grado di assumere il controllo del processo in cui è eseguito il codice sovrascrivendo l'indirizzo di ritorno di una funzione per indurre l'esecuzione del proprio codice dannoso. Il risultato sarà l'esecuzione di codice arbitrario attraverso codice dannoso con gli stessi privilegi del processo di cui è stato assunto il controllo.
A un livello elevato, il flag del compilatore /GS protegge da alcuni sovraccarichi del buffer potenziali introducendo uno speciale cookie di sicurezza per proteggere l'indirizzo di ritorno di una funzione con buffer di stringhe locali. Dopo la restituzione di un risultato da parte di una funzione, il cookie di sicurezza viene confrontato con il suo valore precedente. Se il valore è cambiato, è possibile che si sia verificato un sovraccarico del buffer e che il processo venga interrotto con una condizione di errore. L'interruzione del processo impedisce l'esecuzione di codice potenzialmente dannoso. Per ulteriori dettagli, vedere /GS (Controllo di sicurezza buffer).
WPF è compilato con il flag /GS per aggiungere un ulteriore livello di difesa alle applicazioni WPF.
Miglioramenti a Microsoft Windows Update
Anche Microsoft Windows Update è stato migliorato in Windows XP SP2 per semplificare il processo di download e installazione degli aggiornamenti. Queste modifiche migliorano in modo sostanziale la sicurezza per i clienti WPF in quanto contribuiscono a garantire che i sistemi siano sempre aggiornati, in modo specifico per quanto riguarda la sicurezza.
Windows Vista
Gli utenti WPF in Windows Vista trarranno numerosi vantaggi dai miglioramenti apportati alla sicurezza del sistema operativo, inclusi l'accesso utente con privilegi minimi, i controlli di integrità del codice e l'isolamento dei privilegi.
Controllo dell'account utente
Gli utenti di Windows accedono sempre più spesso con privilegi di amministratore perché per eseguire e/o installare molte applicazioni sono oggi necessari questi privilegi. La scrittura delle impostazioni predefinite di un'applicazione nel Registro di sistema ne è un esempio.
Utilizzare i privilegi di amministratore per eseguire un'applicazione significa che l'applicazione viene eseguita da processi a cui sono stati concessi i privilegi di amministratore. Ciò significa che eventuale codice dannoso che assume il controllo di un processo eseguito con privilegi di amministratore erediterà automaticamente quei privilegi, incluso l'accesso a risorse di sistema critiche.
Un modo per proteggersi da un tale rischio della sicurezza consiste nell'eseguire le applicazioni con la quantità minima richiesta di privilegi. Questo concetto è noto come il principio dei privilegi minimi ed è una funzionalità chiave del sistema operativo Windows Vista. Questa funzionalità è nota come Controllo dell'account utente (UAC, User Account Control) ed è utilizzata da Windows Vista in due modi principali:
Per eseguire la maggior parte delle applicazioni con privilegi UAC per impostazione predefinita, anche se l'utente è un amministratore; solo le applicazioni che richiedono i privilegi di amministratore verranno eseguite con i privilegi di amministratore. Per essere eseguite con i privilegi di amministratore, le applicazioni devono essere contrassegnate in modo esplicito nel manifesto dell'applicazione o come voce nei criteri di sicurezza.
Per fornire soluzioni di compatibilità come la virtualizzazione. Ad esempio, molte applicazioni tentano di scrivere in percorsi limitati come C:\Programmi. Per le applicazioni eseguite in base al principio UAC, esiste un percorso alternativo specifico di ogni utente in cui è possibile scrivere senza disporre dei privilegi di amministratore. Per le applicazioni eseguite in base al principio UAC, il percorso C:\Programmi viene virtualizzato affinché le applicazioni scrivano direttamente nel percorso alternativo specifico di ogni utente. Questa soluzione di compatibilità consente di eseguire molte applicazioni che in passato non sarebbe stato possibile eseguire in base al principio UAC.
Controlli di integrità del codice
Windows Vista incorpora controlli di integrità del codice più accurati per impedire che codice dannoso venga introdotto nei file di sistema o nel kernel in fase di esecuzione/caricamento. Questo va oltre la protezione dei file di sistema.
Processo con diritti limitati per le applicazioni ospitate nei browser
Le applicazioni WPF ospitate nei browser vengono eseguite nel sandbox dell'area Internet. L'integrazione di WPF con Microsoft Internet Explorer migliora ulteriormente questa protezione con supporto aggiuntivo.
Internet Explorer 6 Service Pack 2 e Internet Explorer 7 per XP
Per fornire funzionalità di sicurezza ancora più avanzate, WPF sfrutta il modello di sicurezza del sistema operativo limitando i privilegi del processo per le XAML browser applications (XBAPs). Prima che venga avviata un'applicazione WPF ospitata da un browser, il sistema operativo crea un processo host che rimuove i privilegi non necessari dal token del processo. Alcuni esempi di privilegi rimossi includono le autorizzazioni ad arrestare il computer dell'utente, a caricare i driver e ad accedere in lettura a tutti i file nel computer.
Internet Explorer 7 per Vista
In Windows Internet Explorer 7, le applicazioni WPF vengono eseguite in modalità protetta. In modo specifico, le XAML browser applications (XBAPs) vengono eseguite con integrità di livello medio.
Livello di difesa
Poiché le XAML browser applications (XBAPs) vengono in genere eseguite in un sandbox in base al set di autorizzazioni dell'area Internet, la rimozione di questi privilegi non danneggia, da un punto di vista della compatibilità, le XAML browser applications (XBAPs). Viene invece creato un livello di difesa aggiuntivo; se un'applicazione eseguita in un sandbox è in grado di sfruttare altri livelli e di assumere il controllo del processo, il processo disporrà comunque unicamente di privilegi limitati.
Vedere Utilizzo di un account utente con privilegi minimi (la pagina potrebbe essere in inglese).
Sicurezza di Common Language Runtime (CLR)
common language runtime (CLR) offre numerose funzionalità di sicurezza tra cui convalida e verifica, Code Access Security (CAS)e metodologia correlata alla sicurezza.
Convalida e verifica
Per garantire l'integrità e l'isolamento degli assembly, CLR si basa su un processo di convalida. La convalida di CLR garantisce che gli assembly vengano isolati convalidando il loro formato di file eseguibile di tipo PE (Portable Executable) per indirizzi che fanno riferimento all'esterno dell'assembly. La convalida di CLR convalida inoltre l'integrità dei metadati incorporati in un assembly.
Per assicurare l'indipendenza dai tipi, impedire che si verifichino i problemi di sicurezza più comuni, ad esempio i sovraccarichi del buffer, e utilizzare i sandbox attraverso l'isolamento del processo secondario, la sicurezza CLR è basata sul concetto di verifica.
Le applicazioni gestite vengono compilate in Microsoft Intermediate Language (MSIL). Quando vengono eseguiti metodi in un'applicazione gestita, il relativo MSIL viene compilato in codice nativo tramite la compilazione JIT. La compilazione JIT include un processo di verifica riguardante molte regole di sicurezza e affidabilità per garantire che il codice non:
violi contratti di tipo
causi sovraccarichi del buffer
acceda alla memoria in modo eccessivo.
Il codice gestito che non rispetta le regole di verifica non verrà eseguito, a meno che non venga considerato codice attendibile.
I vantaggi derivanti dall'utilizzo di codice verificabile sono i motivi principali per cui WPF viene compilato in .NET Framework. Pertanto, più esteso sarà l'utilizzo di codice verificabile, minori saranno le possibilità di sfruttare le vulnerabilità del sistema.
Sicurezza per l'accesso al codice
Un computer client espone un'ampia varietà di risorse a cui un'applicazione gestita ha accesso, ad esempio il file system, il Registro di sistema, i servizi di stampa, l'interfaccia utente, la reflection e le variabili di ambiente. Per poter accedere a queste risorse in un computer client, un'applicazione deve ottenere la necessaria autorizzazione Code Access Security (CAS) .NET Framework. Un'autorizzazione in CAS è una sottoclasse di CodeAccessPermission; CAS implementa una sottoclasse per ogni risorsa a cui possono accedere le applicazioni gestite.
Le autorizzazioni concesse a un'applicazione gestita da CAS all'avvio vengono collettivamente definite set di autorizzazioni e tale set è determinato dalle evidenze fornite dall'applicazione. Per le applicazioni WPF, le evidenze fornite sono il percorso, o area, da cui vengono avviate. CAS identifica le aree seguenti:
Risorse del computer. Applicazioni avviate dal computer client (completamente attendibili).
Intranet locale. Applicazioni avviate da Intranet (parzialmente attendibili).
Internet. Applicazioni avviate da Internet (meno attendibili).
Siti attendibili. Applicazioni identificate da un utente come attendibili (meno attendibili).
Siti non attendibili. Applicazioni identificate da un utente come non attendibili (non attendibili).
Per ognuna di queste zone, CAS fornisce un set di autorizzazioni predefinito che include le autorizzazioni corrispondenti al livello di attendibilità associato a ognuna. tra cui:
FullTrust. Per le applicazioni avviate dall'area Risorse del computer. Sono concesse tutte le possibili autorizzazioni.
LocalIntranet. Per le applicazioni avviate dall'area Intranet locale. Viene concesso un sottoinsieme di autorizzazioni per fornire un accesso moderato alle risorse di un computer client, tra cui spazio di archiviazione isolato, accesso dell'interfaccia utente senza restrizioni, finestre di dialogo di file senza restrizioni, reflection limitata, accesso limitato alle variabili di ambiente. Le autorizzazioni per risorse critiche come il Registro di sistema non vengono concesse.
Internet. Per le applicazioni avviate dall'area Internet o Siti attendibili. Viene concesso un sottoinsieme di autorizzazioni per fornire accesso limitato alle risorse di un computer client, tra cui spazio di archiviazione isolato, solo apertura di file e interfaccia utente limitata. Sostanzialmente, questo set di autorizzazioni isola le applicazioni dal computer client.
Alle applicazioni identificate come provenienti dall'area Siti non attendibili CAS non concede alcuna autorizzazione. Di conseguenza, non dispongono di alcun set di autorizzazioni predefinito.
Di seguito viene illustrata la relazione tra aree, set di autorizzazioni, autorizzazioni e risorse.
Le restrizioni del sandbox di sicurezza dell'area Internet sono ugualmente applicabili a qualsiasi codice che un'applicazione XBAP importa da una libreria di sistema, incluso WPF. In questo modo, ogni frammento di codice viene bloccato, anche WPF. Sfortunatamente, per poter essere eseguita, un'applicazione XBAP deve eseguire funzionalità che richiedono molte più autorizzazioni rispetto a quelle abilitate dal sandbox di sicurezza dell'area Internet.
Si consideri un'applicazione XBAP contenente la seguente pagina:
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()
' Perform operation that uses the assert
' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()
FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();
// Perform operation that uses the assert
// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Per eseguire questa applicazione XBAP, il codice WPF sottostante deve eseguire molte più funzionalità di quelle disponibili all'applicazione XBAP chiamante, tra cui:
Creazione di un handle di finestra (hWnd) per il rendering
Invio di messaggi
Caricamento del tipo di carattere Tahoma
Da un punto di vista della sicurezza, consentire l'accesso diretto a queste operazioni dall'applicazione eseguita in un sandbox avrebbe conseguenze devastanti.
Fortunatamente, WPF affronta questa situazione consentendo di eseguire queste operazioni con privilegi elevati per conto dell'applicazione eseguita in un sandbox. Mentre tutte le operazioni WPF vengono controllate a fronte delle autorizzazioni di sicurezza limitate dell'area Internet del dominio dell'applicazione XBAP, a WPF (come altre librerie di sistema) viene concesso un set di autorizzazioni contenente tutte le autorizzazioni possibili.
È quindi necessario che WPF riceva privilegi elevati, ma è altresì fondamentale impedire che tali privilegi vengano determinati dal set di autorizzazioni dell'area Internet del dominio dell'applicazione host.
A questo scopo, WPF utilizza il metodo Assert di un'autorizzazione. Nel codice riportato di seguito viene illustrata questa operazione.
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()
' Perform operation that uses the assert
' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()
FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();
// Perform operation that uses the assert
// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Assert impedisce che le autorizzazioni illimitate richieste da WPF vengano limitate dalle autorizzazioni dell'area Internet dell'applicazione XBAP.
Da un punto di vista della piattaforma, WPF è responsabile dell'utilizzo corretto di Assert; un utilizzo non corretto di Assert potrebbe consentire a codice dannoso di elevare i privilegi. Di conseguenza, è fondamentale chiamare Assert solo quando realmente necessario e assicurarsi che le restrizioni del sandbox rimangano inalterate. Ad esempio, al codice sandbox non è consentita l'apertura di file casuali, ma è consentito l'utilizzo dei tipi di carattere. WPF consente alle applicazioni sandbox di utilizzare la funzionalità dei tipi di carattere chiamando Assert e a WPF di leggere i file che contengono tali caratteri per conto dell'applicazione sandbox.
Distribuzione ClickOnce
ClickOnce è una tecnologia di distribuzione completa inclusa in .NET Framework e integrata in Microsoft Visual Studio. Per informazioni dettagliate, vedere Cenni preliminari sulla distribuzione ClickOnce. Le applicazioni WPF autonome possono essere distribuite tramite ClickOnce, mentre le applicazioni ospitate da un browser devono essere distribuite con ClickOnce.
Alle applicazioni distribuite tramite ClickOnce viene fornito un ulteriore livello di sicurezza su Code Access Security (CAS); sostanzialmente, le applicazioni distribuite tramite ClickOnce richiedono le autorizzazioni di cui hanno bisogno. A tali applicazioni vengono concesse solo quelle autorizzazioni se non superano l'insieme di autorizzazioni dell'area da cui vengono distribuite. Riducendo il set di autorizzazioni solo a quelle necessarie, anche se inferiori a quelle fornite dal set di autorizzazioni dell'area di avvio, il numero di risorse a cui l'applicazione ha accesso viene ridotto al minimo. Di conseguenza, se si perde il controllo dell'applicazione, le vulnerabilità del computer client sono ridotte.
Metodologia correlata alla sicurezza
Il codice WPF che utilizza autorizzazioni per abilitare il sandbox dell'area Internet per le applicazioni XBAP deve essere mantenuto al livello più elevato possibile di controllo di sicurezza. A questo scopo, .NET Framework fornisce un nuovo supporto per la gestione del codice che eleva i privilegi. In modo specifico, CLR consente di identificare il codice che eleva i privilegi e di contrassegnarlo con SecurityCriticalAttribute; qualsiasi codice non contrassegnato con SecurityCriticalAttribute diventa trasparente utilizzando questa metodologia. Al contrario, il codice gestito non contrassegnato con SecurityCriticalAttribute non può elevare i privilegi.
La Metodologia correlata alla sicurezza consente di organizzare il codice WPF che eleva i privilegi nel kernel di sicurezza critico, mentre il resto diventa trasparente. Isolando il codice di sicurezza critico si consente al team di progettazione di WPF di rivolgere l'attenzione al controllo del codice sorgente e all'analisi della sicurezza nel kernel di sicurezza critico, oltre alle procedura di sicurezza standard (vedere Strategia di sicurezza WPF - Progettazione di sicurezza).
Si noti che .NET Framework consente al codice attendibile di estendere il sandbox dell'area Internet delle applicazioni XBAP consentendo agli sviluppatori di scrivere assembly gestiti contrassegnati con AllowPartiallyTrustedCallersAttribute (APTCA) e distribuiti nella Global Assembly Cache (GAC) dell'utente. Contrassegnare un assembly con APTCA è un'operazione estremamente delicata dal punto di vista della sicurezza in quanto consente a qualsiasi codice di chiamare quell'assembly, incluso codice dannoso proveniente da Internet. È necessario prestare molta attenzione e seguire le procedure consigliate e gli utenti devono scegliere di considerare attendibile un programma software per poterlo installare.
Sicurezza di Microsoft Internet Explorer
Oltre a ridurre i problemi di sicurezza e a semplificare la configurazione della sicurezza, Microsoft Internet Explorer 6 (SP2) contiene molte funzionalità che migliorano la sicurezza degli utenti di XAML browser applications (XBAPs). Tramite queste funzionalità si tenta di fornire agli utenti un maggiore controllo sulla loro esperienza di esplorazione.
Prima di IE6 SP2, gli utenti potevano riscontrare le situazioni elencate di seguito:
Finestre popup casuali.
Reindirizzamento di script non chiaro.
Numerose finestre di dialogo di sicurezza in alcuni siti Web.
In alcuni casi, i siti Web non attendibili provano a ingannare gli utenti effettuando lo spoofing dell'user interface (UI) di installazione o visualizzando ripetutamente una finestra di dialogo di installazione di Microsoft ActiveX, anche se l'utente la ha annullata. Tramite queste tecniche, è possibile che un numero significativo di utenti siano stati indotti a prendere decisioni che abbiano causato l'installazione di applicazioni spyware.
IE6 SP2 include molte funzionalità per contenere questi tipi di problemi che vertono sul concetto di inizializzazione da parte dell'utente. IE6 SP2 è in grado di rilevare quando un utente ha fatto clic su un collegamento o un elemento della pagina prima di un'azione (inizializzazione da parte dell'utente) ed espone un comportamento diverso rispetto a quando un'azione simile viene attivata tramite script in una pagina. Ad esempio, IE6 SP2 incorpora un Blocco popup per rilevare quando un utente fa clic su un pulsante prima che la pagina crei un popup. In questo modo, IE6 SP2 consente i popup più innocui, mentre blocca quelli non richiesti né desiderati dagli utenti. I popup bloccati vengono intercettati sotto la nuova Barra informazioniche consente all'utente di eseguire manualmente l'override del blocco e di visualizzare il popup.
La stessa logica di inizializzazione da parte dell'utente viene applicata alle richieste di sicurezza Apri/Salva. Le finestre di dialogo di installazione di ActiveX vengono sempre intercettate sotto la Barra informazioni, a meno che non rappresentino un aggiornamento da un controllo installato in precedenza. Queste misure consentono agli utenti un'esperienza più controllata e sicura, perché sono protetti da quei siti che con l'inganno inducono a installare software indesiderato o dannoso.
Queste funzionalità proteggono inoltre i clienti che utilizzano IE6 SP2 per esplorare siti Web che consentono loro di scaricare e installare applicazioni WPF. In particolare, IE6 SP2 consente una migliore esperienza che riduce le possibilità di installare applicazioni dannose indipendentemente dalla tecnologia utilizzata per compilarle, incluso WPF. WPF migliora ulteriormente la sicurezza poiché si basa sull'utilizzo di ClickOnce per facilitare il download di applicazioni da Internet. Poiché le XAML browser applications (XBAPs) vengono eseguite all'interno di un sandbox di sicurezza dell'area Internet, possono essere avviate senza problemi. Al contrario, l'esecuzione delle applicazioni WPF autonome richiede attendibilità completa. Per queste applicazioni, ClickOnce visualizza una finestra di dialogo di sicurezza durante il processo di avvio per notificare l'utilizzo dei requisiti di sicurezza aggiuntivi dell'applicazione. Questa operazione, che deve essere inizializzata dall'utente, verrà determinata dalla logica inizializzata dall'utente e potrà essere annullata.
Internet Explorer 7 incorpora ed estende le funzionalità di sicurezza di IE6 SP2 in un impegno costante rivolto alla sicurezza.
Vedere anche
Concetti
Sicurezza dall'accesso di codice
Sicurezza con attendibilità parziale in WPF
Strategia di sicurezza WPF - Progettazione di sicurezza
Altre risorse
Informazioni sulla sicurezza in Microsoft Internet Explorer 6 in Windows XP SP2
Informazioni e utilizzo della modalità protetta di Internet Explorer