Share via


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 è costituito 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 anonima dell'account utente.

Prerequisiti

Per semplificare questo processo, vengono fornite 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 come configurare quattro account utente che verranno usati negli argomenti successivi.

Creazione di una nuova applicazione del provider di crittografia RSA

  1. Aprire Il Blocco note di Windows e creare un file in una directory a scelta 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();
            }
        }
    }
    
  2. 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.
    • Selezionare Esegui come amministratore.
  3. 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

  1. Aprire Il Blocco note di Windows e creare un file in una directory denominata setProvider.cs che contiene 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();
            }
        }
    }
    
  2. 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.
    • Selezionare Esegui come amministratore.
  3. 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 verranno 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:

  1. Fare clic sul menu Start.
  2. Fare clic con il pulsante destro del mouse sul prompt dei comandi.
  3. Selezionare Esegui come amministratore.
  4. 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 ha 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 di chiave in modo che solo SYSTEM e Administrators abbiano accesso.

Creare una nuova chiave RSA

  1. Fare clic sul menu Start.
  2. Fare clic con il pulsante destro del mouse sul prompt dei comandi.
  3. Selezionare Esegui come amministratore.
  4. Nella finestra di comando passare a dove è 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 della 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 valore è 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:

  1. Fare clic sul menu Start.
  2. Fare clic con il pulsante destro del mouse sul prompt dei comandi.
  3. Selezionare Esegui come amministratore.
  4. Nella finestra di comando passare a dove è 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:

  1. Fare clic su Start e digitare 'INetMgr.exe' e premere INVIO (se richiesto, selezionare Continua per elevare le autorizzazioni).

  2. Fare clic sul + pulsante accanto al nome del computer nella sezione Connessioni .

  3. Fare clic su Pool di applicazioni.

  4. Selezionare l'attività a destra denominata Aggiungi pool di applicazioni.

  5. Immettere il nome 'AppPool1' e quindi premere OK come illustrato:

    Screenshot della finestra di dialogo Aggiungi pool di applicazioni con lo stato attivo sull'opzione O K.

  6. Ripetere i passaggi precedenti, ma questa volta usare il nome AppPool2.

  7. Verrà visualizzata la schermata seguente all'interno di IIS:
    Screenshot della schermata Pool di applicazioni che mostra un elenco di pool di applicazioni nel server.

  8. Si noti che l'identità per AppPool1 e AppPool2 è NetworkService. Questa impostazione verrà modificata in base agli account creati in precedenza facendo clic con il pulsante destro del mouse su AppPool1 e quindi scegliendo Impostazioni avanzate

  9. Sotto il titolo Modello di processo:

    • Fare clic sul pulsante a destra delle parole Identità.

    • Nella finestra Identità pool di applicazioni selezionare il pulsante di opzione "Account personalizzato" e fare clic su "Imposta..." Pulsante.

    • Immettere il nome utente e la password seguenti nella finestra di dialogo Imposta credenziali .

      nome utente: AppPoolIdentity1
      password: password1

      Screenshot della finestra di dialogo Imposta credenziali, che mostra i campi Nome utente, Password e Conferma password.

  10. Ora il valore Identity dovrebbe essere visualizzato come illustrato di seguito:

    Screenshot della finestra di dialogo Impostazioni avanzate con il valore Identity evidenziato nella sezione Modello di processo.

  11. Fare clic su OK per salvare le modifiche.

  12. Ripetere il passaggio precedente per AppPool2 e l'utente il nome utente "AppPoolIdentity2" e la password "password2".

  13. In Gestione IIS vengono visualizzati gli elementi seguenti( principalmente le identità per i pool di applicazioni sono state modificate):

    Screenshot dei pool di applicazioni che mostra le identità modificate per i pool di applicazioni.

  14. 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 del 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 ogni sito viene aggiunto a un pool di applicazioni creato in precedenza. Per iniziare, aprire una shell dei comandi in esecuzione con diritti amministrativi seguendo questa procedura:

  1. Fare clic sul menu Start.

  2. Fare clic con il pulsante destro del mouse sul prompt dei comandi.

  3. Selezionare Esegui come amministratore.

  4. Nella finestra di comando passare alla directory wwwroot usando il comando seguente:

    cd /d %SystemDrive%\inetpub\wwwroot
    
  5. Creare una nuova directory denominata "one" e una directory "two" usando i comandi seguenti:

    mkdir one
    
    mkdir two
    
  6. Creare un file Default.htm di base nelle directory "one" 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:

  1. Fare clic su Start, digitare INetMgr.exe e premere INVIO (se richiesto, selezionare Continua per elevare le autorizzazioni).

  2. Fare clic sul + pulsante accanto al nome del computer nella sezione Connessioni .

  3. Fare clic con il pulsante destro del mouse su Sito nella visualizzazione struttura ad albero in Connessioni e quindi selezionare Aggiungi sito Web.

  4. Usare le informazioni seguenti per creare il sito:

    Nome sito Web: uno
    Pool di applicazioni: AppPool1
    Percorso fisico: {percorso della directory inetpub}\wwwroot\one
    Porta: 81

    Al termine, l'aspetto sarà simile al seguente:

    Screenshot della finestra di dialogo Aggiungi sito Web con il campo Nome sito popolato dalla voce One.

  5. Fare clic su OK per salvare le modifiche.

  6. 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: {percorso della directory inetpub}\wwwroot\two
    Porta: 82

Sono stati creati due nuovi siti denominati One e Two e aggiunti ai pool di applicazioni AppPool1 e AppPool2 .

Gli URL per testare i siti sono:

  • http://localhost:81 per il sito 1
  • http://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:

  1. Fare clic sul menu Start.

  2. Fare clic con il pulsante destro del mouse sul prompt dei comandi.

  3. Selezionare Esegui come amministratore.

  4. 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 il sito 1

Nella finestra del prompt dei comandi con privilegi elevati eseguire il comando seguente:

setProvider.exe Rsa_app1
  1. Tornare a Gestione IIS e fare doppio clic sul sito 1.

  2. Fare doppio clic sull'elemento Autenticazione sotto l'intestazione Nome funzionalità .

  3. 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 .

  4. Fare clic sull'opzione Utente specifico e quindi sul pulsante Imposta .

  5. Immettere il nome utente AnonymousAccount1 e la password3 e selezionare OK.

  6. Verrà visualizzata la finestra di dialogo seguente:

    Screenshot della finestra di dialogo Modifica credenziali di autenticazione anonima.

  7. Premere OK per salvare le modifiche.

Impostare l'account anonimo per il sito due

Nella finestra del prompt dei comandi con privilegi elevati eseguire il comando seguente:

setProvider.exe Rsa_app2
  1. Tornare a Gestione IIS e fare doppio clic sul sito Two.
  2. Fare doppio clic sull'elemento Autenticazione sotto l'intestazione Nome funzionalità .
  3. Selezionare Autenticazione anonima e quindi fare clic su Modifica sotto l'intestazione Attività sul lato destro, che visualizza la finestra di dialogo Modificacredenziali anonime .
  4. Fare clic sull'opzione Utente specifico e fare clic su Imposta.
  5. Immettere il nome utente AnonymousAccount2 e la password password4 e selezionare OK.
  6. 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 accaduto. Usando il Blocco note di Windows, aprire il %SystemRoot%\System32\Inetsrv\applicationHost.config file:

  • Si noti che la password per AppPool1 e AppPool2 sono entrambe protette 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]" />
    
  • Si noti infine 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 hanno aggiunto solo l'identità del pool di applicazioni che necessita dell'autorizzazione di accesso alle chiavi.

Test dei siti

Testare ora i siti:

  • http://localhost:81
  • http://localhost:82

Tutto dovrebbe continuare a funzionare come prima.

Riepilogo

In sintesi, sono state eseguite le attività seguenti per proteggere le impostazioni del pool di applicazioni:

  • Creazione di due pool di applicazioni
  • Sono stati creati due account utente locali e configurati 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 riuscirebbe.

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
  • È stata crittografata la password di autenticazione anonima 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 anche la password anonima a cui appartiene e nessun altro utente.