Protezione della configurazione di ASP.NET
Aggiornamento: novembre 2007
Nella configurazione di ASP.NET è inclusa la funzionalità che consente di configurare un intero server, un'applicazione ASP.NET o singole pagine nelle sottodirectory dell'applicazione. È possibile configurare funzionalità, quali le modalità di autenticazione, l'inserimento di pagine nella cache, le opzioni del compilatore, gli errori personalizzati, le opzioni di debug e analisi e così via. In questo argomento viene illustrato come ottimizzare la protezione delle funzionalità di configurazione utilizzando le procedure consigliate durante la configurazione di applicazioni ASP.NET locali o remote. Per ulteriori informazioni sulla sicurezza delle altre funzionalità di ASP.NET, vedere gli argomenti elencati nella sezione Vedere anche.
Sebbene le procedure consigliate di configurazione e codifica riportate di seguito consentano di migliorare la protezione delle applicazioni, è comunque importante mantenere costantemente aggiornato il server applicazioni installando i più recenti aggiornamenti per la protezione di Microsoft Windows e Microsoft Internet Information Services (IIS), nonché tutti gli aggiornamenti di Microsoft SQL Server o altre origini dati di appartenenza.
Per informazioni dettagliate sulle procedure consigliate per scrivere codice protetto e proteggere le applicazioni, consultare il testo "Writing Secure Code" di Michael Howard e David LeBlanc e leggere le istruzioni disponibili sul sito Web Microsoft Patterns and Practices.
Nota importante: |
---|
Il sistema di configurazione di ASP.NET può essere utilizzato solo per risorse e funzionalità di ASP.NET. Per configurare le risorse non ASP.NET, è possibile utilizzare le funzionalità specifiche di IIS. Per ulteriori informazioni sulla configurazione di IIS, vedere Working with the Metabase (IIS 6.0) e IIS Metabase Property Reference. |
Protezione dei file di configurazione
Nella tabella riportata di seguito vengono indicati gli elenchi di controllo di accesso (ACL) presenti per impostazione predefinita nel file Machine.config e nel file Web.config principale, entrambi contenuti nella directory %SystemRoot%\Microsoft.NET\Framework\\versione\CONFIG. Questi elenchi sono impostati anche nella directory stessa, ma comprendono autorizzazioni di modifica per il gruppo Power Users. La directory è in sola lettura.
Account Windows |
Autorizzazioni |
---|---|
Administrators |
Controllo completo |
Account computer ASP.NET (<server>\ASPNET) |
Lettura ed esecuzione |
IIS_WPG (<server>\IIS_WPG) |
Lettura ed esecuzione |
LOCAL SERVICE |
Lettura ed esecuzione |
NETWORK SERVICE |
Lettura ed esecuzione |
Power Users (<server>\Power Users) |
Modifica |
SYSTEM |
Controllo completo |
Users (<server>\Users) |
Lettura ed esecuzione |
Nella tabella riportata di seguito vengono indicati gli ACL da impostare nei file Web.config e nei file elencati negli attributi configSource.
Account Windows |
Autorizzazioni |
---|---|
Administrators |
Controllo completo |
IIS_WPG (<server>\IIS_WPG) |
Lettura ed esecuzione |
INTERACTIVE |
Read |
Account guest Internet (<server>\IUSR_<server>) |
Read |
NETWORK |
Read |
NETWORK SERVICE |
Read |
SYSTEM |
Controllo completo |
Users (<server>\Users) |
Lettura ed esecuzione |
Speciale |
Il sistema di configurazione di ASP.NET si basa sugli ACL impostati nei file di configurazione, indipendentemente dalla modalità di modifica delle impostazioni di configurazione. Per ulteriori informazioni, vedere Modifica dei file di configurazione ASP.NET.
Protezione dei valori di configurazione
Quando vengono memorizzate informazioni riservate in un file di configurazione relativo a un'applicazione, i valori riservati devono essere crittografati utilizzando la configurazione protetta. Tra le informazioni particolarmente riservate sono incluse le chiavi di crittografia archiviate nell'elemento di configurazione machineKey e le stringhe di connessione all'origine dati archiviate nell'elemento di configurazione connectionStrings. Per ulteriori informazioni, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.
Protezione dei contenitori delle chiavi di crittografia della configurazione
Un aspetto critico dell'utilizzo di una chiave di crittografia è dato dalla protezione del file, denominato anche contenitore, in cui viene memorizzata la chiave. È importante tenere presente il livello di protezione associato al contenitore. Il contenitore viene memorizzato in un normale file del sistema operativo e l'accesso alla chiave di crittografia è regolato dagli ACL del file. Gli ACL possono essere ereditati dalla cartella in cui viene creato il file. I contenitori di chiavi con un ambito relativo al computer locale (useMachineContainer"true") vengono memorizzati in una cartella nascosta nel percorso %ALLUSERSPROFILE%\Dati applicazioni\Microsoft\Crypto\RSA\MachineKeys.
Per impostazione predefinita, l'utente che ha creato il contenitore di chiavi disporrà di accesso completo alla chiave. Gli altri utenti, incluso il gruppo Administrators, potranno disporre o meno di accesso al contenitore a seconda degli ACL impostati in esso. Gli altri utenti possono ottenere l'accesso al contenitore mediante l'opzione –pa dello strumento di ASP.NET per la registrazione di IIS (Strumento di ASP.NET per la registrazione di IIS (Aspnet_regiis.exe)). Gli utenti che tentano di crittografare o decrittografare con la chiave specificata devono disporre delle autorizzazioni necessarie per accedere al contenitore di chiavi.
In alcuni casi, un utente che non dispone dei privilegi di amministratore può tuttavia creare una chiave di crittografia. Questa situazione può verificarsi nel caso in cui un'applicazione richieda una crittografia della configurazione quando non esiste una chiave. Se il contenitore non esiste, ne verrà creato uno e verrà eseguita un'operazione di crittografia.
In questo caso, .NET Framework crea la chiave e il relativo contenitore necessari con gli ACL dell'utente corrente. Il potenziale problema riscontrabile in questa situazione è che a un utente con privilegi di amministratore potrebbe essere negato l'accesso al contenitore delle chiavi di crittografia. Gli amministratori possono ottenere nuovamente l'accesso alla chiave acquisendo la proprietà del file fisico nella cartella menzionata in precedenza. Le indicazioni suggerite sono rivolte alla creazione, da parte di un utente con privilegi di amministratore, delle chiavi necessarie prima del relativo utilizzo in modo da evitarne la creazione al momento della crittografia.
Protezione della configurazione in un ambiente di hosting condiviso
In un ambiente di hosting condiviso esiste il rischio potenziale che utenti malintenzionati modifichino le impostazioni di configurazione intervenendo direttamente sui file di configurazione oppure sulle API di configurazione o su altri strumenti di configurazione e amministrazione. È possibile impedire la modifica della configurazione delle applicazioni bloccando le sezioni di configurazione. A tale scopo è possibile aggiungere gli elementi location al file Machine.config o a qualsiasi file di configurazione con un livello gerarchico superiore a quello del file a cui si desidera applicare la limitazione. L'elemento location viene utilizzato per impedire la modifica delle impostazioni ai file di configurazione figlio. Per ulteriori informazioni, vedere Procedura: bloccare le impostazioni di configurazione di ASP.NET e Procedura: configurare directory specifiche utilizzando le impostazioni posizione.
Configurazione remota
La configurazione remota è disattivata per impostazione predefinita. Se viene attivata, l'utente viene autenticato al livello DCOM e solo gli amministratori sono autorizzati a leggere o scrivere i dati di configurazione. Per ulteriori informazioni, vedere Modifica dei file di configurazione remota ASP.NET.
Provider di configurazione personalizzata
Indipendentemente dal token di protezione dell'utente corrente, il codice del gestore di sezione personalizzato viene eseguito con le credenziali dell'account del processo di hosting. Per gli scenari Web, si tratta dell'account <server>\ASPNET in Windows 2000 e Windows XP, dell'account SERVIZIO DI RETE in Windows Server 2003 o di un account utente configurato in modo esplicito. Per gli scenari client, si tratta invece dell'identità del processo in esecuzione.
Il sistema di configurazione imposta le autorizzazioni prima della chiamata di un gestore di sezione di configurazione personalizzato. Tale chiamata non è considerata attendibile da .NET Framework e viene eseguita con l'autorizzazione di attendibilità dell'applicazione. Il sistema di configurazione di ASP.NET considera attendibile la directory %SystemRoot%\Microsoft.NET\Framework\versione\CONFIG, ma non le directory presenti in un livello inferiore della gerarchia.
Per ottenere le autorizzazioni necessarie, un gestore di sezione di configurazione personalizzato deve impostare gli attributi di richiesta di sicurezza per l'accesso al codice (CAS, Code Access Security). Per ulteriori informazioni, vedere Protezione dall'accesso di codice ASP.NET oNozioni fondamentali sulla protezione dall’accesso di codice.
Blocco di un file di configurazione
Un file di configurazione può essere bloccato soltanto da ripetuti tentativi di salvataggio di un file di configurazione o di apertura di un handle di file. Un utente malintenzionato può tentare il blocco del file Machine.config o del file Web.config principale. Tuttavia, per eseguire questa operazione è necessaria l'attendibilità completa, che in ASP.NET è disattivata per impostazione predefinita.
Utilizzo dell'API di configurazione per la lettura di file arbitrari
Le classi dell'API di configurazione non possono leggere le directory che non appartengono al dominio applicazione o i file privi dell'estensione config.
Applicazione delle impostazioni della metabase IIS alle richieste ASP.NET
Quando IIS riceve una richiesta per un'applicazione ASP.NET, le impostazioni della relativa metabase vengono utilizzate per l'applicazione ASP.NET, indipendentemente dalle impostazioni di configurazione ASP.NET di quest'ultima. Questo vincolo può rendere impossibile agli utenti l'accesso alle applicazioni ASP.NET o può determinare la presenza nelle applicazioni di impostazioni di protezione meno restrittive.
Ad esempio, se le impostazioni della metabase IIS consentono l'accesso soltanto agli utenti autenticati, mentre quelle del file Web.config consentono l'accesso anonimo, agli utenti anonimi verrà negato l'accesso al sito. Per risolvere il problema, è possibile configurare l'applicazione in Gestione IIS per consentire l'accesso agli utenti anonimi.
Per ulteriori informazioni sulla protezione delle funzionalità IIS, vedere Security in IIS 6.0.
Messaggi di errore ed eventi
Nelle sezioni riportate di seguito viene illustrato come limitare i potenziali rischi di protezione esposti da messaggi di errore ed eventi imprevisti.
Eccezioni
Per impedire che le informazioni riservate risultino visibili a origini indesiderate, configurare l'applicazione in modo che i messaggi di errore dettagliati non vengano visualizzati o che vengano visualizzati solo quando il client è il server Web stesso. Per ulteriori informazioni, vedere la classe Elemento customErrors (schema delle impostazioni ASP.NET).
Log eventi
Se il server esegue Windows Server 2003, è possibile migliorare la protezione dell'applicazione impostando la protezione del log eventi e definendo i parametri relativi alla dimensione, al mantenimento e ad altre proprietà del log per impedire un attacco di tipo Denial of Service. Per ulteriori informazioni sulla configurazione dei log eventi, cercare "Visualizzatore eventi" della Guida in linea e supporto tecnico di Windows.
Monitoraggio dello stato
Sia i tentativi di accesso completati che quelli non riusciti vengono registrati tramite la funzionalità di monitoraggio dello stato ASP.NET. Nella configurazione predefinita i nomi utente e gli altri dati di diagnostica relativi ai tentativi di accesso non riusciti vengono registrati nel log eventi Applicazione. Accertarsi che l'accesso al log eventi sia ristretto, in modo che queste informazioni non vengano diffuse.
Vedere anche
Concetti
Cenni preliminari sul monitoraggio dello stato di ASP.NET
Blocco delle impostazioni di configurazione
Modifica dei file di configurazione remota ASP.NET
Protezione dei controlli di accesso
Protezione dell'accesso ai dati
Altre risorse
Sicurezza dei siti Web ASP.NET
Crittografia delle informazioni di configurazione utilizzando la configurazione protetta
Crittografia delle informazioni di configurazione utilizzando la configurazione protetta