Bevor wir uns im nächsten Beitrag mit der Installation, sicheren Konfiguration und Härtung eines Nginx-Servers befassen, möchte ich im Folgenden noch etwas Grundlagenarbeit erörtern: Die Funktionsweise der Trusted Path Execution unter Linux.
Die Trusted Path Execution sind als Teil des Grsecurity Patches während der Konfiguration optional aktivierbar.
Funktionsweise der Trusted Path Execution
Die Ausführung von schädlichem Code auf einem Linux System, entweder durch einen externen Angreifer oder (un)gewollt durch einen lokalen Nutzer, ist eine der größten IT-Sicherheitsbedrohungen der heutigen Tage. Um diese Gefahr zu vermindern, ist Trusted Path Execution (TPE) ein weiterer Sicherheits-Layer, der die Ausführbarkeit von Dateien unter bestimmten Umständen einschränkt.
Die Nutzung von TPE erschwert beispielsweise den Versuch einer Privilege Escalation deutlich - wenn der Account mithilfe von TPE geschützt wird, ist es einem Angreifer nicht möglich, benutzerdefinierte Dateien auszuführen, die nicht in einem vertrauenswürdigem Pfad liegen. Im Rahmen vieler Angriffe versuchen Angreifer oftmals, nach dem Einbruch in das System Code nachzuladen und auszuführen, beispielsweise um eine lokale Sicherheitslücke auszunutzen.
Die Konfigurationsarten der Trusted Path Execution
Während der Konfiguration können verschiedene Optionen aktiviert und konfiguriert werden. Generell lässt sich die TPE auf fünf verschiedene Arten konfigurieren:
1 - Trusted Path Execution deaktivieren
Um die Trusted Path Execution zu deaktivieren, muss die Konfiguration wie folgt aussehen:
-> Security options -> Grsecurity -> Grsecurity -> Executable Protections [ ] Trusted Path Execution (TPE) [ ] Partially restrict all non-root users [ ] Invert GID option (106) GID for untrusted users
In dieser Konfiguration wird die Erweiterung vollständig deaktiviert und Linux zeigt das standardmäßige Verhalten bei der Ausführung von Dateien.
2 - Trusted Path Execution Basiskonfiguration
Um die Basiskonfiguration zu aktivieren, sehen die Optionen wie nachfolgend gezeigt aus:
-> Security options -> Grsecurity -> Grsecurity -> Executable Protections [x] Trusted Path Execution (TPE) [ ] Partially restrict all non-root users [ ] Invert GID option (106) GID for untrusted users
Im Rahmen dieser Konfiguration wird den Nutzern, die Mitglied der Gruppe mit der GID 106 sind, verboten, Dateien auszuführen, die nicht in einem Verzeichnis liegen,
- das Root gehört und
- dessen Schreibrechtigungen ebenfalls nur root vorenthalten sind.
Die GID der Gruppe lässt sich verändern.
Ein Beispiel, User 1 sei Mitglied der Gruppe 106, User 2 nicht:
# | Permissions | Owner | Group | User 1 | User 2 |
---|---|---|---|---|---|
1 | d rwx r-x r-x | root | root | Executed | Executed |
2 | d rwx r-x rwx | root | root | Denied | Executed |
3 | d rwx r-x r-x | User 1 | User 1 | Denied | Executed |
4 | d rwx r-x rwx | User 2 | User 2 | Denied | Executed |
3 - Trusted Path Execution mit aktivierter "Partially restrict" Option
Die Aktivierung der Option "Partially restrict all non-root users" betrifft zusätzlich die "non-root" User, die nicht Mitglied der Gruppe mit der GID 106 sind. Für Nutzer der GID 106 gelten die Einschränkungen der Variante 2, zusätzlich dürfen Nutzer, die nicht Teil der Group ID 106 sind, nur Dateien in einem Verzeichnis ausführen,
- das Root gehört und
- dessen Schreibrechtigungen ebenfalls nur root vorenthalten sind.
- oder -
- das dem ausführendem Nutzer gehört und
- dessen Schreibrechtigungen nur dem ausführendem Nutzer vorenthalten sind.
-> Security options -> Grsecurity -> Grsecurity -> Executable Protections [x] Trusted Path Execution (TPE) [x] Partially restrict all non-root users [ ] Invert GID option (106) GID for untrusted users
Ein Beispiel, User 1 ist hierbei wieder Mitglied der Gruppe 106, User 2 nicht:
# | Permissions | Owner | Group | User 1 | User 2 |
---|---|---|---|---|---|
1 | d rwx r-x r-x | root | root | Executed | Executed |
2 | d rwx r-x rwx | root | root | Denied | Denied |
3 | d rwx r-x r-x | User 1 | User 1 | Denied | Denied |
4 | d rwx r-x rwx | User 2 | User 2 | Denied | Denied |
2 | d rwx r-x r-x | User 2 | User 2 | Denied | Executed |
4 - Trusted Path Execution Basiskonfiguration mit aktivierter "Inverted GID option"
Hierbei handelt es sich um die Variante 2, mit der Änderung, dass die GID invertiert behandelt wird. Traf es also bisher nur die Nutzer mit der GID 106, trifft es mit aktivierter "Invert GID option" nun alle Nutzer außer die Nutzer mit der GID 106.
-> Security options -> Grsecurity -> Grsecurity -> Executable Protections [x] Trusted Path Execution (TPE) [ ] Partially restrict all non-root users [x] Invert GID option (106) GID for untrusted users
Im Beispiel ist gut erkenntlich, wie sich die Option auswirkt:
# | Permissions | Owner | Group | User 1 | User 2 |
---|---|---|---|---|---|
1 | d rwx r-x r-x | root | root | Executed | Executed |
2 | d rwx r-x rwx | root | root | Executed | Denied |
3 | d rwx r-x r-x | User 1 | User 1 | Executed | Denied |
4 | d rwx r-x rwx | User 2 | User 2 | Executed | Denied |
5 - Trusted Path Execution Basiskonfiguration mit aktivierter "Inverted GID option" und aktivierter "Partially restrict" Option
Gleiches wie die Variante 3, dieses mal auch mit der in Varainte 4 erläuterten "Inverted GID option".
-> Security options -> Grsecurity -> Grsecurity -> Executable Protections [x] Trusted Path Execution (TPE) [x] Partially restrict all non-root users [x] Invert GID option (106) GID for untrusted users
Auch in diesem Beispiel sind die Auswirkungen im Vergleich zu Variante 3 gut zu erkennen:
# | Permissions | Owner | Group | User 1 | User 2 |
---|---|---|---|---|---|
1 | d rwx r-x r-x | root | root | Executed | Executed |
2 | d rwx r-x rwx | root | root | Denied | Denied |
3 | d rwx r-x r-x | User 1 | User 1 | Executed | Denied |
4 | d rwx r-x rwx | User 2 | User 2 | Denied | Denied |
2 | d rwx r-x r-x | User 2 | User 2 | Denied | Denied |
Zusammenfassung, Fazit
Auch wenn die Konfiguration auf den ersten Blick etwas unverständlich wirken kann, ist die Trusted Path Execution eine sehr wirksame Möglichkeit, Angreifer daran zu hindern, Fremdcode einzuschleusen und auszuführen. Trusted Path Execution ist kein Allheilmittel, bietet jedoch einen weiteren Layer für ein auf Sicherheit optimiertes Linux-System.
Bildnachweis:
- Beitragsbild: © Natalia Merzlyakova - Fotolia.com