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:
- Tahoe-Lafs, ein open-source-fähigheitsbasiertes Dateisystem
- GNOSIS, ein Betriebssystem, das entwickelt wurde bei Tymshare
- Kekos, Nachfolger von Gnosis
- Eros, die Äußerst zuverlässiges Betriebssystem, Nachfolger von Keykos
- Capros, ein Projekt zur Weiterentwicklung der EROS -Code -Basis für den kommerziellen Gebrauch
- Eros, die Äußerst zuverlässiges Betriebssystem, Nachfolger von Keykos
- Kekos, Nachfolger von Gnosis
- Cambridge Cap Computer
- Hydra (Betriebssystem), Teil von C.MMP Projekt bei Carnegie Mellon Universität
- Staros, Teil des CM* -Projekts bei Carnegie Mellon Universität
- IBM System/38 und AS/400
- Intel IAPX 432
- Plessey System 250
- Biegen
- L4 Microkernel -Familie:
- OKL4 aus Open Kernel Labs
- Sel4 von Nicta
- Fiasco.oc und Nova von Tu Dresden
- Amöbe verteiltes Betriebssystem
- Freebsd Capsicum[3][4]
- Genüde[5]
- Google Fuchsia[6]
- WebAssembly Systemschnittstelle (WASI)
Verweise
- ^ Linux Programmierer Handbuch - Übersicht, Konventionen und Verschiedenes - -
- ^ Freebsd Kernelschnittstellen Handbuch - -
- ^ "Capsicum (4)".
- ^ https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf[Bare URL PDF]
- ^ "Genode OS: Ein Hauch frischer Luft in Betriebssystem und Softwaresicherheit".
- ^ "Das Fuchsia -Betriebssystem von Google läuft auf praktisch alles".
- Levy, Henry M., *Fähigkeitsbasierte Computersysteme, Digital Equipment Corporation 1984. ISBN0-932376-22-3. Eine elektronische Version ist verfügbar hier.
- Das EROS -Projekt
- E, eine Programmiersprache, die auf der Sicherheit der Fähigkeiten basiert (SicherheitErights.org)
- Mark S. Miller, Ka-Ping Yee, Jonathan Shapiro. Fähigkeitsmythen zerstört, Technischer Bericht SRL2003-02, Systeme Research Laboratory, Johns Hopkins University. Online verfügbar.
- Der Cambridge Cap Computer, Levy, 1988
Weitere Lektüre
- Fähigkeitsbasierte Adressierung: Theodore A. Linden (Dezember 1976). "Betriebssystemstrukturen zur Unterstützung der Sicherheit und der zuverlässigen Software". ACM Computing -Umfragen. 8 (4): 409–445. doi:10.1145/356678.356682. HDL:2027/MDP.39015086560037. ISSN 0360-0300. S2CID 16720589.
- Li Gong, Ein sicheres identitätsbasiertes Fähigkeitssystem, sp, p. 56, 1989 IEEE Symposium für Sicherheit und Privatsphäre, 1989
- Fähigkeitsbasierte Adressierung
- Eine Hardware-Implementierung der Fähigkeitsadressierung
- Eine Implementierung von Funktionen für die PDP-11/45
- IBM System/38 Unterstützung für die Fähigkeitsadressierung
- Eros: Ein schnelles Fähigkeitssystem
POSIX "Funktionen" unter Linux:
- POSIX -Funktionen und Dateien
- POSIX -Dateifunktionen: Praceling the Power of Root
- Wurzel unrivilegiert machen
- Sicherheitsprobleme und neue Risiken, die mit POSIX -Dateifunktionen verknüpft sind
- Linux -Handbuch Seite für "Funktionen (7)"
- Arbeiten mit Linux -Funktionen