0Pricing
Cyber Security Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Потоки OAuth 2.0
  2. OpenID Connect (OIDC)
  3. SAML и федерация
  4. Атаки на токены и усиление защиты
← Назад к Cyber Security Academy