Использование шифрования для защиты паролей
Введение
В этом документе представлен обзор шагов, необходимых для настройки изоляции пула приложений и рабочих процессов для серверов IIS 7.0 и выше. Изоляция пула приложений подразумевает защиту данных, необходимых для доступа к данным WAS (локальный системный процесс IIS). Примером этих данных являются пароли пула приложений. С другой стороны, изоляция рабочего процесса подразумевает защиту данных, к которым требуется получить доступ к удостоверению пула приложений. Примером этих данных является пароль анонимной учетной записи пользователя.
Необходимые компоненты
Чтобы упростить этот процесс, предоставляются два фрагмента кода:
- Создайте в machine.config новый поставщик шифрования RSA.
- Задайте имя поставщика по умолчанию в machine.config.
В последнем разделе предварительных требований описано, как настроить четыре учетные записи пользователей, которые будут использоваться в последующих разделах.
Создание нового приложения поставщика шифрования RSA
Откройте Блокнот 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(); } } }
Затем запустите командную строку с повышенными привилегиями:
- Щелкните меню "Пуск".
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
В окне командной строки перейдите к расположению, где вы сохранили файл createProvider.cs и выполните следующую команду, чтобы скомпилировать код:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs
Теперь этот шаг завершен.
Создание приложения для изменения поставщика по умолчанию
Откройте Блокнот 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(); } } }
Затем запустите командную строку с повышенными привилегиями:
- Щелкните меню "Пуск".
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
В окне командной строки перейдите в расположение, в которое вы сохранили файл setProvider.cs , и выполните следующую команду, чтобы скомпилировать код:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs
Теперь этот шаг завершен.
Создание учетных записей пользователей
На этом шаге мы создадим четыре новых учетных записей пользователей, которые будут использоваться в этом документе.
Чтобы начать, откройте окно командной оболочки, работающее под правами администратора, выполнив следующие действия.
- Щелкните меню "Пуск".
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
- В командном окне выполните следующие команды:
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
- Щелкните меню "Пуск".
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
- В командном окне перейдите к месту сохранения 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 для изменения паролей:
- Щелкните меню "Пуск".
- Щелкните правой кнопкой мыши командную строку.
- Выберите "Запуск от имени администратора".
- В командном окне перейдите к месту сохранения setProvider.exe и выполните следующую команду:
setProvider.exe Rsa_WAS
Поставщик по умолчанию Rsa_WAS успешно изменен.
Создание пулов приложений
На этом шаге мы создадим два новых пула приложений, которые мы изолированы друг от друга. Для этого запустите диспетчер IIS:
Нажмите кнопку " Пуск" и введите "INetMgr.exe" и нажмите клавишу ВВОД (если появится запрос, нажмите кнопку "Продолжить " для повышения разрешений).
Нажмите кнопку рядом + с именем компьютера в разделе "Подключения ".
Щелкните пулы приложений.
Выберите задачу в правом заголовке "Добавить пул приложений".
Введите имя AppPool1, а затем нажмите кнопку ОК , как показано ниже.
Повторите предыдущие шаги, но на этот раз используйте имя AppPool2.
Обратите внимание, что удостоверение для AppPool1 и AppPool2 — NetworkService. Мы изменим это учетные записи, созданные ранее, щелкнув правой кнопкой мыши AppPool1 и выбрав дополнительные параметры
В разделе "Модель процесса":
Нажмите кнопку справа от слов Identity.
В окне "Идентификатор пула приложений" нажмите переключатель "Пользовательская учетная запись" и нажмите кнопку "Задать..." пуговица.
Введите следующее имя пользователя и пароль в диалоговом окне "Задать учетные данные".
имя пользователя: AppPoolIdentity1
пароль: password1
Теперь значение удостоверения должно отображаться, как показано ниже:
Нажмите кнопку ОК , чтобы сохранить внесенные изменения.
Повторите предыдущий шаг для AppPool2 и имя пользователя AppPoolIdentity2 и пароль password2.
В диспетчере IIS отображаются следующие элементы (в основном удостоверения пулов приложений изменены):
Проверьте изменения с помощью Блокнота 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 для каждого пула приложений для шифрования анонимных паролей.
Создание новых сайтов
В этом разделе мы создадим два новых сайта и добавим каждый сайт в созданный ранее пул приложений. Чтобы начать, откройте командную оболочку, запущенную под правами администратора, выполнив следующие действия:
Щелкните меню "Пуск".
Щелкните правой кнопкой мыши командную строку.
Выберите "Запуск от имени администратора".
В командном окне перейдите к каталогу wwwroot с помощью следующей команды:
cd /d %SystemDrive%\inetpub\wwwroot
Создайте новый каталог с именем "один" и каталог "два" с помощью следующих команд:
mkdir one
mkdir two
Создайте базовый файл Default.htm в каталогах "один" и "два", которые содержат следующий КОД HTML:
<html><body>Hello from site X</body></html>
Примечание.
Замените "X" на "один" или "два" в зависимости от расположения каталога файла.
Теперь используйте диспетчер IIS для создания двух сайтов:
Нажмите кнопку " Пуск", введите INetMgr.exe и нажмите клавишу ВВОД (если появится запрос, нажмите кнопку "Продолжить ", чтобы повысить уровень разрешений).
+ Нажмите кнопку рядом с именем компьютера в разделе "Подключения".
Щелкните правой кнопкой мыши сайт в представлении дерева в разделе "Подключения" , а затем выберите " Добавить веб-сайт".
Чтобы создать сайт, используйте следующие сведения:
Имя веб-сайта: один
Пул приложений: AppPool1
Физический путь: {location of your inetpub directory}\wwwroot\one
Порт: 81Это должно выглядеть следующим образом после завершения.
Нажмите кнопку OK, чтобы сохранить изменения.
Повторите предыдущие два шага, но на этот раз используйте следующие сведения для второго сайта:
Имя веб-сайта: два
Пул приложений: AppPool2
Физический путь: {location of your inetpub directory}\wwwroot\two
Порт: 82
Теперь вы создали два новых сайта с именем One и Two и добавили их в пулы приложений AppPool1 и AppPool2 .
URL-адреса для тестирования сайтов:
http://localhost:81
для сайта Onehttp://localhost:82
для сайта Two
Создание новых поставщиков для каждого пула приложений
В этом разделе мы создадим новый поставщик RSA для каждого пула приложений:
Щелкните меню .
Щелкните правой кнопкой мыши командную строку.
Выберите "Запуск от имени администратора".
В окне командной строки перейдите к месту сохранения createProvider.exe и выполните следующую команду:
createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1 createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
Настройка анонимной учетной записи для сайта One
В окне командной строки с повышенными привилегиями выполните следующую команду:
setProvider.exe Rsa_app1
Вернитесь в диспетчер IIS и дважды щелкните сайт One.
Дважды щелкните элемент проверки подлинности в заголовке имени компонента.
Выберите анонимную проверку подлинности и нажмите кнопку "Изменить" в заголовке "Задачи" справа, где откроется диалоговое окно "Изменить анонимные учетные данные проверки подлинности".
Выберите параметр "Конкретный пользователь" и нажмите кнопку "Задать ".
Введите имя пользователя AnonymousAccount1 и пароль пароля3 и нажмите кнопку "ОК".
Откроется следующее диалоговое окно:
Нажмите кнопку ОК , чтобы сохранить изменения.
Настройка анонимной учетной записи для двух сайтов
В окне командной строки с повышенными привилегиями выполните следующую команду:
setProvider.exe Rsa_app2
- Вернитесь в диспетчер IIS и дважды щелкните сайт Two.
- Дважды щелкните элемент проверки подлинности в заголовке имени компонента.
- Выберите анонимную проверку подлинности и нажмите кнопку "Изменить" в заголовке "Задачи" справа, в котором откроется диалоговое окно "Изменить анонимные учетные данные".
- Выберите параметр "Конкретный пользователь" и нажмите кнопку "Задать".
- Введите имя пользователя AnonymousAccount2 и пароль пароля4 и нажмите кнопку "ОК".
- Нажмите кнопку ОК , чтобы сохранить внесенные изменения.
Сброс поставщика шифрования до значения по умолчанию
- Вернитесь в окно командной строки с повышенными привилегиями и выполните следующую команду:
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 и предоставили доступ только к удостоверению пула приложений.
Это гарантирует, что удостоверение пула приложений может расшифровать анонимный пароль, который он принадлежит, и никто другой.