Model zdolności obiektowej - Object-capability model
Model zdolności obiektowej to komputerowy model bezpieczeństwa . Zdolność opisuje przenośne prawo do wykonywania jednego (lub więcej) operacji na danym przedmiocie. Można go uzyskać za pomocą następującej kombinacji:
- Odwołanie niemożliwe do podrobienia (w sensie odwołań do obiektów lub chronionych wskaźników), które można wysyłać w wiadomościach.
- Komunikat określający operację do wykonania.
Model bezpieczeństwa opiera się na braku możliwości sfałszowania referencji.
-
- Obiekty mogą wchodzić w interakcje tylko poprzez wysyłanie wiadomości o referencjach.
- Referencje można uzyskać poprzez:
- Warunki początkowe: W stanie początkowym opisywanego świata obliczeniowego obiekt A może już mieć odniesienie do obiektu B.
- Rodzicielstwo: Jeśli A tworzy B, w tym momencie A uzyskuje jedyne odniesienie do nowo utworzonego B.
- Wyposażenie: Jeśli A tworzy B, B rodzi się z tym podzbiorem odniesień A, w który A zdecydował się je wyposażyć.
- Wprowadzenie: Jeśli A ma odniesienia zarówno do B, jak i C, A może wysłać do B wiadomość zawierającą odniesienie do C. B może zachować to odniesienie do późniejszego wykorzystania.
W modelu obiektowo-zdolnościowym wszystkie obliczenia wykonywane są zgodnie z powyższymi zasadami.
Zalety, które motywują programowanie zorientowane obiektowo , takie jak enkapsulacja lub ukrywanie informacji , modułowość i separacja problemów , odpowiadają celom bezpieczeństwa, takim jak najmniejsza separacja uprawnień i uprawnień w programowaniu opartym na możliwościach.
Model obiektowo-zdolnościowy został po raz pierwszy zaproponowany przez Jacka Dennisa i Earla C. Van Horna w 1966 roku.
Luki w obiektowych językach programowania
Niektóre języki programowania oparte na obiektach (np. JavaScript , Java i C# ) zapewniają sposoby dostępu do zasobów w inny sposób niż zgodnie z powyższymi regułami, w tym:
- Bezpośrednie przypisanie do zmiennych instancji obiektu w Javie i C#.
- Bezpośrednia refleksyjna inspekcja metadanych obiektu w Javie i C#.
- Powszechna możliwość importowania prymitywnych modułów, np. java.io.File, które umożliwiają efekty zewnętrzne.
Takie użycie niezaprzeczalnego autorytetu narusza warunki modelu obiektowo-zdolnościowego. Caja i Joe-E to odpowiednio warianty JavaScript i Java, które nakładają ograniczenia w celu wyeliminowania tych luk.
Zalety możliwości obiektu
Informatyk E. Dean Tribble stwierdził, że w inteligentnych kontraktach kontrola dostępu oparta na tożsamości nie obsługuje dobrze dynamicznie zmieniających się uprawnień w porównaniu z modelem obiektowym. Porównał model ocap do oddania lokajowi kluczyka do samochodu, bez przekazania prawa własności samochodu.
Właściwości strukturalne systemów zdolności obiektów sprzyjają modułowości w projektowaniu kodu i zapewniają niezawodną enkapsulację w implementacji kodu.
Te właściwości strukturalne ułatwiają analizę niektórych właściwości zabezpieczeń programu obsługującego obiekty lub systemu operacyjnego. Niektóre z nich – w szczególności właściwości przepływu informacji – mogą być analizowane na poziomie odniesień do obiektów i łączności, niezależnie od jakiejkolwiek wiedzy lub analizy kodu, który determinuje zachowanie obiektów. W konsekwencji te właściwości bezpieczeństwa mogą być ustanawiane i utrzymywane w obecności nowych obiektów, które zawierają nieznany i prawdopodobnie złośliwy kod.
Te właściwości strukturalne wynikają z dwóch zasad regulujących dostęp do istniejących obiektów:
- 1) Obiekt A może wysłać wiadomość do B tylko wtedy, gdy obiekt A zawiera odniesienie do B .
- 2) Obiekt A może otrzymać odwołanie do C tylko wtedy, gdy obiekt A otrzyma wiadomość zawierającą odwołanie do C .
W konsekwencji tych dwóch zasad obiekt może uzyskać odniesienie do innego obiektu tylko poprzez istniejący wcześniej łańcuch odniesień. Krótko mówiąc, „Tylko łączność rodzi łączność”.
- system możliwości obiektowych
- System obliczeniowy, który implementuje zasady opisane w tym artykule.
- obiekt
- Obiekt ma lokalny stan i zachowanie. Obiekt w tym sensie jest zarówno podmiotem, jak i obiektem w znaczeniu używanym w literaturze dotyczącej kontroli dostępu.
- odniesienie
- Niemożliwy do podrobienia kanał komunikacyjny (chroniony wskaźnik, nieprzezroczysty adres), który jednoznacznie wyznacza pojedynczy obiekt i zapewnia uprawnienia do wysyłania wiadomości do tego obiektu.
- wiadomość
- Co jest wysyłane na referencję. W zależności od systemu komunikaty mogą, ale nie muszą, być obiektami pierwszej klasy.
- żądanie
- Operacja, w której komunikat jest wysyłany na odwołanie. Po odebraniu wiadomości odbiorca będzie miał dostęp do wszelkich odnośników zawartych w wiadomości.
- osłabienie
- Typowy wzorzec projektowy w systemach obsługi obiektów: mając jedno odniesienie do obiektu, utwórz kolejne odniesienie dla obiektu proxy z pewnymi ograniczeniami bezpieczeństwa, takimi jak zezwalanie tylko na dostęp tylko do odczytu lub umożliwienie odwołania. Obiekt proxy przeprowadza kontrole bezpieczeństwa odbieranych i przekazywanych komunikatów, które są dozwolone. Głębokie tłumienie odnosi się do przypadku, w którym to samo tłumienie jest stosowane przejściowo do dowolnych obiektów uzyskanych za pośrednictwem oryginalnego tłumionego obiektu, zwykle przy użyciu „membrany”.
Realizacje
Prawie wszystkie historyczne systemy, które zostały opisane jako „systemy zdolności” mogą być modelowane jako systemy zdolności obiektowych. (Należy jednak zauważyć, że niektóre zastosowania terminu „zdolność” nie są zgodne z modelem, takie jak „zdolności” POSIX).
KeyKOS , EROS , Integrity (system operacyjny) , CapROS , Coyotos , seL4 , OKL4 i Fiasco.OC to bezpieczne systemy operacyjne, które implementują model obiektowy.
Języki, które implementują możliwości obiektów
- Akt 1 (1981)
- Eden (1985),
- Szmaragd (1987),
- Program Powierniczy (1992),
- W7 (1995),
- Dżul (1996),
- Oryginał-E (1997),
- Oz-E (2005),
- Joe-E (2005),
- CaPerl (2006),
- Emilia (2006)
- Caja (2007-obecnie)
- Monte (2008-obecnie)
- Kucyk (2014-obecnie)
- Wyvern (2012-obecnie)
- Nowomowa (2007-obecnie)
- Hacklang (2021-obecnie)
- Rholang (2018-obecnie)