Поделиться через


Использование шифрования для защиты паролей

Saad Ladki

Введение

В этом документе представлен обзор шагов, необходимых для настройки изоляции пула приложений и рабочих процессов для серверов IIS 7.0 и выше. Изоляция пула приложений подразумевает защиту данных, необходимых для доступа к данным WAS (локальный системный процесс IIS). Примером этих данных являются пароли пула приложений. С другой стороны, изоляция рабочего процесса подразумевает защиту данных, к которым требуется получить доступ к удостоверению пула приложений. Примером этих данных является пароль анонимной учетной записи пользователя.

Необходимые компоненты

Чтобы упростить этот процесс, предоставляются два фрагмента кода:

  • Создайте в machine.config новый поставщик шифрования RSA.
  • Задайте имя поставщика по умолчанию в machine.config.

В последнем разделе предварительных требований описано, как настроить четыре учетные записи пользователей, которые будут использоваться в последующих разделах.

Создание нового приложения поставщика шифрования RSA

  1. Откройте Блокнот Windows и создайте файл в каталоге выбранного createProvider.cs, содержащего следующий код C#:

    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. Затем запустите командную строку с повышенными привилегиями:

    • Щелкните меню "Пуск".
    • Щелкните правой кнопкой мыши командную строку.
    • Выберите "Запуск от имени администратора".
  3. В окне командной строки перейдите к расположению, где вы сохранили файл createProvider.cs и выполните следующую команду, чтобы скомпилировать код:
    %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs

Теперь этот шаг завершен.

Создание приложения для изменения поставщика по умолчанию

  1. Откройте Блокнот Windows и создайте файл в каталоге выбранного setProvider.cs, содержащего следующий код C#:

    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. Затем запустите командную строку с повышенными привилегиями:

    • Щелкните меню "Пуск".
    • Щелкните правой кнопкой мыши командную строку.
    • Выберите "Запуск от имени администратора".
  3. В окне командной строки перейдите в расположение, в которое вы сохранили файл setProvider.cs , и выполните следующую команду, чтобы скомпилировать код:
    %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs

Теперь этот шаг завершен.

Создание учетных записей пользователей

На этом шаге мы создадим четыре новых учетных записей пользователей, которые будут использоваться в этом документе.

Чтобы начать, откройте окно командной оболочки, работающее под правами администратора, выполнив следующие действия.

  1. Щелкните меню "Пуск".
  2. Щелкните правой кнопкой мыши командную строку.
  3. Выберите "Запуск от имени администратора".
  4. В командном окне выполните следующие команды:
net user /add AppPoolIdentity1 password1
   net user /add AppPoolIdentity2 password2
   net user /add AnonymousAccount1 password3
   net user /add AnonymousAccount2 password

Теперь этот шаг завершен.

Изоляция пула приложений

СЛУЖБА IIS имеет процесс с именем WAS, который выполняется в контексте LOCALSYSTEM и является единственным процессом, который требует доступа к паролям пула приложений. В этой задаче мы:

  • Создайте новый ключ RSA (iisWasKey), к которому имеют доступ только LOCALSYSTEM и администраторы. Этот ключ будет использоваться для шифрования паролей каждого пула приложений.
  • Создайте два пула приложений.
  • Настройте каждый из этих пулов приложений для запуска под разными удостоверениями и шифрования паролей с помощью iisWasKey.
  • Ограничьте разрешения файловой системы NTFS для файлов ключей, чтобы получить доступ только к системе и администраторам.

Создание нового ключа RSA

  1. Щелкните меню "Пуск".
  2. Щелкните правой кнопкой мыши командную строку.
  3. Выберите "Запуск от имени администратора".
  4. В командном окне перейдите к месту сохранения createProvider.exe и выполните следующую команду:
createProvider.exe iisWasKey RsaKeyForWAS Rsa_WAS

Убедитесь, что эти изменения произошли правильно. %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config Откройте блокнот Windows и проверьте наличие строк в разделе для нового поставщика:

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" />

Шифрование паролей пула приложений

По умолчанию при шифровании свойства IIS использует defaultProvider для шифрования, определенного в machine.config. Значением по умолчанию для этого является RsaProtectedConfigurationProvider.

На этом шаге мы используем приложение setProvider.exe, созданное ранее, чтобы изменить поставщика на iisWasKey, а затем использовать диспетчер IIS для изменения паролей:

  1. Щелкните меню "Пуск".
  2. Щелкните правой кнопкой мыши командную строку.
  3. Выберите "Запуск от имени администратора".
  4. В командном окне перейдите к месту сохранения setProvider.exe и выполните следующую команду:
setProvider.exe Rsa_WAS

Поставщик по умолчанию Rsa_WAS успешно изменен.

Создание пулов приложений

На этом шаге мы создадим два новых пула приложений, которые мы изолированы друг от друга. Для этого запустите диспетчер IIS:

  1. Нажмите кнопку " Пуск" и введите "INetMgr.exe" и нажмите клавишу ВВОД (если появится запрос, нажмите кнопку "Продолжить " для повышения разрешений).

  2. Нажмите кнопку рядом + с именем компьютера в разделе "Подключения ".

  3. Щелкните пулы приложений.

  4. Выберите задачу в правом заголовке "Добавить пул приложений".

  5. Введите имя AppPool1, а затем нажмите кнопку ОК , как показано ниже.

    Снимок экрана: диалоговое окно

  6. Повторите предыдущие шаги, но на этот раз используйте имя AppPool2.

  7. Теперь в IIS отображается следующий экран:
    Снимок экрана: экран пулов приложений с списком пулов приложений на сервере.

  8. Обратите внимание, что удостоверение для AppPool1 и AppPool2NetworkService. Мы изменим это учетные записи, созданные ранее, щелкнув правой кнопкой мыши AppPool1 и выбрав дополнительные параметры

  9. В разделе "Модель процесса":

    • Нажмите кнопку справа от слов Identity.

    • В окне "Идентификатор пула приложений" нажмите переключатель "Пользовательская учетная запись" и нажмите кнопку "Задать..." пуговица.

    • Введите следующее имя пользователя и пароль в диалоговом окне "Задать учетные данные".

      имя пользователя: AppPoolIdentity1
      пароль: password1

      Снимок экрана: диалоговое окно

  10. Теперь значение удостоверения должно отображаться, как показано ниже:

    Снимок экрана: диалоговое окно

  11. Нажмите кнопку ОК , чтобы сохранить внесенные изменения.

  12. Повторите предыдущий шаг для AppPool2 и имя пользователя AppPoolIdentity2 и пароль password2.

  13. В диспетчере IIS отображаются следующие элементы (в основном удостоверения пулов приложений изменены):

    Снимок экрана: пулы приложений, показывающие измененные удостоверения для пулов приложений.

  14. Проверьте изменения с помощью Блокнота Windows и откройте %SystemRoot%\System32\Inetsrv\applicationHost.config файл. Перейдите к разделу applicationPools , и вы увидите, что мы зашифровали пароли пула приложений с помощью ключа Rsa_WAS, как это нужно:

    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]" />
    

Блокировка поставщиков шифрования

По умолчанию IIS_IUSRS получает доступ на чтение к ключам при их создании. Однако для удаления этого доступа можно использовать средство ASPNET_REGIIS. Для этого выполните следующие команды из командной строки с повышенными привилегиями:

cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr iisWasKey IIS_IUSRS

Это удалило IIS_IUSRS (группа удостоверений пула приложений) от возможности чтения iisWasKey , предназначенного только для администраторов и доступа LOCALSYSTEM.

Изоляция рабочего процесса

В этом разделе описывается настройка изоляции рабочего процесса путем создания двух новых сайтов, которые являются частью разных пулов приложений и имеют разные анонимные удостоверения проверки подлинности. Затем мы создадим новый поставщик RSA для каждого пула приложений для шифрования анонимных паролей.

Создание новых сайтов

В этом разделе мы создадим два новых сайта и добавим каждый сайт в созданный ранее пул приложений. Чтобы начать, откройте командную оболочку, запущенную под правами администратора, выполнив следующие действия:

  1. Щелкните меню "Пуск".

  2. Щелкните правой кнопкой мыши командную строку.

  3. Выберите "Запуск от имени администратора".

  4. В командном окне перейдите к каталогу wwwroot с помощью следующей команды:

    cd /d %SystemDrive%\inetpub\wwwroot
    
  5. Создайте новый каталог с именем "один" и каталог "два" с помощью следующих команд:

    mkdir one
    
    mkdir two
    
  6. Создайте базовый файл Default.htm в каталогах "один" и "два", которые содержат следующий КОД HTML:

    <html><body>Hello from site X</body></html>
    

    Примечание.

    Замените "X" на "один" или "два" в зависимости от расположения каталога файла.

Теперь используйте диспетчер IIS для создания двух сайтов:

  1. Нажмите кнопку " Пуск", введите INetMgr.exe и нажмите клавишу ВВОД (если появится запрос, нажмите кнопку "Продолжить ", чтобы повысить уровень разрешений).

  2. + Нажмите кнопку рядом с именем компьютера в разделе "Подключения".

  3. Щелкните правой кнопкой мыши сайт в представлении дерева в разделе "Подключения" , а затем выберите " Добавить веб-сайт".

  4. Чтобы создать сайт, используйте следующие сведения:

    Имя веб-сайта: один
    Пул приложений: AppPool1
    Физический путь: {location of your inetpub directory}\wwwroot\one
    Порт: 81

    Это должно выглядеть следующим образом после завершения.

    Снимок экрана: диалоговое окно

  5. Нажмите кнопку OK, чтобы сохранить изменения.

  6. Повторите предыдущие два шага, но на этот раз используйте следующие сведения для второго сайта:

    Имя веб-сайта: два
    Пул приложений: AppPool2
    Физический путь: {location of your inetpub directory}\wwwroot\two
    Порт: 82

Теперь вы создали два новых сайта с именем One и Two и добавили их в пулы приложений AppPool1 и AppPool2 .

URL-адреса для тестирования сайтов:

  • http://localhost:81 для сайта One
  • http://localhost:82 для сайта Two

Создание новых поставщиков для каждого пула приложений

В этом разделе мы создадим новый поставщик RSA для каждого пула приложений:

  1. Щелкните меню .

  2. Щелкните правой кнопкой мыши командную строку.

  3. Выберите "Запуск от имени администратора".

  4. В окне командной строки перейдите к месту сохранения createProvider.exe и выполните следующую команду:

    createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1
    createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
    

Настройка анонимной учетной записи для сайта One

В окне командной строки с повышенными привилегиями выполните следующую команду:

setProvider.exe Rsa_app1
  1. Вернитесь в диспетчер IIS и дважды щелкните сайт One.

  2. Дважды щелкните элемент проверки подлинности в заголовке имени компонента.

  3. Выберите анонимную проверку подлинности и нажмите кнопку "Изменить" в заголовке "Задачи" справа, где откроется диалоговое окно "Изменить анонимные учетные данные проверки подлинности".

  4. Выберите параметр "Конкретный пользователь" и нажмите кнопку "Задать ".

  5. Введите имя пользователя AnonymousAccount1 и пароль пароля3 и нажмите кнопку "ОК".

  6. Откроется следующее диалоговое окно:

    Снимок экрана: диалоговое окно

  7. Нажмите кнопку ОК , чтобы сохранить изменения.

Настройка анонимной учетной записи для двух сайтов

В окне командной строки с повышенными привилегиями выполните следующую команду:

setProvider.exe Rsa_app2
  1. Вернитесь в диспетчер IIS и дважды щелкните сайт Two.
  2. Дважды щелкните элемент проверки подлинности в заголовке имени компонента.
  3. Выберите анонимную проверку подлинности и нажмите кнопку "Изменить" в заголовке "Задачи" справа, в котором откроется диалоговое окно "Изменить анонимные учетные данные".
  4. Выберите параметр "Конкретный пользователь" и нажмите кнопку "Задать".
  5. Введите имя пользователя AnonymousAccount2 и пароль пароля4 и нажмите кнопку "ОК".
  6. Нажмите кнопку ОК , чтобы сохранить внесенные изменения.

Сброс поставщика шифрования до значения по умолчанию

  • Вернитесь в окно командной строки с повышенными привилегиями и выполните следующую команду:
setProvider.exe RsaProtectedConfigurationProvider

Примечание.

Это изменение гарантирует, что все зашифрованные будущие свойства используют поставщика шифрования по умолчанию.

Проверка изменений

Убедитесь, что мы хотели, чтобы произошло. Откройте файл с помощью Блокнота %SystemRoot%\System32\Inetsrv\applicationHost.config Windows:

  • Обратите внимание, что пароль для AppPool1 и AppPool2 по-прежнему защищены с помощью ключа Rsa_Was .

  • Обратите внимание, что пароль для AnonymousAccount1 также защищен с помощью ключа Rsa_app1 :

    password="[enc:Rsa_app1:jAAAAAECAAADZgAAAKQAAKoz4LV7HyPQuyNzXh8gspB0rPG7j3Ijvn3d+jY3/f
        gma8ZxA7AHLUxjis9b0+Qu8XkLvsGn/A+F+m1O68gY1LkWzAcSW9ks81FuiBVhpZx73FzEo6aOz2QqBduJ7Xhu
        x923KMBqmwkIVJ0mVAdzwFIm6LWymwRXxNxDE4eosKsw6QP6Rd6duC8gckaLxrTndclErQYgGdMt3W6ofxzRMlc=:enc]" />
    
  • Наконец, обратите внимание, что пароль AnonymousAccount2 также защищен с помощью ключа Rsa_app2 :

    password="[enc:Rsa_app2:jAAAAAECAAADZgAAAKQAAKmHMhCTICEUhGncSGCxQc6ll/QGXo0asEIzOf3rIjl
     sBDGRYhlDQWlf2QbFcIsBGYt8dHo9hzAQN/f03BPSlaFynevpSx4xJOg2/B8ATgPmCg4vgxpY5huZbGxongs55c
       Rr20WFXsxzlUuw1xoUZI8c1+7gQPOtF0Rwh1g8NBmb5ML/R3jAIFcMtVhaj0OOIfAP7JCjdInwztBqK0XO7FM=:enc]" />
    

Блокировка поставщиков шифрования

Защитите разрешения файла для наших ключей, как было сделано ранее. Выполните следующие команды из командной строки с повышенными привилегиями:

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

Эти команды удалили возможность IIS_IUSRS считывать ключи и добавила только удостоверение пула приложений, которому требуется разрешение на доступ к ключам.

Тестирование сайтов

Теперь протестируйте сайты:

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

Все должно продолжать работать, как это было раньше.

Итоги

В итоге мы выполнили следующие задачи для защиты параметров пула приложений:

  • Создано два пула приложений
  • Создание двух локальных учетных записей пользователей и их настройка в качестве удостоверений пула приложений
  • Мы создали ключ шифрования администрирования и использовали его для защиты всех удостоверений пула приложений.
  • Мы использовали ASPNET_REGIIS для удаления IIS_IUSRS (группы удостоверений пула приложений) из доступа к ключу

Эти задачи эффективно гарантируют, что только администраторы и системные учетные записи могут считывать пароли для пулов приложений. Таким образом, если приложения в пуле приложений пытались получить пароли для пула приложений (или любого), попытка завершится ошибкой.

Чтобы изолировать параметры рабочего процесса, мы:

  • Создание учетной записи анонимного удостоверения
  • Мы создали новый поставщик для пула приложений
  • Мы зашифровали пароль анонимной проверки подлинности с помощью ключа пула приложений
  • Мы удалили доступ к анонимному поставщику проверки подлинности для IIS_IUSRS и предоставили доступ только к удостоверению пула приложений.

Это гарантирует, что удостоверение пула приложений может расшифровать анонимный пароль, который он принадлежит, и никто другой.