Strategia di sicurezza di WPF - Sicurezza della piattaforma

Mentre Windows Presentation Foundation (WPF) offre un'ampia gamma di servizi di sicurezza, sfrutta anche le funzionalità di sicurezza della piattaforma sottostante, che include il sistema operativo, CLR e Internet Explorer. Questi livelli si combinano per fornire a WPF un modello di sicurezza avanzato e di difesa avanzata che tenta di evitare un singolo punto di guasto, come illustrato nella figura seguente:

Diagram that shows the WPF security model.

Nella parte restante di questo argomento vengono illustrate le funzionalità di ognuno di questi livelli relativi a WPF in modo specifico.

Sicurezza del sistema operativo

Il core di Windows offre diverse funzionalità di sicurezza che costituiscono la base di sicurezza per tutte le applicazioni Windows, incluse quelle create con WPF. Questo argomento illustra l'ampiezza di queste funzionalità di sicurezza importanti per WPF, nonché il modo in cui WPF si integra con essi per fornire ulteriore difesa approfondita.

Microsoft Windows XP Service Pack 2 (SP2)

Oltre a una revisione generale e al rafforzamento di Windows, sono disponibili tre funzionalità chiave di Windows XP SP2 che verranno illustrate in questo argomento:

  • Compilazione /GS

  • Microsoft Windows Update.

Compilazione /GS

Windows XP SP2 offre protezione ricompilando molte librerie di sistema principali, incluse tutte le dipendenze WPF, ad esempio CLR, per ridurre i sovraccarichi del buffer. A tale scopo, è necessario usare 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.

In passato i sovraccarichi del buffer sono stati causa di molte violazioni della sicurezza a 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 il codice è in esecuzione, 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 livello generale, il flag del compilatore -GS protegge da alcuni potenziali sovraccarichi del buffer inserendo un cookie di sicurezza speciale per proteggere l'indirizzo restituito di una funzione con buffer di stringa 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 altri dettagli, vedere -GS (Controllo sicurezza buffer).

WPF viene compilato con il flag /GS per aggiungere un altro livello di difesa alle applicazioni WPF.

Windows Vista

Gli utenti WPF in Windows Vista trarranno vantaggio dai miglioramenti di sicurezza aggiuntivi del sistema operativo, tra cui "Accesso utente con privilegi minimi", controlli di integrità del codice e isolamento dei privilegi.

Controllo dell'account utente

Attualmente, gli utenti di Windows tendono a essere eseguiti con privilegi di amministratore perché molte applicazioni li richiedono per l'installazione o l'esecuzione o entrambi. La scrittura delle impostazioni predefinite di un'applicazione nel Registro di sistema ne è un esempio.

Usare 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. In termini di sicurezza, 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 una tale minaccia per la sicurezza consiste nell'eseguire le applicazioni con la quantità minima necessaria di privilegi. Questo è noto come principio dei privilegi minimi ed è una funzionalità di base del sistema operativo Windows. Questa funzionalità è denominata Controllo account utente e viene usata da Controllo dell'account utente di Windows 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. Molte applicazioni, ad esempio, provano a scrivere in percorsi limitati, come C:\Programmi. Per le applicazioni eseguite in ambito UAC, esiste un percorso alternativo specifico di ogni utente in cui è possibile scrivere senza disporre dei privilegi di amministratore. Per le applicazioni eseguite in ambito 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ù approfonditi per impedire l'inserimento di codice dannoso nei file di sistema o nel kernel in fase di caricamento/esecuzione. Questo va oltre la protezione dei file di sistema.

Processo con diritti limitati per le applicazioni ospitate nei browser

Le applicazioni WPF ospitate nel browser sono eseguite nella sandbox dell'area Internet. L'integrazione wpf con Microsoft Internet Explorer estende questa protezione con supporto aggiuntivo.

Avviso

Gli XBAP richiedono il funzionamento dei browser legacy, ad esempio Internet Explorer e Firefox. Queste versioni precedenti del browser sono in genere non supportate in Windows 10 e Windows 11. I browser moderni non supportano più la tecnologia necessaria per le app XBAP a causa di rischi per la sicurezza. I plug-in che abilitano XBAP non sono più supportati.

Poiché le applicazioni browser XAML (XBAP) sono in genere in modalità sandbox dal set di autorizzazioni dell'area Internet, la rimozione di questi privilegi non danneggia le applicazioni browser XAML (XBAP) dal punto di vista della compatibilità. Viene invece creato un livello di difesa aggiuntivo; se un'applicazione eseguita in una sandbox è in grado di sfruttare altri livelli e di assumere il controllo del processo, il processo disporrà comunque unicamente di privilegi limitati.

Vedere Using a Least-Privileged User Account (Uso di un account utente con privilegi minimi).

Sicurezza di Common Language Runtime (CLR)

Common Language Runtime (CLR) offre numerosi vantaggi principali per la sicurezza, tra cui convalida e verifica, sicurezza dall'accesso al codice e metodologia critica per la sicurezza.

Convalida e verifica

Per garantire l'isolamento e l'integrità degli assembly, CLR usa un processo di convalida. La convalida CLR garantisce che gli assembly siano isolati convalidando il formato di file PE (Portable Executable) per gli indirizzi che puntano all'esterno dell'assembly. La convalida CLR convalida anche l'integrità dei metadati incorporati all'interno di un assembly.

Per garantire la sicurezza dei tipi, prevenire problemi di sicurezza comuni (ad esempio sovraccarichi del buffer) e abilitare la sandboxing tramite l'isolamento del processo secondario, la sicurezza CLR usa il 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

  • non causi sovraccarichi del buffer

  • non acceda alla memoria in modo irregolare o eccessivo.

Il codice gestito che non rispetta le regole di verifica non verrà eseguito, a meno che non venga considerato codice attendibile.

Il vantaggio del codice verificabile è un motivo fondamentale per cui WPF si basa su .NET Framework. Pertanto, più esteso sarà l'uso di codice verificabile, minori saranno le possibilità di sfruttare le vulnerabilità del sistema.

Sicurezza dall'accesso di 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. Prima che un'applicazione gestita possa accedere a una qualsiasi delle risorse in un computer client, deve disporre dell'autorizzazione .NET Framework per farlo. Un'autorizzazione nel sito di amministrazione centrale è una sottoclasse CodeAccessPermissiondi ; CAS implementa una sottoclasse per ogni risorsa a cui le applicazioni gestite possono accedere.

Il set di autorizzazioni concesse da un'applicazione gestita dal sito di amministrazione centrale all'avvio dell'esecuzione è noto come set di autorizzazioni ed è determinato dall'evidenza fornita dall'applicazione. Per le applicazioni WPF, l'evidenza fornita è la posizione o la zona da cui vengono avviate le applicazioni. CAS identifica le zone 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, il sito di amministrazione centrale fornisce un set di autorizzazioni predefinito che include le autorizzazioni che corrispondono al livello di attendibilità associato a ognuna di esse. tra cui:

  • FullTrust. Per le applicazioni avviate dall'area Risorse del computer. Sono concesse tutte le autorizzazioni possibili.

  • 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 memorizzazione 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 memorizzazione isolato, solo apertura di file e interfaccia utente limitata. In pratica, questo set di autorizzazioni isola le applicazioni dal computer client.

Alle applicazioni identificate come provenienti dall'area Siti non attendibili non vengono concesse autorizzazioni dal sito di amministrazione centrale. Di conseguenza, queste non dispongono di alcun set di autorizzazioni predefinito.

La figura seguente illustra la relazione tra zone, set di autorizzazioni, autorizzazioni e risorse:

Diagram that shows CAS permission sets.

Le restrizioni della sandbox di sicurezza dell'area Internet si applicano allo stesso modo a qualsiasi codice importato da un XBAP da una libreria di sistema, incluso WPF. In questo modo si garantisce che ogni parte del codice sia bloccata, anche WPF. Sfortunatamente, per poter essere eseguito, un XBAP deve eseguire funzionalità che richiedono più autorizzazioni rispetto a quelle abilitate dalla sandbox di sicurezza dell'area Internet.

Avviso

Gli XBAP richiedono il funzionamento dei browser legacy, ad esempio Internet Explorer e Firefox. Queste versioni precedenti del browser sono in genere non supportate in Windows 10 e Windows 11. I browser moderni non supportano più la tecnologia necessaria per le app XBAP a causa di rischi per la sicurezza. I plug-in che abilitano XBAP non sono più supportati.

Si consideri un'applicazione XBAP che include la pagina seguente:

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Per eseguire questo XBAP, il codice WPF sottostante deve eseguire più funzionalità di quanto sia disponibile per il 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 una sandbox avrebbe conseguenze devastanti.

Fortunatamente, WPF soddisfa questa situazione consentendo l'esecuzione di queste operazioni con privilegi elevati per conto dell'applicazione in modalità sandbox. Anche se tutte le operazioni WPF vengono controllate in base alle autorizzazioni limitate di sicurezza dell'area Internet del dominio applicazione di XBAP, a WPF (come con altre librerie di sistema) viene concesso un set di autorizzazioni che include tutte le autorizzazioni possibili.

Ciò richiede che WPF riceva privilegi elevati impedendo al contempo che tali privilegi vengano regolati dal set di autorizzazioni dell'area Internet del dominio applicazione host.

WPF esegue questa operazione usando il metodo Assert di un'autorizzazione. Nel codice riportato di seguito viene illustrata questa operazione.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

L'asserzione impedisce essenzialmente alle autorizzazioni illimitate richieste da WPF di essere limitate dalle autorizzazioni dell'area Internet di XBAP.

Dal punto di vista della piattaforma, WPF è responsabile dell'uso corretto di Assert . Un uso non corretto di Assert potrebbe consentire a codice dannoso di elevare privilegi. Di conseguenza, è fondamentale chiamare Assert solo quando realmente necessario e assicurarsi che le restrizioni della sandbox rimangano inalterate. Ad esempio, al codice sandbox non è consentita l'apertura di file casuali, ma è consentito l'uso dei tipi di carattere. WPF consente alle applicazioni in modalità sandbox di usare la funzionalità dei tipi di carattere chiamando Assert e per WPF di leggere i file noti per contenere tali tipi di carattere per conto dell'applicazione in modalità sandbox.

distribuzione ClickOnce

ClickOnce è una tecnologia di distribuzione completa inclusa in .NET Framework e si integra con Visual Studio (vedere Sicurezza e distribuzione ClickOnce per informazioni dettagliate). Le applicazioni WPF autonome possono essere distribuite tramite ClickOnce, mentre le applicazioni ospitate dal browser devono essere distribuite con ClickOnce.

Alle applicazioni distribuite tramite ClickOnce viene assegnato un livello di sicurezza aggiuntivo rispetto alla sicurezza dall'accesso di codice (CAS); essenzialmente, le applicazioni distribuite ClickOnce richiedono le autorizzazioni necessarie. 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 sono inferiori a quelle fornite dal set di autorizzazioni dell'area di avvio, il numero di risorse a cui l'applicazione ha accesso viene ridotto a un minimo. Di conseguenza, se si perde il controllo dell'applicazione, le vulnerabilità del computer client saranno ridotte.

Metodologia critica per la sicurezza

Il codice WPF che usa le autorizzazioni per abilitare la sandbox dell'area Internet per le applicazioni XBAP deve essere mantenuto al massimo grado possibile di controllo e controllo della sicurezza. Per facilitare questo requisito, .NET Framework offre un nuovo supporto per la gestione del codice che eleva i privilegi. In particolare, CLR consente di identificare il codice che eleva i privilegi e contrassegnarlo con ; SecurityCriticalAttributequalsiasi codice non contrassegnato con SecurityCriticalAttribute diventa trasparente usando questa metodologia. Viceversa, il codice gestito non contrassegnato con SecurityCriticalAttribute non può elevare i privilegi.

Avviso

Gli XBAP richiedono il funzionamento dei browser legacy, ad esempio Internet Explorer e Firefox. Queste versioni precedenti del browser sono in genere non supportate in Windows 10 e Windows 11. I browser moderni non supportano più la tecnologia necessaria per le app XBAP a causa di rischi per la sicurezza. I plug-in che abilitano XBAP non sono più supportati.

La metodologia security-critical consente all'organizzazione del codice WPF che eleva i privilegi nel kernel critico per la sicurezza, con il resto trasparente. Isolare il codice critico per la sicurezza consente al team di progettazione WPF di concentrarsi su un'ulteriore analisi della sicurezza e sul controllo del codice sorgente sul kernel critico per la sicurezza sopra e oltre le procedure di sicurezza standard (vedere Strategia di sicurezza WPF - Progettazione della sicurezza).

Si noti che .NET Framework consente a codice attendibile di estendere la sandbox dell'area Internet 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 eventuale codice dannoso proveniente da Internet. È necessario esercitare massima cautela, 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 semplificare la configurazione della sicurezza, Microsoft Internet Explorer 6 (SP2) contiene diverse funzionalità che migliorano la sicurezza per gli utenti di applicazioni browser XAML (XBAP). Tramite queste funzionalità si tenta di fornire agli utenti un maggiore controllo sulla loro esperienza di esplorazione.

Avviso

Gli XBAP richiedono il funzionamento dei browser legacy, ad esempio Internet Explorer e Firefox. Queste versioni precedenti del browser sono in genere non supportate in Windows 10 e Windows 11. I browser moderni non supportano più la tecnologia necessaria per le app XBAP a causa di rischi per la sicurezza. I plug-in che abilitano XBAP non sono più supportati.

Prima di Internet Explorer 6 SP2, gli utenti potrebbero essere soggetti a uno dei seguenti elementi:

  • 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 tentano di ingannare gli utenti tramite lo spoofing dell'interfaccia utente di installazione (UI) o la visualizzazione ripetuta di una finestra di dialogo di installazione di Microsoft ActiveX, anche se l'utente potrebbe aver annullato. Tramite queste tecniche, è possibile che un numero significativo di utenti sia stato indotto a prendere decisioni che hanno causato l'installazione di applicazioni spyware.

Internet Explorer 6 SP2 include diverse funzionalità per attenuare questi tipi di problemi, che ruotano intorno al concetto di avvio dell'utente. Internet Explorer 6 SP2 rileva quando un utente ha fatto clic su un collegamento o un elemento di pagina prima di un'azione, nota come avvio dell'utente, e lo considera in modo diverso rispetto a quando un'azione simile viene invece attivata dallo script in una pagina. Ad esempio, Internet Explorer 6 SP2 incorpora un blocco popup che rileva quando un utente fa clic su un pulsante prima della creazione di un popup. Ciò consente a Internet Explorer 6 SP2 di consentire popup più innocui, impedendo al contempo i popup che gli utenti non chiedono né vogliono. I popup bloccati vengono intercettati sotto la nuovabarra informazioni che 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 ActiveX vengono sempre intrappolate nella barra delle 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 anche i clienti che usano Internet Explorer 6 SP2 per passare ai siti Web che consentono loro di scaricare e installare applicazioni WPF. In particolare, ciò è dovuto al fatto che Internet Explorer 6 SP2 offre un'esperienza utente migliore che riduce la possibilità per gli utenti di installare applicazioni dannose o deviare indipendentemente dalla tecnologia usata per compilarla, incluso WPF. WPF aggiunge a queste protezioni usando ClickOnce per facilitare il download delle applicazioni tramite Internet. Poiché le applicazioni browser XAML (XBAP) vengono eseguite all'interno di una sandbox di sicurezza dell'area Internet, possono essere avviate senza problemi. D'altra parte, le applicazioni WPF autonome richiedono l'attendibilità totale per l'esecuzione. Per queste applicazioni, ClickOnce visualizzerà una finestra di dialogo di sicurezza durante il processo di avvio per notificare l'uso dei requisiti di sicurezza aggiuntivi dell'applicazione. Questa operazione, che deve essere avviata dall'utente, verrà determinata dalla logica avviata dall'utente e potrà essere annullata.

Internet Explorer 7 incorpora ed estende le funzionalità di sicurezza di Internet Explorer 6 SP2 come parte di un impegno continuo per la sicurezza.

Vedi anche