Einführung / Konfiguration des FirstSpirit-Servers / Zusätzliche Sicherheitsmechanismen / Ausführen externer Prozesse absichern
Sicherheitskritische Aufrufe in Skripten und Templates unterbinden
Inhaltsverzeichnis |
FirstSpirit bietet an vielen Stellen die Möglichkeit externe Klassen und Prozesse auszuführen, beispielsweise:
- über Skripte (siehe Skripte auszuführen) oder
- über Funktionen innerhalb der FirstSpirit Vorlagen (siehe Funktionen in Vorlagen (Online Dokumentation FirstSpirit)).
Diese dynamischen Inhalte sind prinzipbedingt immer auch eine Schwachstelle für Angriffe. Eine missbräuchliche Verwendung ermöglicht bei ungesichertem Zugriff auf diese Funktionen:
- das Beenden des FirstSpirit-Servers und / oder
- den Zugriff auf Projekt- und Serverdateien im Dateisystem (lesend und schreibend)
Rechte für Skript-Engines einschränken (Standardkonfiguration)
Um einen einwandfreien und sicheren Betrieb von FirstSpirit-Servern zu gewährleisten, werden alle Aufrufe über die Skript-Engines (für Beanshell, FirstSpirit Templatecode) in der Standardkonfiguration mit eingeschränkten Rechten ausgeführt und der Aufruf sicherheitskritischer Funktionen unterbunden (sowohl clientseitig als auch serverseitig).
In der Standardkonfiguration werden die folgende Aufrufe unterbunden:
- System.exit (Beenden der Java VM)
- System.setSecurityManger (Änderung des FirstSpirit Security Manager)
Standardkonfiguration ändern (optional)
Durch das Anlegen einer Konfigurationsdatei fs-script.policy im Unterverzeichnis conf des FirstSpirit-Servers ist es möglich, weitere Rechte für die Skript-Engines zu konfigurieren (in diesem Fall zu entziehen).
Die Policy-Datei unterstützt eine erweiterte Syntax (Globale Grand- und Deny-Sektion, Priority).
Erweiterte Syntax der Java Policy File syntax:
- priority „deny“: Zugriff ist erlaubt wenn er nicht verboten ist _und_ als erlaubt definiert ist.
- priority „grant“: Zugriff ist erlaubt wenn er als erlaubt definiert ist _oder_ nicht verboten ist.
Siehe http://pro-grade.sourceforge.net/pro-grade.html#Decision_making_table
Die Rechte entsprechen den Standard Java Permissions.
Nicht unterstützt werden:
- Keystores,
- CodeSource oder
- Principals
Bei Verwendung eines externen Application Servers muss in diesem ein Security Manager konfiguriert werden. Andernfalls wird die Policy-Datei nicht ausgewertet. |
Weitere Dokumentation (extern):
- http://pro-grade.sourceforge.net/pro-grade.html#Policy_files
- https://github.com/pro-grade/pro-grade#work-with-denying-rules
- https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
Die Standardkonfiguration entspricht dieser Datei:
priority "deny";
deny {
permission java.lang.RuntimePermission "exitVM.*";
permission java.lang.RuntimePermission "setSecurityManager";
}
grant {
permission java.security.AllPermission;
};
Beispiel für eine erweitertes Konfiguration mit eingeschränkten Dateirechten:
priority "grant";
grant {
permission java.io.FilePermission "/tmp/*", "read,write";
permission java.io.FilePermission "/home/user_x/-", "read";
};
deny {
permission java.lang.RuntimePermission "exitVM.*";
permission java.lang.RuntimePermission "setSecurityManager";
permission java.io.FilePermission "<<ALL FILES>>", "read,write";
}
In der Beispielkonfiguration ist der Zugriff auf folgende Dateien erlaubt:
- alle Dateien direkt im Verzeichnis /tmp (lesend und schreibend),
- alle Dateien im Verzeichnis /home/user_x und allen Unterverzeichnissen (nur lesend)
Für alle anderen Dateien werden die Rechte entzogen. Damit werden alle Zugriffe auf Dateien über Skripte oder aus dem FirstSpirit Templatecode heraus unterbunden.