Es ist geplant, den Pledge-Isolation-Mechanismus auf Linux zu portieren

Vor kurzem der Autor der Cosmopolitan C-Standardbibliothek und die Redbean-Plattform angekündigt durch a angekündigt, die Implementierung des pledge()-Isolationsmechanismus für Linux.

Es war ursprünglich vom OpenBSD-Projekt entwickelt y erlaubt Ihnen, selektiv zu verbieten dass die Anwendungen greifen auf ungenutzte Systemaufrufe zu (Für die Anwendung wird eine Art Whitelist von Systemaufrufen gebildet und andere Aufrufe sind verboten). Im Gegensatz zu den unter Linux verfügbaren Syscall-Zugriffskontrollmechanismen wie seccomp ist der Pledge-Mechanismus von Grund auf so benutzerfreundlich wie möglich gestaltet.

Die gescheiterte Initiative, Anwendungen in der OpenBSD-Basisumgebung mithilfe des Systrace-Mechanismus zu isolieren, hat gezeigt, dass die Isolierung auf der Ebene einzelner Systemaufrufe zu kompliziert und zeitaufwändig ist.

Als Alternative wurde Pfand vorgeschlagen, der erlaubt, Isolationsregeln zu erstellen, ohne ins Detail zu gehen und vorbereitete Zugriffsklassen zu manipulieren.

Die angebotenen Klassen sind beispielsweise stdio (Eingabe/Ausgabe), rpath (schreibgeschützte Dateien), wpath (Dateien schreiben), cpath (Dateien erstellen), tmppath (mit temporären Dateien arbeiten), inet (Sockets-Netzwerk), unix (Unix-Sockets ), dns (DNS-Auflösung), getpw (Lesezugriff auf Benutzerdatenbank), ioctl (ioctl-Aufruf), proc (Prozesssteuerung), exec (Startprozesse) und id (Berechtigungssteuerung).

Die Regeln für die Arbeit mit Systemaufrufen werden in Form von Anmerkungen angegeben, die eine Liste zulässiger Systemaufrufklassen enthalten und ein Array von Dateipfaden, wo der Zugriff erlaubt ist. Nach dem Kompilieren und Ausführen der modifizierten Anwendung übernimmt der Kernel die Aufgabe, die Einhaltung der festgelegten Regeln zu überwachen.

Separat wird die Pledge-Implementierung für FreeBSD entwickelt, die sich durch die Möglichkeit auszeichnet, Anwendungen zu isolieren, ohne Änderungen an ihrem Code vorzunehmen, während bei OpenBSD der Pledge-Aufruf auf eine enge Integration mit der Basisumgebung und das Hinzufügen von Anmerkungen zum Code abzielt von jedem.

Pledge ist wie die verbotene Frucht, die wir alle begehren, wenn der Chef sagt, wir sollten Dinge wie Linux verwenden. Warum spielt das eine Rolle? Das liegt daran, dass pledge() die Sicherheit tatsächlich verständlich macht. Linux hatte nie wirklich eine Sicherheitsebene, die Normalsterbliche verstehen können.

Die Linux Pledge Port-Entwickler haben sich an FreeBSD orientiert und anstatt Codeänderungen vorzunehmen, haben sie ein zusätzliches Dienstprogramm von pledge.com vorbereitet, mit dem Sie Einschränkungen anwenden können, ohne den Anwendungscode zu ändern. Um beispielsweise das Curl-Dienstprogramm nur mit Zugriff auf die Systemaufrufklassen stdio, rpath, inet und threadstdio auszuführen, führen Sie einfach "./pledge.com -p 'stdio rpath inet thread' curl http://example.com » aus. .

Das Dienstprogramm funktioniert auf allen Linux-Distributionen seit RHEL6 und erfordert keinen Root-Zugriff. Zusätzlich wird basierend auf der Cosmopolitan-Bibliothek eine API zum Verwalten von Einschränkungen im Code von C-Programmen bereitgestellt, die es unter anderem ermöglicht, Enklaven zu erstellen, um den Zugriff in Bezug auf bestimmte Funktionen der Anwendung selektiv einzuschränken.

Es gab in der Vergangenheit einige Entwickler, die dies versucht haben. Ich werde keine Namen nennen, da die meisten dieser Projekte nie abgeschlossen wurden. Wenn es um SECOMP geht, erklären Online-Tutorials nur, wie man Systemaufrufe auf die Whitelist setzt, sodass die meisten Leute das Interesse verlieren, bevor sie herausfinden, wie man Argumente filtert. Die Projekte, die vorankamen, hatten auch Versehen, wie das Ändern von setuid/setgid/sticky-Bits. Daher sollte keine der aktuellen Alternativen verwendet werden. Ich denke, diese Bemühungen bringen uns dem Pledge() viel näher als je zuvor.

Die Implementierung erfordert keine Kernel-Änderungen: Dienstprogrammeinschränkungen werden in SECCOMP-BPF-Regeln übersetzt und unter Verwendung des nativen Systemaufruf-Isolationsmechanismus von Linux verarbeitet. Beispielsweise wird der Aufruf von Promise("stdio rpath", 0) in einen BPF-Filter konvertiert

Wenn Sie mehr darüber erfahren möchten, können Sie die Details einsehen im folgenden Link.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.