Fähigkeitsbasierte Sicherheit

Fähigkeitsbasierte Sicherheit ist ein Konzept in der Gestaltung von Sicheres Computer Systeme eines der bestehenden Sicherheitsmodelle. EIN Fähigkeit (bekannt in einigen Systemen als Schlüssel) ist eine übertragbare, unversöhnliche Zeichen der Autorität. Es bezieht sich auf einen Wert, der Verweise ein Objekt zusammen mit einem zugehörigen Satz von Zugangsrechte. EIN Benutzer Programm auf einen Funktionsbasiertes Betriebssystem Muss eine Fähigkeit verwenden, um auf ein Objekt zuzugreifen. Die Fähigkeitssicherheit bezieht sich auf das Prinzip der Gestaltung von Benutzerprogrammen, sodass sie direkt Funktionen entsprechend dem Prinzip der geringsten Privilegienund zur Betriebssysteminfrastruktur, die erforderlich ist, um solche Transaktionen effizient und sicher zu machen. Fähigkeitsbasierte Sicherheit ist im Gegensatz zu einem Ansatz, der verwendet Traditionelle Unix -Berechtigungen und Zugriffskontrolllisten.

Obwohl die meisten Betriebssysteme eine Einrichtung implementieren, die Fähigkeiten ähnelt, bieten sie in der Regel nicht genügend Unterstützung, um den Austausch von Fähigkeiten zwischen möglicherweise nicht vertrauenswürdigen Unternehmen zu ermöglichen, um das Hauptmittel zur Gewährung und Verteilung von Zugriffsrechten im gesamten System zu gewährleisten. Im Gegensatz dazu ist ein fähigendes System unter Berücksichtigung dieses Ziels konzipiert.

Die in diesem Artikel erläuterten Funktionen sollten nicht mit tragbarer Betriebssystemschnittstelle verwechselt werden (SchnittstellePosix) 1e/2c "Fähigkeiten"Letzteres sind grobe Privilegien, die nicht zwischen den Prozessen übertragen werden können.

Einführung

Fähigkeiten erreichen ihr Ziel, die Systemsicherheit zu verbessern, indem sie anstelle von Vergebung eingesetzt werden Verweise. Eine vergebenbare Referenz (zum Beispiel a Pfadname) Identifiziert ein Objekt, gibt jedoch nicht an, welche Zugriffsrechte für dieses Objekt und das Benutzerprogramm geeignet sind, das diese Referenz innehat. Folglich muss jeder Versuch, auf das referenzierte Objekt zuzugreifen Umgebungsbehörde des anfordernden Programms, normalerweise über die Verwendung eines Zugriffskontrollliste (ACL). Stattdessen besitzt in einem System mit Funktionen die bloße Tatsache, dass ein Benutzerprogramm diese Fähigkeit besitzt, das referenzierte Objekt gemäß den Rechten zu verwenden, die durch diese Fähigkeit angegeben sind. Theoretisch beseitigt ein System mit Funktionen die Notwendigkeit einer Zugriffskontrollliste oder eines ähnlichen Mechanismus, indem alle Entitäten alle und nur die Fähigkeiten erhalten, die sie tatsächlich benötigen.

Eine Fähigkeit wird normalerweise als implementiert privilegiert Datenstruktur Dies besteht aus einem Abschnitt, der Zugriffsrechte spezifiziert, und einen Abschnitt, in dem das zugegriffene Objekt eindeutig identifiziert wird. Der Benutzer greifen nicht direkt auf die Datenstruktur oder das Objekt zu, sondern über a handhaben. In der Praxis wird es ähnlich wie a verwendet Dateideskriptor in einem herkömmlichen Betriebssystem (ein traditionelles Griff), aber auf jedes Objekt auf dem System zugreifen zu können. Die Funktionen werden in der Regel vom Betriebssystem in einer Liste gespeichert, wobei einiger Mechanismus vorhanden ist, um zu verhindern, dass das Programm den Inhalt der Fähigkeit direkt ändert (um Zugriffsrechte zu formen oder das von ihm verweiste Objekt zu ändern). Einige Systeme basieren auch auf Fähigkeitsbasierte Adressierung (Hardwareunterstützung für Funktionen), wie z. Plessey System 250.

Programme, die Funktionen besitzen, können Funktionen auf sie ausführen, z. Das Betriebssystem muss sicherstellen, dass nur bestimmte Vorgänge für die Fähigkeiten des Systems auftreten können, um die Integrität der Sicherheitsrichtlinie aufrechtzuerhalten.

Beispiele

Eine Fähigkeit wird als geschützt definiert Objekt Referenz, die aufgrund seines Besitzes durch einen Benutzerprozess die Fähigkeit (daher den Namen) gewährt, auf bestimmte Weise mit einem Objekt zu interagieren. Zu diesen Wegen gehören möglicherweise das Lesen von Daten, die einem Objekt zugeordnet sind, das Objekt ändern, die Daten im Objekt als Prozess und andere denkbare Zugriffsrechte ausführen. Die Fähigkeit besteht logischerweise aus einer Referenz, die ein bestimmtes Objekt und eine Reihe eines oder mehrerer dieser Rechte eindeutig identifiziert.

Angenommen, im Speicherplatz eines Benutzerprozesses gibt es die folgende Zeichenfolge:

/etc/passwd

Obwohl dies ein eindeutiges Objekt im System identifiziert, gibt es keine Zugriffsrechte an und ist daher keine Fähigkeit. Angenommen, es gibt stattdessen das folgende Wertepaar:

/etc/passwd o_rdwr

Dieses Paar identifiziert ein Objekt zusammen mit einer Reihe von Zugriffsrechten. Das Paar ist jedoch immer noch keine Fähigkeit, da der Benutzerprozess des Benutzers verarbeitet Besitz Von diesen Werten sagt nichts darüber aus, ob dieser Zugang tatsächlich legitim wäre.

Nehmen wir nun an, dass das Benutzerprogramm erfolgreich die folgende Erklärung ausführt:

int FD = offen("/etc/passwd", O_RDWR); 

Die Variable FD Enthält nun den Index eines Dateideskriptors in der Dateideskriptor -Tabelle des Prozesses. Dieser Dateideskriptor ist eine Fähigkeit. Die Existenz in der Dateideskriptorentabelle des Prozesses reicht aus, um zu zeigen, dass der Prozess tatsächlich einen legitimen Zugriff auf das Objekt hat. Ein Schlüsselmerkmal dieser Anordnung ist, dass die Dateideskriptorentabelle in der Kernelgedächtnis und kann nicht direkt vom Benutzerprogramm manipuliert werden.

Teilen zwischen Prozessen

In herkömmlichen Betriebssystemen kommunizieren Programme häufig miteinander und mit Speicher unter Verwendung von Referenzen wie in den ersten beiden Beispielen. Pfadnamen werden häufig als Befehlszeilenparameter übergeben, über Sockets gesendet und auf der Festplatte gespeichert. Diese Referenzen sind keine Funktionen und müssen validiert werden, bevor sie verwendet werden können. In diesen Systemen lautet eine zentrale Frage ", auf wessen Behörde Wird ein bestimmter Verweis bewertet? "Dies wird zu einem kritischen Thema, insbesondere für Prozesse, die im Namen von zwei verschiedenen Berechtigungsunternehmen wirken müssen. Sie werden anfällig für einen Programmierfehler, der als das bekannt ist verwirrtes stellvertretendes Problem, sehr häufig zu einem Sicherheitsloch.

In einem fähigheitsbasierten System werden die Fähigkeiten selbst zwischen Prozessen und Speicher unter Verwendung eines Mechanismus übergeben, der im Betriebssystem bekannt ist, um die Integrität dieser Fähigkeiten aufrechtzuerhalten.

Ein neuer Ansatz zur Lösung dieses Problems beinhaltet die Verwendung eines orthogonal hartnäckig Betriebssystem. In einem solchen System müssen keine Unternehmen verworfen werden und ihre Fähigkeiten ungültig werden und benötigt daher einen ACL-ähnlichen Mechanismus, um diese Fähigkeiten zu einem späteren Zeitpunkt wiederherzustellen. Das Betriebssystem behält die Integrität und Sicherheit der in der gesamten speicher und nichtflüchtigen Speicher enthaltenen Funktionen jederzeit bei. teilweise durch Durchführung aller Serialisierung Aufgaben selbst, anstatt Benutzerprogramme zu verlangen, wie dies in den meisten Betriebssystemen der Fall ist. Da Benutzerprogramme von dieser Verantwortung entlastet sind, müssen sie nicht vertrauen, um nur rechtliche Funktionen zu reproduzieren, oder um Anfragen nach Zugriffsanfragen mit einem zu validieren Zugangskontrolle Mechanismus. Eine Beispielimplementierung ist die Flexmaschine Ab den frühen 1980er Jahren.

POSIX -Fähigkeiten

Tragbarer Betriebssystem Interface (POSIX) Draft 1003.1E Gibt ein Konzept von Berechtigungen an, das als "Funktionen" bezeichnet wird. POSIX -Funktionen unterscheiden sich jedoch von den Fähigkeiten in diesem Artikel. Eine Posix -Fähigkeit ist keinem Objekt zugeordnet. Ein Prozess mit CAP_NET_BIND_SERVICE -Funktion kann auf jedem TCP -Port unter 1024 anhören. Dieses System befindet sich unter Linux.[1]

Im Gegensatz, Capsicum UNIX hybridisiert ein echtes Fähigkeitssystemmodell mit einem UNIX-Design und einer POSIX-API. Capsicum -Funktionen sind eine raffinierte Form des Dateideskriptors, ein delegierbares Recht zwischen Prozessen und zusätzlichen Objekttypen, die über klassische POSIX hinausgehen, wie z. B. Prozesse, können über Funktionen referenziert werden. Im Capsicum -Funktionsmodus können Prozesse globale Namespaces (wie den Dateisystem -Namespace) nicht verwenden, um Objekte zu suchen, und müssen stattdessen erben oder delegiert werden. Dieses System befindet sich nativ in FreeBSD, aber Patches stehen anderen Systemen zur Verfügung.[2]

Implementierungen

Bemerkenswerte Forschungs- und kommerzielle Systeme, die in der Fähigkeitssicherheit eingesetzt werden, umfassen Folgendes:

Verweise

  1. ^ Fähigkeiten (7)- -Linux Programmierer Handbuch - Übersicht, Konventionen und Verschiedenes
  2. ^ capsicum (4)- -Freebsd Kernelschnittstellen Handbuch
  3. ^ "Capsicum (4)".
  4. ^ https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf[Bare URL PDF]
  5. ^ "Genode OS: Ein Hauch frischer Luft in Betriebssystem und Softwaresicherheit".
  6. ^ "Das Fuchsia -Betriebssystem von Google läuft auf praktisch alles".

Weitere Lektüre

POSIX "Funktionen" unter Linux:

Externe Links