ОБЗОРЫ
Появление Web-сервисов добавило еще один слой, на котором нужно обеспечивать защиту информации
Продолжение. Начало см. PC Week/RE, N 27/2004, с. 20; N 28/2004, с. 19; N 29/2004, с. 18; N 30/2004, с. 20; N 31/2004, с. 22.
Организация безопасности данных - многоуровневая задача. На верхнем, техническом, уровне она распадается на идентификацию клиента, проверку прав его доступа, шифрование сообщений, пересылаемых между ним и Web-сервисом, обеспечение целостности документов путем их цифрового подписания. Средствами для этого являются технологии шифрования, оформления политик безопасности, каталогизации прав доступа и ключей, установления доверительных отношений между разными доменами, аудита и пр.
Сегодня есть несколько наборов спецификаций, говорящих, как решать эти вопросы применительно к Web-сервисам. Первый относится к семейству GXA (Global XML Web Services Architecture), предлагаемому группой компаний, включающей IBM и Microsoft. Он состоит из спецификаций серии WS-*: WS-Security, WS-Trust, WS-SecureConversation, WS-Federation, WS-Policy и пр. Все они проходят утверждение в качестве потенциальных стандартов W3C и OASIS.
Второй набор предлагается группой фирм, более близких к Sun Microsystems и Oracle. К нему относятся две группы стандартов OASIS - SAML и XACML, а также продукция альянса Liberty. Заметим, что в отличие от WS-* это по большей части открытые разработки, т. е. производители ПО могут реализовывать многие из них в своих продуктах бесплатно. Стоит отметить также, что в работе над SAML принимают участие и традиционные противники Sun/Oracle, такие, как те же IBM и Microsoft. Хотя, конечно, роль "первой скрипки" здесь отводится не им.
На 90% оба стека технологий решают однотипные задачи, хотя и различными способами. Некоторые из спецификаций явно предусматривают возможности взаимодействия с системами, построенными на базе технологий конкурентов, и в этом смысле SAML более универсален. Общей базой для всех решений безопасности, похоже, становится WS-Security, а вот в других областях подобной однозначности нет. Например, в качестве основы для построения средств однократной идентификации пользователя большую популярность в уже реализованных решениях приобрели SAML и продукция Liberty. По всей видимости, в обозримой перспективе будут сосуществовать все описываемые ниже технологии.
Рис. 1. Стек протоколов обеспечения безопасности Web-сервисов в GXA
Данный раздел обзора "Web-сервисы в корпоративной среде" состоит из нескольких частей - вначале будут рассмотрены средства GXA для обеспечения взаимной безопасности двух взаимодействующих через Web-сервисы сторон, затем - как в GXA организуются политики безопасности и взаимодействие многих сторон, и, наконец, технологии, выходящие под эгидой OASIS и Liberty Alliance.
Web Services Security (WS-Security) и др.
Статус: авторская версия, April 2002.
Авторы: IBM, Microsoft, VerySign.
Опирается на: XML Encryption, XML Signature.
Дополняется: Web Services Security Addendum.
Стандартизация: спецификация лежит в основе SOAP Message Security, имеющего статус рабочего документа OASIS, август 2003.
WS-Security описывает базовый слой для многих других технологий в области безопасности Web-сервисов - а именно то, как обеспечить целостность, конфиденциальность и неподдельность авторства (аутентичность) одного отдельно взятого SOAP-сообщения, передаваемого в рамках уже установленных сессий, контекста и политики безопасности. Она обобщает ряд ранних наработок IBM и Microsoft в этой области, в частности SOAP-SEC, WS-Security and WS-License и пр. В спецификации не говорится о том, как устанавливать контекст сессии, производить аутентификацию сторон, обмен ключами, формировать производные ключи, определять границы доверия доменов. Это задачи других спецификаций GXA. Кроме того, в ней задается только рамочная архитектура - для производства реальных операций она полагается на уже имеющиеся технологии вроде PKI, Kerberos и SSL.
Для достижения сформулированной выше цели спецификация определяет набор расширений SOAP - XML-тегов, позволяющих описывать метаданные о защищенной информации, правила ее размещения внутри SOAP-конверта, правила замещения незашифрованных данных зашифрованными. В ней также задается три основных механизма безопасности: передача жетона безопасности (ЖБ), обеспечение целостности сообщения и его конфиденциальности.
Жетоны безопасности
ЖБ представляют собой некоторый набор утверждений, которые делает отправитель сообщения. Смысл этих утверждений в WS-Security не оговаривается, так как он зависит от конкретной реализации. Утверждениями могут быть имя пользователя, ключ, разрешение на операцию и т. п. Жетон может быть заверен (но не обязательно) цифровой подписью, проверяя которую получатель удостоверяется в том, что отправитель знает необходимый ключ, а стало быть, заслуживает доверия. Важным классом являются утверждения, подписанные авторитетной инстанцией, например сертификаты X.509, задающие связь между некой сущностью (identity) и общедоступным ключом. Обладатель такого сертификата может применять связанный с ним секретный ключ для подписания своих собственных утверждений, которые будут ассоциированы с сущностью через сертификат.
Стороны могут принимать и не подтвержденные подписью ЖБ - в случае, когда уже установлены доверительные отношения между отправителем и получателем, скажем, по защищенному каналу. Особый класс неподтвержденных претензий - доказательства обладания (proof-of-possession), в которых отправитель демонстрирует, что знает определенные сведения, и факт этого знания заинтересованные участники могут проверить. Такой претензией, скажем, может быть комбинация имени пользователя и зашифрованного пароля доступа.
Средством реализации модели жетонов является вводимый спецификацией блок в заголовке SOAP-сообщения. Сообщение может иметь несколько таких блоков, предназначенных для разных SOAP-узлов на его пути. Элементы блока хранят сведения об операциях шифрования и подписания, производимых над другими элементами сообщения - включая части его тела, заголовка и вложений (attachments). Заполнение блока происходит по мере произведения этих операций, что решает проблему влияния более поздних этапов на более ранние. В этом же блоке хранятся двоичные жетоны и сертификаты безопасности (элемент), выданные сторонними системами, например X.509 или Kerberos. Стандарт предусматривает механизм ссылки из текста сообщения на данные в них, в частности для извлечения ключа. Для этого используется синтаксис аналогичный синтаксису, языка XPath. Имеется способ для извлечения жетонов из внешних источников по ссылке на них (элемент). Неподтвержденные претензии оформляются здесь же - в элементе.
<?xml version="1.0" encoding="utf-8"?> <S:Envelope xmlns:S="http://www.w3.org/2001/12/ soap-envelope"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:wsse="http://schemas.xmlsoap.org/ws/ 2002/04/secext" xmlns:xenc="http://www.w3.org/2001/04/ xmlenc#"> <S:Header> ... <wsse:Security> <wsse:BinarySecurityToken ValueType="wsse:X509v3" ld="X509Token" EncodingType="wsse:Base64Binary"> MIIEZzCCA9CgAwlBAglQEmtJZcOrqrKh5i... </wsse:BinarySecurityToken> <xenc:EncryptedKey> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/ xmlenc#rsa-1_57> <ds:Keylnfo> <ds:KeyName>CIl=Hiroshi Maruyama, C=JP</ds:KeyName> </ds:Keylnfo> <xenc:CipherData>
<xenc:CipherValue>d2FpbmdvbGRfEOIm4byVO... </xenc:CipherValue> </xenc:CipherData> <xenc:ReferenceList> <xenc:DataReference URI="#enc1"/> </xenc:ReferenceList> </xenc:EncryptedKey> <ds:Signature> <ds:Signedlnfo> <ds:CanonicalizationMetfiod Algorithm="htfp://www. w3. org/ 2001/10/xml-exc-с 14n#"> <ds:SignatureMethod Algorithm= "Mtp’/.’www w3 nm/pnno/f(10)/ xmldsig#rsa-sha1"/> <ds:Reference> <ds:Transforms> <ds:Transform Algorithm= "http://...#RoutingTransform"/> <ds:Transform Algorithm= "http://www.w3.org/2001/ 10/xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm= "http://www.w3.org/2000/ 09/xmldsig#sha1"/> <ds:DigestValue>LyLsF094hPi4wPU... </ds:DigestValue> </ds:Reference> </ds:Signedlnfo> <ds:SignatureValue> Hp1ZkmFZ/2kQLXDJbchm5gK... </ds:SignatureValue> <ds:Keylnfo> <wsse:SecurityTokenReference> <wsse:Reference URI=" #X509Token"/> </wsse:SecurityTokenReference> </ds:Keylnfo> </ds:Signature> </wsse:Security> </S:Header> <S:Body> <xenc:EncryptedData Type="http://www.w3.org/2001/04/ xmlenc#Element" ld="end"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/ xmlenc#3des-cbc"/> <xenc:CipherData>
<xenc:CipherValue>d2FpbmdvbGRfEOIm4byVO... </xenc:CipherValue> </xenc:CipherData> </xenc:EncryptedData> </S:Body> </S:Envelope> |
Рис. 2. Пример SOAP-сообщения с данными WS-Security. Пространство имен
ds принадлежит спецификации XML Signature, xenc - XML Encription, а wsse - WS-Security
<?xml version="1.0" encoding="utf-8"?> <S11:Envelopexmlns:S11="..."xmlns:ds="..." xmlns:wsse="..." xmlns:wst="..." xmlns:wsc="..."> <S11:Header> ... <wsse:Security> <wsc:SecurityContextTokenwsu:ld="MylD"> <wsc:ldentifier>uuid:.. </wsc:ldentifier> </wsc:SecurityContextToken> <ds:Signature> ... <ds:Keylnfo> <wsse:SecurityTokenReference> <wsse:Reference URI="ylD> </wsse:SecurityTokenReference> </ds:Keylnfo> </ds:Signature> </wsse:Security> </S11:Header> <S1 1 :Body wsu:ld="MsgBody"> <tru:StockSymbolxmlns:tru="http://fab-rikaml 23.com/payloads"> QQQ </tru:StockSymbol> </S11:Body> </S11:Envelope> |
Рис. 3. Пример использования WS-SecureConversation в рамках уже установленной сессии
со сгенерированным контекстом безопасности и ключом. Этот ключ используется для подписания сообщения
Подписание и шифрование
Для обеспечения целостности сообщения WS-Security опирается на стандарт цифровой подписи XML Signature. Все подписи хранятся в блоке. Спецификация позволяет присоединить к сообщению несколько подписей (имеющих даже разные типы), относящихся к различным, в том числе перекрывающимся, его частям.
Конфиденциальность достигается встраиванием в WS-Security стандарта XML Encryption. Опять-таки можно шифровать любую комбинацию из блоков тела сообщения, его заголовка или вложений при помощи схем с закрытым и открытым ключом. Ключи могут быть разные - в метаданных каждого зашифрованного блока сведения о ключе указываются в специальном блоке. Механизм шифрования поддерживает несколько схем шифрования, предусматривается также схема передачи зашифрованного ключа в самом сообщении.
В заключение стоит сказать, что WS-Security задает еще некоторые правила кодирования двоичных жетонов безопасности, в частности подробно рассматриваются правила кодирования сертификатов X.509, "билетов" Kerberos и включения замаскированных (opaque) зашифрованных ключей. Предусмотрен и механизм расширения для включения в сообщения дополнительных полей мандатов (credentials).
Web Services Trust Language (WS-Trust)
Статус: черновик, версия 1.1, май 2004.
Авторы: BEA Systems, Computer Associates, IBM, Layer 7 Technologies, Microsoft, Netegrity, Oblix, OpenNetwork Technologies, Ping Identity, Reactivity, RSA Security, VeriSign и Westbridge Technology.
Для того чтобы установить защищенное соединение между двумя участниками, им необходимо явно или неявно обменяться некими мандатами доверия. И каждая из сторон должна иметь механизм, позволяющий определить, может ли она доверять мандату, присылаемому ей от ее визави. WS-Trust определяет средства для этого, а именно: расширения WS-Security, обеспечивающие выдачу, обновление и проверку жетонов безопасности, а также установление доверительных отношений между доменами, в том числе с использованием услуг посредников.
Рис. 4. Иллюстрация установления доверительных отношений между доменами с помощью WS-Trust.
Стрелки изображают коммуникационные пути; клиент может получить жетон напрямую от сервиса ЖБ или неявно.
Он доказывает Web-сервису авторизованное применение жетона. Web-сервис либо доверяет инстанции, выдающей жетоны
безопасности, либо запрашивает сервис жетонов безопасности проверить полученный им ЖБ.
Модель безопасности, определенная в WS-Trust, основывается на многостадийном процессе, в ходе которого Web-сервис проверяет сообщения клиента на предмет правомочности включенных в них ЖБ. При отсутствии подобных доказательств или несовпадении списка утверждений жетона с тем, что сервис считает нужным, производится отказ в обслуживании. Сервис может перечислить требуемые им утверждения и доказательства, а также связанную с ними информацию, в политиках, описываемых спецификациями WSPolicy и WS-PolicyAttachment. Для усиления безопасности аутентификация запросов предварительно осуществляется еще и на сетевом и транспортном уровнях, например, при помощи IPSec и SSL.
Один из способов, которым клиент может продемонстрировать наличие авторизации на использование ЖБ, состоит в цифровом подписании каждого утверждения в запросе. При этом клиент должен приложить к сообщению еще один жетон безопасности, например сертификат PKI или X.509. Такой жетон должен иметь вес для сервиса, т. е. быть выдан авторитетной инстанцией, именуемой в спецификации сервисом жетонов безопасности (СЖБ). Для каждого сервиса эта инстанция может быть своя, и она указывается в политике безопасности. Но клиент и сам может потребовать от сервиса предъявления доказательств своей идентичности, например жетона, выданного признаваемым им СЖБ. Таким образом формируется иерархия доверительных отношений между разными доменами, в вершине которой находится СЖБ.
Механизмы установления доверия
WS-Trust выделяет четыре способа выстраивания доверительных отношений:
- прямые доверительные отношения - запрос на жетон, необходимый для доступа к сервису, делается в СЖБ самим клиентом или третьей стороной от его имени;
- делегированный запрос - запрос от клиента передается сервису через посредника и от его имени. Посредник и предъявляет свои полномочия;
- получение жетона "out of band" - авторитетная инстанция передает ЖБ сервису заранее, не дожидаясь запроса со стороны своего клиента. Сервис сохраняет жетон в ожидании действий клиента;
- все жетоны определенного типа считаются заслуживающими доверия. Для сервиса определяется набор авторитетных инстанций, которым он доверяет, и при поступлении сообщения он проверяет, имеется ли в сообщении ЖБ объявленного типа от одной из них. Например, можно принимать все жетоны Kerberos. У этой модели есть модификации. Первая - это дерево доверительных отношений, когда сервис готов последовательно проверять жетон по цепочке связанных узами доверия авторитетов. Вторая - служба аутентификации, к которой сервис обращается для подтверждения каждого запроса к себе.
Кроме того, спецификация определяет инфраструктуру работы с жетонами безопасности - протоколы обмена сообщениями (т.е. наборы SOAP-команд), необходимые для получения ЖБ (в том числе с ключами шифрования), и соответствующие описания Web-сервисов, выдающих эти жетоны. Команды запросов и ответов этих протоколов (/) помещаются в тело SOAP-сообщений, а заголовки обязаны содержать блок , нужный для авторизации сообщений.
Схемы обмена такими сообщениями могут быть достаточно сложными, например, в рамках протокола challenge - response ("брошенный вызов - ответ") Web-сервис авторизации может попросить от клиента дополнительных сведений, скажем, если ему не понравилась печать о времени выдачи в предъявленном ЖБ. Это может быть требование подписать какую-либо строку, сгенерированную сервисом, или запрос на дополнительный жетон безопасности.
Как итог можно сказать, что модель WS-Trust, элементами которой являются утверждения, политики и жетоны безопасности, обобщает несколько более специфических моделей авторизации: на базе сущностей, списков контроля доступа и возможностей. Она допускает использование существующих технологий, таких, как сертификаты с открытым ключом X.509, XML-жетоны, билеты Kerberos (опирающиеся на совместное использование секретного ключа) и даже хэш-функции от паролей.
Web Services Secure Conversation Language (WS-SecureConversation)
Статус: авторский документ, версия 1.1, май 2004.
Авторы: OpenNetwork, Layer 7, Netegrity, Microsoft, Reactivity, IBM, VeriSign, BEA, Oblix, RSA Security, Westbridge, Computer Associates, Ping Identity.
Эта спецификация определяет расширения WS-Security и WS-Trust, необходимые для создания безопасного канала, по которому можно переслать не одно, а много сообщений. Для решения данной задачи применяются три механизма:
- создание общего контекста безопасности;
- совместное использование этого контекста (в том числе его расширение дополнительными сведениями);
- генерация и работа с последовательностями производных ключей.
Применение этих механизмов позволяет поднять как общий уровень безопасности, так и эффективность обмена сообщениями.
Контекст безопасности, определяемый WS-SecureConversation, передается внутри элемента в жетоне, обозначаемом тегом (жетон контекста безопасности, ЖКБ). Жетон содержит одно обязательное поле - уникальный двоичный идентификатор контекста, а также любое число дополнительных. Он имеет имя, указываемое в атрибуте wsu:Id, по которому на него можно ссылаться из других мест сообщения. Подобные ссылки делаются при помощи механизмов WS-Security - элемента - и применяются, например, для указания информации о ключе шифрования, использованном для кодирования определенной части сообщения.
Рис. 5. Протокол "бросания вызова" WS-Trust
ЖКБ генерируется системой по стандартному запросу WS-Trust , в котором в качестве параметра передается специальный URI. Задается три алгоритма для его создания и распространения:
- сервисом жетонов по запросу от инициатора создания контекста. Далее инициатор рассылает контекст всем участникам;
- одним из участников; затем он передается другим в SOAP-сообщениях. Эта модель работает, когда отправителю можно доверить создание нового контекста;
- через процесс торга/обмена, т. е. множественного обмена сообщениями.
Кроме того, в WS-SecureConversation есть возможность потребовать от сервиса пополнить контекст безопасности дополнительными данными. Для этого применяется механизм команд спецификации WS Addressing - возможность отсылки сервису запроса с URI-идентификатором требуемого действия, помещаемым в поле заголовка.
И наконец, спецификация задает механизм генерации производных ключей. Установленный контекст безопасности предполагает, что стороны обмена сообщениями имеют какой-то общий секрет, содержащий и ключи шифрования. Однако производные от этого секрета ключи усиливают безопасность. В частности, стороны могут применять разные ключи для подписания и шифрования документов. Нередко используется и такой прием: генерация нового производного ключа при отправке очередного сообщения. Для оформления подобных ключей в переписке применяется жетон в блоке заголовка сообщения. Поля этого жетона указывают, как сформировать нужный ключ, например, поле указывает на номер поколения применяемых ключей. Производные ключи оформляются как ЖБ, имеющие специальный URI-тип. Они применяются в соответствии с требованиями WS-Security.
***
Три описанные спецификации вместе с WS-Policy, которая будет рассмотрена в следующей части, представляют достаточно инструментов для формирования инфраструктуры безопасности - высокоуровневого обмена ключами, аутентификации, основанного на политиках контроля доступа, аудита и установления сложных доверительных отношений. Все остальные технологии являются вспомогательными - они дают сценарии использования некоторых моделей безопасности.
(Продолжение следует)