Sicurezza dall'accesso di codice

Attualmente i sistemi di computer ad elevata connettività sono esposti con frequenza a codice di varia e spesso ignota origine. È possibile che del codice sia allegato a messaggi di posta elettronica, contenuto all'interno di documenti o scaricato da Internet. Molti sono gli utenti di computer che hanno sperimentato in prima persona gli effetti di codice mobile dannoso, tra cui virus e altri programmi distruttivi, in grado di danneggiare o eliminare i dati con notevoli perdite in termini economici e di tempo.

Secondo i più comuni meccanismi di sicurezza agli utenti vengono concessi i diritti in base alle relative credenziali di accesso, in genere consistenti in una password, e viene limitato l'accesso alle risorse, costituite perlopiù da directory e file. Tuttavia, questo approccio non riesce ad affrontare alcuni problemi: gli utenti ottengono codice da molte origini, alcune delle quali potrebbero non essere affidabili. Inoltre, il codice può contenere bug o vulnerabilità che ne consentono l'utilizzo improprio tramite codice dannoso. Infine, in alcuni casi, il codice esegue operazioni senza informare l'utente in merito. Pertanto l'esecuzione di software dannoso o con errori, anche se da parte di un utente cauto e affidabile, può comportare danni ai sistemi del computer nonché la diffusione indesiderata di dati privati. Per la maggior parte dei meccanismi di sicurezza dei sistemi operativi è necessario che ogni porzione di codice sia considerata completamente attendibile per poter essere eseguita, con la sola esclusione, forse, degli script contenuti nelle pagine Web. Permane quindi l'esigenza di un meccanismo di sicurezza largamente applicabile che consenta l'esecuzione protetta di codice originario di un dato sistema di computer su un altro, anche in assenza di una relazione di trust tra tali sistemi.

.NET Framework fornisce un meccanismo di sicurezza denominato sicurezza dall'accesso di codice che consente la protezione dei sistemi del computer da codice mobile dannoso, l'esecuzione protetta di codice di origine sconosciuta nonché l'eliminazione dei rischi di sicurezza intenzionali o accidentali causati da codice attendibile. Mediante la sicurezza dall'accesso di codice è possibile considerare il codice come attendibile a vari livelli, a seconda dell'origine del codice e di altri aspetti relativi all'identità del codice. Poiché, inoltre, la sicurezza dall'accesso di codice impone al codice vari livelli di attendibilità, la quantità di codice che è necessario considerare completamente attendibile per consentirne l'esecuzione risulta ridotta. L'impiego della sicurezza dall'accesso di codice può ridurre la probabilità di utilizzo improprio del codice da parte di codice dannoso o contenente errori. Può inoltre limitare la responsabilità dello sviluppatore, dal momento che è possibile specificare il set di operazioni che il codice è autorizzato a eseguire. Utilizzando inoltre la sicurezza dall'accesso di codice, è possibile ridurre le conseguenze dannose della presenza di punti deboli nella sicurezza del codice.

NotaNota

In .NET Framework versione 4 sono state apportate importanti modifiche alla sicurezza dall'accesso di codice.Benché la modifica più evidente sia stata la trasparenza della sicurezza, vi sono anche altre modifiche significative che influiscono sulla sicurezza dall'accesso di codice.Per informazioni su queste modifiche, vedere Modifiche della sicurezza in .NET Framework 4.

La sicurezza dall'accesso di codice influisce principalmente sul codice delle librerie e sulle applicazioni parzialmente attendibili. Gli sviluppatori di librerie devono proteggere il proprio codice dagli accessi non autorizzati da parte delle applicazioni parzialmente attendibili. Le applicazioni parzialmente attendibili sono applicazioni caricate da origini esterne, ad esempio Internet. Le applicazioni installate nel desktop o nell'Intranet locale vengono eseguite con attendibilità totale. Le applicazioni completamente attendibili, in quanto tali, non sono interessate dalla sicurezza dall'accesso di codice a meno che non vengano contrassegnate come SecurityTransparent. L'unica limitazione delle applicazioni completamente attendibili è che le applicazioni contrassegnate con l'attributo SecurityTransparentAttribute non possono chiamare codice contrassegnato con l'attributo SecurityCriticalAttribute. Per poter applicare la sicurezza dall'accesso di codice, le applicazioni parzialmente attendibili devono essere eseguite in una sandbox (ad esempio, in Internet Explorer). Se si scarica un'applicazione da Internet e si tenta di eseguirla dal desktop, si otterrà un oggetto NotSupportedException con il messaggio: "È stato effettuato un tentativo di caricamento di un assembly da un percorso di rete, il che avrebbe causato la creazione mediante sandbox dell'assembly nelle versioni precedenti di .NET Framework. In questa versione di .NET Framework i criteri di sicurezza dall'accesso di codice non sono abilitati per impostazione predefinita, pertanto questo tipo di caricamento può risultare pericoloso". Se si è sicuri circa l'attendibilità dell'applicazione, è possibile consentirne l'esecuzione con attendibilità totale tramite l'elemento <loadFromRemoteSources>. Per informazioni sull'esecuzione di un'applicazione in una sandbox, vedere Procedura: eseguire codice parzialmente attendibile in un oggetto sandbox.

I vantaggi della sicurezza dall'accesso di codice riguardano tutto il codice gestito basato su Common Language Runtime, anche quando non viene effettuata alcuna chiamata al meccanismo di sicurezza. Per ulteriori informazioni, vedere Nozioni fondamentali sulla sicurezza per l’accesso al codice.

Funzioni principali della sicurezza dall'accesso di codice

La sicurezza dall'accesso di codice consente di limitare l'accesso alle risorse e alle operazioni protette da parte del codice. Grazie alla sicurezza dall'accesso di codice fornita in .NET Framework vengono svolte le seguenti funzioni:

  • Definizione di autorizzazioni e set di autorizzazioni che rappresentano il diritto di accedere a varie risorse di sistema.

  • Possibilità di esigere dai chiamanti del codice il possesso di permessi specifici.

  • Possibilità di esigere dai chiamanti del codice il possesso di una firma digitale, in modo che solo i chiamanti appartenenti a un'organizzazione o a un sito particolare siano autorizzati a chiamare il codice protetto.

  • Applicazione di restrizioni sul codice in fase di esecuzione confrontando le autorizzazioni concesse a ogni chiamante dello stack di chiamate con le autorizzazioni effettivamente necessarie.

Elaborazione dello stack di chiamate

Per stabilire se il codice sia autorizzato o meno ad accedere a una risorsa o a eseguire un'operazione, viene elaborato lo stack di chiamate e le autorizzazioni concesse a ogni chiamante vengono confrontate con le autorizzazioni pretese. Se almeno uno dei chiamanti compresi nello stack di chiamate non dispone delle autorizzazioni pretese, viene generata un'eccezione di sicurezza e l'accesso viene negato. L'elaborazione dello stack di chiamate ha lo scopo di impedire attacchi in cui codice scarsamente attendibile chiama codice altamente attendibile e lo utilizza per eseguire azioni non autorizzate. La pretesa di autorizzazioni di tutti i chiamanti in fase di esecuzione influisce sulle prestazioni, ma è fondamentale per proteggere il codice dagli attacchi eseguiti mediante codice scarsamente attendibile. Per ottimizzare le prestazioni, è possibile fare in modo che vengano eseguite minori elaborazioni dello stack. Sarà tuttavia necessario evitare che tale operazione riduca la sicurezza del sistema.

Nella figura seguente viene illustrata l'elaborazione dello stack che si ottiene quando un metodo nell'assembly A4 richiede che i propri chiamanti dispongano dell'autorizzazione P.

Elaborazione dello stack di sicurezza

Sicurezza dall'accesso di codice

Argomenti correlati

Titolo

Descrizione

Nozioni fondamentali sulla sicurezza per l’accesso al codice

Viene descritta la sicurezza per l'accesso al codice e le forme più comuni di utilizzo.

Codice SecurityTransparent, livello 2

Viene descritto il modello di trasparenza della sicurezza in .NET Framework 4.

Utilizzo di librerie da codice parzialmente attendibile

Viene descritto come attivare l'utilizzo di librerie con codice non gestito e come utilizzarle da codice non gestito.

Scrittura di librerie di classi protette

Vengono riportate considerazioni sulla sicurezza delle librerie di classi.

Creazione di autorizzazioni personalizzate di accesso al codice

Viene descritto come creare autorizzazioni personalizzate.

Concetti principali sulla sicurezza

Viene fornita una panoramica su numerosi termini e concetti chiave utilizzati nel sistema di sicurezza di .NET Framework.

Sicurezza basata sui ruoli

Viene descritto come incorporare la sicurezza sulla base dei ruoli.

Servizi di crittografia

Viene descritto come incorporare la crittografia all'interno delle applicazioni.

Strumenti di sicurezza (.NET Framework)

Vengono descritti gli strumenti utilizzati per implementare e amministrare il sistema di sicurezza di .NET Framework.