Karaf-Dateiberechtigungs-Check

Der Karaf-Dateiberechtigungs-Check prüft, ob sicherheitskritische Dateien und Verzeichnisse der Apache-Karaf-Laufzeitumgebung auf dem Server vor unbefugtem Zugriff geschützt sind.

Der Check überprüft vier Bereiche:

  • Keystore-Datei

  • Truststore-Datei

  • Konfigurationsverzeichnis etc/ samt aller enthaltenen Dateien

  • Deployment-Verzeichnis deploy/ samt aller enthaltenen Dateien

Sicherheitsrelevanz

Keystore und Truststore

Im Keystore werden die privaten Schlüssel und Zertifikate des BPC-Servers für die TLS-Verschlüsselung gespeichert. Im Truststore befinden sich die vertrauenswürdigen Zertifikate (CA-Zertifikate) zur Validierung von Gegenstellen. Erlangen unberechtigte Benutzer oder Prozesse auf dem Betriebssystem Lesezugriff auf den Keystore, können private Schlüssel kompromittiert und der verschlüsselte Datenverkehr abgehört oder manipuliert werden (Man-in-the-Middle). Schreibzugriffe ermöglichen das unbemerkte Austauschen von Zertifikaten und Schlüsseln. Daher dürfen die Keystore- und Truststore-Dateien standardmäßig ausschließlich für den Dateieigentümer (den Benutzer, unter dem der Apache-Karaf- bzw. BPC-Prozess ausgeführt wird) zugänglich sein.

Konfigurationsverzeichnis etc/

Im Verzeichnis etc/ befinden sich die zentralen Konfigurationsdateien des Karaf-Containers und des BPC-Systems. Dazu zählen beispielsweise die Benutzerverwaltung, Dienstkonfigurationen und Sicherheitsrichtlinien. Besitzen unbefugte Benutzer Schreibrechte auf dieses Verzeichnis oder die darin liegenden Dateien, können sie Konfigurationen manipulieren und Sicherheitsmechanismen des Systems aushebeln.

Deployment-Verzeichnis deploy/

Apache Karaf überwacht das Verzeichnis deploy/ kontinuierlich und installiert dort abgelegte Artefakte (z. B. OSGi-Bundles oder Feature-Dateien) automatisch zur Laufzeit (Hot-Deployment). Schreibrechte für Unbefugte stellen ein kritisches Sicherheitsrisiko dar, da Angreifer darüber beliebigen Code einschleusen und mit den Rechten des BPC-Dienstes ausführen können (Remote Code Execution, Privilege Escalation).

Konfiguration des Checks

Standardmäßig verlangt der Check, dass Keystore und Truststore nur für den Prozesseigentümer zugänglich sind und für etc/ sowie deploy/ keinerlei Schreibrechte für die Gruppe (group) oder Andere (others) vergeben sind.

In Umgebungen, in denen administrative Aufgaben von mehreren Benutzern über eine gemeinsame Betriebssystemgruppe ausgeführt werden, kann der Gruppenzugriff über die Konfigurationsdatei KARAF/etc/de.virtimo.bpc.core.security.checks.cfg zugelassen werden.

Parameter Standardwert Beschreibung

allowGroupAccess

false

Legt fest, ob Gruppenmitgliedern Zugriff auf Keystore und Truststore sowie Schreibrechte auf etc/ und deploy/ gestattet sind.

Beispiel KARAF/etc/de.virtimo.bpc.core.security.checks.cfg
# Karaf File Permissions Security Check Configuration
allowGroupAccess=true

Ist allowGroupAccess=true konfiguriert:

  • dürfen Gruppenmitglieder auf Keystore- und Truststore-Dateien lesend und schreibend zugreifen (Ausführungsrechte bleiben untersagt); fremde Benutzer (others) dürfen weiterhin keinerlei Zugriff besitzen.

  • dürfen Gruppenmitglieder Schreibrechte auf die Verzeichnisse etc/ und deploy/ sowie auf die darin enthaltenen Dateien besitzen; fremde Benutzer (others) dürfen weiterhin keine Schreibrechte besitzen.

Vorgehen zur Absicherung

Um die geforderten Berechtigungen sicherzustellen, müssen die Dateirechte auf dem Betriebssystem angepasst werden:

  • Unix-Systeme

  • Windows-Systeme

Auf Unix- und Linux-Systemen sollten die Berechtigungen für Keystore und Truststore auf 0600 (nur Eigentümer darf lesen und schreiben) oder 0400 (nur Eigentümer darf lesen) gesetzt werden:

# Dateiberechtigungen für Keystore und Truststore auf Eigentümer beschränken (rw-------)
chmod 600 /pfad/zu/keystore.jks
chmod 600 /pfad/zu/truststore.jks

# Sicherstellen, dass der BPC-Servicebenutzer Eigentümer ist
chown bpc:bpc /pfad/zu/keystore.jks
chown bpc:bpc /pfad/zu/truststore.jks

Für die Verzeichnisse etc/ und deploy/ sowie alle darin liegenden Dateien müssen Schreibrechte für Andere (und standardmäßig auch für die Gruppe) entzogen werden:

# Verzeichnisberechtigungen anpassen (z. B. rwxr-x---)
chmod 750 /pfad/zu/karaf/etc
chmod 750 /pfad/zu/karaf/deploy

# Schreibrechte für Gruppe und Andere rekursiv von allen enthaltenen Dateien entfernen
chmod -R go-w /pfad/zu/karaf/etc
chmod -R go-w /pfad/zu/karaf/deploy

# Sicherstellen, dass der BPC-Servicebenutzer Eigentümer ist
chown -R bpc:bpc /pfad/zu/karaf/etc /pfad/zu/karaf/deploy
Ist allowGroupAccess=true konfiguriert, sind Schreibrechte für die Gruppe gestattet. In diesem Fall reicht es aus, lediglich die Schreibrechte für Andere zu entfernen (chmod -R o-w /pfad/zu/karaf/etc /pfad/zu/karaf/deploy).

Auf Windows-Systemen (NTFS) werden Zugriffsberechtigungen über Access Control Lists (ACLs) geregelt. Standardmäßig erben neu angelegte Dateien Berechtigungen vom übergeordneten Verzeichnis, wodurch typischerweise auch Gruppen wie Benutzer (BUILTIN\Users) oder Jeder Zugriffsrechte erhalten.

Um den Zugriff auf Keystore und Truststore auf den Prozesseigentümer zu beschränken, muss die Vererbung deaktiviert und der Zugriff explizit auf den Servicebenutzer (z. B. %USERNAME% oder das Dienstkonto) beschränkt werden:

rem Vererbung deaktivieren und bestehende Rechte entfernen, nur dem aktuellen Benutzer Zugriff gewähren:
icacls "C:\pfad\zu\keystore.jks" /inheritance:r /grant:r "%USERNAME%:(R,W)"
icacls "C:\pfad\zu\truststore.jks" /inheritance:r /grant:r "%USERNAME%:(R,W)"

Läuft Apache Karaf als Windows-Dienst unter dem Systemkonto (NT AUTHORITY\SYSTEM), kann dem Dienstkonto ebenfalls Zugriff gewährt werden:

icacls "C:\pfad\zu\keystore.jks" /grant:r "SYSTEM:(R,W)"
icacls "C:\pfad\zu\truststore.jks" /grant:r "SYSTEM:(R,W)"

Für die Verzeichnisse etc\ und deploy\ sollten Schreibberechtigungen für nicht-administrative Konten und Gruppen (wie BUILTIN\Users oder Everyone) entfernt werden:

rem Schreibrechte für unberechtigte Standard-Gruppen auf etc und deploy rekursiv entfernen:
icacls "C:\pfad\zu\karaf\etc" /remove:g "BUILTIN\Users" /t
icacls "C:\pfad\zu\karaf\deploy" /remove:g "BUILTIN\Users" /t

Bewertungskriterien des Checks

Der Check vergibt maximal 4 Punkte (jeweils 1 Punkt pro Prüfbereich):

  • Keystore (1 Punkt): Die Keystore-Datei ist in Pax-Web konfiguriert, existiert und ist vor unbefugtem Zugriff geschützt.

  • Truststore (1 Punkt): Die Truststore-Datei ist in Pax-Web konfiguriert, existiert und ist vor unbefugtem Zugriff geschützt.

  • etc/-Verzeichnis (1 Punkt): Das Verzeichnis etc/ und alle darin enthaltenen Dateien sind nicht durch others (sowie ohne allowGroupAccess nicht durch group) beschreibbar.

  • deploy/-Verzeichnis (1 Punkt): Das Verzeichnis deploy/ und alle darin enthaltenen Dateien sind nicht durch others (sowie ohne allowGroupAccess nicht durch group) beschreibbar.