Strategia zabezpieczeń WPF - zabezpieczenia platformy

Chociaż Windows Presentation Foundation (WPF) zapewnia różne usługi zabezpieczeń, wykorzystuje również funkcje zabezpieczeń podstawowej platformy, która obejmuje system operacyjny, CLR i Internet Explorer. Te warstwy łączą się w celu zapewnienia silnego, szczegółowego modelu zabezpieczeń obrony, który próbuje uniknąć żadnego pojedynczego punktu awarii, jak pokazano na poniższej ilustracji:

Diagram that shows the WPF security model.

W pozostałej części tego tematu omówiono funkcje w każdej z tych warstw, które odnoszą się konkretnie do platformy WPF.

Zabezpieczenia systemu operacyjnego

Podstawowym elementem Windows jest kilka funkcji zabezpieczeń, które tworzą podstawę zabezpieczeń dla wszystkich aplikacji Windows, w tym tych utworzonych przy użyciu platformy WPF. W tym temacie omówiono zakres tych funkcji zabezpieczeń, które są ważne dla WPF, a także sposób integracji Z nimi WPF w celu zapewnienia dalszej ochrony w głębi systemu.

Microsoft Windows XP Service Pack 2 (SP2)

Oprócz ogólnego przeglądu i wzmocnienia Windows istnieją trzy kluczowe funkcje z Windows XP SP2, które omówimy w tym temacie:

  • /GS kompilacja

  • Microsoft Windows Update.

/GS Kompilacja

Windows XP SP2 zapewnia ochronę przez ponowne kompilowanie wielu podstawowych bibliotek systemowych, w tym wszystkich zależności WPF, takich jak CLR, aby pomóc w ograniczeniu przeładowania buforu. Jest to osiągane przy użyciu /GS parametru z kompilatorem wiersza polecenia C/C++. Mimo że przepełnienie buforu powinno być jawnie unikane, /GS kompilacja zapewnia przykładową ochronę przed potencjalnymi lukami w zabezpieczeniach, które są przypadkowo lub złośliwie utworzone przez nie.

W przeszłości przekroczenia buforu były przyczyną wielu luk w zabezpieczeniach o dużym wpływie. Przepełnieniem buforu występuje, gdy osoba atakująca korzysta z luki w zabezpieczeniach kodu, która umożliwia wstrzyknięcie złośliwego kodu, który zapisuje poza granicami buforu. Dzięki temu osoba atakująca może przechwytować proces, w którym kod jest wykonywany przez zastąpienie adresu zwrotnego funkcji w celu spowodowania wykonania kodu osoby atakującej. Wynikiem jest złośliwy kod, który wykonuje dowolny kod z tymi samymi uprawnieniami co proces porwany.

Na wysokim poziomie flaga kompilatora -GS chroni przed pewnymi potencjalnymi przepełnieniami buforu przez wstrzyknięcie specjalnego pliku cookie zabezpieczeń w celu ochrony adresu zwrotnego funkcji, która ma lokalne bufory ciągów. Po powrocie funkcji plik cookie zabezpieczeń jest porównywany z poprzednią wartością. Jeśli wartość uległa zmianie, może wystąpić przepełninie buforu i proces zostanie zatrzymany z warunkiem błędu. Zatrzymanie procesu uniemożliwia wykonywanie potencjalnie złośliwego kodu. Aby uzyskać więcej informacji, zobacz -GS (Sprawdzanie zabezpieczeń buforu).

WPF jest kompilowany z flagą /GS, aby dodać kolejną warstwę obrony do aplikacji WPF.

Windows Vista

Użytkownicy WPF w systemie Windows Vista skorzystają z dodatkowych ulepszeń zabezpieczeń systemu operacyjnego, w tym "Dostęp użytkowników z najniższymi uprawnieniami", kontroli integralności kodu i izolacji uprawnień.

Kontrola konta użytkownika

Obecnie Windows użytkownicy mają tendencję do uruchamiania z uprawnieniami administratora, ponieważ wiele aplikacji wymaga ich do instalacji lub wykonania albo obu tych opcji. Możliwość zapisywania domyślnych ustawień aplikacji w rejestrze jest jednym z przykładów.

Uruchamianie z uprawnieniami administratora naprawdę oznacza, że aplikacje są wykonywane z procesów, które mają przyznane uprawnienia administratora. Wpływ na bezpieczeństwo jest taki, że każdy złośliwy kod, który przejmuje proces uruchomiony z uprawnieniami administratora, automatycznie dziedziczy te uprawnienia, w tym dostęp do krytycznych zasobów systemowych.

Jednym ze sposobów ochrony przed tym zagrożeniem bezpieczeństwa jest uruchamianie aplikacji z najmniejszą ilością wymaganych uprawnień. Jest to znana jako zasada najmniejszych uprawnień i jest podstawową funkcją systemu operacyjnego Windows. Ta funkcja jest nazywana kontrolą konta użytkownika (UAC) i jest używana przez Windows kontrola konta użytkownika na dwa kluczowe sposoby:

  • Aby domyślnie uruchamiać większość aplikacji z uprawnieniami kontroli dostępu użytkownika, nawet jeśli użytkownik jest administratorem; tylko aplikacje, które wymagają uprawnień administratora, będą uruchamiane z uprawnieniami administratora. Aby można było uruchamiać z uprawnieniami administracyjnymi, aplikacje muszą być jawnie oznaczone w manifeście aplikacji lub jako wpis w zasadach zabezpieczeń.

  • Aby zapewnić rozwiązania zgodności, takie jak wirtualizacja. Na przykład wiele aplikacji próbuje zapisać w ograniczonych lokalizacjach, takich jak C:\Program Files. W przypadku aplikacji wykonywanych w ramach kontroli konta użytkownika istnieje alternatywna lokalizacja dla użytkownika, która nie wymaga uprawnień administratora do zapisu. W przypadku aplikacji działających w ramach kontroli konta użytkownika funkcja UAC zwirtualizuje C:\Program Files, aby aplikacje, które uważają, że piszą do niego, są w rzeczywistości pisane w alternatywnej lokalizacji dla poszczególnych użytkowników. Ten rodzaj pracy zgodności umożliwia systemowi operacyjnemu uruchamianie wielu aplikacji, które nie mogły wcześniej działać w trybie kontroli dostępu użytkownika.

Sprawdzanie integralności kodu

Windows Vista obejmuje dokładniejsze kontrole integralności kodu, aby zapobiec wstrzyknięciu złośliwego kodu do plików systemowych lub do jądra w czasie ładowania/wykonywania. Wykracza to poza ochronę plików systemowych.

Ograniczony proces praw dla aplikacji Browser-Hosted

Aplikacje WPF hostowane w przeglądarce są wykonywane w piaskownicy strefy internetowej. Integracja WPF z programem Microsoft Internet Explorer rozszerza tę ochronę dzięki dodatkowej obsłudze.

Ponieważ aplikacje przeglądarki XAML (XBAPs) są zazwyczaj w trybie piaskownicy przez zestaw uprawnień strefy internetowej, usunięcie tych uprawnień nie szkodzi aplikacjom przeglądarki XAML (XBAPs) z perspektywy zgodności. Zamiast tego tworzona jest dodatkowa warstwa ochrony w głębi systemu; Jeśli aplikacja w trybie piaskownicy może wykorzystać inne warstwy i przejąć proces, proces nadal będzie miał ograniczone uprawnienia.

Zobacz Używanie konta użytkownika Least-Privileged.

Zabezpieczenia środowiska uruchomieniowego języka wspólnego

Środowisko uruchomieniowe języka wspólnego (CLR) oferuje szereg kluczowych korzyści zabezpieczeń, które obejmują weryfikację i weryfikację, zabezpieczenia dostępu do kodu (CAS) i metodologię krytycznego zabezpieczeń.

Walidacja i weryfikacja

Aby zapewnić izolację i integralność zestawu, clR używa procesu walidacji. Weryfikacja środowiska CLR gwarantuje, że zestawy są izolowane, sprawdzając ich format pliku przenośnego pliku wykonywalnego (PE) dla adresów, które znajdują się poza zestawem. Walidacja środowiska CLR weryfikuje również integralność metadanych osadzonych w zestawie.

Aby zapewnić bezpieczeństwo typu, pomaga zapobiegać typowym problemom z zabezpieczeniami (np. przepełnieniu buforu) i włączyć piaskownicę za pośrednictwem izolacji podprocesowej, zabezpieczenia CLR używają koncepcji weryfikacji.

Aplikacje zarządzane są kompilowane w języku Microsoft Intermediate Language (MSIL). Gdy metody w aplikacji zarządzanej są wykonywane, jego MSIL jest kompilowany w kodzie natywnym za pośrednictwem kompilacji Just-In-Time (JIT). Kompilacja JIT obejmuje proces weryfikacji, który stosuje wiele reguł bezpieczeństwa i niezawodności, które zapewniają, że kod nie jest:

  • Naruszenie kontraktów typu

  • Wprowadzenie przepełnień buforu

  • Wieloznaczne uzyskiwanie dostępu do pamięci.

Kod zarządzany, który nie jest zgodny z regułami weryfikacji, nie może być wykonywany, chyba że jest uznawany za zaufany kod.

Zaletą weryfikowalnego kodu jest kluczowa przyczyna, dla którego platforma WPF opiera się na .NET Framework. W zakresie, w jakim jest używany weryfikowalny kod, możliwość wykorzystania możliwych luk w zabezpieczeniach jest znacznie obniżona.

Zabezpieczenia dostępu kodu

Maszyna kliencka udostępnia szeroką gamę zasobów, do których zarządzana aplikacja może mieć dostęp, w tym do systemu plików, rejestru, usług drukowania, interfejsu użytkownika, odbicia i zmiennych środowiskowych. Aby aplikacja zarządzana mogła uzyskać dostęp do dowolnego zasobu na komputerze klienckim, musi mieć .NET Framework uprawnienia do tego celu. Uprawnienie w usłudze CAS jest podklasą ; CodeAccessPermission Usługa CAS implementuje jedną podklasę dla każdego zasobu, do którego mogą uzyskiwać dostęp aplikacje zarządzane.

Zestaw uprawnień, które aplikacja zarządzana jest przyznawana przez usługę CAS podczas uruchamiania wykonywania, jest znany jako zestaw uprawnień i jest określany przez dowody dostarczone przez aplikację. W przypadku aplikacji WPF dowody podane są lokalizacją lub strefą, z której są uruchamiane aplikacje. Usługa CAS identyfikuje następujące strefy:

  • Mój komputer. Aplikacje uruchamiane z komputera klienckiego (w pełni zaufane).

  • Lokalny intranet. Aplikacje uruchamiane z intranetu. (Nieco zaufane).

  • Internet. Aplikacje uruchamiane z Internetu. (Najmniej zaufany).

  • Zaufane witryny. Aplikacje identyfikowane przez użytkownika jako zaufane. (Najmniej zaufany).

  • Niezaufane witryny. Aplikacje identyfikowane przez użytkownika jako niezaufane. (Niezaufane).

Dla każdej z tych stref usługa CAS udostępnia wstępnie zdefiniowany zestaw uprawnień, który zawiera uprawnienia zgodne z poziomem zaufania skojarzonym z poszczególnymi. Są one następujące:

  • FullTrust. W przypadku aplikacji uruchomionych ze strefy Mój komputer . Udzielono wszystkich możliwych uprawnień.

  • LocalIntranet. W przypadku aplikacji uruchamianych ze strefy Lokalny intranet . Nadzestaw uprawnień jest przyznawany w celu zapewnienia umiarkowanego dostępu do zasobów maszyny klienckiej, w tym izolowanego magazynu, nieograniczonego dostępu interfejsu użytkownika, nieograniczonego okna dialogowego plików, ograniczonego odbicia, ograniczonego dostępu do zmiennych środowiskowych. Nie podano uprawnień do krytycznych zasobów, takich jak rejestr.

  • Internet. W przypadku aplikacji uruchamianych ze strefy Internet lub zaufanych witryn . Podzestaw uprawnień jest udzielany w celu udzielenia ograniczonego dostępu do zasobów maszyny klienckiej, w tym wydzielonej pamięci masowej, tylko do otwierania plików i ograniczonego interfejsu użytkownika. Zasadniczo ten zestaw uprawnień izoluje aplikacje od komputera klienckiego.

Aplikacje identyfikowane jako pochodzące ze strefy niezaufanych witryn nie mają żadnych uprawnień przez usługę CAS. W związku z tym wstępnie zdefiniowany zestaw uprawnień nie istnieje dla nich.

Na poniższej ilustracji przedstawiono relację między strefami, zestawami uprawnień, uprawnieniami i zasobami:

Diagram that shows CAS permission sets.

Ograniczenia piaskownicy zabezpieczeń strefy internetowej mają zastosowanie równie do każdego kodu importowanych przez XBAP z biblioteki systemowej, w tym WPF. Dzięki temu każdy fragment kodu jest zablokowany, nawet WPF. Niestety, aby można było wykonać, XBAP musi wykonywać funkcje, które wymagają większej liczby uprawnień niż te włączone przez piaskownicę zabezpieczeń strefy internetowej.

Rozważmy aplikację XBAP zawierającą następującą stronę:

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Aby wykonać ten kod XBAP, podstawowy kod WPF musi wykonywać więcej funkcji niż jest dostępny dla wywoływania XBAP, w tym:

  • Tworzenie uchwytu okna (HWND) do renderowania

  • Wysyłanie komunikatów

  • Ładowanie czcionki Tahoma

Z punktu widzenia zabezpieczeń zezwolenie na bezpośredni dostęp do dowolnej z tych operacji z aplikacji w trybie piaskownicy byłoby katastrofalne.

Na szczęście platforma WPF obsługuje tę sytuację, umożliwiając wykonanie tych operacji z podwyższonym poziomem uprawnień w imieniu aplikacji w trybie piaskownicy. Podczas gdy wszystkie operacje WPF są sprawdzane względem ograniczonych uprawnień zabezpieczeń strefy internetowej domeny aplikacji XBAP, WPF (podobnie jak w przypadku innych bibliotek systemowych) otrzymuje zestaw uprawnień, który zawiera wszystkie możliwe uprawnienia.

Wymaga to, aby platforma WPF odbierała podniesione uprawnienia, uniemożliwiając tym przywilejom zarządzanie przez zestaw uprawnień strefy internetowej domeny aplikacji hosta.

WPF wykonuje to przy użyciu metody Assert uprawnienia. Poniższy kod pokazuje, jak to się stanie.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Potwierdzenie zasadniczo uniemożliwia nieograniczone uprawnienia wymagane przez WPF ograniczone przez uprawnienia strefy internetowej XBAP.

Z punktu widzenia platformy platforma WPF jest odpowiedzialna za poprawne używanie funkcji Assert ; nieprawidłowe użycie potwierdzenia może umożliwić złośliwemu kodowi podniesienie uprawnień. W związku z tym ważne jest, aby wywołać funkcję Assert tylko wtedy, gdy jest to konieczne, i zapewnić, że ograniczenia piaskownicy pozostaną nienaruszone. Na przykład kod w trybie piaskownicy nie może otwierać losowych plików, ale może używać czcionek. Platforma WPF umożliwia aplikacjom w trybie piaskownicy korzystanie z funkcji czcionek przez wywołanie funkcji Assert, a w przypadku platformy WPF odczytywanie plików znanych z tych czcionek w imieniu aplikacji w trybie piaskownicy.

wdrażanie ClickOnce

ClickOnce to kompleksowa technologia wdrażania, która jest dołączona do .NET Framework i integruje się z Visual Studio (zobacz ClickOnce zabezpieczenia i wdrażanie, aby uzyskać szczegółowe informacje). Autonomiczne aplikacje WPF można wdrażać przy użyciu ClickOnce, podczas gdy aplikacje hostowane w przeglądarce muszą być wdrażane przy użyciu ClickOnce.

Aplikacje wdrożone przy użyciu ClickOnce mają dodatkową warstwę zabezpieczeń nad zabezpieczeniami dostępu kodu (CAS), zasadniczo ClickOnce wdrożonych aplikacji żądają wymaganych uprawnień. Są one przyznawane tylko wtedy, gdy nie przekraczają zestawu uprawnień dla strefy, z której jest wdrażana aplikacja. Dzięki zmniejszeniu zestawu uprawnień tylko do tych, które są potrzebne, nawet jeśli są one mniejsze niż te podane przez zestaw uprawnień strefy uruchamiania, liczba zasobów, do których aplikacja ma dostęp, jest ograniczona do minimum. W związku z tym, jeśli aplikacja zostanie porwana, ryzyko uszkodzenia maszyny klienckiej zostanie zmniejszone.

Metodologia Security-Critical

Kod WPF, który używa uprawnień do włączania piaskownicy strefy internetowej dla aplikacji XBAP, musi być przechowywany w najwyższym możliwym stopniu inspekcji i kontroli zabezpieczeń. Aby ułatwić to wymaganie, .NET Framework zapewnia nową obsługę zarządzania kodem, który podnosi poziom uprawnień. W szczególności clR umożliwia identyfikację kodu, który podnosi poziom uprawnień i oznacza go za SecurityCriticalAttributepomocą ; każdy kod, który nie jest oznaczony SecurityCriticalAttribute , staje się przezroczysty przy użyciu tej metodologii. Z drugiej strony, zarządzany kod, który nie jest oznaczony za pomocą SecurityCriticalAttribute , nie może podnosić uprawnień.

Metodologia Security-Critical umożliwia organizację kodu WPF, który podnosi poziom uprawnień do jądra krytycznego pod względem zabezpieczeń, a reszta jest przezroczysta. Izolowanie kodu krytycznego dla zabezpieczeń umożliwia zespołowi inżynierów WPF skupienie się na dodatkowej analizie zabezpieczeń i kontroli źródła nad jądrem krytycznym pod względem zabezpieczeń powyżej i poza standardowymi praktykami zabezpieczeń (zobacz Strategia zabezpieczeń WPF — Inżynieria zabezpieczeń).

Należy pamiętać, że .NET Framework zezwala na rozszerzenie piaskownicy strefy internetowej XBAP przez umożliwienie deweloperom pisania zarządzanych zestawów oznaczonych AllowPartiallyTrustedCallersAttribute za pomocą (APTCA) i wdrożonych w globalnej pamięci podręcznej zestawów (GAC) użytkownika. Oznaczanie zestawu za pomocą aptCA jest wysoce wrażliwą operacją zabezpieczeń, ponieważ umożliwia dowolnemu kodowi wywoływanie tego zestawu, w tym złośliwego kodu z Internetu. Należy zachować szczególną ostrożność i najlepsze rozwiązania podczas wykonywania tej czynności, a użytkownicy muszą zdecydować się ufać temu oprogramowaniu, aby można je było zainstalować.

Zabezpieczenia programu Microsoft Internet Explorer

Poza ograniczeniem problemów z zabezpieczeniami i uproszczeniem konfiguracji zabezpieczeń, program Microsoft Internet Explorer 6 (SP2) zawiera kilka funkcji zwiększających bezpieczeństwo użytkowników aplikacji przeglądarki XAML (XBAPs). Ciąg tych funkcji próbuje umożliwić użytkownikom większą kontrolę nad ich środowiskiem przeglądania.

Przed wersją IE6 SP2 użytkownicy mogą podlegać dowolnej z następujących czynności:

  • Losowe okna podręczne.

  • Mylące przekierowanie skryptu.

  • Wiele okien dialogowych zabezpieczeń w niektórych witrynach sieci Web.

W niektórych przypadkach niezaufane witryny sieci Web spróbują skłonić użytkowników, fałszując interfejs użytkownika instalacji lub wielokrotnie wyświetlając okno dialogowe instalacji microsoft ActiveX, mimo że użytkownik mógł go anulować. Korzystając z tych technik, istnieje możliwość, że znaczna liczba użytkowników została oszukana do podejmowania złych decyzji, które spowodowały instalację aplikacji szpiegujących.

Program IE6 z dodatkiem SP2 oferuje kilka funkcji w celu wyeliminowania tego typu problemów, które koncentrują się na koncepcji inicjowania użytkownika. Program IE6 SP2 wykrywa, kiedy użytkownik kliknął link lub element strony przed akcją, która jest znana jako inicjowanie użytkownika, i traktuje go inaczej niż wtedy, gdy podobna akcja jest wyzwalana przez skrypt na stronie. Na przykład program IE6 z dodatkiem SP2 zawiera wyskakujący bloker , który wykrywa, kiedy użytkownik kliknie przycisk przed utworzeniem wyskakującego okienka. Dzięki temu program IE6 SP2 może zezwalać na większość nieużywanych wyskakujących okienek przy jednoczesnym zapobieganiu wyskakującym okienkom, których użytkownicy nie pytają ani nie chcą. Zablokowane wyskakujące okienka są uwięzione na nowym pasku informacji, co umożliwia użytkownikowi ręczne zastąpienie bloku i wyświetlenie wyskakującego okienka.

Ta sama logika inicjowania użytkownika jest również stosowana do monitów zabezpieczeń openSave/. ActiveX okna dialogowe instalacji są zawsze uwięzione na pasku informacji, chyba że reprezentują uaktualnienie z wcześniej zainstalowanej kontrolki. Te środki łączą się, aby zapewnić użytkownikom bezpieczniejsze, bardziej kontrolowane środowisko użytkownika, ponieważ są one chronione przed witrynami, które nękają ich w celu zainstalowania niechcianego lub złośliwego oprogramowania.

Te funkcje chronią również klientów korzystających z programu IE6 SP2 w celu przeglądania witryn internetowych, które umożliwiają im pobieranie i instalowanie aplikacji WPF. W szczególności jest to spowodowane tym, że program IE6 SP2 oferuje lepsze środowisko użytkownika, które zmniejsza prawdopodobieństwo zainstalowania złośliwych lub deweloperskich aplikacji niezależnie od tego, jaka technologia została użyta do jej skompilowania, w tym WPF. Platforma WPF dodaje te zabezpieczenia przy użyciu ClickOnce w celu ułatwienia pobierania aplikacji przez Internet. Ponieważ aplikacje przeglądarki XAML (XBAPs) są wykonywane w piaskownicy zabezpieczeń strefy internetowej, można je bezproblemowo uruchomić. Z drugiej strony autonomiczne aplikacje WPF wymagają pełnego zaufania do wykonania. W przypadku tych aplikacji ClickOnce wyświetli okno dialogowe zabezpieczeń podczas procesu uruchamiania w celu powiadomienia o użyciu dodatkowych wymagań dotyczących zabezpieczeń aplikacji. Jednak musi to być inicjowane przez użytkownika, będzie również zarządzane przez logikę inicjowaną przez użytkownika i można je anulować.

Program Internet Explorer 7 zawiera i rozszerza możliwości zabezpieczeń programu IE6 SP2 w ramach ciągłego zaangażowania w zabezpieczenia.

Zobacz też