FĂŒr FreeBSD wurde eine Implementierung eines Mechanismus zur Isolation von Anwendungen vorgeschlagen, der den system calls plegde und unveil Ă€hnlich ist, die im Rahmen des OpenBSD-Projekts entwickelt werden. Die Isolation in plegde erfolgt durch das Verbot des Zugriffs auf nicht verwendete system calls der Anwendung, wĂ€hrend unveil den selektiven Zugriff nur auf bestimmte Dateiwege ermöglicht, mit denen die Anwendung arbeiten kann. FĂŒr die Anwendung wird eine Art Whitelist von system calls und Dateiwegen erstellt, und alle anderen Aufrufe und Wege werden verboten.
Der Unterschied zwischen dem fĂŒr FreeBSD entwickelten Pendant von plegde und unveil besteht darin, dass eine zusĂ€tzliche Schicht bereitgestellt wird, die es ermöglicht, Anwendungen ohne Ănderungen am Code oder mit minimalen Ănderungen zu isolieren. Es sei daran erinnert, dass in OpenBSD plegde und unveil auf eine enge Integration mit der Basisumgebung abzielen und durch spezielle Annotationen im Code jeder Anwendung angewendet werden. Um die Organisation des Schutzes zu vereinfachen, erlauben die Filter, ohne Detaillierung auf der Ebene einzelner system calls zu arbeiten und Klassen von system calls (Ein/Ausgabe, Datei lesen, Datei schreiben, Sockets, ioctl, sysctl, Prozesse starten usw.) zu manipulieren. Funktionen zur ZugriffsbeschrĂ€nkung können im Code der Anwendung wĂ€hrend der AusfĂŒhrung bestimmter Aktionen aufgerufen werden, beispielsweise kann der Zugriff auf Sockets und Dateien nach dem Ăffnen der benötigten Dateien und der Herstellung einer Netzwerkverbindung geschlossen werden.
Der Autor des Ports plegde und unveil fĂŒr FreeBSD beabsichtigt, die Isolation beliebiger Anwendungen zu ermöglichen. Zu diesem Zweck wurde das Dienstprogramm curtain vorgeschlagen, das es ermöglicht, Regeln, die in einer separaten Datei definiert sind, auf Anwendungen anzuwenden. Die vorgeschlagene Konfiguration umfasst eine Datei mit grundlegenden Einstellungen, die Klassen von system calls und typische Dateiwege definieren, die spezifisch fĂŒr bestimmte Anwendungen sind (Arbeiten mit Audio, Netzwerkinteraktion, Protokollausgabe usw.), sowie eine Datei mit Zugriffsregeln fĂŒr spezifische Anwendungen.
Das Utility curtain kann zur Isolierung der meisten unmodifizierten Utilities, Server-Prozesse, grafischen Anwendungen und sogar ganzer Desktop-Sitzungen verwendet werden. Die gemeinsame Nutzung von curtain mit den Isolationsmechanismen, die von den Jail- und Capsicum-Subsystemen bereitgestellt werden, wird unterstĂŒtzt. Auch die Einrichtung einer verschachtelten Isolierung ist möglich, bei der die gestarteten Anwendungen die dem ĂŒbergeordneten Anwendung festgelegten Regeln erben und diese mit eigenen EinschrĂ€nkungen ergĂ€nzen. Einige Kernel-Operationen (Debugging-Tools, POSIX/SysV IPC, PTYs) werden zusĂ€tzlich durch Barriere-Mechanismen geschĂŒtzt, die den Zugriff auf Kernobjekte, die nicht vom aktuellen oder ĂŒbergeordneten Prozess erstellt wurden, verhindern.
Der Prozess kann seine eigene Isolation selbst konfigurieren, indem er curtainctl aufruft oder die von der Bibliothek libcurtain bereitgestellten Funktionen plegde() und unveil() verwendet, die den Ă€hnlichen Funktionen aus OpenBSD entsprechen. Um Sperren wĂ€hrend der AusfĂŒhrung der Anwendung nachverfolgen zu können, steht der sysctl âsecurity.curtain.log_levelâ zur VerfĂŒgung. Der Zugang zu den Protokollen von X11 und Wayland wird separat durch die Angabe von Optionen «-X»/«-Y» und «-W» beim Start von curtain aktiviert, jedoch ist die UnterstĂŒtzung grafischer Anwendungen noch nicht ausreichend stabil und weist eine Reihe von ungelösten Problemen auf (Probleme treten hauptsĂ€chlich bei der Verwendung von X11 auf, wĂ€hrend die UnterstĂŒtzung von Wayland deutlich besser implementiert ist). Benutzer können zusĂ€tzliche EinschrĂ€nkungen durch das Erstellen lokaler Regeldateien (~/.curtain.conf) hinzufĂŒgen. Beispielsweise kann man fĂŒr das Erlauben von Schreibzugriffen aus Firefox nur auf das Verzeichnis ~/Downloads/ einen Abschnitt «[firefox]» mit der Regel «~/Downloads/: rw +» hinzufĂŒgen.
Die Implementierung umfasst das Kernel-Modul mac_curtain fĂŒr Mandatory Access Control (MAC), eine Reihe von Patches fĂŒr den FreeBSD-Kernel zur Implementierung der erforderlichen Handler und Filter, die Bibliothek libcurtain zur Nutzung der Funktionen plegde und unveil in Anwendungen, das Utility curtain, Beispiele fĂŒr Konfigurationsdateien, eine Testreihe und Patches fĂŒr einige Programme im Benutzerraum (zum Beispiel zur Verwendung von $TMPDIR mit dem Ziel, die Arbeit mit temporĂ€ren Dateien zu vereinheitlichen). Der Autor beabsichtigt, die Anzahl der Ănderungen, die Patches fĂŒr Kernel und Anwendungen erfordern, nach Möglichkeit zu minimieren.
Quelle: opennet.ru
