Erzeugen eines Profils mit Yast

SUSE Linux kommt mit einer Vielzahl von vorbereiteten Profilen. So ist ein gewisser Mindestschutz gewährleistet, wenn Sie AppArmor aktivieren. Enthalten sind Profile für exponierte Netzwerkdienste als auch für grafische Applikationen und Kommandozeilenbefehle, die Daten aus nicht vertrauenswürdigen Quellen verarbeiten. Letztere sind zum Beispiel der Realplayer, der Firefox Browser und der Acrobat-Reader. Aber auch die Befehle netstat und ping gehören dazu. Obwohl die Profile für diese Applikationen enthalten sind, sind sie nicht unbedingt aktiv. Um eine Liste aller geladenen Profile zu erhalten, können Sie diese entweder aus dem Kernel auslesen (siehe letztes Kapitel) oder Sie betrachten die in dem Verzeichnis /etc/apparmor.d vorhandenen Dateien. Weitere inaktive Profile befinden sich in dem Verzeichnis /etc/apparmor/profiles/extras. Um diese Profile zu aktivieren, müssen Sie lediglich das entsprechende Profil aus diesem Verzeichnis in das Verzeichnis /etc/apparmor.d kopieren. Bei dem nächsten Neustart des Systems wird das Profil aktiviert. Möchten Sie das Profil sofort aktivieren, so können Sie das mit dem Befehl enforce erledigen. Geben Sie lediglich den kompletten Namen des zu überwachenden Programmes inklusive Pfad an.
\# enforce /usr/bin/ethereal
Setting /usr/bin/ethereal to enforce mode.
Achtung. SUSE bezeichnet die in diesem Verzeichnis vorhandenen Profile als nicht ausreichend ausgereift. Die Profile wurden in vielen Fällen nicht auf die aktuelle Distribution angepasst. Pfade stimmen daher nicht. Wenn Sie diese Profile verwenden möchten, müssen Sie meist die Profile noch anpassen. Daher zeige ich Ihnen nun, wie Sie selbst für ein Programm ein Profil erzeugen können. Am einfachsten erfolgt das mit Yast. Ich werde in einem späteren Kapitel auch weitere Methoden vorstellen. Hier soll nun ein Profil für das Programm nmap erzeugt werden. Im weiteren werde ich Ihnen die Schritte vorstellen, damit Sie diese auch auf Ihrem System direkt nachvollziehen können. Hierzu muss zunächst das Programm installiert werden. Dies erfolgt ganz einfach mit yast -i nmap.

Nun Starten Sie Yast2 und rufen den Assistent zum Hinzufügen von Profilen auf (siehe Abb. 9.5).

Abbildung: Über Yast2 können Sie die wichtigesten AppArmor-Funktionen steuern.
Image yast-apparmor
In dem neuen Fenster geben Sie den Namen der zu überwachenden Anwendung mit ihrem kompletten Pfad an (siehe Abb. 9.6). Anschließend bestätigen Sie die Eingabe mit Create. Leider ist bei SUSE Linux 10.1 dieser Dialog noch nicht in die deutsche Sprache übersetzt worden.
Abbildung 9.6: Geben Sie bei der Anwendung den kompletten Pfad mit an.
Image new-profile
Nun müssen Sie den Befehl nmap benutzen. Rufen Sie zum Beispiel als Root den Befehl folgendermaßen auf:
\# nmap -sS localhost
\# nmap -sS -O -v some_other_host
Es ist sinnvoll möglichst alle Funktionen der Applikation zu nutzen. Yast2 wird anschließend ein Profil erzeugen, welches genau diese Funktionen erlaubt. Natürlich sollten Sie sicherstellen, dass der Befehl gerade jetzt nicht für einen Angriff genutzt werden kann. Wenn Sie den Befehl ausreichend getestet haben, betätigen Sie Scan system log for AppArmor events im Bild 9.7.
Abbildung 9.7: Der Wizard fordert Sie auf, die Applikation zu verwenden.
Image scan_log
Nun präsentiert Ihnen Yast2 auf den folgenden Dialogen die Dateien und Funktionen, die der getestete Befehl genutzt hat. Sie haben hier die Möglichkeit zu entscheiden, ob das Profil den Zugriff erlauben soll oder nicht. Sie müssen nun in jedem Dialog einzeln entweder Allow oder Deny auswählen. Damit die Anwendung später erfolgreich funktioniert, ist ein Erlauben erforderlich (Abb. 9.8).
Abbildung: Nmap benötigt für die Erzeugung der Pakete für den Scan eine spezielle Capability: CAP_NET_RAW.
Image net_raw
In vielen Fällen erkennt der Assistent, dass es bereits vorgefertigte Abstraktionen gibt. Wenn Sie diese auswählen, verringert sich die Anzahl der Regeln ungemein. Hier (Abb. 9.9) erkennt der Assistent an dem Zugriff auf das Gerät /dev/tty, dass der Prozess auf das Terminal zugreifen möchte. Anstelle nun alle notwendigen Zugriffe einzeln zu erlauben, schlägt er die Abstraktion abstractions/consoles vor. Diese befindet sich in dem Verzeichnis /etc/apparmor.d.
Abbildung: Stehen Abstraktionen zur Verfügung, bietet Ihnen der Assistent diese auch an.
Image abstraction_console
Allgemein bietet Ihnen der Dialog die folgenden Möglichkeiten (siehe auch 10.3.7):

Wenn Sie alle Dialoge beantwortet haben, beginnt der Assistent wieder von neuen und bietet Ihnen an, die Protokolle zu analysieren. Sie können nun den Assistenten beenden. Der Assistent hat nun ein Profil für den Befehl Nmap erzeugt. Dieses Profil wurde in dem Verzeichnis /etc/apparmor.d unter dem Namen usr.bin.nmap[*] gespeichert und auch direkt geladen. Wenn Sie nun Nmap aufrufen, wird der Prozess von AppArmor überwacht. Im folgenden sehen Sie das von dem Assistenten erzeugte Profil:

 1 # vim:syntax=apparmor
 2 # Last Modified: Mon Jun 26 12:10:10 2006
 3 #include <tunables/global>
 4
 5 /usr/bin/nmap {
 6  #include <abstractions/base>
 7  #include <abstractions/consoles>
 8  #include <abstractions/nameservice>
 9
10  capability net_raw,
11
12  /usr/bin/nmap r,
13  /usr/share/nmap/nmap-mac-prefixes r,
14  /usr/share/nmap/nmap-os-fingerprints r,
15  /usr/share/nmap/nmap-services r,
16 }
Die Zeilennummern zu Beginn jeder Zeile wurde von mir für die Lesbarkeit hinzugefügt. Die Zeilen 1-2 sind lediglich Kommentare und enthalten nur für den Vim einen Syntax-Highlighting Hinweis. Leider ist in der Version SUSE Linux 10.1 keine Syntax-Beschreibung für AppArmor enthalten, obwohl die Manpage apparmor.vim(5) vorhanden ist. Wahrscheinlich wird ein Update dieses Problem beheben. Ab Zeile 3 beginnt das Profil. Hier wird über eine Include-Direktive der Inhalt der Datei tunables/global zu diesem Profil geladen. Alle Pfade in dieser Datei sind relativ zum Verzeichnis /etc/apparmor.d. Die geladene Datei ist daher /etc/apparmor.d/tunables/global. Anschließend beginnt das Profil für das Kommando /usr/bin/nmap. Zunächst werden hier einige Abstraktionen geladen. Wenn Sie wissen möchte, was sich in diesen Abstraktionen befindet, können Sie die entsprechenden Dateien in einem Editor öffnen.

Nun wird die Capability CAP_NET_RAW zur Verfügung gestellt. Insgesamt gibt es in Abhängigkeit des Kernels bis zu 31 verschiedene Capabilities, die in der Manpage capabilities(7) erläutert werden. Die weiteren Zeilen 12-15 erlauben dem Nmap-Prozess auf die verschiedenen Dateien zuzugreifen.

Wenn Sie nun den Nmap-Befehl benutzen, wird er immer von AppArmor überwacht. Falls eine bestimmte Funktion nicht zur Verfügung steht, sollten Sie die AppArmor-Protokolle analysieren. Falls Sie dort Meldungen finden, die auf einen Fehler im Profil hinweisen, können Sie den gesamten Vorgang wiederholen. Wenn Sie vorher das bereits erzeugte Profil nicht löschen, erweitert der Assistent das Profil nur um die fehlenden Punkte.

Ralf Spenneberg 2007-11-13