• SAML
  • SSO
  • uwierzytelnianie

SAML arkusz oszukańczy dotyczący bezpieczeństwa

Szybkie odniesienie do Security Assertion Markup Language (SAML) i jego funkcji bezpieczeństwa. Zrozum kluczowe terminy, wskazówki dotyczące wdrażania i najlepsze praktyki zabezpieczania uwierzytelniania i autoryzacji w oparciu o SAML w środowiskach korporacyjnych.

Simeng
Simeng
Developer

Wprowadzenie

Security Assertion Markup Language (SAML) to otwarty standard wymiany danych uwierzytelniania i autoryzacji między stronami, w szczególności między dostawcą tożsamości a dostawcą usług. SAML to język znaczników oparty na XML dla oświadczeń o bezpieczeństwie, który jest używany do jednokrotnego logowania (SSO) i federacji tożsamości. Jest powszechnie stosowany w środowiskach korporacyjnych do celów uwierzytelniania i autoryzacji.

Standardowy przepływ uwierzytelniania SAML

  1. Użytkownik żąda dostępu do aplikacji klienta, która działa jako dostawca usług (SP).
  2. SP wysyła żądanie uwierzytelnienia SSO SAML do dostawcy tożsamości (IdP) i przekierowuje użytkownika do IdP.
  3. IdP prosi użytkownika o dane uwierzytelniające, jeśli użytkownik nie jest już uwierzytelniony.
  4. Użytkownik wprowadza dane uwierzytelniające, a IdP dokonuje uwierzytelnienia użytkownika.
  5. IdP wysyła oświadczenie odpowiedzi SAML do SP, które zawiera status uwierzytelnienia użytkownika i atrybuty. Następnie IdP przekierowuje użytkownika z powrotem do SP.
  6. SP otrzymuje oświadczenie odpowiedzi SAML, weryfikuje je i udziela dostępu użytkownikowi.

Czynniki bezpieczeństwa w SAML

SP entity ID

Wyobraź sobie, że SP entity ID to unikalna legitymacja dla SP w kontekście uwierzytelnienia SAML. To jak odcisk palca, który pomaga IdP rozpoznać SP podczas ich interakcji. Ten identyfikator jest kluczową częścią metadanych SP, udostępnianych IdP w celu budowania zaufania i zapewnienia bezpiecznej komunikacji.

Wykorzystanie SP entity ID:

  1. Rejestracja metadanych: Atrybut EntityID jest częścią metadanych SP, udostępnianych IdP w celu nawiązania zaufania. Służy jako unikalny identyfikator do zlokalizowania metadanych SP i uzyskania wymaganych szczegółów konfiguracyjnych dla interakcji SAML.
  2. Żądanie uwierzytelnienia: SP entity ID jest zawarty w żądaniu uwierzytelnienia SAML wysyłanym do IdP, wyraźnie identyfikującym proszący SP. IdP używa tych informacji do zweryfikowania żądania i określenia odpowiedniego kontekstu uwierzytelnienia.
  3. Odbiorca oświadczenia: Po pomyślnym uwierzytelnieniu użytkownika, SP entity ID jest zawarty w oświadczeniu SAML jako ograniczenie odbiorcy. Ta miara zapewnia, że oświadczenie jest przeznaczone wyłącznie dla wyznaczonego SP i nie może być wykorzystane przez inne SP.

IdP entity ID

Z kolei IdP entity ID to specjalna etykieta dla IdP. Pomaga zidentyfikować IdP w ekosystemie SAML, ułatwiając jego odnalezienie przez SP. Ten identyfikator jest zawarty w metadanych IdP i jest udostępniany SP, wspierając zaufaną relację i bezpieczne połączenia.

Wykorzystanie IdP entity ID:

  1. Rejestracja metadanych: Atrybut EntityID jest również zawarty w metadanych IdP, udostępnianych SP w celu nawiązania zaufania. Służy jako unikalny identyfikator do zlokalizowania metadanych IdP i uzyskania niezbędnych szczegółów konfiguracyjnych dla SP do zweryfikowania odpowiedzi SAML.
  2. Wystawca oświadczenia: Gdy IdP generuje oświadczenie SAML, zawiera swoje entity ID jako wystawcę. Ten atrybut wskazuje jednostkę, która wystawiła oświadczenie i pomaga SP sprawdzić autentyczność i integralność oświadczenia.

Stan przekierowania

Stan przekierowania to parametr używany w uwierzytelnianiu SAML, który ułatwia transfer informacji o stanie między SP a IdP. Działa jako most między przepływami SSO zainicjowanymi przez SP i IdP, zachowując kontekst użytkownika i stan sesji podczas procesu uwierzytelniania.

Wykorzystanie stanu przekierowania:

  1. Zachowanie kontekstu użytkownika: Stan przekierowania pozwala SP przekazywać dodatkowe informacje do IdP podczas procesu uwierzytelniania. Informacje te mogą zawierać stan sesji użytkownika, kontekst aplikacji lub inne istotne dane, które muszą być zachowane w trakcie przepływu SAML. Na przykład adres URL lub identyfikator sesji aplikacji, do której użytkownik miał dostęp przed uwierzytelnieniem.
  2. Zapobieganie atakom CSRF: Stan przekierowania jest kluczowy dla zapobiegania atakom typu cross-site request forgery (CSRF) podczas uwierzytelniania SAML. Włączając unikalną i nieprzewidywalną wartość stanu przekierowania w żądanie uwierzytelnienia, SP może zweryfikować integralność odpowiedzi SAML i zapewnić, że odpowiada ona pierwotnemu żądaniu.

Podpis oświadczenia

Podpis oświadczenia to krytyczna funkcja bezpieczeństwa w SAML, która zapewnia integralność, autentyczność i niezaprzeczalność oświadczeń SAML. Dotyczy to cyfrowego podpisania oświadczenia SAML za pomocą prywatnego klucza IdP, co pozwala SP zweryfikować pochodzenie oświadczenia i wykryć wszelkie próby fałszowania.

Jak działa podpis oświadczenia:

  1. Generowanie pary kluczy: IdP generuje parę klucza publicznego-prywatnego, gdzie prywatny klucz jest używany do podpisywania oświadczenia SAML, a klucz publiczny jest udostępniany SP do weryfikacji. Ten asymetryczny schemat szyfrowania zapewnia, że tylko IdP może podpisać oświadczenie, podczas gdy SP może je zweryfikować.
  2. Udostępniony certyfikat: IdP dostarcza SP swój certyfikat klucza publicznego, który zawiera klucz publiczny używany do weryfikacji podpisu oświadczenia. Zwykle ten certyfikat będzie częścią metadanych IdP lub SP może go uzyskać przez bezpieczny proces pobierania.
  3. Podpisywanie oświadczeń: Po uwierzytelnieniu użytkownika, IdP cyfrowo podpisuje oświadczenie SAML za pomocą swojego prywatnego klucza. Ten podpis jest zawarty w oświadczeniu, wraz z certyfikatem klucza publicznego, co pozwala SP zweryfikować autentyczność oświadczenia.
  4. Weryfikacja oświadczeń: Po otrzymaniu oświadczenia SAML, SP używa klucza publicznego IdP do weryfikacji podpisu oświadczenia. Jeśli podpis jest ważny, SP może ufać oświadczeniu i przyznać dostęp użytkownikowi.

Szyfrowanie oświadczeń

Oprócz podpisywania, SAML obsługuje również szyfrowanie oświadczeń w celu ochrony wrażliwych atrybutów użytkownika i danych przesyłanych między IdP a SP. Poprzez szyfrowanie oświadczenia, IdP zapewnia, że tylko zamierzony odbiorca (SP) może zdezaktywować i uzyskać dostęp do zawartości oświadczenia, chroniąc prywatność i poufność użytkownika. Szyfrowanie oświadczeń jest opcjonalnym elementem bezpieczeństwa w SAML, który może być używany w celu zwiększenia ochrony danych.

Wykorzystanie szyfrowania oświadczeń:

  1. Ochrona wrażliwych atrybutów: Szyfrowanie oświadczeń jest szczególnie użyteczne do ochrony wrażliwych atrybutów użytkownika, takich jak dane osobowe (PII), finansowe lub medyczne. Poprzez szyfrowanie tych atrybutów wewnątrz oświadczenia, IdP zapobiega nieautoryzowanemu dostępowi i zapewnia poufność danych.

Jak działa szyfrowanie oświadczeń:

  1. Wymiana kluczy: IdP i SP ustanawiają bezpieczny mechanizm wymiany kluczy w celu współdzielenia kluczy szyfrowania dla ochrony oświadczenia SAML. Może to obejmować używanie kluczy szyfrowania symetrycznego lub schematów szyfrowania kluczem publicznym, w zależności od algorytmu szyfrowania i strategii zarządzania kluczami.
  2. Szyfrowanie atrybutów: Po wygenerowaniu oświadczenia SAML, IdP szyfruje wrażliwe atrybuty użytkownika za pomocą współdzielonego klucza szyfrowania. Zaszyfrowane atrybuty są osadzone wewnątrz oświadczenia, zapewniając, że tylko SP może zdezaktywować i uzyskać dostęp do danych.
  3. Odszyfrowanie oświadczenia: Po otrzymaniu zaszyfrowanego oświadczenia, SP dezaszyfruje chronione atrybuty za pomocą współdzielonego klucza szyfrowania. Ten proces pozwala SP na dostęp do wrażliwych danych użytkownika w sposób bezpieczny i ich odpowiednie przetworzenie.

Metody wiązania

Metody wiązania w SAML definiują, jak wiadomości SAML są przesyłane między SP a IdP za pomocą różnych protokołów komunikacyjnych. Określają one kodowanie, transport i mechanizmy bezpieczeństwa używane do wymiany oświadczeń i żądań SAML, zapewniając bezpieczną i niezawodną komunikację między zaangażowanymi stronami.

Zarówno SP, jak i IdP określą, które metody wiązania obsługują w swoich metadanych, umożliwiając negocjację odpowiedniej metody dla interakcji SAML. Wybór metody wiązania zależy od czynników, takich jak rozmiar wiadomości, wymagania dotyczące bezpieczeństwa i charakterystyki kanału komunikacyjnego.

Metody wiązania w SAML:

  1. Przekazywanie przez HTTP: Wiadomości SAML są kodowane jako parametry URL i przesyłane przez przekierowanie HTTP. Ta wiązanie jest odpowiednia w scenariuszach, gdzie rozmiar wiadomości jest ograniczony, a kanał komunikacyjny nie jest bezpieczny.
  2. HTTP POST: Wiadomości SAML są kodowane jako parametry formularza i przesyłane przez żądania HTTP POST. Ta wiązanie jest używana, gdy rozmiar wiadomości przekracza limit długości URL lub gdy wymagane są dodatkowe środki bezpieczeństwa.
  3. Artefakt: Wiadomości SAML są przesyłane za pomocą krótkotrwałych tokenów zwanych artefaktami, które są wymieniane przez bezpieczny kanał boczny między SP a IdP. Ta wiązanie jest odpowiednia w scenariuszach, gdzie poufność i integralność wiadomości są krytyczne, a kanał komunikacyjny jest bezpieczny.

Najczęściej stosowane metody wiązania:

  • Żądanie uwierzytelnienia: Żądanie uwierzytelnienia od SP do IdP jest zazwyczaj przesyłane za pomocą przekierowania HTTP z powodu jego prostoty i wydajności. SP koduje żądanie SAML jako parametry URL i przekierowuje przeglądarkę użytkownika do IdP w celu uwierzytelnienia. Znane jest to jako przepływ SSO zainicjowany przez SP.
  • Odpowiedź na oświadczenie: Odpowiedź na oświadczenie SAML od IdP do SP jest zazwyczaj przesyłana za pomocą metody wiązania HTTP POST. IdP koduje oświadczenie SAML jako parametry formularza i przesyła je z powrotem do SP do walidacji. Zapewnia to, że oświadczenie jest przesyłane w sposób bezpieczny, bez eksponowania wrażliwych danych w URL. Metoda wiązania HTTP POST może również obsłużyć większe rozmiary wiadomości w porównaniu do przekierowania HTTP.

Elementy i rozważania dotyczące bezpieczeństwa w oświadczeniach SAML

Wystawca

Jak wspomniano wcześniej, wystawca jest kluczowym atrybutem w oświadczeniach SAML, który identyfikuje jednostkę, która wystawiła oświadczenie. Wystawcą jest zazwyczaj IdP, który uwierzytelnił użytkownika i wygenerował oświadczenie. Poprzez włączenie atrybutu wystawcy do oświadczenia, SP może zweryfikować pochodzenie oświadczenia i zapewnić, że pochodzi ono z zaufanego źródła.

Podpis

Element podpisu w oświadczeniu SAML zawiera podpis cyfrowy wygenerowany przez IdP w celu zapewnienia integralności i autentyczności oświadczenia. Podpis jest tworzony przy użyciu prywatnego klucza IdP i zawarty w oświadczeniu wraz z certyfikatem klucza publicznego do weryfikacji przez SP. Poprzez weryfikację podpisu, SP może zweryfikować, że oświadczenie nie zostało sfałszowane i pochodzi od oczekiwanego IdP.

Warunki

Element warunków w oświadczeniu SAML definiuje ograniczenia i restrykcje, które dotyczą ważności i użycia oświadczenia. Obejmuje warunki takie jak okres ważności oświadczenia, ograniczenia odbiorców i inne kontekstualne ograniczenia, które SP musi egzekwować podczas przetwarzania oświadczenia.

Oświadczenie o uwierzytelnieniu

Oświadczenie o uwierzytelnieniu (AuthnStatement) jest kluczowym elementem oświadczenia SAML, który dostarcza informacji o statusie uwierzytelnienia użytkownika i kontekście. Zawiera szczegóły takie jak używana metoda uwierzytelnienia, czas uwierzytelnienia oraz wszelkie istotne informacje dotyczące kontekstu uwierzytelnienia, pozwalając SP na podejmowanie świadomych decyzji dotyczących kontroli dostępu na podstawie stanu uwierzytelnienia użytkownika.

Atrybuty oświadczenia o uwierzytelnieniu:

  1. AuthenticationContext: Opisuje metodę i kontekst uwierzytelnienia użytkownika, takie jak nazwa użytkownika - hasło, uwierzytelnienie wieloskładnikowe lub jednokrotne logowanie. Ten atrybut pomaga SP ocenić siłę i niezawodność procesu uwierzytelnienia oraz określić odpowiednie kontrole dostępu.
  2. AuthenticationInstant: Wskazuje czas, kiedy użytkownik został uwierzytelniony przez IdP. Ten znacznik czasu jest kluczowy dla weryfikacji świeżości uwierzytelnienia i zapobiegania atakom polegającym na powtórzeniu lub przejęciu sesji.
  3. SessionNotOnOrAfter: Określa czas wygaśnięcia sesji użytkownika, po której to użytkownik musi ponownie się uwierzytelnić, aby uzyskać dostęp do usługi. Ten atrybut pomaga egzekwować polityki zarządzania sesjami i zmniejszać ryzyko nieautoryzowanego dostępu.

Najlepsze praktyki dotyczące bezpieczeństwa SAML

  1. Używaj bezpiecznych metod wiązania: Wybierz odpowiednie metody wiązania SAML w zależności od wymagań dotyczących bezpieczeństwa i cech kanału komunikacyjnego. Używaj HTTP POST do przesyłania danych wrażliwych i HTTP Redirect do prostych żądań.
  2. Weryfikuj podpisy oświadczeń: Zatwierdź cyfrowe podpisy oświadczeń SAML, aby zapewnić ich integralność i autentyczność. Użyj certyfikatu klucza publicznego IdP do weryfikacji podpisu i wykrywania prób fałszowania.
  3. Egzekwuj ograniczenia odbiorców: Dodaj ograniczenia odbiorców w oświadczeniach SAML, aby ograniczyć zakres oświadczenia do zamierzonego SP. Zapobiega to atakom polegającym na powtórzeniu oświadczenia i nieautoryzowanemu dostępowi przez innych dostawców usług.
  4. Zabezpiecz wymianę metadanych: Chroń wymianę metadanych SP i IdP, aby zapobiec fałszowaniu metadanych i atakom typu spoofing. Użyj bezpiecznych kanałów i mechanizmów do bezpiecznego udostępniania metadanych.
  5. Wdrażaj bezpieczne obsługiwanie stanu przekierowania: Używaj unikalnych i nieprzewidywalnych wartości stanu przekierowania, aby zapobiegać atakom CSRF podczas uwierzytelniania SAML. Zatwierdzaj stan przekierowania, aby zapewnić jego integralność i autentyczność.
  6. Egzekwuj zarządzanie sesją: Określ polityki wygaśnięcia sesji i egzekwuj czas wygaśnięcia sesji, aby zmniejszyć ryzyko przejęcia sesji i nieautoryzowanego dostępu. Użyj atrybutów związanych z sesją w oświadczeniach SAML do bezpiecznego zarządzania sesjami użytkowników.
  7. Szyfruj wrażliwe atrybuty: W razie potrzeby, szyfruj wrażliwe atrybuty użytkownika w oświadczeniach SAML, aby chronić prywatność użytkownika i poufność danych. Użyj bezpiecznych algorytmów szyfrowania i praktyk zarządzania kluczami do ochrony wrażliwych danych.

Alternatywy dla SAML

Podczas gdy SAML pozostaje szeroko przyjętym standardem dla SSO i federacji tożsamości, oferując solidny zestaw funkcji i mechanizmów bezpieczeństwa, jego wiek może stwarzać problemy z dostępem do ewoluujących wymagań dotyczących bezpieczeństwa i użyteczności nowoczesnych aplikacji. W porównaniu z bardziej współczesnym OpenID Connect (OIDC) opartym na OAuth 2.0, SAML ma tendencję do bycia bardziej skomplikowanym i brakuje mu niektórych zaawansowanych funkcji bezpieczeństwa, które oferuje OIDC. Na przykład, wielopoziomowy proces autoryzacji żądań OIDC oferuje bardziej bezpieczne podejście niż stosunkowo prosty przepływ wymiany oświadczeń SAML. Dla organizacji, które chcą przyjąć bardziej nowoczesne i elastyczne rozwiązanie federacji tożsamości, OIDC może być realną alternatywą dla SAML.