[[Vorlage(Archiviert, )]] [[Vorlage(Fortgeschritten)]] [[Inhaltsverzeichnis()]] Dieser Artikel beschäftigt sich mit dem Erstellen eigener Regeln für [https://gitlab.com/apparmor/apparmor/wikis/home AppArmor] {en}. 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: {{{#!vorlage Befehl sudo aa-genprof }}} 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 [[Vorlage(Tasten, S)]]-Taste. [[Anker(genprof_fragen)]] = 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 2 - #include 3 - #include 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: ||<-2 rowclass="titel">'''Legende'''|| ||'''Überschrift'''||'''Beschreibung'''|| ||``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öglichkeit'''||'''Beschreibung'''|| ||``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 [[Vorlage(Tasten, S)]]-Taste speichern und mit der [[Vorlage(Tasten, F)]]-Taste dann das Programm verlassen werden. Zuletzt sollte man das erfolgreiche Erstellen der Regel mit: {{{#!vorlage Befehl 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 [:AppArmor#AppArmor-Modi-flags: Enforce-Modus zu setzen] und dann den AppArmor-Dienst neu zu laden: {{{#!vorlage Befehl 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. [[Anker(Feintuning)]] = 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''': {{{#!vorlage Befehl 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 [#genprof_fragen oben] und kann das Profil updaten. = Links = * [:AppArmor:] - Hauptartikel # tag: Sicherheit, System