Capacitate

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Termenul de capacitate este un concept utilizat în securitatea cibernetică și este unul dintre modelele de securitate existente. O capacitate (cunoscută și sub numele de cheie ) este un semn de autoritate comunicabil și care nu poate fi falsificat. Constă dintr-o valoare care se referă la un obiect împreună cu o colecție de drepturi de acces . Un program de utilizator care rulează pe un sistem de operare bazat pe capacități trebuie să utilizeze o capacitate pentru a accesa un obiect .

Un sistem de securitate bazat pe capacități este principiul de proiectare care permite agenților utilizator să facă schimb direct de capabilități urmând principiul minimului privilegiu , iar infrastructura sistemului de operare să facă acești pași eficienți și siguri.

Deși multe sisteme de operare implementează mecanisme care seamănă cu capabilitățile, de obicei nu oferă suport pentru schimbul de capabilități între entități ca metodă principală de autorizare și distribuire a drepturilor de acces . Dimpotrivă, acesta din urmă este tocmai scopul unui sistem bazat pe capacități.

Acest sistem de securitate folosește o abordare contrastantă cu cea introdusă de domeniile ierarhice de securitate .

Termenul de capacitate, așa cum este utilizat în acest articol, nu trebuie confundat cu cuvântul omonim asociat cu POSIX 1e / 2c. Acesta din urmă este un sistem care oferă privilegii mai puțin rafinate și netransferabile între procese.

Introducere

Capabilitățile vizează îmbunătățirea securității sistemelor prin înlocuirea referințelor falsificabile. Acesta din urmă (de exemplu o cale ) identifică un obiect, dar nu specifică care sunt permisiunile sale și ce program deține această referință. În consecință, sistemul de operare trebuie să valideze orice încercare de a accesa obiectul la care se face referire prin intermediul listei de control al accesului (ACL). Cu toate acestea, într-un sistem cu capacitate, simpla deținere a unei capacități permite programului să utilizeze obiectul la care se face referire în conformitate cu permisiunile specificate de capacitate. În teorie, un sistem de operare bazat pe capacități elimină complet necesitatea de a utiliza liste de control al accesului sau alte mecanisme similare.

O capacitate este de obicei implementată ca o structură de date privilegiată constând dintr-o secțiune care specifică drepturile de acces și o secțiune care identifică în mod unic obiectul care trebuie atins. Utilizatorul nu accesează direct structura de date sau obiectul, ci printr-un pointer. În practică, este utilizat similar cu un descriptor de fișiere tradițional al sistemului de operare, dar pentru a accesa fiecare obiect din sistem. Capacitățile sunt de obicei stocate de sistemul de operare într-o listă, prin implementarea unor mecanisme care împiedică programul să modifice direct conținutul capacității (precum și să forgeze drepturile de acces și să modifice obiectul țintă).

Un program care are capabilități poate îndeplini funcții pe acestea, cum ar fi partajarea lor cu alte programe, crearea unei versiuni cu mai puține privilegii sau eliminarea acestora în întregime. Sistemul de operare trebuie să se asigure că numai unele operațiuni specifice pot fi efectuate asupra capacităților din sistem, pentru a menține integritatea securității.

Exemple

O capacitate este definită ca o referință protejată la un obiect care garantează procesului posibilitatea (în limba engleză exact capacitate ) de a interacționa cu obiectul în anumite moduri. Acestea includ citirea datelor asociate cu obiectul, modificarea obiectului, rularea datelor obiectului ca proces și alte permisiuni de acces posibile. Capacitatea constă dintr-o referință care identifică un anumit obiect și un set de unul sau mai multe drepturi.

Să presupunem că următoarele șiruri există în memoria unui proces de utilizator:

 etc / passwd

Deși acest lucru identifică un singur obiect din sistem, acesta nu specifică drepturile de acces și, prin urmare, nu este o capacitate. Deci, să presupunem că există următoarele două valori:

 / etc / passwd
O_RDWR

Aceasta identifică un obiect și un set de permisiuni de acces, dar nu este încă o capacitate, deoarece deținerea acestor valori pentru un proces de utilizator nu permite să înțeleagă dacă accesul este legitim.

Acum, să presupunem că procesul execută această linie de cod:

 int fd = deschis ("etc / passwd", O_RDWR);

Variabila fd conține acum un index al unui descriptor de fișiere conținut în tabelul descriptorului de fișiere de proces. Descriptorul de fișiere este capacitatea. Existența tabelului în cadrul procesului este o condiție suficientă pentru a declara că accesul la obiect este legitim pentru procesul în cauză. O caracteristică cheie a acestui mod este că tabelul descriptor se află în memoria nucleului și, prin urmare, nu poate fi manipulat direct de programul utilizatorului.

Partajarea între procese

În sistemele de operare tradiționale, programele comunică adesea între ele și memoria folosind referințe ca în primele două exemple de mai sus. Numele căilor sunt adesea transmise ca parametri ai liniei de comandă, trimise prin socket și salvate pe disc. Aceste referințe nu sunt capabilități și trebuie validate înainte de utilizare.

În sistemele bazate pe capacități, capacitățile în sine sunt transmise între procese și memorie utilizând un sistem cunoscut de sistemul de operare pentru a menține integritatea acestor capacități.

Implementări

Notă

  1. ^ capsicum (4) , la www.freebsd.org . Adus pe 27 noiembrie 2017 .
  2. ^ https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf
  3. ^ (EN) Sistemul de operare Fuchsia de la Google rulează practic pe orice , în Engadget. Adus pe 27 noiembrie 2017 .
  4. ^ pledge (2) - paginile manualului OpenBSD , la man.openbsd.org . Adus pe 27 noiembrie 2017 .

Bibliografie

Referințe în limba engleză:

Referințe în italiană:

linkuri externe

Securitate IT Portal de securitate cibernetică : accesați intrările Wikipedia care se ocupă de securitatea cibernetică