Bezpieczeństwo dostępu kodu — Code Access Security
Code Access Security (CAS) w środowisku Microsoft .NET to rozwiązanie firmy Microsoft zapobiegające wykonywaniu uprzywilejowanych działań przez niezaufany kod. Gdy CLR ładuje zestaw , uzyska dowody dla zestawu i użyje go do zidentyfikowania grupy kodu , do której należy zestaw. Grupa kodu zawiera zestaw uprawnień (jedno lub więcej uprawnień ). Kod, który wykonuje akcję uprzywilejowaną, wykona żądanie dostępu do kodu, co spowoduje, że środowisko CLR przejdzie do stosu wywołań i zbada zestaw uprawnień przyznany zestawowi każdej metody w stosie wywołań. Grupy kodów i zestawy uprawnień są określane przez administratora komputera, który definiuje politykę bezpieczeństwa .
Dowód
Dowodem mogą być dowolne informacje związane z zespołem. Domyślne dowody używane przez zabezpieczenia dostępu kodu .NET to:
- Katalog aplikacji: katalog, w którym znajduje się zestaw.
- Wydawca: podpis cyfrowy wydawcy zestawu (wymaga podpisania zestawu przez Authenticode ).
- URL : pełny adres URL, z którego uruchomiono asembler
- Witryna: nazwa hosta adresu URL/domeny zdalnej/VPN.
- Strefa: strefa bezpieczeństwa, w której znajduje się zespół
- Hash : skrót kryptograficzny zestawu, który identyfikuje określoną wersję.
- Silna nazwa: kombinacja nazwy zestawu, wersji i klucza publicznego klucza podpisywania używanego do podpisywania zestawu. Klucz podpisywania nie jest certyfikatem X.509 , ale niestandardową parą kluczy wygenerowaną przez narzędzie do silnych nazw, SN.EXE lub Visual Studio .
Deweloper może użyć niestandardowych dowodów (tak zwanych dowodów montażu), ale wymaga to napisania zestawu zabezpieczeń, a w wersji 1.1 platformy .NET ta funkcja nie działa.
Dowody oparte na hashu zestawu można łatwo uzyskać w kodzie. Na przykład w języku C# dowód można uzyskać za pomocą następującej klauzuli kodu:
this.GetType().Assembly.Evidence
Polityka
Zasady to zestaw wyrażeń, który używa dowodów w celu określenia członkostwa w grupie kodu. Grupa kodu daje zestaw uprawnień dla zestawów w tej grupie. W .NET istnieją cztery zasady:
- Enterprise: zasady dla rodziny maszyn, które są częścią instalacji usługi Active Directory .
- Komputer: zasady dla bieżącego komputera.
- Użytkownik: polityka dla zalogowanego użytkownika.
- AppDomain: polityka dla domeny wykonującej się aplikacji.
Pierwsze trzy zasady są przechowywane w plikach XML i administrowane za pomocą narzędzia .NET Configuration Tool 1.1 (mscorcfg.msc). Ostateczna polityka jest administrowana za pomocą kodu dla bieżącej domeny aplikacji.
Zabezpieczenia dostępu kodu przedstawią dowody zespołu dla każdej zasady, a następnie przyjmą przecięcie (czyli uprawnienia wspólne dla wszystkich wygenerowanych zestawów uprawnień) jako uprawnienia przyznane zespołowi.
Domyślnie zasady Enterprise, User i AppDomain dają pełne zaufanie (tzn. zezwalają wszystkim zestawom na posiadanie wszystkich uprawnień), a zasady Machine są bardziej restrykcyjne. Ponieważ przecięcie jest brane, oznacza to, że ostateczna polisa uprawnień jest określana przez zasady komputera.
Zauważ, że system zasad został wyeliminowany w .NET Framework 4.0.
Grupa kodów
Grupy kodu kojarzą dowód z nazwanym zestawem uprawnień. Administrator używa narzędzia konfiguracji .NET, aby określić określony typ dowodu (na przykład Witryna) i konkretną wartość tego dowodu (na przykład www.mojawitryna.com), a następnie identyfikuje zestaw uprawnień, który będzie miała grupa kodu nadany.
Żądania
Kod, który wykonuje jakąś uprzywilejowaną akcję, zażąda jednego lub więcej uprawnień. Żądanie powoduje, że środowisko CLR przechodzi przez stos wywołań, a dla każdej metody środowisko CLR zapewnia, że wymagane uprawnienia znajdują się w uprawnieniach przyznanych zestawu metody. Jeśli uprawnienie nie zostanie udzielone, zostanie zgłoszony wyjątek zabezpieczeń . Zapobiega to wykonywaniu przez pobrany kod akcji uprzywilejowanych. Na przykład, jeśli zestaw zostanie pobrany z niezaufanej witryny, zestaw nie będzie miał żadnych uprawnień we/wy pliku, więc jeśli ten zestaw spróbuje uzyskać dostęp do pliku, zgłosi wyjątek uniemożliwiający wywołanie.