Czy "Bezpieczeństwo dostępu do kodu" jest użyte w prawdziwym świecie?

Ostrzeżenie:

Nowsze wersje. Net i. Net core usunęły i / lub zmieniły "Code Access Security" (CAS), odkąd zadano to pytanie.

Pytanie Pierwotne:

Jestem w trakcie nauki do egzaminu 70-536. NET Framework - Application Development Foundation, ponieważ programuję. net od wielu lat, nie powinno to być trudne!

Jednak muszę się dowiedzieć o "Code Access Security" (CAS), ponieważ nigdy nie miałem potrzeby korzystania z lub skonfigurować go, zastanawiałem się, czy ktoś jeszcze znalazł dla niego zastosowanie w prawdziwym życiu?

Proszę podać przykłady, kiedy korzystałeś z CAS i to było częścią rozwiązania, a nie problemu.

(do tej pory wszystko inne miało jakiś związek z zadaniami, które musiałem wykonać w moich latach programowania. NET)


Podobne pytania:


Wyniki na razie.

  • CAS jest przydatny, gdy jesteś hosting 3rd party kod. Np. firma hostingowa może używać go do zatrzymać klientów Asp.net kod niszczy serwery. (Office korzysta również z niego, gdy. NET jest używany jako zamiennik dla VBA)

  • Do tej pory jedynym szczegółowym przykładem użycia go poza aplikacją Microsoft są:

    [[2]] ostatnio miałem coś podobne: pozwól użytkownikowi przesłać biblioteki i przetestować ją pod kątem wydajności ("kto tworzy najlepszy algorytm"). Nie trzeba dodawać, że potrzebowaliśmy CAS mocno tam.
  • CAS wydaje się być przydatny do uzyskania certyfikacji JITDC, to jest tak jak przez Departament Obrony USA, jednak nie wiem, czy CAS miał jakąkolwiek prawdziwą wartość, czy tylko tykanie pola.

(jeśli chcesz ominąć host, który używa CAS i masz prawa administratora na ich komputerze, możesz po prostu umieścić swoje zespoły w GAC.)

[[2]}patrząc w przyszłość, CAS jest nieco mniej złożony w. Net 4 .

Przynajmniej wygląda jak nowy Egzaminy Microsoft nie będą miały egzaminu" foundation", który obejmuje CAS. Nie wiem czy trafi do nowych egzaminów Winforms / WPF.

Author: Community, 2009-10-14

8 answers

Dość często spotykam się z zabezpieczeniami dostępu do kodu w "realnym świecie", często gdy najmniej się tego spodziewam. W pewnym sensie SilverLight byłby doskonałym rozwiązaniem w świecie rzeczywistym, gdyby nie to, że SilverLight zdecydował się nie zatrudniać CAS w ogóle w końcu.

Dostawcy hostingu

Miejsca, w których widzisz go w akcji, to miejsca, w których potrzebne jest bezpieczne środowisko: ASP.NET się oczywiście, ale ASP.NET dostawcy hostingu używają zmodyfikowanego modelu zabezpieczeń do zapobiec wtargnięciu do ich cennych systemów. Wiem na pewno, że Webhost4Life tego używa (brak informacji na ich stronie o tym, ale pracowałem z nimi, naprawdę tam jest). Szukam dalej, inne ASP.NET dostawcy hostingu robią to samo, ale nie są o tym zbyt jasne: wątek na godaddy.com nie chcąc zmienić CAS (i brak jasności co jest wspierane, a co nie) lub tej związanej dyskusji na 1 & 1. Niektóre witryny hostingowe w chmurze (rackspacecloud) trochę się dalej i "pracował z Microsoftem dla zmodyfikowanego pełnego poziomu zaufania" cokolwiek to może być.

W skrócie: jeśli znajdziesz ASP.NET host, najprawdopodobniej użyli CAS, aby uniemożliwić Ci robienie rzeczy, których nie chcą. Mogą nawet używać go, aby odróżnić hosting" podstawowy "(wiele ograniczeń) od hostingu" enterprise " (kilka ograniczeń), który nadaje zupełnie inne znaczenie CAS.

Inne zastosowania CAS

To tyle jeśli chodzi o kilka realnych sytuacji że natknąłem się na siebie. Ostatni projekt, który zrobiłem, miał coś podobnego: pozwól użytkownikowi przesłać bibliotekę i przetestuj ją pod kątem wydajności ("kto tworzy najlepszy algorytm"). Nie trzeba dodawać, że bardzo potrzebowaliśmy tam CAS. Inne przykłady lub interesujące zasoby:

  • Nar Loader (aplikacja codeproject) używa własnego CAS
  • Lr Evaluator (również aplikacja codeproject) używa CAS
  • ClickOnce (patrz niżej) używa CAS
  • CAS Design Patterns : to Popularność "zakłada" CAS jest używany
  • zrozumienie CAS : jeszcze większa popularność i niektóre komentarze sugerują zastosowania
  • SharePoint używa CAS do końca, wydaje się (przepraszam, nie jestem specjalistą od SP)

W każdej sytuacji, w której po prostu masz pełną kontrolę nad sobą, budujesz własną aplikację i Kod (lub masz ją zbudowaną) i masz pełną kontrolę nad swoim systemem, nie sądzę, że będziesz potrzebował CAS zbyt często. On więcej czegoś, czego byś użył, gdy tylko będziesz mógł uruchomić kod z mniej zaufanych źródeł (czyli w zasadzie wszystko, co nie jest w pełni pod twoją kontrolą).

CAS vs ClickOnce

Domyślne ustawienia CAS ograniczają możliwości kodu uruchamianego z udziału sieciowego lub innych źródeł nielokalnych. Ma to sens, ale rygorystyczne ograniczenia sprawiają, że trudno jest mieć centralne repozytorium dla aplikacji rozproszonych. . NET 2.0 wprowadził ClickOnce, który miał podnieść bezpieczeństwo (dyskusja tutaj ).

Sam ClickOnce używa CAS , Aby uniemożliwić instalatorowi wywołanie funkcji systemowych. W związku z tym uważam, że jest to prawdopodobnie najbardziej znana aplikacja, która opiera się na CAS .

Chodzi o to, że musisz zrozumieć CAS, aby móc stworzyć coś, co może działać bezpośrednio z udziału, lub zignorować to wszystko i użyć ClickOnce.

Badanie Microsoftu na CAS

W 2005 roku Microsoft zwołał ankietę , aby znaleźć dlaczego CAS był tak niepopularny, mając nadzieję, że poprawi go, aby mógł być lepiej stosowany. Niestety, nie mogłem znaleźć rzeczywistych wyników badań, inne niż ten post nieco szczegółowo Dlaczego CAS jest niedostatecznie wykorzystywany.

CAS in another world

Ten post jednak wskazuje na intrygującą niszę: CAS stosuje się do innego świata: Unix / Linux. Nie nazywają go CAS, zamiast tego jest to BitFrost . Jak to jest w prawdziwym świecie aplikacji: " jeden Laptop na dziecko" projekt , który opiera się na BitFrost jako zamienniku tradycyjnego uniksowego modelu bezpieczeństwa.

Aktualizacja: sekcja o CAS w Unix/Linux jako BitFrost i sekcja o survey.
aktualizacja: Dodano sekcję CAS vs ClickOnce
aktualizacja: Dodano listę zasobów za pomocą CAS (i przepraszam za wszystkie te aktualizacje z rzędu!)

 35
Author: Abel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 15:22:50

Technicznie jest to bardzo przydatne, ponieważ pozwala na bardzo drobnoziarnistą specyfikację uprawnień. Jest to zarówno dobre dla Ciebie (teoretycznie utrudnia to wykorzystywanie luk w zabezpieczeniach - nawet jeśli atakujący uzyska pełną kontrolę nad twoją aplikacją, nadal jest zablokowany w piaskownicy CAS), jak i dla Twojego klienta (ponieważ może dokładnie zobaczyć, co może zrobić Twoja aplikacja i uruchomić własny audyt bezpieczeństwa).

W praktycznym użyciu jest w większości bez znaczenia. Myślę, że to zbyt skomplikowane, zbyt mało obsługiwane przez dostępne narzędzia dev i większość użytkowników i tak nie obchodzi.

Są oczywiście wyjątki (rządy i klienci, którzy naprawdę znają. NET/CAS) i chciałbym powiedzieć, że CAS jest absolutnie przydatny i obowiązkowy, ale rzeczywistość mówi jasnym językiem.

 10
Author: Michael Stum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-14 16:37:27

Uwaga dla czytelnika: zobacz dwa komentarze poniżej; wygląda na to, że przypadkowo zawyżam definicję CAS, aby (niepoprawnie) zawierała RBS. Zostawię tutaj odpowiedź dla odniesienia, ale zwróć uwagę na rozróżnienie.


Są dwie havle do CAS; rzecz, którą najbardziej zobaczysz w tym egzaminie to wszystkie niuanse dla kodu wywołującego inny kod, który może być przydatny do częściowego zaufania , ale przez większość czasu jest to po prostu ból - i co gorsza: jeśli twój kod ma pełne zaufanie (co robi większość / zbyt wiele) żadna z nich nie wykonuje (jest pomijana całkowicie).

użyteczna Część CAS RBS jest głównym uprawnieniem, które jest używane; oczywiście, twój interfejs powinien zweryfikować dostęp do funkcji, ale możesz umieścić (w logice low-down):

[PrincipalPermission(SecurityAction.Demand, Role = "ADMIN")]
static void DeleteOrder(int id) { ... }

Będzie to egzekwowane nawet przy pełnym zaufaniu; możesz zdefiniować swój własny principal (powiązany z użytkownikiem) poprzez implementację IPrincipal (Spójrz na IsInRole()). A ponieważ dyrektorzy są wspierani w większości środowiska (winforms, webforms, mvc, wcf itp.) może to być bardzo elastyczny sposób na podwójne sprawdzenie zabezpieczeń w warstwie biznesowej bez konieczności odwoływania się do określonego modelu zabezpieczeń. Zauważ, że powyższe sprawdzenie działa w dowolnym środowisku .

Możesz również użyć tego do kierowania interfejsem użytkownika. Miałem post usenetowy, który włączał / wyłączał kontrolki winforms w oparciu o principal (używając właściwości runtime do określenia roli dla kontrolki, trochę jak ToolTip etc) - nie mogę go znaleźć w tej chwili, chociaż (edit: może ten).

 5
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-23 03:58:34

Rzeczą do zrozumienia o zabezpieczeniu dostępu do kodu jest to, że jest on bardzo mało przydatny dla programisty aplikacji poza zrozumieniem, w jaki sposób jest używany i na jakim poziomie uprawnień dla API, które możesz wywoływać. Jedynym wyjątkiem od tego, który naprawdę uważam za przydatny, jest CAS o nazwie PrincipalPermission, który w zasadzie nie pozwala na wykonanie określonego kodu, jeśli właściwa rola nie jest zdefiniowana dla bieżącego głównego. Zobacz ten post na it:

Http://www.coderjournal.com/2008/03/securing-mvc-controller-actions/

Deweloperami, którzy naprawdę muszą zwracać uwagę na CAS i to, jak powinien być zaimplementowany w ich aplikacji, są Programiści frameworku i biblioteki kodu. Ponieważ istnieje pewien poziom zaufania, którego potrzebujesz, aby aplikacja inorder działała szczególnie w przypadku niezarządzanych zasobów, takich jak pliki, strumienie sieciowe, porty szeregowe itp. Lub jeśli tworzysz kod w przypadku tego niezarządzanego zasobu, takiego jak speicalized server, lub jakiegokolwiek dostępu niskiego poziomu do Twoich zestawów, będziesz chciał stworzyć wokół niego zabezpieczenia dostępu do kodu, aby ludzie nie mogli wykonać czegoś, co zostało im surowo odmówione.

Nie pomaga to, że Microsoft nie zrobił tak wielkiej roboty wyjaśniając, jak CAS powinien być używany w codziennej aplikacji. Więc to jest naprawdę powód braku użycia. Jednak CAS jest jednym z wielu powodów, że . NET jest tak bezpiecznym językiem i ma o wiele mniej problemów niż jego konkurenci.

 2
Author: Nick Berardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-14 16:06:23

Byłem liderem rozwoju projektu, aby uzyskać certyfikat JITC (Departament Obrony USA) dla rozwiązania opartego na. Net, A ustawienia CAS zostały dokładnie zbadane podczas testów certyfikacyjnych.

Podobnie jak większość innych wymagań certyfikacyjnych, kod mógł korzystać tylko z uprawnień potrzebnych do działania i nie więcej.

Jeśli planujesz uzyskać certyfikaty bezpieczeństwa CAS może być zdecydowanie ważne.

 2
Author: Dana Holt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-14 16:31:22

Jedną rzeczą, którą powinieneś wiedzieć, jest to, że zabezpieczenie dostępu do kodu jest w zasadzie zepsute jako metoda zabezpieczania przed manipulacją. Zobacz:

CAS Tamper-Proofing is Broken: Consequences for Software Licensing

...

Bezpieczeństwo dostępu do kodu nie może być już oparte na zapobieganiu użyciu manipulowanych zespołów w wysyłanych produktach. Oznacza to, że jeśli Twoja aplikacja jest zależna od zabezpieczeń dostępu do kodu, aby przeprowadzać kontrole licencji, jest to trywialne dla atakujący zastąpi twój zestaw licencji innym, uzyskując w ten sposób bezpłatny dostęp do Twojej aplikacji.

...

 1
Author: Duncan Bayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-21 23:14:42

Chociaż nigdy go nie używałem, moje zrozumienie CAS było takie, że można go również wykorzystać do rozszerzenia obiektowej mechaniki projektowania. Załóżmy na przykład, że opracowujesz ogromny pakiet dostępu do danych dla banku, który musi zaimplementować dostęp do bazy danych i buforowanie. Nawet jeśli są one częścią tego samego pakietu wdrażania, biorąc pod uwagę hipotetyczny rozmiar projektu, logika powinna być implementowana w oddzielnych zespołów, ponieważ są one wystarczająco różne zestawy problemów, które zawiasują na różnych siły zewnętrzne (Infrastruktura baz danych a wykorzystanie przez konsumentów).

Jednak kod buforowania może wymagać dostępu do pewnych wrażliwych klas lub metod w zbiorze dostępu do danych, do których konsumenci całego pakietu nie powinni mieć dostępu. Dlatego te klasy i metody dostępu do danych nie mogą być po prostu public. Protected methods in the data access assembly with subclases in the caching assembly może obejść niektóre przypadki, ale często jest to nadużycie dziedziczenia. Może być po prostu bardziej eleganckie jest pozostawienie ich public z LinkDemands umieszczonymi na wywołujących dla niestandardowych uprawnień (np. DataPackagePermisson), które administratorzy przyznaliby tylko zespołowi buforowania.

 1
Author: G-Wiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-22 23:38:48

Użyliśmy CAS dla naszych aplikacji nie było naprawdę trudne, ponieważ staraliśmy się tylko zatrzymać nieautoryzowane wykonywanie kodu. Problemy pojawiły się raz przy użyciu naszego oprogramowania z lokalnego udziału sieciowego, ale Polityka cas wyczyściła problem.

    Zabezpieczyliśmy wszystkie nasze zgromadzenia używając silnej nazwy.
  1. stworzyliśmy politykę cas dla wszystkich zespołów o naszej silnej nazwie i pozwoliliśmy kodowi podpisanemu naszą silną nazwą zaczynać się od sieci lokalnej i lokalnie umieszczonego kodu.
  2. zespoły załadowane z sieci lokalnej wymagające lokalnego dostępu do plików (komponent do nagrywania płyt CD z danymi) potrzebne do uzyskania atrybutu link-demand na wszystkich klasach publicznych.

Od aktualizacji .NET3.5 nasze problemy już nie istniały, ponieważ kod w sieci lokalnej jest teraz obsługiwany jak kod lokalny.

 0
Author: Oliver Friedrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-18 09:04:50