Udostępnij za pośrednictwem


Omówienie zabezpieczeń

Struktura zabezpieczeń w interfejsie API usług sieci Web systemu Windows (WWSAPI) zapewnia:

  • Integralność komunikatów, poufność, wykrywanie odtwarzania i uwierzytelnianie serwera z użyciem zabezpieczeń transmisji.
  • Uwierzytelnianie klienta, takie jak weryfikacja tokenu zabezpieczającego, sprawdzanie zaufania certyfikatu i odwołania itp. przy użyciu zabezpieczeń komunikatów protokołu SOAP lub zabezpieczeń transportu.

Model programowania zabezpieczeń

Zabezpieczenia są skojarzone z kanałami komunikacyjnymi . Zabezpieczanie kanału składa się z poniższych kroków.

  • Utwórz i zainicjuj co najmniej jedno powiązanie zabezpieczeń odpowiednie dla wymagań dotyczących zabezpieczeń aplikacji.
  • Utwórz opis zabezpieczeń zawierający te powiązania zabezpieczeń.
  • Utwórz kanał lub serwer proxy usługi (po stronie klienta) albo utwórz odbiornik lub hosta usługi (po stronie serwera), przekazując ten opis zabezpieczeń.
  • Wykonaj normalne kroki programowania kanałów takie jak Open, Accept, Send, Receive, Close.

Komunikaty wysyłane i odbierane w kanale są automatycznie zabezpieczane przez środowisko uruchomieniowe zgodnie z podanym opisem zabezpieczeń. Opcjonalnie te kroki można dostosować, określając co najmniej jedno ustawienia zabezpieczeń dla całego kanału w opisie zabezpieczeń lub ustawienia zabezpieczeń dla całego powiązania w powiązaniu zabezpieczeń.

Każda wymagana autoryzacja tożsamości nadawcy musi być wykonywana przez aplikację przy użyciu wyników przetwarzania zabezpieczeń dołączonych do każdego odebranego komunikatu. Kroki autoryzacji nie są określone w opisie zabezpieczeń ani nie są wykonywane automatycznie przez środowisko uruchomieniowe.

Błędy w opisie zabezpieczeń, takie jak nieobsługiwane powiązania, niestosowalne właściwości/pola, brak wymaganych właściwości/pól lub nieprawidłowe wartości właściwości/pola, spowodują niepowodzenie tworzenia kanału lub odbiornika.

Wybieranie powiązań zabezpieczeń

Podczas projektowania zabezpieczeń dla aplikacji podstawową decyzją jest wybór powiązań zabezpieczeń, które mają zostać uwzględnione w opisie zabezpieczeń. Poniżej przedstawiono kilka wskazówek dotyczących wybierania powiązań zabezpieczeń odpowiednich dla scenariusza zabezpieczeń aplikacji. Przydatną metodą heurystyczną jest zrozumienie, jakie typy poświadczeń zabezpieczeń (takie jak certyfikaty X.509 X.509, nazwa użytkownika/hasła domeny systemu Windows, nazwa użytkownika/hasła zdefiniowaneprzez aplikację będą dostępne dla aplikacji, a następnie wybrać powiązanie zabezpieczeń, które może używać tego typu poświadczeń.

Kanały i zabezpieczenia

Jak wspomniano powyżej, zabezpieczenia są ograniczone do kanałów. Ponadto operacje kanału są przyporządkowane do kroków zabezpieczeń, co jest spójne we wszystkich połączeniach zabezpieczeń.

  • Tworzenie kanału: zestaw powiązań zabezpieczeń określonych w opisie zabezpieczeń jest weryfikowany i pozostaje stały dla kanału później. Określa się również strukturę kanału, w tym wszelkie kanały boczne, które mają być używane do negocjacji związanych z WS-Trust.
  • Kanał otwarty: wszelkie poświadczenia dostarczane w ramach zabezpieczeń są ładowane, a sesje zabezpieczeń są nawiązywane. Ogólnie rzecz biorąc, otwarty kanał zawiera aktywny stan zabezpieczeń. Otwarcie kanału klienta określa również adres punktu końcowego serwera, względem którego zostanie wykonane uwierzytelnianie serwera przez środowisko uruchomieniowe.
  • Między otwarciem i zamknięciem kanału: Komunikaty mogą być bezpiecznie wysyłane i odbierane w tej fazie.
  • Wysyłanie komunikatów: tokeny kontekstu zabezpieczeń są uzyskiwane lub odnawiane zgodnie z potrzebami, a zabezpieczenia są stosowane do każdego przesyłanego komunikatu zgodnie z opisem zabezpieczeń. Błędy występujące podczas stosowania zabezpieczeń są zwracane do aplikacji jako błędy wysyłania.
  • Odbieranie komunikatów: zabezpieczenia są weryfikowane dla każdego odebranego komunikatu zgodnie z opisem zabezpieczeń. Wszelkie błędy weryfikacji zabezpieczeń komunikatów są zwracane do aplikacji jako błędy odbierane. Błędy dotyczące poszczególnych komunikatów nie wpływają na stan kanału ani kolejne odbiory. Aplikacja może odrzucić komunikat, który zakończył się niepowodzeniem i ponownie uruchomić odbieranie dla innego komunikatu.
  • Przerwanie kanału: kanał może zostać przerwany w dowolnym momencie, aby wstrzymać wszystkie operacje I/O na kanale. Po przerwaniu kanał przejdzie do stanu błędu i nie zezwoli na więcej wysyłania ani odbierania. Jednak kanał może nadal zachować pewien aktywny stan zabezpieczeń, więc konieczne będzie kolejne zamknięcie kanału, aby dokładnie usunąć cały stan.
  • Zamknięcie kanału: stan zabezpieczeń utworzony podczas otwierania jest usuwany, a sesje są usuwane. Tokeny kontekstu zabezpieczeń są anulowane. Stos kanału pozostaje, ale nie zawiera aktywnego stanu zabezpieczeń ani załadowanych poświadczeń.
  • Bezpłatna kanał: stos kanału utworzony podczas tworzenia wraz ze wszystkimi zasobami zabezpieczeń jest bezpłatny.

API zabezpieczeń

Dokumentacja interfejsu API dotycząca zabezpieczeń jest pogrupowana w następujące tematy.

Bezpieczeństwo

W przypadku korzystania z interfejsu API zabezpieczeń WWSAPI aplikacje napotykają kilka zagrożeń bezpieczeństwa:

przypadkowa błędna konfiguracja

Interfejs WWSAPI obsługuje szereg opcji konfiguracji związanych z zabezpieczeniami. Na przykład, zobacz WS_SECURITY_BINDING_PROPERTY_ID. Niektóre z tych opcji, takie jak WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS umożliwiają aplikacji obniżenie domyślnego poziomu zabezpieczeń zapewnianego przez różne powiązania zabezpieczeń. Użycie takich opcji należy dokładnie ocenić, aby upewnić się, że nie ma żadnych wynikowych wektorów ataku.

Ponadto, zgodnie z powyższym opisem, interfejs WWSAPI umożliwia aplikacji celowe wyłączenie niektórych kroków wymaganych do pełnego zabezpieczenia wymiany komunikatów, takich jak zezwolenie na wyłączenie szyfrowania, nawet jeśli poświadczenia zabezpieczeń są przesyłane. Umożliwia to włączenie określonych scenariuszy i nie powinno być używane do komunikacji ogólnej. WS_PROTECTION_LEVEL należy specjalnie obniżyć, aby umożliwić korzystanie z tych scenariuszy, a aplikacje nie powinny zmieniać tej wartości, chyba że jest to absolutnie konieczne, ponieważ spowoduje to wyłączenie wielu kontroli zaprojektowanych w celu zapewnienia bezpiecznej konfiguracji.

Przechowywanie poufnych informacji w pamięci

Poufne informacje, takie jak hasła, przechowywane w pamięci, są narażone na wyodrębnienie przez uprzywilejowanego atakującego za pomocą na przykład pliku strony. WWSAPI tworzy kopię podanych poświadczeń i szyfruje ją, pozostawiając oryginalne dane niechronione. Aplikacja jest odpowiedzialna za ochronę oryginalnego wystąpienia. Ponadto zaszyfrowana kopia jest krótko odszyfrowywana podczas użycia, otwierając możliwość jej wyodrębnienia.

odmowa usługi

Przetwarzanie zabezpieczeń może zużywać znaczne zasoby. Każde dodatkowe powiązanie zabezpieczeń zwiększa te koszty. WWSAPI przerywa przetwarzanie zabezpieczeń, gdy tylko napotka błąd weryfikacji zabezpieczeń, ale niektóre kontrole, takie jak decyzje autoryzacyjne, mogą nie nastąpić aż do momentu, gdy została wykonana znacząca część pracy.

Podczas przetwarzania komunikatu na serwerze stan zabezpieczeń jest przechowywany na stercie komunikatów. Aplikacja może ograniczyć zużycie pamięci podczas przetwarzania zabezpieczeń, zmniejszając rozmiar sterty pamięci za pomocą WS_MESSAGE_PROPERTY_HEAP_PROPERTIES. Ponadto niektóre powiązania zabezpieczeń, takie jak WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING, mogą spowodować, że serwer przydziela zasoby w imieniu klienta. Limity dla tych zasobów można skonfigurować za pomocą następujących wartości WS_SECURITY_BINDING_PROPERTY_ID:

  • WŁAŚCIWOŚĆ_WIĄZANIA_BEZPIECZEŃSTWA_MAX_OCZEKUJĄCYCH_KONTEKSTÓW_SECURITY_CONTEXT
  • WŁAŚCIWOŚĆ_WIĄZANIA_BEZPIECZEŃSTWA_MAKSYMALNA_LICZBA_AKTYWNYCH_KONTEXTÓW_BEZPIECZEŃSTWA
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL

Ustawienie tych limitów na niskie wartości zmniejsza maksymalne zużycie pamięci, ale może prowadzić do odrzucenia uzasadnionych klientów po osiągnięciu limitu przydziału.