Bereits vor der Jahrtausendwende verwendete die Firma Immunix in ihrer gleichnamigen Linux-Distribution das Werkzeug SubDomain zum Einsperren von Applikationen. Dabei erlaubten Profile, einer Anwendung Zugriff auf bestimmte Ordner, Dateien und Aktionen zu gewähren oder zu verbieten. Das Konstrukt beruht darauf, dass Linux ein Kernelmodul mit einer Schnittstelle für sicherheitsrelevante Aktionen bereitstellt – auf dieser fußt auch die Alternative SELinux.

SubDomain wurde nicht zuletzt aufgrund seiner simplen Bedienung schnell bekannt, 2005 taufte man es in AppArmor um. Im selben Jahr übernahm Novell die Firma Immunix – vor allem wegen der sicherheitsrelevanten Programme, die das Red-Hat-Derivat von anderen Distributionen unterschieden. Bis September 2007 trieb Novell die Entwicklung von AppArmor voran, heute kümmert sich vor allem Canonical (die Firma hinter Ubuntu) um das Projekt. Dessen Website finden Sie unter http://wiki.apparmor.net.

Profile

AppArmor bildet seit Oktober 2010 einen Bestandteil des Linux-Kernels, also seit Version 2.6.36. Die bekannten Distributionen OpenSuse, SLES und Ubuntu aktivieren es standardmäßig. Während des Boot-Vorgangs lädt das System vordefinierte Profildateien in den Kernel, womit zur Systemlaufzeit eine Sammlung von Regeln den Zugriff von Anwendungen auf das System einschränkt. Profile für AppArmor liegen in der Regel unter /etc/apparmor.d/ und sind nach dem Pfad zum jeweiligen ausführbaren Programm benannt. Regelt ein AppArmor-Profil beispielsweise die Berechtigungen für den NetBIOS-Dienst, so heißt die zugehörige Datei usr.sbin.nmbd.

Die Profile gestatten den Betrieb in drei Modi: Die erste Stufe, complain, bezeichnet den Lernmodus, wonach ein Profil zwar Zugriffsverletzungen mitloggt, aber nicht verhindert. Diese Einstufung ist sinnvoll, wenn Sie gerade ein neues Profil erstellen. Die nächste Stufe, enforce, stellt den Idealzustand dar: Sie protokolliert nicht nur Zugriffsverletzungen, sondern unterbindet sie auch. Der dritte Modus, den AppArmor für Profile vorsieht, heißt audit: Er vermerkt sowohl Regelanwendungen als auch Verstöße und eignet sich damit besonders gut für das Debugging von Anwendungen und Profilen.

Unter Ubuntu 12.04 LTS ist AppArmor standardmäßig aktiv. Behindert der Sicherheitsdienst Anwendungen oder Nutzer bei der Arbeit, dann deaktivieren Sie AppArmor temporär mit dem Kommando service apparmor teardown. Um es wieder zu starten, tippen Sie service apparmor restart. Der Aufruf service apparmor status zeigt den Betriebszustand und die geladenen Profile an. AppArmor unterstützt übrigens das vom Kernel bereitgestellte SecurityFS – damit lassen sich alle geladenen Profile auch im Filesystem einsehen. Diese überprüfen Sie mit dem Aufruf cat /sys/kernel/security/apparmor/profiles.

Profilaufbau

AppArmor-Profile folgen in der Regel stets dem gleichen, linearen Aufbau. Listing 1 zeigt als Beispiel ein simples AppArmor-Profil für die Datei /etc/apparmor.d/usr.sbin.nmbd.

Listing 1

#include <tunables/global>
/usr/sbin/nmbd flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/samba>
  capability net_bind_service,
  /proc/sys/kernel/core_pattern r,
  /usr/sbin/nmbd mr,
  /var/cache/samba/gencache.tdb rwk,
  /var/{cache,lib}/samba/browse.dat* rw,
  /var/{cache,lib}/samba/gencache.dat rw,
  /var/{cache,lib}/samba/wins.dat* rw,
  /var/{cache,lib}/samba/smb_krb5/ rw,
  /var/{cache,lib}/samba/smb_krb5/krb5.conf* rw,
  /var/{cache,lib}/samba/smb_tmp_krb5.* rw,
  /var/{cache,lib}/samba/sync.* rw,
  /var/{cache,lib}/samba/unexpected rw,
  /{,var/}run/samba/** rwk,
  # Site-specific additions and overrides.
  # See local/README for details.
  #include <local/usr.sbin.nmbd>
}

Zunächst bindet Zeile 1 eine Datei mit sinnvollen generischen Definitionen ein, die den Zugriff auf häufig benötigte Dateien und Ordner bestimmen. Zeile 3 gibt den Pfad zur ausführbaren Datei des Progamms nmbd an, für das dieses Profil gilt. Die Angabe der ausführbaren Datei öffnet zudem eine Konfigurationssektion, die – umschlossen von geschweiften Klammern – alle gewünschten Limitierungen und Zugriffsberechtigungen enthält. In diesem Beispiel kommt zudem das Flag (complain) zum Einsatz, womit das Profil derzeit im Lernmodus läuft.

Die ersten drei Zeilen im anwendungsspezifischen Block (ab Zeile 4) binden erneut generische Definitionen ein, wie sie häufig auch andere Profile verwenden. Die Zeile capability net_bind_service maskiert das Profil und damit auch die ausführbare Datei für den Kernel mit einer Art Rolle, mit der auch spezielle Berechtigungen verknüpft sind. Zum Beispiel darf die Datei einen TCP- oder UDP-Port unterhalb von 1024 öffnen.

Alle weiteren Zeilen legen fest, auf welche Dateien und Ordner der Dienst nmbd jeweils lesend beziehungsweise schreibend zugreifen darf. Das r steht dabei für "read", w für "write" und k für "lock". Eine vollständige Liste der Zugriffsberechtigungen zeigt die Tabelle "Permissions in AppArmor-Profilen".

Wie Listing 1 erkennen lässt, dürfen Sie von der Bash bekannte Sonderzeichen und reguläre Ausdrücke im Profil verwenden. Dies spart vor allem Platz und soll die Profile übersichtlicher gestalten.

Permissions in AppArmor-Profilen

Schalter erlaubt
r Lesezugriff
w Schreibzugriff
a Hinzufügen von Datei-Inhalten
l Setzen von Links
k Locken von Dateien
m Datei via mmap ins RAM laden
x Ausführen von Drittanwendungen

Profile anwenden

Läuft ein Programm bereits, lässt sich das zugehörige AppArmor-Profil nicht nachträglich aktivieren. Das liegt vor allem daran, dass sich AppArmor beim Linux-Syscall exec einklinkt, also beim Start einer ausführbaren Datei. Arbeiten Sie unter Ubuntu, sind die AppArmor-Profile standardmäßig aktiv und schützen die Anwendung damit automatisch.

Was ein Programm ohne aktiven Schutz so alles tun würde, können Sie selbst überprüfen: Öffnen Sie unter Debian oder Ubuntu ein neues Terminalfenster und wechseln Sie in den privilegierten Modus. Tippen Sie dann die folgenden beiden Zeilen:

# apt-get install apparmor-utils
# aa-audit usr.bin.evince

Rufen Sie anschließend den Dokumentenbetrachter Evince über den Ubuntu-Starter auf und öffnen Sie eine beliebige PDF-Datei aus Ihrem Heimatverzeichnis. Ein Blick in /var/log/kern.log zeigt für die Aktion die entsprechenden Zugriffe (Abbildung 1). AppArmor gestattet Evince hier nur deshalb den Zugriff auf die Datei, weil sich diese im Heimatverzeichnis des aktuell angemeldeten Benutzers befindet.

Abbildung 1: In der Protokolldatei kern.log erscheinen die Zugriffe von Evince auf die PDF-Datei (hell hervorgehobene Zeile).

Das eigene Profil

Für viele Programme stehen keine AppArmor-Profile zur Verfügung. Sie haben aber die notwendigen Werkzeuge zur Hand, um eigene zu erstellen. Im ersten Schritt bringen Sie AppArmor für die fragliche Anwendung in den Lernmodus, für VLC beispielsweise mit:

# aa-genprof /usr/bin/vlc

Jetzt starten Sie die eigentliche Anwendung, in unserem Fall VLC. Anschließend nutzen Sie diese so, wie Sie es üblicherweise im Alltag tun würden. Haben Sie alle häufig genutzten Funktionen ausgeführt, dann schließen Sie die Anwendung und finalisieren das Profil. Drücken Sie dafür im Terminal [S], um AppArmor die Log-Dateien nach Aktionen des VLC-Players durchforsten zu lassen.

Anschließend überlässt Ihnen AppArmor für jeden Zugriffsversuch von VLC die Wahl, ob dieser erlaubt sein soll oder nicht (Abbildung 2). Für Testzwecke halten Sie [D] (für "deny") gedrückt und verbieten damit erst einmal alle Aktionen. Wurden alle Abfragen bestätigt, dann speichern sie das Profil mit [S] und verlassen danach mit [F] den Lernmodus.

Abbildung 2: AppArmors Profiler registriert die Programmzugriffe und gestaltet daraus ein Profil.

AppArmor meldet beim Beenden des Lernmodus, dass sich das neue Profil für den VLC-Player nun im Enforce-Modus befindet. Öffnen Sie ein neues Terminal und starten Sie VLC mit dem Kommando vlc als unprivilegierter Benutzer. In unserem Fall taucht der Mediaplayer erst gar nicht auf, da AppArmor schon beim Start Zugriffe auf wichtige Dateien blockiert (Abbildung 3).

Abbildung 3: Da dem VLC-Player die Zugriffsberechtigungen auf wichtige Dateien fehlen, verweigert er den Start.

Sie finden das entsprechende Profil unter /etc/apparmor.d/usr.bin.vlc und können es von nun an weiter anpassen. Um den VLC-Player wieder zu starten, löschen Sie einfach die zugehörige Profildatei – oder verfrachten VLC mittels aa-complain usr.bin.vlc in den Beschwerdemodus.

Soll langfristig ein valides AppArmor-Profil den VLC-Player beschützen, so beginnen Sie die Profilerstellung von Neuem oder passen das bestehende Profil an, indem Sie es von Hand bearbeiten.

Sicherheit mit Einbußen

Während die Alternative SELinux die Security-Policies auf Basis von Dateien und Ordnern durchsetzt, stehen bei AppArmor die Anwendungen selbst im Fokus. Dank ausgefeilter Hilfswerkzeuge und einer guten Dokumentation gibt sich AppArmor jedoch um einiges anwenderfreundlicher als SELinux. Trotzdem gilt es, als Benutzer mit gewissen Einschränkungen zu leben.

Für jede Anwendung muss ein Profil mit entsprechenden Definition existieren, wobei längst nicht alle Programme mit AppArmor kompatibel sind. Das Sicherheits-Framework kann beispielsweise keine Character- oder Block-Devices mit dem Syscall mknod regeln, was bei vielen Anwendungen zu Problemen führt.

Ein anderes Limit erlebte der Autor: AppArmor geht davon aus, dass Heimatverzeichnisse unter /home liegen. Das Benutzerkonto des Autors auf dem Bürorechner findet sich jedoch unterhalb von /local, womit AppArmor bei vielen Anwendungen Probleme bereitet. Erst ein manuelles Anpassen der Zeile @{HOMEDIRS}=/home/ in der Datei /etc/apparmor.d/tunables/home brachte den gewünschten Erfolg.

Fazit

Wenn Sie bereit sind, für ein deutliches Plus an Sicherheit einmalig fehlende Profile zu erstellen (oder diese online herunterzuladen), dann wählen Sie mit AppArmor das richtige Werkzeug. Während viele Systemadministratoren auf produktiven Systemen SELinux aufgrund der hohen Komplexität deaktivieren, bleibt AppArmor auf (Open)Suse- und Ubuntu-Servern meist aktiv. 

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare