ubuntuusers.de

Profile erstellen

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Dieser Artikel beschäftigt sich mit dem Erstellen eigener Regeln für AppArmor 🇬🇧. Es wird dringend geraten, bevor man mit dem Erstellen eines eigenen Profils beginnt, den vollständigen Artikel über AppArmor gelesen und verstanden zu haben, genauso wie dieser Artikel mindestens einmal komplett gelesen werden sollte, bevor man mit dem Erstellen beginnt.

Das Erstellen eines Profils ist keine einfache Angelegenheit. AppArmor wird eine Menge Fragen stellen, die nur durch gute Recherche und/oder Wissen über die Ordner- und Programmstruktur von Ubuntu richtig beantwortet werden können. Eine falsche Beantwortung mündet ohne Zweifel in einem zu restriktiven oder zu laschen Profil. Ist das Profil zu restriktiv, werden Funktionen des Programms nicht mehr zu benutzen sein, im schlimmsten Fall wird man das komplette Programm nicht mehr benutzen können. Ist es zu lasch, kann AppArmor das Programm nicht richtig schützen.

Vorbereitung

Bevor man eine eigene Regel für ein Programm schreibt, sollte man sich überlegen, welche Bestandteile des Programms man alle benutzen möchte. Am besten erstellt man sich eine Liste dieser Features, denn wenn man hier etwas vergisst, dann wird das AppArmor-Profil unter Umständen nachher die Benutzung dieses Features verbieten. Man sollte auch Dinge bedenken, die das Programm nur selten oder nur unter ganz bestimmten Voraussetzungen macht. Diese Vorgänge muss man versuchen, nachzustellen, damit AppArmor sie erfassen kann.

Erstellen einer Log

Ist man sich sicher, dass man jedes Feature im Kopf hat, kann es los gehen. Man startet nun das Programm im "Complain-modus", indem man vom Terminal aus folgenden Befehl eingibt:

sudo aa-genprof <Programmname> 

AppArmor wird versuchen, den Pfad zum Programm zu ermitteln. Dies klappt jedoch nicht immer und es kann ggf. notwendig sein, den kompletten Pfad zur Datei anzugeben anstatt nur den Namen des Programms. Danach wird diese Ausgabe im Terminal erscheinen:

Connecting to repository.....
Writing updated profile for /usr/bin/Programm-Name.
Setting /usr/bin/Programm-Name to complain mode.

Please start the application to be profiled in
another window and exercise its functionality now.

Once completed, select the "Scan" button below in
order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.

Profiling: /usr/bin/Programm-Name

[(S)can system log for SubDomain events] / (F)inish

in der man aufgefordert wird, das Programm zu starten. Dies sollte man auch machen und es ist der Zeitpunkt gekommen indem man nun das Programm ausgiebig benutzen sollte. Jedes Feature des Programms, das man jetzt nicht benutzt wird möglicherweise später von AppArmor verboten werden. Es muss also sehr penibel darauf geachtet werden wirklich alles zu machen, was man mit dem Programm machen kann/will.

Ist man fertig, kann man das Programm, für das man ein Profil erstellen möchte, beenden und drückt im Terminal-Fenster von oben die S -Taste.

Erstellen des eigentlichen Profils

AppArmor liest jetzt die Syslog aus und wird einen daraufhin eine Reihe von Fragen stellen, was dem Programm erlaubt werden soll und was nicht. Die Fragen gliedern sich in 2 Kategorien: Programme ausführen und Dateien lesen/schreiben.

  • Eine Abfrage ob ein Programm ausgeführt werden darf sieht zum Beispiel so aus:

Profile:  /usr/local/bin/sylpheed
Execute:  /usr/bin/gpg
Severity: unknown

[(I)nherit] / (P)rofile / (U)nconfined / (D)eny / Abo(r)t / (F)inish
  • Eine Abfrage über Zugriffsrechte auf eine Datei sieht zum Beispiel so aus:

Profile:  /usr/local/bin/sylpheed
Path:     /etc/fonts/conf.avail/20-fix-globaladvance.conf
Mode:     r
Severity: unknown

  1 - #include <abstractions/fonts>
  2 - #include <abstractions/gnome>
  3 - #include <abstractions/kde>
  4 - /etc/fonts/conf.avail/20-fix-globaladvance.conf
 [5 - /etc/fonts/**]

[(A)llow] / (D)eny / (G)lob / Glob w/(E)xt / (N)ew / Abo(r)t / (F)inish

Die Bedeutung der einzelnen Überschriften und Wahlmöglichkeiten kann man der folgenden Tabelle entnehmen:

Legende
ÜberschriftBeschreibung
Profile Für welches Programm das Profil ist.
Execute Welches Programm ausgeführt werden soll.
Path Auf welche(n) Datei/Ordner Sylpheed zugreifen möchte
Mode Was mit einer Datei/Ordner gemacht werden darf. r für Lesezugriff, w für Schreibzugriff und l für darf symbolischen Links folgen
Severity Wie gefährlich das Erlauben des Ausführens ist von 1 = ungefährlich, bis 10 = hohes Risiko (Diese Werte werden durch sogenannte Sicherheitsereignisse ermittelt und in einer Datenbank abgelegt. Sie sind nicht sehr akkurat, aber hohe Werte geben schon mal einen guten Hinweis, dass man das Erlauben genauer überdenken und überprüfen sollte. Für manche Programme und Dateien werden seltsamer Weise keine Einträge in der Datenbank abgelegt und werden von AA dann bei der Severity als unknown gekennzeichnet)
WahlmöglichkeitBeschreibung
Inherit Das Programm wird mit dem gleichen Profil gestartet, wie das Elternprogramm. Zu beachten ist, dass es sehr wahrscheinlich ist, dass das Programm auf andere Dateien zugreifen muss als das Elternprogramm. Diese Option sollte man nur wählen, wenn man sich sicher ist, dass dem nicht so ist.
Profil Das Programm wird mit seinem eigenen Profil gestartet. Existiert kein Profil für das Programm wird der Aufruf verboten.
Unconfined Das Programm wird ganz normal gestartet.
Allow Erlaubt den Zugriff.
Glob Erlaube nicht nur die Datei sondern den ganzen Ordner, wenn man nochmals drückt inkl. aller Subordner. Dadurch kann man Profile verkleinern und verallgemeinern. Man sollte beachten, dass in dem Ordner und seinen Subordnern keine "gefährliche" Dateien/Programme liegen, welche missbraucht werden könnten.
Glob w/(E)xt Das gleiche wie Glob allerdings erlaubt in den Subordnern nur den Zugriff auf Dateien mit der gleichen Endung.
New Erlaubt das Erstellen einer eigenen Regel mit Hilfe von regulären Ausdrücken
Deny Verbiete den Aufruf des Programms/den Zugriff auf die Datei.
Abort Bricht den ganzen Vorgang des Profilerstellens ab.
Finish Bricht den Vorgang ab und erstellt ein Profil aus den bereits bestätigten Regeln.

Es gilt bei jeder Frage individuell zu prüfen wie gefährlich es ist den Zugriff auf die einzelne Datei oder ihren ganzen Oberordner zu erlauben bzw. ob das Programm ausgeführt werden darf.

Stellt AppArmor keine Fragen mehr, kann das Profil mit der S -Taste speichern und mit der F -Taste dann das Programm verlassen werden. Zuletzt sollte man das erfolgreiche Erstellen der Regel mit:

sudo aa-status 

überprüfen. Dort sollte das Profil im Complain-Modus aufgelistet werden.

Testen des Profils

Nachdem das Profil erstellt wurde, gilt es nun, es in den Enforce-Modus zu setzen und dann den AppArmor-Dienst neu zu laden:

sudo /etc/init.d/apparmor reload 

Von nun an wird AppArmor jeden Zugriff des Programms, der nicht im Profil erlaubt wurde, verbieten. Es bietet sich also an, das Programm wieder ausgiebig zu testen, um zu schauen, ob alles funktioniert.

Feintuning des Profils

Stellt man fest, dass etwas im Programm nach Aktivierung eines Profils nicht mehr funktioniert, kann man nachträglich ein Feintuning durchführen. Dazu startet man das Programm logprof:

sudo aa-logprof 

logprof überprüft die Syslog nach Meldungen, dass AppArmor etwas verboten hat. Man bekommt für die gefundenen Meldungen jetzt nochmal die gleichen Fragen gestellt wie oben und kann das Profil updaten.

Diese Revision wurde am 14. März 2019 13:00 von BillMaier erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, System