Der ADMIN 05/13 wirft einen Blick auf die frei verfügbaren Cloud-Frameworks von Eucalyptus über OpenNebula bis OpenStack. Gute Aussichten für skalierbare ... (mehr)

Systemcalls begrenzt

Der Aufruf von Systemfunktionen ist im Capability-Mode ebenfalls reguliert: Einige Funktionen, die Zugriff auf den globalen Namespace haben, sind nicht mehr verfügbar, während andere eingeschränkten Zugriff haben. Ein kleines Beispiel dafür ist das Kommando »sysctl« beziehungsweise dessen Pendant »systctl()« in der Programmierbibliothek »libc« : Mit dessen Hilfe lässt sich die Art und Weise der Speicherbelegung abfragen, es lassen sich Netzwerkverbindungen belauschen oder Kernelparameter modifizieren. Das bietet für potenzielle Angreifer unter Umständen eine Angriffs- beziehungsweise Abhörmöglichkeit. Um die Sicherheit zu erhöhen, wurde der Zugriff nur auf circa dreißig Parameter erlaubt – gegenüber den dreitausend Parametern, die »systctl()« bietet. Allein durch Aktivieren des Capability-Mode erhält man eine Sandbox, aus der es für Applikationen keine Möglichkeit gibt, auszubrechen.

Feiner gesteuert

Neben dem Capability-Mode werden mit Capsicum auch fein granulierte Berechtigungen eingeführt, ohne das bisherige System der Berechtigungen aufzugeben. Dieser Kniff wurde möglich, weil die Entwickler die Struktur des Filedeskriptors erweitert haben. Ein Filedeskriptor ist eine systemweit eindeutige Seriennummer, die auf eine Datenstruktur verweist. In dieser Datenstruktur – auch Metadaten genannt – sind neben dem Dateinamen auch die Berechtigungen enthalten. Die bekanntesten Filedeskriptoren sind STDIN (Standardeingabe), STDOUT (Standardausgabe) und STDERR (Standardausgabe für Fehlermeldungen).

Die bisher benutzten Filedeskriptoren enthalten bereits die von FreeBSD bekannten Berechtigungen. Es handelt sich dabei um unveränderliche Merkmale, die sich an Kindprozesse weiter vererben lassen. Allerdings haben sie – was die Sicherheit anbelangt – den Nachteil, dass sie Manipulationen an den Metadaten zulassen – auch dann, wenn eine Datei oder ein Gerät für einen ausschließlichen Lese- oder Schreibvorgang geöffnet wurde!

Hier greift Capsicum mit einer Erweiterung der zum Filedeskriptor gehörenden Datenstruktur ein. Sobald in einer Applikation »cap_enter()« aufgerufen wird, erhalten alle Filedeskriptoren eine erweiterte Datenstruktur. Sobald ein so ausgestatteter Filedeskriptor benutzt wird, prüft der Kernel, ob beim Zugriff auf die abgesicherte Einheit alles korrekt ist.

Für den Entwickler von Applikationen, die sich des Capsicum-Systems bedienen, ist das von Bedeutung, weil er entscheiden muss, welche der bereits durch »cap_enter()« gesperrten Zugriffsmöglichkeiten entweder gelockert, weiter verschärft oder weitere Regeln hinzugefügt werden sollen. Dazu dient der Aufruf von »cap_new()« , der einen bereits bestehenden Filedeskriptor und die gewünschten Berechtigungen als Parameter erwartet. Dabei spielt es keine Rolle, ob der Filedeskriptor für Dateien, Unix- oder Netzwerk-Sockets, Directories oder Geräte angelegt wurde. Die Manpage zu »cap_new()« listet alle verfügbaren Berechtigungen auf, die mit dem Oder-Operator verknüpft an Capsicum übermittelt werden. Die Manpage listet auch die zahlreichen Systemfunktionen der C-Bibliothek »libc« auf, die von Capsicum beeinflusst werden.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019