Uso della crittografia per proteggere le password
di Saad Ladki
Introduzione
Questo documento offre una panoramica dei passaggi necessari per impostare sia il pool di applicazioni che l'isolamento del processo di lavoro per i server IIS 7.0 e versioni successive. L'isolamento del pool di applicazioni comporta la protezione dei dati necessari per l'accesso a WAS (processo del sistema locale IIS). Un esempio di questi dati è rappresentato dalle password del pool di applicazioni. L'isolamento del processo di lavoro comporta invece la protezione dei dati a cui deve accedere l'identità del pool di applicazioni. Un esempio di questi dati è la password dell'account utente anonimo.
Prerequisiti
Per semplificare questo processo, vengono forniti due parti di codice di esempio:
- Creare un nuovo provider di crittografia RSA in machine.config.
- Impostare il nome del provider predefinito in machine.config.
La sezione dei prerequisiti finale illustra la configurazione di quattro account utente che verranno usati negli argomenti successivi.
Creazione di una nuova applicazione del provider di crittografia RSA
Aprire Il Blocco note di Windows e creare un file in una directory denominata createProvider.cs che contiene il codice C# seguente:
using System; using Microsoft.Web.Administration; using System.Configuration; namespace testingEncryption { public class createProvider { public static void Main(string[] args) { String keyContainerName = args[0]; String description = args[1]; String providerName = args[2]; System.Configuration.Configuration machineConfig = System.Configuration.ConfigurationManager.OpenMachineConfiguration(); System.Configuration.ProviderSettings settings = new System.Configuration.ProviderSettings(providerName, "System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); settings.Parameters["description"] = description; settings.Parameters["keyContainerName"] = keyContainerName; settings.Parameters["cspProviderName"] = String.Empty; settings.Parameters["useMachineContainer"] = "true"; settings.Parameters["useOAEP"] = "false"; settings.Parameters["name"] = providerName; ProtectedConfigurationSection pcSection = (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection ("configProtectedData"); pcSection.Providers.Add(settings); machineConfig.Save(); } } }
Avviare quindi un prompt dei comandi con privilegi elevati:
- Fare clic sul menu Start .
- Fare clic con il pulsante destro del mouse sul prompt dei comandi.
- Scegliere Esegui come amministratore.
Nella finestra del prompt dei comandi passare al percorso in cui è stato salvato il file createProvider.cs ed eseguire il comando seguente per compilare il codice:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs
Questo passaggio è stato completato.
Creazione di un'applicazione per modificare il provider predefinito
Aprire Il Blocco note di Windows e creare un file in una directory a scelta denominata setProvider.cs contenente il codice C# seguente:
using System; using Microsoft.Web.Administration; using System.Configuration; namespace testingEncryption { public class setProvider { public static void Main(string[] args) { String provider = args[0]; // example: DataProtectionConfigurationProvider System.Configuration.Configuration machineConfig = System.Configuration.ConfigurationManager.OpenMachineConfiguration(); ProtectedConfigurationSection pcSection = (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection("configProtectedData"); string oldEncryptionProviderName = pcSection.DefaultProvider; Console.WriteLine("The default provider is currently: " + oldEncryptionProviderName); Console.WriteLine("Changing the default provider to: " + provider); pcSection.DefaultProvider = provider; machineConfig.Save(); } } }
Avviare quindi un prompt dei comandi con privilegi elevati:
- Fare clic sul menu Start .
- Fare clic con il pulsante destro del mouse sul prompt dei comandi.
- Scegliere Esegui come amministratore.
Nella finestra del prompt dei comandi passare al percorso in cui è stato salvato il file setProvider.cs ed eseguire il comando seguente per compilare il codice:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs
Questo passaggio è stato completato.
Creazione di account utente
In questo passaggio vengono creati quattro nuovi account utente che verranno usati in questo documento.
Per iniziare, aprire una finestra della shell dei comandi in esecuzione con diritti amministrativi seguendo questa procedura:
- Fare clic sul menu Start .
- Fare clic con il pulsante destro del mouse sul prompt dei comandi.
- Scegliere Esegui come amministratore.
- Nella finestra di comando eseguire i comandi seguenti:
net user /add AppPoolIdentity1 password1
net user /add AppPoolIdentity2 password2
net user /add AnonymousAccount1 password3
net user /add AnonymousAccount2 password
Questo passaggio è stato completato.
Isolamento del pool di applicazioni
IIS dispone di un processo denominato WAS che viene eseguito nel contesto di LOCALSYSTEM ed è l'unico processo che deve accedere alle password del pool di applicazioni. In questa attività:
- Creare una nuova chiave RSA (iisWasKey) a cui hanno accesso solo LOCALSYSTEM e Administrators. Questa chiave verrà usata per crittografare le password di ogni pool di applicazioni.
- Creare due pool di applicazioni.
- Configurare ognuno di questi pool di applicazioni per l'esecuzione in identità diverse e crittografare le password usando iisWasKey.
- Limitare le autorizzazioni del file system NTFS per i file chiave in modo che solo SYSTEM e Administrators abbiano accesso.
Creare una nuova chiave RSA
- Fare clic sul menu Start .
- Fare clic con il pulsante destro del mouse sul prompt dei comandi.
- Scegliere Esegui come amministratore.
- Nella finestra di comando passare al percorso in cui è stato salvato il createProvider.exe ed eseguire il comando seguente:
createProvider.exe iisWasKey RsaKeyForWAS Rsa_WAS
Verificare che queste modifiche siano state apportate correttamente. Aprire il %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config
Blocco note di Windows e verificare che le righe nella sezione siano presenti per il nuovo provider:
keyContainerName="NetFrameworkConfigurationKey" cspProviderName=""
useMachineContainer="true" useOAEP="false" name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
useMachineProtection="true" keyEntropy="" name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
cspProviderName="" useMachineContainer="true" useOAEP="false"
name="Rsa_WAS"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Crittografare le password del pool di applicazioni
Per impostazione predefinita, ogni volta che una proprietà viene crittografata, IIS usa defaultProvider per la crittografia definita in machine.config. Il valore predefinito per questo è RsaProtectedConfigurationProvider.
In questo passaggio viene usata l'applicazione setProvider.exe creata in precedenza per modificare il provider in iisWasKey e quindi usare Gestione IIS per modificare le password:
- Fare clic sul menu Start .
- Fare clic con il pulsante destro del mouse sul prompt dei comandi.
- Scegliere Esegui come amministratore.
- Nella finestra di comando passare al percorso in cui è stato salvato il setProvider.exe ed eseguire il comando seguente:
setProvider.exe Rsa_WAS
Il provider predefinito Rsa_WAS è stato modificato correttamente.
Creare nuovi pool di applicazioni
In questo passaggio vengono creati due nuovi pool di applicazioni isolati l'uno dall'altro. A tale scopo, avviare Gestione IIS:
Fare clic su Start e digitare "INetMgr.exe" e premere INVIO (se richiesto, selezionare Continua per elevare le autorizzazioni).
Fare clic sul + pulsante accanto al nome del computer nella sezione Connessioni .
Fare clic su Pool di applicazioni.
Selezionare l'attività a destra denominata Aggiungi pool di applicazioni.
Immettere il nome "AppPool1" e quindi premere OK come illustrato:
Ripetere i passaggi precedenti, ma questa volta usare il nome AppPool2.
Verrà visualizzata la schermata seguente all'interno di IIS:
Si noti che l'identità per AppPool1 e AppPool2 è NetworkService. Questa impostazione verrà modificata per gli account creati in precedenza facendo clic con il pulsante destro del mouse su AppPool1 e quindi scegliendo Impostazioni avanzate
Sotto il titolo Modello di processo:
Fare clic sul pulsante a destra delle parole Identity.
Nella finestra Identità pool di applicazioni selezionare il pulsante di opzione "Account personalizzato" e fare clic su "Imposta..." bottone.
Immettere il nome utente e la password seguenti nella finestra di dialogo Imposta credenziali .
nome utente: AppPoolIdentity1
password: password1
Il valore Identity dovrebbe ora essere visualizzato come illustrato di seguito:
Fare clic su OK per salvare le modifiche.
Ripetere il passaggio precedente per AppPool2 e l'utente il nome utente "AppPoolIdentity2" e la password "password2".
In Gestione IIS vengono visualizzati gli elementi seguenti( principalmente le identità per i pool di applicazioni sono state modificate):
Verificare le modifiche usando Il Blocco note di Windows e aprire il
%SystemRoot%\System32\Inetsrv\applicationHost.config
file. Passare alla sezione applicationPools e si noterà che sono state crittografate le password del pool di applicazioni usando la chiave Rsa_WAS come previsto:password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAAUkBfhWFbUHIt/qtlo+P7CiZC10r9H0DGBvAl U2mhiOxMoHXX6Dz0S8TQjKx2YTKvuE8y+SBUWrEs3JYzXKOkY45Q9z6E/3BFvru5oR9uzbjInASKF/83N N1tIEsoorQWmUOjnL4XM9RNzpqkY6TgyC3CyPUGN9fR7li5+AUupHHfgVPMzcLHfCsoq+ri+X6IbEnJdu cUEAYBn1P9F/Zxk=:enc]" /> password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAEbQEa/sAmyLbryAR0hD3voip2+0RfzM44sXPekp I2H7HYLzta55NfLcG8vSPHhasahKVgO4wcIcT03CLSn+5koWvAaIRdeClhXWK/X8ZQPFooOpyhOqT0TEP5v jB+DXAKgq0RC6ufHFtrHMy0U69ew7/49YXEcrkF+o8OJZ1K+EkgA3J2ikHKxW0pFBU0tFvLCjt2/UXypfNI 0hYPe2syk=:enc]" />
Blocco dei provider di crittografia
Per impostazione predefinita, all'IIS_IUSRS viene concesso l'accesso in lettura alle chiavi al momento della creazione. Tuttavia, è possibile usare lo strumento ASPNET_REGIIS per rimuovere tale accesso. A tale scopo, eseguire i comandi seguenti dal prompt dei comandi con privilegi elevati:
cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr iisWasKey IIS_IUSRS
Questa operazione ha rimosso IIS_IUSRS (gruppo di identità del pool di applicazioni) dalla possibilità di leggere iisWasKey destinato solo agli amministratori e all'accesso LOCALSYSTEM.
Isolamento processo di lavoro
Questo argomento descrive come configurare l'isolamento del processo di lavoro creando due nuovi siti che fanno parte di pool di applicazioni diversi e hanno identità di autenticazione anonima diverse. Viene quindi creato un nuovo provider RSA per ogni pool di applicazioni per crittografare le password anonime.
Creare nuovi siti
In questa sezione vengono creati due nuovi siti e si aggiunge ogni sito a un pool di applicazioni creato in precedenza. Per iniziare, aprire una shell dei comandi in esecuzione con diritti amministrativi seguendo questa procedura:
Fare clic sul menu Start .
Fare clic con il pulsante destro del mouse sul prompt dei comandi.
Scegliere Esegui come amministratore.
Nella finestra di comando passare alla directory wwwroot usando il comando seguente:
cd /d %SystemDrive%\inetpub\wwwroot
Creare una nuova directory denominata "one" e una directory "two" usando i comandi seguenti:
mkdir one
mkdir two
Creare un file Default.htm di base nelle directory "uno" e "two" che contengono il codice HTML seguente:
<html><body>Hello from site X</body></html>
Nota
Sostituire 'X' con 'one' o 'two' a seconda del percorso della directory del file.
Usare ora gestione IIS per creare due siti:
Fare clic su Start, digitare INetMgr.exe e premere INVIO (se richiesto, selezionare Continua per elevare le autorizzazioni).
Fare clic sul + pulsante accanto al nome del computer nella sezione Connessioni .
Fare clic con il pulsante destro del mouse su Sito nella visualizzazione albero in Connessioni e quindi scegliere Aggiungi sito Web.
Usare le informazioni seguenti per creare il sito:
Nome sito Web: uno
Pool di applicazioni: AppPool1
Percorso fisico: {posizione della directory inetpub}\wwwroot\one
Porta: 81Al termine, l'aspetto dovrebbe essere simile al seguente:
Fare clic su OK per salvare le modifiche.
Ripetere i due passaggi precedenti, ma questa volta usare le informazioni seguenti per il secondo sito:
Nome sito Web: due
Pool di applicazioni: AppPool2
Percorso fisico: {posizione della directory inetpub}\wwwroot\two
Porta: 82
Sono stati creati due nuovi siti denominati One e Two e sono stati aggiunti ai pool di applicazioni AppPool1 e AppPool2 .
Gli URL per testare i siti sono:
http://localhost:81
per il sito 1http://localhost:82
per sito Due
Creare nuovi provider per ogni pool di applicazioni
In questa sezione viene creato un nuovo provider RSA per ognuno dei pool di applicazioni:
Fare clic sul menu Start.
Fare clic con il pulsante destro del mouse sul prompt dei comandi.
Scegliere Esegui come amministratore.
Nella finestra di comando eseguire, passare al percorso in cui è stato salvato il createProvider.exe ed eseguire il comando seguente:
createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1 createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
Impostare l'account anonimo per site one
Nella finestra del prompt dei comandi con privilegi elevati eseguire il comando seguente:
setProvider.exe Rsa_app1
Tornare a Gestione IIS e fare doppio clic sul sito 1.
Fare doppio clic sull'elemento Autenticazione sotto l'intestazione Nome funzionalità.
Selezionare Autenticazione anonima e quindi fare clic su Modifica sotto l'intestazione Attività sul lato destro che visualizza la finestra di dialogo Modifica credenziali di autenticazione anonima.
Fare clic sull'opzione Utente specifico e quindi sul pulsante Imposta .
Immettere il nome utente AnonymousAccount1 e la password3 e selezionare OK.
Verrà visualizzata la finestra di dialogo seguente:
Premere OK per salvare le modifiche.
Impostare l'account anonimo per Site Two
Nella finestra del prompt dei comandi con privilegi elevati eseguire il comando seguente:
setProvider.exe Rsa_app2
- Tornare a Gestione IIS e fare doppio clic sul sito Two.
- Fare doppio clic sull'elemento Autenticazione sotto l'intestazione Nome funzionalità.
- Selezionare Autenticazione anonima e quindi fare clic su Modifica sotto l'intestazione Attività sul lato destro che visualizza la finestra di dialogo Modifica credenziali anonime.
- Fare clic sull'opzione Utente specifico e fare clic su Imposta.
- Immettere il nome utente AnonymousAccount2 e la password4 e selezionare OK.
- Fare clic su OK per salvare le modifiche.
Reimpostare il provider di crittografia sul valore predefinito
- Tornare alla finestra del prompt dei comandi con privilegi elevati ed eseguire il comando seguente:
setProvider.exe RsaProtectedConfigurationProvider
Nota
Questa modifica garantisce che tutte le proprietà future crittografate usino il provider di crittografia predefinito.
Verificare le modifiche
Verificare che ciò che volevamo fosse successo. Usando Blocco note di Windows aprire il %SystemRoot%\System32\Inetsrv\applicationHost.config
file:
Si noti che la password per AppPool1 e AppPool2 è ancora protetta con la chiave Rsa_Was.
Si noti che la password per AnonymousAccount1 è protetta anche con la chiave Rsa_app1 :
password="[enc:Rsa_app1:jAAAAAECAAADZgAAAKQAAKoz4LV7HyPQuyNzXh8gspB0rPG7j3Ijvn3d+jY3/f gma8ZxA7AHLUxjis9b0+Qu8XkLvsGn/A+F+m1O68gY1LkWzAcSW9ks81FuiBVhpZx73FzEo6aOz2QqBduJ7Xhu x923KMBqmwkIVJ0mVAdzwFIm6LWymwRXxNxDE4eosKsw6QP6Rd6duC8gckaLxrTndclErQYgGdMt3W6ofxzRMlc=:enc]" />
Infine, si noti che la password AnonymousAccount2 è protetta anche con la chiave Rsa_app2 :
password="[enc:Rsa_app2:jAAAAAECAAADZgAAAKQAAKmHMhCTICEUhGncSGCxQc6ll/QGXo0asEIzOf3rIjl sBDGRYhlDQWlf2QbFcIsBGYt8dHo9hzAQN/f03BPSlaFynevpSx4xJOg2/B8ATgPmCg4vgxpY5huZbGxongs55c Rr20WFXsxzlUuw1xoUZI8c1+7gQPOtF0Rwh1g8NBmb5ML/R3jAIFcMtVhaj0OOIfAP7JCjdInwztBqK0XO7FM=:enc]" />
Blocco dei provider di crittografia
Proteggere le autorizzazioni per i file per le chiavi, come già fatto in precedenza. Eseguire i comandi seguenti dal prompt dei comandi con privilegi elevati:
cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr App1Key IIS_IUSRS
aspnet_regiis.exe -pa App1Key AppPoolIdentity1
aspnet_regiis.exe -pr App2Key IIS_IUSRS
aspnet_regiis.exe -pa App2Key AppPoolIdentity2
Questi comandi hanno rimosso la possibilità di IIS_IUSRS di leggere le chiavi e di aggiungere solo l'identità del pool di applicazioni che richiede l'autorizzazione di accesso alle chiavi.
Test dei siti
Testare ora i siti:
http://localhost:81
http://localhost:82
Tutto dovrebbe continuare a funzionare come in precedenza.
Riepilogo
In sintesi, sono state eseguite le attività seguenti per proteggere le impostazioni del pool di applicazioni:
- Creazione di due pool di applicazioni
- Creare due account utente locali e configurarli come identità del pool di applicazioni
- È stata creata una chiave di crittografia di amministrazione e usata per proteggere tutte le password delle identità del pool di applicazioni
- È stato usato ASPNET_REGIIS per rimuovere IIS_IUSRS (gruppo di identità del pool di applicazioni) dall'accesso alla chiave
Queste attività garantiscono in modo efficace che solo gli account Administrators e SYSTEM possano leggere le password per i pool di applicazioni. Pertanto, se le applicazioni all'interno di un pool di applicazioni hanno tentato di recuperare le password per il pool di applicazioni (o qualsiasi), il tentativo non riuscirà.
Per isolare le impostazioni del processo di lavoro, è necessario:
- Creazione di un nuovo account di identità anonimo
- È stato creato un nuovo provider per il pool di applicazioni
- La password di autenticazione anonima è stata crittografata con la chiave del pool di applicazioni
- È stato rimosso l'accesso al provider di autenticazione anonimo per IIS_IUSRS e è stato concesso l'accesso solo all'identità del pool di applicazioni
Ciò garantisce in modo efficace che l'identità del pool di applicazioni possa decrittografare la password anonima che appartiene anche a nessuno.