Denial of Service (odmowa usługi)
Odmowa usługi występuje, gdy system jest przeciążony w taki sposób, że nie można przetworzyć komunikatów lub są przetwarzane bardzo wolno.
Nadmierne użycie pamięci
Problem może wystąpić podczas odczytywania dokumentu XML z dużą liczbą unikatowych nazw lokalnych, przestrzeni nazw lub prefiksów. Jeśli używasz klasy, która pochodzi z XmlReaderklasy , i wywołujesz LocalNamePrefix właściwość lub NamespaceURI dla każdego elementu, zwracany ciąg zostanie dodany do elementu NameTable. Kolekcja przechowywana przez element nigdy nie zmniejsza rozmiaru NameTable , tworząc wirtualny "przeciek pamięci" uchwytów ciągów.
Środki zaradcze obejmują:
Utwórz z NameTable klasy i wymuś maksymalny limit przydziału rozmiaru. (Nie można zapobiec użyciu obiektu NameTable lub przełącznika NameTable , gdy jest pełny).
Unikaj używania wymienionych właściwości i zamiast tego należy używać MoveToAttribute metody z IsStartElement metodą tam, gdzie to możliwe. Metody te nie zwracają ciągów, a tym samym unikaj problemu nadmiernego wypełniania NameTable kolekcji.
Złośliwy klient wysyła do usługi nadmierne żądania licencji
Jeśli złośliwy klient bombarduje usługę z nadmiernymi żądaniami licencji, może to spowodować użycie przez serwer nadmiernej ilości pamięci.
Środki zaradcze: Użyj następujących właściwości LocalServiceSecuritySettings klasy:
MaxCachedCookies: steruje maksymalną liczbą limitów czasu buforowanych
SecurityContextToken
przez serwer poSPNego
zakończeniu lubSSL
negocjacji.IssuedCookieLifetime: kontroluje okres istnienia, który serwer wystawia po wykonaniu
SecurityContextTokens
SPNego
negocjacji lubSSL
negocjacji. Serwer buforuje sSecurityContextToken
przez ten okres.MaxPendingSessions: steruje maksymalną liczbą bezpiecznych konwersacji ustanowionych na serwerze, ale dla których żadne komunikaty aplikacji nie zostały przetworzone. Ten limit przydziału uniemożliwia klientom ustanawianie bezpiecznych konwersacji w usłudze, co powoduje zachowanie stanu usługi na klienta, ale nigdy ich nie używa.
InactivityTimeout: określa maksymalny czas, przez jaki usługa utrzymuje bezpieczną konwersację bez odbierania komunikatu aplikacji od klienta na potrzeby konwersacji. Ten limit przydziału uniemożliwia klientom ustanawianie bezpiecznych konwersacji w usłudze, co powoduje zachowanie stanu usługi na klienta, ale nigdy ich nie używa.
WSDualHttpBinding lub podwójne powiązania niestandardowe wymagają uwierzytelniania klienta
Domyślnie właściwość WSDualHttpBinding ma włączone zabezpieczenia. Istnieje jednak możliwość, że jeśli uwierzytelnianie klienta jest wyłączone przez ustawienie ClientCredentialType właściwości na Nonewartość , złośliwy użytkownik może spowodować atak typu "odmowa usługi" na trzecią usługę. Może się tak zdarzyć, ponieważ złośliwy klient może kierować usługę do wysyłania strumienia komunikatów do trzeciej usługi.
Aby temu zapobiec, nie należy ustawiać właściwości na None
. Należy również pamiętać o tej możliwości podczas tworzenia powiązania niestandardowego, które ma podwójny wzorzec komunikatu.
Dziennik zdarzeń inspekcji można wypełnić
Jeśli złośliwy użytkownik rozumie, że inspekcja jest włączona, osoba atakująca może wysyłać nieprawidłowe komunikaty, które powodują zapisanie wpisów inspekcji. Jeśli dziennik inspekcji zostanie wypełniony w ten sposób, system inspekcji zakończy się niepowodzeniem.
Aby temu zapobiec, ustaw SuppressAuditFailure właściwość na true
i użyj właściwości Podgląd zdarzeń, aby kontrolować zachowanie inspekcji. Aby uzyskać więcej informacji na temat używania Podgląd zdarzeń do wyświetlania dzienników zdarzeń i zarządzania nimi, zobacz Podgląd zdarzeń. Aby uzyskać więcej informacji, zobacz Inspekcja.
Nieprawidłowe implementacje zasad IAuthorizationPolicy mogą spowodować, że usługa przestanie odpowiadać
Evaluate Wywołanie metody w wadliwej implementacji interfejsu IAuthorizationPolicy może spowodować, że usługa przestanie odpowiadać.
Środki zaradcze: użyj tylko zaufanego kodu. Oznacza to, że należy użyć tylko kodu napisanego i przetestowanego lub pochodzącego z zaufanego dostawcy. Nie zezwalaj na podłączanie niezaufanych rozszerzeń IAuthorizationPolicy do kodu bez należytej uwagi. Dotyczy to wszystkich rozszerzeń używanych w implementacji usługi. Program WCF nie rozróżnia kodu aplikacji i kodu obcego, który jest podłączony przy użyciu punktów rozszerzalności.
Maksymalny rozmiar tokenu protokołu Kerberos może wymagać zmiany rozmiaru
Jeśli klient należy do dużej liczby grup (około 900, chociaż rzeczywista liczba różni się w zależności od grup), problem może wystąpić, gdy blok nagłówka komunikatu przekracza 64 kilobajty. W takim przypadku można zwiększyć maksymalny rozmiar tokenu Kerberos. Może być również konieczne zwiększenie maksymalnego rozmiaru komunikatów WCF, aby uwzględnić większy token protokołu Kerberos.
Autorejestrowanie powoduje wyświetlenie wielu certyfikatów o tej samej nazwie podmiotu dla maszyny
Automatyczna rejestracja to funkcja systemu Windows Server 2003 do automatycznego rejestrowania użytkowników i komputerów na potrzeby certyfikatów. Gdy maszyna znajduje się w domenie z włączoną funkcją, certyfikat X.509 z zamierzonym celem uwierzytelniania klienta jest automatycznie tworzony i wstawiany do magazynu certyfikatów osobistych komputera lokalnego za każdym razem, gdy nowy komputer jest przyłączony do sieci. Jednak automatyczna rejestracja używa tej samej nazwy podmiotu dla wszystkich certyfikatów tworzonych w pamięci podręcznej.
Wpływ na to, że usługi WCF mogą nie zostać otwarte w domenach z automatyczną rejestracją. Dzieje się tak, ponieważ domyślne kryteria wyszukiwania poświadczeń X.509 usługi mogą być niejednoznaczne, ponieważ istnieje wiele certyfikatów z w pełni kwalifikowaną nazwą systemu nazw domen (DNS) maszyny. Jeden certyfikat pochodzi z autorejestrowania; drugi może być certyfikatem wystawionym samodzielnie.
Aby temu zapobiec, należy odwołać się do dokładnego certyfikatu do użycia przy użyciu bardziej precyzyjnego kryterium wyszukiwania w usłudzeCredentials>.< Na przykład użyj FindByThumbprint opcji i określ certyfikat przy użyciu unikatowego odcisku palca (skrótu).
Aby uzyskać więcej informacji na temat funkcji automatycznego rejestrowania, zobacz Automatyczne rejestrowanie certyfikatów w systemie Windows Server 2003.
Ostatnia z wielu alternatywnych nazw podmiotów używanych do autoryzacji
W rzadkich przypadkach, gdy certyfikat X.509 zawiera wiele alternatywnych nazw podmiotów, a autoryzacja przy użyciu alternatywnej nazwy podmiotu może zakończyć się niepowodzeniem.
Ochrona plików konfiguracji przy użyciu list ACL
Wymagane i opcjonalne oświadczenia można określić w plikach kodu i konfiguracji wystawionych tokenów w usłudze CardSpace. Powoduje to emitowane elementy w RequestSecurityToken
komunikatach wysyłanych do usługi tokenu zabezpieczającego. Osoba atakująca może zmodyfikować kod lub konfigurację w celu usunięcia wymaganych lub opcjonalnych oświadczeń, co może potencjalnie spowodować, że usługa tokenu zabezpieczającego wystawi token, który nie zezwala na dostęp do usługi docelowej.
Aby rozwiązać ten problem: Wymagaj dostępu do komputera w celu zmodyfikowania pliku konfiguracji. Użyj list kontroli dostępu do plików (ACL), aby zabezpieczyć pliki konfiguracji. Program WCF wymaga, aby kod był w katalogu aplikacji lub globalnej pamięci podręcznej zestawów, zanim umożliwi załadowanie takiego kodu z konfiguracji. Użyj list ACL katalogu, aby zabezpieczyć katalogi.
Osiągnięto maksymalną liczbę bezpiecznych sesji dla usługi
Po pomyślnym uwierzytelnieniu klienta przez usługę i ustanowieniu bezpiecznej sesji z usługą usługa śledzi sesję, dopóki klient go nie anuluje lub sesja wygaśnie. Każda ustanowiona sesja liczy się względem limitu maksymalnej liczby aktywnych równoczesnych sesji z usługą. Po osiągnięciu tego limitu klienci, którzy próbują utworzyć nową sesję z tą usługą, zostaną odrzuconi do momentu wygaśnięcia co najmniej jednej aktywnej sesji lub anulowania przez klienta. Klient może mieć wiele sesji z usługą, a każda z tych sesji wlicza się do limitu.
Uwaga
W przypadku korzystania z sesji stanowych poprzedni akapit nie ma zastosowania. Aby uzyskać więcej informacji na temat sesji stanowych, zobacz How to: Create a Security Context Token for a Secure Session (Instrukcje: tworzenie tokenu kontekstu zabezpieczeń dla sesji zabezpieczonej).
Aby temu zapobiec, ustaw limit maksymalnej liczby aktywnych sesji i maksymalny okres istnienia sesji, ustawiając SecurityBindingElement właściwość SecurityBindingElement klasy.