Regel
Laut der AppArmor-Manpage (apparmor.d(5)). kennt AppArmor sowohl Regeln
für den Zugriff auf Dateien als auch für den Zugriff auf das Netzwerk. Letztere
wurden jedoch in der aktuellen Version nicht implementiert und stellen ein
Relikt aus alten Zeiten dar. Im Moment kann daher nur der Zugriff auf Dateien
beschränkt werden.
Eine Regel besteht aus einem absoluten Dateinamen oder einem Dateiglobbing
gefolgt von den Zugriffsrechten. Sowohl der Dateiname als auch das Globbing kann
Variablen (siehe 10.5.5) enthalten. Im folgenden ein Beispiel
mit zwei Regeln:
/dev/tty* r,
/etc/passwd r,
Für das Globbing stehen verschiedene Sonderzeichen zur Verfügung:
- * Platzhalter für jedes beliebige Zeichen außer /.
- ** Platzhalter für jedes beliebige Zeichen einschließlich
/. Hiermit werden also auch Unterverzeichnisse eingeschlossen.
- ? Platzhalter für ein beliebiges Zeichen außer /.
- [abc] Platzhalter für ein Zeichen: a, b oder c.
- [a-c] Platzhalter für ein Zeichen: a, b oder c.
- {ab,cd} Platzhalter für entweder ab oder cd.
Als Zugriffsrechte können Kombinationen der folgenden Rechte angegeben
werden
.
- r Hiermit wird einem Programm erlaubt die Datei zu
lesen. Lesezugriff wird bei Skripten benötigt. Außerdem erlaubt dieses Recht
bei ausführbaren Dateien ein Debugging mit dem ptrace(2)-Systemcall.
- w Hiermit wird dem Programm ein Schreibzugriff auf die Datei
erlaubt. Auch für das Löschen einer Datei wird dieses Recht benötigt.
- ux Hiermit wird der Aufruf des Programms ohne AppArmor-Überwachung
erlaubt. Häufig ist es sinnvoller, wenn ein überwachtes Programm eine
privilegierte Aktion ausführen möchte, diese in einem eigenen externen Programm zu
implementieren und dann den Aufruf dieses externen Programmes mit ux zu
erlauben. Bei der Verwendung von ux wird nicht die Ausführungsumgebung
gelöscht. Umgebungsvariablen wie LD_PRELOAD bleiben erhalten. Darüber
kann ein Angreifer bösartigen Code einschleusen.
- Ux Dieses Recht arbeitet wie ux, jedoch wird die
Ausführungsumgebung zuvor gelöscht. Hierbei wird derselbe Mechanismus, wie bei
SetUID-Programmen eingesetzt. Die Manpage ld.so liefert hier Hintergrundinformationen.
- px Hiermit darf ein Programm aufgerufen werden. Dieses Programm muss
über ein eigenes Profil verfügen. Ist kein Profil für die Applikation geladen,
wird der Zugriff abgelehnt. Ähnlich ux wird die Ausführungsumgebung
nicht zurückgesetzt.
- Px Dieses Recht ist analog dem Recht px und stellt das
Löschen der Umgebungsvariablen sicher.
- ix Mit diesem Recht erbt das aufgerufene Programm das aktuelle
Profil. Das aktuelle Profil muss dann alle Zugriffe des neu aufgerufenen
Programms erlauben. Ein Löschen der Umgebung ist hier nicht vorgesehen und
auch nicht nötig, da das neue Programm nicht über erweiterte Privilegien verfügt.
- m Dieses Recht stellt sicher, dass das aufgerufene Programm unter
Anwendung des PROT_EXEC-Flags von mmap(2) in den Speicher
geladen wird. So werden die Speicherseiten, die ausführbaren Programmcode
enthalten als executable markiert. Dies verhindert im Gegenzug die
Ausführung von Daten-Speicherseiten. Hiermit kann der Administrator einigen
Bufferoverflows und Formatstringfehlern Einhalt gebieten.
- l Hiermit wird einem Programm erlaubt, den angegebenen Link zu
erzeugen.
Sämtliche Rechte mit x schließen sich logischerweise gegenseitig aus. Sie
dürfen nur eines dieser Rechte in der Kombination angeben.
Ralf Spenneberg
2007-11-13