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


Общие сведения о безопасности

Платформа безопасности в API веб-служб Windows (WWSAPI) предоставляет:

  • Целостность сообщений, конфиденциальность, обнаружение воспроизведения и проверка подлинности сервера с использованием безопасности транспорта.
  • Проверка подлинности клиента, например проверка маркера безопасности, проверка доверия сертификатов и проверки отзыва и т. д. с использованием безопасности сообщений SOAP или безопасности транспорта.

Модель программирования безопасности

Безопасность связана с каналами связи. Защита канала состоит из следующих шагов.

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

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

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

Выбор привязок безопасности

При проектировании безопасности для приложения основным решением является выбор привязок безопасности, которые будут включены в описание безопасности. Ниже приведены некоторые рекомендации по выбору привязок безопасности, подходящих для сценария безопасности приложения. Полезная эвристика заключается в том, чтобы сначала понять, какие типы учетных данных безопасности (например, сертификаты X.509, имя пользователя и пароли домена Windows, определенные приложением имя пользователя и пароли) будут доступны приложению, а затем выбрать привязку безопасности, которая может использовать этот тип учетных данных.

  • Безопасность транспорта, где безопасность применяется на уровне потока байтов транспорта (ниже границ сообщений SOAP), является первым вариантом, который следует учитывать.

  • Следующим вариантом является безопасность в смешанном режиме, где безопасность транспорта защищает подключение, а заголовок WS-Security в сообщении SOAP обеспечивает проверку подлинности клиента. Следующие привязки используются в сочетании с одной из привязок безопасности транспорта, описанных в предыдущем разделе.

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

    • При проверке подлинности клиента с помощью билета Kerberos приложение может использовать WS_KERBEROS_APREQ_MESSAGE_SECURITY_BINDING для предоставления данных проверки подлинности.

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

    • В федеративном сценарии безопасности клиент сначала получает маркер безопасности, выданный службой маркеров безопасности (STS), а затем представляет выданный маркер службе. На стороне клиента. Чтобы получить маркер безопасности из службы маркеров безопасности, приложение может использовать WsRequestSecurityToken. Кроме того, приложение может использовать библиотеку поставщика маркеров безопасности на стороне клиента, например CardSpace или LiveID, а затем использовать их выходные данные для локального создания маркера безопасности с помощью WsCreateXmlSecurityToken. В любом случае, когда маркер безопасности станет доступен клиенту, он может быть представлен службе с помощью описания безопасности, содержащего WS_XML_TOKEN_MESSAGE_SECURITY_BINDING. На стороне сервера. Если маркер безопасности, выданный маркером безопасности, является маркером SAML, сервер может использовать описание безопасности с WS_SAML_MESSAGE_SECURITY_BINDING.

      Примечание

      Windows 7 и Windows Server 2008 R2: WWSAPI поддерживает только Ws-Trust и Ws-SecureConversation, как определено в профиле безопасности упрощенных веб-служб (LWSSP). Дополнительные сведения о реализации корпорации Майкрософт см. в разделе Синтаксис сообщения статьи LWSSP.

       

  • Последним вариантом является использование привязок проверки подлинности без привязки защиты, например WS_SSL_TRANSPORT_SECURITY_BINDING. Это приведет к передаче учетных данных в виде ясного текста и может повлиять на безопасность. Использование этого параметра должно быть тщательно оценено, чтобы убедиться, что в результате отсутствуют уязвимости. Примером потенциального использования является обмен сообщениями между внутренними серверами через безопасную частную сеть. Этот параметр поддерживается в следующих конфигурациях.

    Для включения этого параметра необходимо явно задать для WS_PROTECTION_LEVEL значение, отличное от WS_PROTECTION_LEVEL_SIGN_AND_ENCRYPT.

Каналы и безопасность

Как отмечалось выше, безопасность ограничена каналами. Кроме того, операции канала последовательно сопоставляются с шагами безопасности во всех привязках безопасности.

  • Создание канала. Набор привязок безопасности, указанных в описании безопасности, проверяется и после этого остается фиксированным для канала. Также определяется форма стека каналов, включая любые сторонние каналы, которые будут использоваться для WS-Trust переговоров.
  • Открытие канала. Все учетные данные, предоставленные в составе привязок безопасности, загружаются и устанавливаются сеансы безопасности. Как правило, открытый канал содержит "динамическое" состояние безопасности. Открытие клиентского канала также указывает адрес конечной точки сервера, для которого будет выполняться проверка подлинности сервера средой выполнения.
  • Между открытием и закрытием канала: сообщения можно безопасно отправлять и получать на этом этапе.
  • Отправка сообщений. Маркеры контекста безопасности получаются или обновляются по мере необходимости, и к каждому передаваемом сообщению применяется безопасность в соответствии с описанием безопасности. Ошибки, возникающие при применении безопасности, возвращаются в приложение как ошибки отправки.
  • Получение сообщения. Безопасность проверяется для каждого полученного сообщения в соответствии с описанием безопасности. Все ошибки проверки безопасности сообщений возвращаются в приложение как ошибки получения. Эти ошибки для каждого сообщения не влияют на состояние канала или последующие приемы. Приложение может отменить сбой получения и перезапустить получение для другого сообщения.
  • Прерывание канала. Канал может быть прерван в любое время, чтобы остановить все ввод-вывод на канале. При прерывании канал перейдет в состояние сбоя и не будет разрешать больше отправлять или получать. Однако канал может по-прежнему сохранять некоторое "динамическое" состояние безопасности, поэтому для очистки всех состояний потребуется последующее закрытие канала.
  • Закрытие канала. Состояние безопасности, созданное при открытии, удаляется, а сеансы удаляются. Маркеры контекста безопасности отменяются. Стек канала остается, но не содержит "динамического" состояния безопасности или загруженных учетных данных.
  • Бесплатный канал. Стек каналов, созданный при создании, вместе со всеми ресурсами безопасности освобождается.

API-интерфейсы обеспечения безопасности

Документация по API для обеспечения безопасности сгруппирована в следующие разделы.

Безопасность

При использовании API безопасности WWSAPI приложения сталкиваются с несколькими рисками безопасности:

Случайная неправильная настройка

WWSAPI поддерживает ряд параметров конфигурации, связанных с безопасностью. См. пример WS_SECURITY_BINDING_PROPERTY_ID. Некоторые из этих параметров, например WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS позволяют приложению снизить уровень безопасности по умолчанию, предоставляемый различными привязками безопасности. Использование таких параметров должно быть тщательно оценено, чтобы убедиться в отсутствии результирующего вектора атаки.

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

Хранение конфиденциальной информации в памяти

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

Отказ в обслуживании

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

Пока сообщение обрабатывается на сервере, состояние безопасности сохраняется в куче сообщений. Приложение может ограничить потребление памяти во время обработки безопасности, уменьшая размер кучи до WS_MESSAGE_PROPERTY_HEAP_PROPERTIES. Кроме того, некоторые привязки безопасности, такие как WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING, могут привести к выделению сервером ресурсов от имени клиента. Ограничения для этих ресурсов можно настроить с помощью следующих WS_SECURITY_BINDING_PROPERTY_ID значений:

  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL

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