SAML и федерация
Единый вход для предприятий
«SAML и федерация» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Что такое SAML
SAML (язык разметки утверждений безопасности) — стандарт на основе XML для обмена данными об аутентификации и авторизации, широко используемый в корпоративном SSO.
- Он позволяет корпоративному поставщику удостоверений подтверждать личность пользователя для множества приложений.
- SAML 2.0 появился раньше OIDC, но по-прежнему широко используется в идентификации B2B и сотрудников.
Понимание SAML необходимо для защиты корпоративной федерации, где одна ошибка в доверии может поставить под угрозу каждое подключенное приложение.
Роли IdP и SP
В федерации SAML участвуют две основные стороны.
- Поставщик удостоверений (IdP) аутентифицирует пользователя и выпускает утверждения (Okta, Entra ID, Ping).
- Поставщик услуг (SP) — приложение, которое доверяет IdP и предоставляет доступ.
Доверие устанавливается заранее, вне протокола, путем обмена метаданными, включая сертификаты подписи и URL конечных точек.
IdP -> authenticates user, signs assertion
SP -> consumes assertion, grants access
Metadata exchange establishes trust (certs, ACS URLs)Утверждение SAML
Основной объект — это утверждение, XML-документ, сообщающий, что IdP аутентифицировал субъекта.
- Субъект идентифицирует пользователя (NameID).
- Условия определяют период действия и предполагаемую аудиторию.
- AuthnStatement фиксирует, как и когда проходила аутентификация.
- AttributeStatement содержит роли, адрес электронной почты и утверждения о группах.
<saml:Assertion>
<saml:Subject><saml:NameID>user@corp</saml:NameID></saml:Subject>
<saml:Conditions NotOnOrAfter="2026-06-04T10:05:00Z"
AudienceRestriction="https://sp.example"/>
<saml:AuthnStatement .../>
</saml:Assertion>Поток SSO, инициированный SP
Наиболее распространенный вариант — это SSO, инициированный SP.
- Пользователь обращается к SP, который создает
AuthnRequestи перенаправляет его на IdP. - IdP аутентифицирует пользователя и отправляет подписанный
Responseметодом POST обратно в службу потребления утверждений SP (ACS). - SP проверяет утверждение и создает локальный сеанс.
1. SP -> AuthnRequest -> IdP (redirect)
2. user authenticates at IdP
3. IdP -> signed SAMLResponse -> SP ACS (HTTP POST)
4. SP validates -> sessionЦифровые подписи XML — основа доверия
Безопасность SAML основана на цифровых подписях XML. IdP подписывает утверждение и/или ответ своим закрытым ключом, а SP проверяет подпись с помощью доверенного сертификата.
- Подписывайте само утверждение, а не только внешний ответ.
- Проверяйте подпись по закрепленному сертификату IdP из метаданных, а не по сертификату, встроенному в сообщение.
Большинство атак на SAML направлено на логику проверки подписи.
Оборачивание XML-подписи (XSW)
Оборачивание XML-подписи — это класс атак на подпись в SAML. Атакующий сохраняет действительный подписанный элемент, но добавляет второе поддельное утверждение, которое фактически обрабатывает логика приложения.
- Подпись по-прежнему проходит проверку для исходного фрагмента.
- Но бизнес-логика обрабатывает внедренное неподписанное утверждение.
Меры защиты: используйте усиленную библиотеку SAML, проверяйте, что обработке подвергается именно подписанный элемент, и отклоняйте документы с несколькими или неоднозначными утверждениями.
Document after XSW:
<Response>
<Assertion id="evil">attacker claims</Assertion> // read by app
<Assertion id="orig" SIGNED>real user</Assertion> // sig valid here
</Response>Ограничения аудитории и получателя
Утверждение должно быть связано с предназначенным для него SP. SAML предоставляет для этого явные ограничения.
- AudienceRestriction указывает ID сущности SP, для которого действительно утверждение.
- Получатель в SubjectConfirmation должен совпадать с URL ACS.
SP должен обеспечивать выполнение этих проверок. Пропуск проверки аудитории позволяет повторно использовать утверждение, выпущенное для одного приложения, в другом.
Защита от повторного воспроизведения и ошибок времени
Утверждения — это краткосрочные учетные данные, которые можно использовать один раз. SP должны обеспечивать это ограничение.
- Учитывайте
NotBeforeиNotOnOrAfter, допуская лишь небольшое расхождение показаний часов. - Отслеживайте
IDутверждения и отклоняйте любое повторное использование в течение периода действия. - Требуйте TLS для конечной точки ACS.
Без отслеживания повторного использования перехваченное утверждение можно повторно отправить до истечения срока его действия.
SP checks:
now in [NotBefore, NotOnOrAfter] (+- small skew)
assertion.ID not seen before -> store + reject reuseФедерация и цепочки доверия
Федерация масштабирует SSO между организациями, иногда через узлы или брокеры, которые преобразуют протоколы.
- Каждая связь доверия может стать слабым местом: скомпрометированный поставщик удостоверений позволяет выдавать себя за любого пользователя.
- Брокеры удостоверений могут связывать SAML и OIDC, поэтому необходимо тщательно сопоставлять утверждения.
Применяйте принцип минимальных привилегий при сопоставлении атрибутов и отслеживайте появление неожиданных новых регистраций поставщиков услуг.
Распространённые уязвимости SAML
Распространённые сценарии отказа SAML, которые стоит проверять:
- Подпись не проверяется или подписан ответ, но не утверждение.
- Система уязвима к обёртыванию XML-подписи.
- Отсутствуют проверки аудитории и получателя.
- Нет защиты от повторного воспроизведения или установлены чрезмерно длительные периоды действия.
- На стороне поставщика услуг выполняется разбор XML с поддержкой внешних сущностей (XXE).
- Система доверяет сертификату, встроенному в сообщение, вместо закреплённых метаданных.
Disable external entities in the XML parser:
parser.setFeature(
"http://apache.org/xml/features/disallow-doctype-decl", true)SAML и OIDC
Оба протокола обеспечивают SSO, но отличаются архитектурой.
- SAML использует XML и привязки браузера через POST/перенаправление, широко применяется в корпоративной среде и имеет зрелые инструменты.
- OIDC использует JSON/JWT, удобен для REST и лучше подходит для мобильных приложений и одностраничных приложений.
Многие организации используют оба протокола. Специалисты по защите должны знать правила проверки утверждений для протокола, который использует конкретное приложение, поскольку поверхность атаки различается.
Быстрая проверка: предотвращение XSW
Выберите наиболее эффективную защиту от описанной атаки.
Итоги: SAML и федерация
Основные выводы:
- SAML — это корпоративный SSO на основе XML между поставщиком удостоверений и поставщиком услуг с использованием подписанных утверждений.
- Безопасность зависит от правильной проверки XML-подписи с использованием закреплённого сертификата.
- Защищайтесь от обёртывания XML-подписи, повторного воспроизведения и XXE.
- Всегда применяйте ограничения для аудитории и получателя, а также проверяйте периоды действия.
- Федерация масштабирует доверие, но увеличивает радиус поражения при компрометации поставщика удостоверений.
Часто задаваемые вопросы
Урок «SAML и федерация» бесплатный?
Да — полный текст урока «SAML и федерация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «SAML и федерация»?
Единый вход для предприятий Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «SAML и федерация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.