Model de capacitate obiect - Object-capability model

Modelul de capacitate obiect este un model de securitate a computerului . O capacitate descrie un drept transferabil de a efectua una (sau mai multe) operațiuni pe un anumit obiect. Poate fi obținut prin următoarea combinație:

  • O referință de neuitat (în sensul referințelor la obiecte sau indicii protejați) care poate fi trimisă în mesaje.
  • Un mesaj care specifică operația de efectuat.

Modelul de securitate se bazează pe imposibilitatea de a falsifica referințe.

  • Obiectele pot interacționa numai prin trimiterea de mesaje pe referințe.
  • O referință poate fi obținută prin:
  1. Condiții inițiale: în starea inițială a lumii de calcul descrise, obiectul A poate avea deja o referință la obiectul B.
  2. Parentalitate: dacă A creează B, în acel moment A obține singura referință la noul B creat.
  3. Dotare: Dacă A creează B, B se naște cu acel subset de referințe A cu care A a ales să-l înzestreze.
  4. Introducere: Dacă A are referințe atât la B, cât și la C, A poate trimite către B un mesaj care conține o referință la C. B poate păstra acea referință pentru utilizare ulterioară.

În modelul de capacitate obiect, toate calculele sunt efectuate urmând regulile de mai sus.

Avantajele care motivează programarea orientată pe obiecte , cum ar fi încapsularea sau ascunderea informațiilor , modularitatea și separarea preocupărilor , corespund unor obiective de securitate, cum ar fi cel mai mic privilegiu și separarea privilegiilor în programarea bazată pe capacități.

Modelul de capacitate obiect a fost propus pentru prima dată de Jack Dennis și Earl C. Van Horn în 1966.

Lacune în limbaje de programare orientate obiect

Unele limbaje de programare bazate pe obiecte (de exemplu , JavaScript , Java și C # ) oferă modalități de accesare a resurselor în alte moduri decât în ​​conformitate cu regulile de mai sus, inclusiv următoarele:

  • Alocare directă la variabilele de instanță ale unui obiect în Java și C #.
  • Inspecție directă reflexivă a meta-datelor unui obiect în Java și C #.
  • Capacitatea omniprezentă de a importa module primitive, de exemplu java.io.File care permit efecte externe.

O astfel de utilizare a autorității incontestabile încalcă condițiile modelului de capacitate obiect. Caja și Joe-E sunt variante de JavaScript și, respectiv, Java, care impun restricții pentru a elimina aceste lacune.

Avantajele capacităților obiectului

Omul de știință în informatică E. Dean Tribble a afirmat că, în contractele inteligente , controlul accesului bazat pe identitate nu a acceptat schimbarea dinamică a permisiunilor, în comparație cu modelul de capacitate obiect. El a analogizat modelul ocap oferindu-i unui valet cheia mașinii, fără a preda dreptul de proprietate asupra mașinii.

Proprietățile structurale ale sistemelor de capacitate a obiectelor favorizează modularitatea în proiectarea codului și asigură încapsularea fiabilă în implementarea codului.

Aceste proprietăți structurale facilitează analiza unor proprietăți de securitate ale unui program sau sistem de operare cu capacitate de obiect. Unele dintre acestea - în special proprietățile fluxului de informații - pot fi analizate la nivelul referințelor și conectivității obiectelor, independent de orice cunoaștere sau analiză a codului care determină comportamentul obiectelor. În consecință, aceste proprietăți de securitate pot fi stabilite și menținute în prezența unor obiecte noi care conțin cod necunoscut și posibil malware.

Aceste proprietăți structurale provin din cele două reguli care guvernează accesul la obiectele existente:

1) Un obiect A poate trimite un mesaj la B , numai în cazul în care obiectul A deține o trimitere la B .
2) Un obiect A poate obține o referință la C numai dacă obiectul A primește un mesaj care conține o trimitere la C .

Ca o consecință a acestor două reguli, un obiect poate obține o referință la un alt obiect numai printr-un lanț preexistent de referințe. Pe scurt, „Numai conectivitatea generează conectivitatea”.

Glosar de termeni înrudiți

sistem capacitate obiect
Un sistem de calcul care implementează principiile descrise în acest articol.
obiect
Un obiect are stare și comportament local. Un obiect în acest sens este atât un subiect, cât și un obiect în sensul utilizat în literatura de control a accesului.
referinţă
Un canal de comunicații de neuitat (pointer protejat, adresă opacă) care desemnează fără echivoc un singur obiect și oferă permisiunea de a trimite mesaje către acel obiect.
mesaj
Ce este trimis pe o referință. În funcție de sistem, mesajele pot fi sau nu ele însele obiecte de primă clasă.
cerere
O operațiune în care un mesaj este trimis pe o referință. Când mesajul este primit, receptorul va avea acces la orice referințe incluse în mesaj.
atenuare
Un model de proiectare obișnuit în sistemele de capacitate obiect: având în vedere o referință a unui obiect, creați o altă referință pentru un obiect proxy cu anumite restricții de securitate, cum ar fi permiterea accesului numai în citire sau permiterea revocării. Obiectul proxy efectuează verificări de securitate la mesajele pe care le primește și le transmite pe cele permise. Atenuarea profundă se referă la cazul în care aceeași atenuare este aplicată tranzitiv la orice obiecte obținute prin intermediul obiectului original atenuat, de obicei prin utilizarea unei „membrane”.

Implementări

Aproape toate sistemele istorice care au fost descrise ca „sisteme de capacitate” pot fi modelate ca sisteme de capacitate obiect. (Rețineți, totuși, că unele utilizări ale termenului „capacitate” nu sunt în concordanță cu modelul, cum ar fi „capabilități” POSIX.)

KeyKOS , EROS , Integrity (sistem de operare) , CapROS , Coyotos , seL4 , OKL4 și Fiasco.OC sunt sisteme de operare sigure care implementează modelul de capacitate obiect.

Limbi care implementează capabilități de obiect

  • Actul 1 (1981)
  • Eden (1985),
  • Emerald (1987),
  • Schema Trusty (1992),
  • W7 (1995),
  • Joule (1996),
  • Original-E (1997),
  • Oz-E (2005),
  • Joe-E (2005),
  • CaPerl (2006),
  • Emily (2006)
  • Caja (2007 – prezent)
  • Monte (2008 – prezent)
  • Ponei (2014 – prezent)
  • Wyvern (2012 – prezent)
  • Newspeak (2007 – prezent)
  • Hacklang (2021-prezent)
  • Rholang (2018-prezent)

Vezi si

Referințe