Zum Inhalt springen

AppArmor/HowTo: Unterschied zwischen den Versionen

Aus Foxwiki
DanielZorin (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
DanielZorin (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(15 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''AppArmor/HowTo''' - Sicherheitsframework für Linux
'''AppArmor/HowTo''' - Sicherheitsframework für [[Linux]]
[[File:appArmor.png|mini|600px|link=]]


== Beschreibung ==
== Beschreibung ==
; AppArmor ist ein Mandatory-Access-Control-(MAC)-Framework für Linux
* Prozesse werden durch Profile eingeschränkt, die erlaubte Zugriffe auf Dateien, Verzeichnisse, Netzwerke und Fähigkeiten definieren
* Auf Debian-basierten Systemen (z. B. Debian, Ubuntu) ist AppArmor typischerweise bereits installiert und beim Systemstart aktiv
* AppArmor wird häufig als einfacher zu verwaltende Alternative zu SELinux eingesetzt


AppArmor ist ein Mandatory-Access-Control-(MAC)-Framework für Linux.
; Als [[Mandatory Access Control]] (MAC) System kontrolliert es Anwendungen einzeln
* Prozesse werden durch Profile eingeschränkt, die erlaubte Zugriffe auf Dateien, Verzeichnisse, Netzwerke und Fähigkeiten definieren.
* Auf Debian-basierten Systemen (z.B. Debian, Ubuntu) ist AppArmor typischerweise bereits installiert und beim Systemstart aktiv.
* AppArmor wird häufig als einfacher zu verwaltende Alternative zu SELinux eingesetzt.
 
 
Als [[Mandatory Access Control]] (MAC) System kontrolliert es Anwendungen einzeln
* Für diese können in Profilen Zugriffsrechte festgelegt werden, die feiner als die allgemeinen Dateirechte sind
* Für diese können in Profilen Zugriffsrechte festgelegt werden, die feiner als die allgemeinen Dateirechte sind
* Neben den vordefinierten können eigene Profile aufgestellt werden
* Neben den vordefinierten können eigene Profile aufgestellt werden
Zeile 16: Zeile 13:


; Zweck
; Zweck
Ziel ist die Begrenzung der Auswirkungen kompromittierter oder fehlerhafter Anwendungen.
Ziel ist die Begrenzung der Auswirkungen kompromittierter oder fehlerhafter Anwendungen
* Typische Kandidaten sind Netzwerkdienste, Browser, Mail- und Büroanwendungen sowie Interpreter für potentiell unsichere Inhalte
* Typische Kandidaten sind Netzwerkdienste, Browser, Mail- und Büroanwendungen sowie Interpreter für potentiell unsichere Inhalte


== Algorithmus ==
== Algorithmus ==
; Ablauf (Kurzfassung)
; Ablauf (Kurzfassung)
# Prüfen, ob AppArmor installiert und aktiviert ist
# Prüfen, ob AppArmor installiert und aktiviert ist
# Netzwerkfähige Prozesse ohne Profil identifizieren
# Netzwerkfähige Prozesse ohne Profil identifizieren
# Profil für einen ausgewählten Dienst erzeugen (ggf. automatisch) und mit Log-Daten verfeinern
# Profil für einen ausgewählten Dienst erzeugen (ggf. automatisch) und mit Log-Daten verfeinern
# Profil in den passenden Modus (''complain''/''enforce''/''audit'') schalten.
# Profil in den passenden Modus (''complain''/''enforce''/''audit'') schalten
# Logs und ggf. Desktop-Benachrichtigungen auswerten
# Logs und ggf. Desktop-Benachrichtigungen auswerten
# Optional weitere Profile hinzufügen bzw. vorhandene Profile anpassen
# Optional weitere Profile hinzufügen bzw. vorhandene Profile anpassen


== Installation ==
== Installation ==
Seit vielen Jahren wird AppArmor auf Debian-basierten Systemen standardmäßig mitinstalliert.
Seit vielen Jahren wird AppArmor auf Debian-basierten Systemen standardmäßig mitinstalliert
* Falls Pakete fehlen, können diese nachinstalliert werden:
* Falls Pakete fehlen, können diese nachinstalliert werden


<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
Zeile 37: Zeile 33:
</syntaxhighlight>
</syntaxhighlight>


Hilfsprogramme:
; Hilfsprogramme
 
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo apt install apparmor-utils apparmor-notify apparmor-profiles apparmor-profiles-extra
sudo apt install apparmor-utils apparmor-notify apparmor-profiles apparmor-profiles-extra
Zeile 59: Zeile 54:
| weitere, teilweise experimentelle Profile
| weitere, teilweise experimentelle Profile
|}
|}


== Schutz durch AppArmor ==
== Schutz durch AppArmor ==
AppArmor wird beim Systemstart geladen und aktiviert.
AppArmor wird beim Systemstart geladen und aktiviert
* Prozesse werden einem Profil zugeordnet, wenn ein dazu passender Regelsatz in '''/etc/apparmor.d/''' vorhanden und geladen ist.
* Prozesse werden einem Profil zugeordnet, wenn ein dazu passender Regelsatz in '''/etc/apparmor.d/''' vorhanden und geladen ist
* Ohne Profil arbeiten Prozesse nur mit klassischen Unix-Dateirechten, aber ohne zusätzliche MAC-Einschränkungen.
* Ohne Profil arbeiten Prozesse nur mit klassischen Unix-Dateirechten, aber ohne zusätzliche MAC-Einschränkungen


== AppArmor-Modi (flags) ==
AppArmor kennt drei Hauptmodi pro Profil


 
{| class="wikitable options big"
 
=== Schutz durch AppArmor ===
AppArmor wird automatisch geladen
* Möchte man eine neue Regel laden, so muss man dies von Hand erledigen
* Grundsätzlich sollte jedes Programm, das eine Angriffsfläche bietet, durch AppArmor geschützt werden
* Eine Auflistung der nicht profilierten Online-Anwendungen erhält man durch ein AppArmor-Werkzeug, das man im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]] aufruft
 
sudo aa-unconfined
 
Dieses ermittelt mittels [https://wiki.ubuntuusers.de/netstat/ netstat], welche Programme offene Netzwerk-Sockets (TCP/UDP) besitzen und ob sie ein AppArmor-Profil besitzen
* Eine Ausgabe kann folgendermaßen aussehen
 
5460 /usr/sbin/avahi-daemon not confined
5460 /usr/sbin/avahi-daemon not confined
5806 /sbin/dhclient3 not confined
18367 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (enforce)'
 
Man sieht hier drei Dienste, von denen nur einer geschützt wird (<tt>cups</tt>)
* Man besitzt also zwei ungeschützte Dienste: <tt>avahi-daemon</tt> und <tt>dhclient3</tt>. <tt>avahi-daemon</tt> wird wahrscheinlich doppelt gelistet, weil es sowohl auf TCP wie auch UDP lauscht
* Diese beiden Dienste sind standardmäßig auf Ubuntu installiert
* Sie sind nur aus dem lokalen Netzwerk, aber nicht aus dem Internet zu erreichen und gelten deshalb als sicher und nicht ausnutzbar
* Mehr dazu kann man im Artikel [https://wiki.ubuntuusers.de/Offene_Ports/ Offene Ports] lesen
* Paranoide werden wahrscheinlich trotzdem eine Regel dafür haben wollen, aber nach derzeitigem Kenntnisstand ist dies nicht erforderlich
 
Sollte aa-unconfined weitere Dienste anzeigen, wie zum Beispiel [https://wiki.ubuntuusers.de/Privoxy/ Privoxy] oder [https://wiki.ubuntuusers.de/Tor/ Tor], sollte man diese von AppArmor schützen lassen
* Als Anmerkung sei noch gesagt, dass aa-unconfined mit großer Wahrscheinlichkeit nur Dienste anzeigen wird und nicht normale Internetanwendungen (wie zum Beispiel einen Browser)
* Das bedeutet aber nicht, dass diese nicht geschützt werden sollten
* Wie bereits gesagt ist die aa-unconfined-Liste nur ein kleiner Ausschnitt der schützenswerten Anwendungen und in keinem Fall vollständig
 
Auch Windows-Anwendungen über [https://wiki.ubuntuusers.de/Wine/ Wine] lassen sich mit AppArmor kontrollieren
* Ausführliche Hinweise dazu finden sich unter [https://gitlab.com/apparmor/apparmor/wikis/AppArmorWine AppArmorWine] und [https://forum.ubuntuusers.de/topic/apparmor-profil-fuer-wine/ im Forum]
 
== Installation ==
Seit 2007 ist AppArmor mit Hilfswerkzeugen in der Standardinstallation von Ubuntu enthalten
* Ansonsten kann es über die folgenden Pakete nachinstalliert werden [https://wiki.ubuntuusers.de/AppArmor/#source-1 [1]]:* '''apparmor'''
sudo apt-get install apparmor
 
Oder mit [https://wiki.ubuntuusers.de/apturl/ apturl] installieren, Link: [apt://apparmor apt://apparmor]
 
=== Hilfsprogramme ===
Die Hilfsprogramme zu AppArmor sind im Paket '''apparmor-utils''', enthalten, das man manuell nachinstallieren muss
sudo apt-get install apparmor-utils
 
Wer <tt>DENIED</tt> Nachrichten in der Desktopumgebung erhalten möchte, muss zusätzlich das Paket* '''apparmor-notify''' (''universe'')
sudo apt-get install apparmor-notify
 
=== Weitere Regelsätze ===
AppArmor Profile für diverse Programme
# apt install apparmor-profiles apparmor-profiles-extra
 
== Aufruf ==
<syntaxhighlight lang="bash" highlight="1" line copy>
 
</syntaxhighlight>
 
=== Optionen ===
=== Argumente ===
=== Umgebung ===
=== Rückgabewert ===
== Anwendung ==
; Hinweis
: Alle Befehle zur Steuerung von AppArmor müssen mit Root-Rechten[https://wiki.ubuntuusers.de/AppArmor/#source-3 [3]] aufgerufen werden!
 
=== AppArmor Utilities ===
Nach der Installation von '''apparmor-utils''' stehen folgende Kommandozeilen-Werkzeuge zur Verfügung
 
{| class="wikitable sortable options big"  
|-
! Utility !! Beschreibung
|-
|| <tt>aa-enabled</tt>
|| simple Abfrage, ob AppArmor aktiviert ist
|-
|| <tt>aa-status</tt>
|| Überblick über die geladenen AppArmor-Profile mit Angabe des Modus
|-
|| <tt>aa-disable</tt>
|| Ein AppArmor Profile deaktivieren
|-
|| <tt>aa-teardown</tt>
|| Alle AppArmor Profile entladen, d.&nbsp;h.&nbsp;aus dem Speichern entfernen, so dass keine Profile in der laufenden Sitzung mehr aktiv sind
|-
|| <tt>aa-exec</tt>
|| Eine Anwendung mit einem speziellen, anzugebenden AppArmor Profil starten
|-
|| <tt>aa-unconfined</tt>
|| Ausgabe der Prozesse mit Netzwerkzugriff ohne Profil
|-
|| <tt>aa-audit</tt>
|| Profil in den Audit-Modus versetzen
|-
|| <tt>aa-complain</tt>
|| Profil in den Complain-Modus versetzen
|-
|| <tt>aa-enforce</tt>
|| Profil in den Enforce-Modus versetzen
|-
|| <tt>aa-autodep</tt>
|| Erstellung eines Basis-Profils im Complain-Modus
|-
|| <tt>aa-genprof</tt>
|| Erstellung eines Basis-Profils mit interaktiver Ergänzung von Regeln und abschließender Versetzung des Profils in den Enforce-Modus
|-
|| <tt>aa-logprof</tt>
|| interaktive Ergänzung von Regeln anhand der Einträge in '''/var/log/syslog'''
|-
|| <tt>aa-cleanprof</tt>
|| automatisches Aufräumen eines Profils
|-
|| <tt>aa-easyprof</tt>
|| Einfaches Erstellen eines Profils
* Mit <tt>aa-easyprof</tt> estellte Profile sind gegebenenfalls weniger restriktiv als mit <tt>aa-genprof</tt> oder <tt>aa-logprof</tt> erstellte Profile
|-
|| <tt>aa-mergeprof</tt>
|| AppArmor Profile zusammenführen
|-
|| <tt>aa-decode</tt>
|| Decodiert einen String in Hexadezimaldarstellung aus dem AppArmor Log in einen ASCII-String
|-
|| <tt>aa-features-abi</tt>
|| Extrahieren, Validieren und Ändern der AppArmor Feature ABI
|-
|| <tt>aa-remove-unknown</tt>
|| Unbekannte AppArmor Profile entfernen
|-
|| <tt>aa-update-browser</tt>
|| Apparmor Profile für Browser aktualisieren
|-
|}
Im Idealfall nutzt man AppArmor ohne es zu bemerken, da Regeln die entsprechenden Anwendungen schützen, aber nicht beeinträchtigen
* Um zu überprüfen, ob AppArmor installiert und aktiviert ist, dient folgender Befehl im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]]
 
aa-enabled
 
Einen weiterführenden Überblick über den aktuellen Status von AppArmor erhält man mit folgendem Befehl
 
sudo aa-status
 
=== AppArmor Modi (flags) ===
AppArmor kennt drei Modi für jedes einzelne Profil
 
{| class="wikitable sortable options"
|-
! Modus !! Beschreibung
! Modus !! Beschreibung
|-
|| <tt>complain</tt>
|| "Lernmodus": Aktionen, die gegen die Regeln verstoßen, werden nur geloggt und nicht verboten
* Das Profil enthält die Kennzeichnung <tt>flags=(complain)</tt>
|-
|| <tt>enforce</tt>
|| "Zwangsmodus": Aktionen, die gegen die Regeln verstoßen, werden geloggt und verboten
* Das Profil enthält die Kennzeichnung <tt>flags=(enforce)</tt>
|-
|| <tt>audit</tt>
|| "Prüfmodus": Alle Regelanwendungen und Regelverstöße werden geloggt
* Das Profil enthält die Kennzeichnung <tt>flags=(audit)</tt>
|-
|}
Profile werden somit folgendermaßen geladen
sudo aa-complain PROFIL <nowiki># für den "Complain"-Modus</nowiki>
sudo aa-enforce PROFIL <nowiki># für den "Enforce"-Modus</nowiki>
sudo aa-audit PROFIL <nowiki># für den "Audit"-Modus </nowiki>
Möchte man alle Profile auf einmal aktivieren, so geschieht dies mit diesem Befehl
sudo aa-complain /etc/apparmor.d/* <nowiki># für den "Complain"-Modus"</nowiki>
sudo aa-enforce /etc/apparmor.d/* <nowiki># für den "Enforce"-Modus </nowiki>
Das [https://wiki.ubuntuusers.de/Logdateien/ Logging] erfolgt dabei sowohl in der Syslog '''/var/log/syslog''' als auch in erweiterter Form in der Kernel-Log '''/var/log/kern.log'''
* Die '''/var/log/syslog''' ist dabei jedoch standardmäßig die ausschlaggebende, die auch von den AppArmor-Utils '''aa-logprof''' und '''aa-genprof''' benutzt wird
Möchte man sich von Hand anschauen, was AppArmor loggt, eignet sich [https://wiki.ubuntuusers.de/tail/ tail] durch Ausführung von
tail -F /var/log/syslog | grep "apparmor"
bzw
tail -F /var/log/kern.log | grep "apparmor"
[https://wiki.ubuntuusers.de/AppArmor/#regel_default]
Die Regelsätze befinden sich im Verzeichnis '''/etc/apparmor.d/'''
* Die Regeln haben dabei die Struktur "pfad.zur.datei.dateiname"
* Es ist also der Dateipfad enthalten, allerdings durch einen Punkt anstatt eines Slashs getrennt, der letzte Teil gibt den Namen des Programms/Dienstes/ an
=== Deaktivieren und Reaktivieren ===
Die Steuerung von AppArmor erfolgt als [https://wiki.ubuntuusers.de/Dienste/ Dienst]
* Um diesen komplett zu stoppen, dient nicht wie bei anderen Diensten üblich der Befehl <tt>stop</tt>, dieser leert nur den Cache
* Um AppArmor komplett zu stoppen, muss der folgende Befehl eingegeben werden
sudo aa-teardown
Der Neustart inkl.&nbsp;Laden alle aktiven Profile erfolgt mit
sudo systemctl reload apparmor.service
=== AppArmor Notify ===
Hat man das Paket '''aa-notify''' installiert, kann man die Benachrichtigung für DENIED-Messages aktivieren
* Dazu dient folgender Befehl im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]]
aa-notify -p
Die Benachrichtigung kann man testen mit
sudo tcpdump -i enp0s31f6 -n -s 0 -w /foo
(enp0s31f6 ist das Tcpip-Interface, das man mit ifconfig findet)
=== Profile bearbeiten ===
Grundsätzlich ist es möglich, von Hand bestehende Profile zu bearbeiten oder neue zu erstellen
* Es handelt es sich um normale Textdateien
; Achtung
Wer das Editieren von Hand beabsichtigt, sollte genau wissen, was er tut! Es besteht eine erhöhte Gefahr, dass das Programm, welches durch das editierte Profil gesichert ist, entweder nicht mehr ausreichend gesichert ist oder auch, dass die Sicherung zu restriktiv ist, so dass das Programm nicht mehr richtig ablaufen kann!
==== Profilaufbau ====
Eine Profil-Datei ist dabei prinzipiell wie folgt aufgebaut
vergrößern
{| class="wikitable sortable options"
|-
|| 1
2
3
4
5
6
7
8
9
10
11
12
13
|| <nowiki>#include <tunables/global></nowiki>
/pfad/zur/anwendung {
<nowiki>#include <abstractions/base></nowiki>
[...]
capability sys_admin
[...]
<nowiki># Kommentar</nowiki>
/usr/lib/gconv/** r
/proc/meminfo r
/bin/basename rmix
[...]
}
|-
|-
|}
| ''complain'' || Lernmodus
* Mit dem Befehl <tt><nowiki>#include</nowiki></tt> können andere (grundlegende) Regelsätze eingebunden werden
* Regelverstöße werden geloggt, aber nicht blockiert
* In allen Profilen ist grundsätzlich die Datei '''/etc/apparmor.d/tunables/global''' mit <tt><nowiki>#include</nowiki></tt> eingebunden, die wiederum weitere Dateien aus diesem Verzeichnis enthält, in denen u.a.&nbsp;Variablen wie <tt>@{HOME}</tt> (für alle [https://wiki.ubuntuusers.de/Homeverzeichnis/ Homeverzeichnisse]) oder <tt>@{PROC}</tt> (für das Verzeichnis '''/proc/''') definiert sind
* Nach der Angabe des Pfades zur Anwendung, für die das Profil erstellt ist, stehen sämtliche Regeln innerhalb von geschweiften Klammern
* Jede Zeile endet mit einem Komma - mit Ausnahme von Kommentaren, <tt><nowiki>#include</nowiki></tt>-Anweisungen, mit denen sogenannten <tt>abstractions</tt> eingebunden werden, und Kind-Profile (näheres dazu weiter unten)
* Mit dem Befehl <tt>capability XYZ</tt> werden grundlegende Eigenschaften/Merkmale definiert
* Siehe dazu die entsprechende [https://manpages.ubuntu.com/manpages/jammy/en/man7/capabilities.7.html Manpage] sowie [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#Capability%20rules Capability rules]
* <tt>/PFAD/ZU/DATEI OPTION</tt> setzt die Berechtigungen für das jeweilige Verzeichnis bzw.&nbsp;die jeweilige Hilfsanwendung
* Dabei ist die Verwendung des Jokers <tt><nowiki>*</nowiki></tt> erlaubt, zwei <tt><nowiki>**</nowiki></tt> bedeuten "inkl.&nbsp;aller Unterverzeichnisse" (extended globbing)
* Beispiele dazu
 
{| class="wikitable sortable options"
|-
|| <tt>/ordner/datei</tt>
|| gilt für diese spezifische Datei '''datei''' in Verzeichnis '''/ordner'''
|-
|| <tt>/ordner/*</tt>
|| gilt für alle ''Dateien'' im Verzeichnis '''/ordner'''
|-
|| <tt>/ordner/a*</tt>
|| gilt für alle Dateien im Verzeichnis, die mit "a" beginnen
|-
|| <tt>/ordner/*.png</tt>
|| gilt für alle Dateien mit der Endung '''.png'''
|-
|| <tt>/ordner/[^.]*</tt>
|| gilt für alle Dateien in '''/ordner''' mit Ausnahme derjenigen, die mit einem "." beginnen
|-
|| <tt>/ordner/</tt>
|| gilt für das spezifische Verzeichnis '''/ordner'''
|-
|| <tt>/ordner/*/</tt>
|| gilt für jedes ''Verzeichnis'' in '''/ordner'''
|-
|| <tt>/ordner/**</tt>
|| gilt für jede ''Datei'' oder jedes ''Verzeichnis'' in oder unterhalb von '''/ordner'''
|-
|| <tt>/ordner/**/</tt>
|| gilt für jedes ''Verzeichnis'' in oder unterhalb von '''/ordner'''
|-
|-
|}
| ''enforce'' || Zwangsmodus
Weitere Hinweise und Details finden sich unter [https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage#File_Globbing File Globbing]
* Regelverstöße werden geloggt und blockiert
 
==== Berechtigungen ====
Grundsätzlich gilt: Eine Anwendung mit AppArmor-Profil darf nur, was im Profil durch entsprechende Regeln explizit erlaubt wird
* Wenn beispielsweise in einem Profil keine Lese- oder Schreib-Regel für das Home-Verzeichnis existiert, wird jeglicher Zugriff der betreffenden Anwendung auf dieses Verzeichnis blockiert
 
===== Attribute =====
Darüber hinaus gibt es drei zusätzliche Attribute
 
{| class="wikitable sortable options"
|-
|| Attribut
|| Beschreibung
|-
|| <tt>audit</tt>
|| alle Anwendungen der Regel werden grundsätzlich geloggt
|-
|| <tt>owner</tt>
|| Berechtigung wird nur erteilt, wenn die Datei bzw.&nbsp;das Verzeichnis im Besitz des Benutzers ist
|-
|| <tt>deny</tt>
|| der Zugriff auf die Datei bzw.&nbsp;das Verzeichnis wird explizit verboten
|-
|-
| ''audit'' || Prüfmodus
* alle Regelanwendungen und -verstöße werden geloggt
|}
|}
<tt>deny</tt> ist sinnvoll, wenn etwa für das Home-Verzeichnis Lese- und Schreibberechtigung durch eine entsprechende Regel erteilt wurde, aber besonders sicherheitskritische Verzeichnisse/Dateien geschützt werden sollen
Beispiel
{| class="wikitable sortable options"
|-
|| 1
|| audit deny @{HOME}/.config/autostart/** wl


|-
; Profil wecheln
|}
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo <aa-complain|aa-enforce|aa-audit> <PROFIL>
</syntaxhighlight>


===== Netzwerkberechtigungen =====
; Mehrere Profile gleichzeitig
AppArmor kann einer Anwendung den Netzwerkzugriff allgemein oder auch sehr spezifisch erlauben oder verbieten
<syntaxhighlight lang="bash" highlight="1" line copy>
* Typische Beispiele
sudo aa-complain /etc/apparmor.d/*
</syntaxhighlight>


{| class="wikitable sortable options"  
<syntaxhighlight lang="bash" highlight="1" line copy>
|-
sudo aa-enforce /etc/apparmor.d/*
|| 1
</syntaxhighlight>
2
3
4
5
6
|| network, <nowiki># Netzwerkzugriff wird generell erlaubt</nowiki>
deny network, <nowiki># Netzwerkzugriff wird generell verboten </nowiki>
network tcp, <nowiki># TCP-Verbindungen werden erlaubt</nowiki>
network udp, <nowiki># UDP-Verbindungen werden erlaubt</nowiki>
network inet stream, <nowiki># IPv4 TCP-Verbindungen werden erlaubt</nowiki>
network inet6 dgram, <nowiki># IPv6 UDP-Verbindungen werden erlaubt</nowiki>
|-
|}
Weitere Details unter [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#Network_rules Network rules]


===== Dateizugriffsberechtigungen =====
; Hinweis
In AppArmor gibt es folgende Berechtigungen
* Neue oder stark angepasste Profile zunächst im ''complain''-Modus testen
* Nach Stabilisierung auf ''enforce'' umstellen
* ''audit'' ist sinnvoll für detaillierte Analysen, erzeugt aber viele Log-Einträge


{| class="wikitable sortable options"
== Status prüfen ==
|-
; Hinweis
| colspan="2" | Dateizugriffsberechtigungen in AppArmor-Profilen
Alle Befehle zur Steuerung von AppArmor erfordern Root-Rechte (z.&nbsp;B.&nbsp;durch ''sudo'')
|-
|| Option
|| Beschreibung
|-
|| <tt>r</tt>
|| Lesezugriff ist erlaubt
|-
|| <tt>w</tt>
|| Schreibzugriff ist erlaubt
|-
|| <tt>a</tt>
|| Dateiinhalte können hinzugefügt werden
|-
|| <tt>l</tt>
|| Es ist erlaubt, einen Link zu erstellen
|-
|| <tt>k</tt>
|| Datei kann gesperrt werden (lockfile)
|-
|| <tt>m</tt>
|| Es darf der Aufruf von [https://manpages.ubuntu.com/manpages/jammy/en/man2/mmap.2.html mmap] erfolgen
|-
|| <tt>x</tt>
|| Hilfsanwendung darf ausgeführt werden
|-
|}
Die Option <tt>x</tt> kann nur in den folgenden Kombinationen verwendet werden


{| class="wikitable sortable options"
=== AppArmor aktiviert ===
|-
<syntaxhighlight lang="bash" highlight="1" line copy>
| colspan="3" | Ausführungsberechtigungen in AppArmor-Profilen
sudo aa-enabled
|-
</syntaxhighlight>
|| Option
|| englisch für
|| Beschreibung
|-
|| <tt>ux</tt>
|| unconfined execute mode
|| Hilfsanwendung ohne AppArmor-Überwachung ausführen
|-
|| <tt>Ux</tt>
|| unconfined execute - scrub the environment
|| wie <tt>ux</tt> mit Bereinigen der Umgebung
|-
|| <tt>ix</tt>
|| inherit execute mode
|| Hilfsanwendung erbt die Berechtigungen der Hauptanwendung
|-
|| <tt>px</tt>
|| discrete Profile execute mode
|| setzt die Definition eines eigenen Profils für die Hilfsanwendung voraus
|-
|| <tt>Px</tt>
|| Discrete Profile execute mode - scrub the environment
|| wie <tt>px</tt> mit Bereinigen der Umgebung
|-
|| <tt>cx</tt>
|| Execute and transition to a child profile
|| Ausführen der Hilfsanwendung über ein Kind-Profil innerhalb des Profils der Hauptanwendung
|-
|| <tt>Cx</tt>
|| Execute and transition to a child profile - scrub the environment
|| wie <tt>cx</tt> mit Bereinigen der Umgebung
|-
|}
Für die Ausführungsberechtigungen sind folgende Hinweise zu beachten:* Die Benutzung von <tt>ux</tt> wird nicht empfohlen, sofern nicht unbedingt notwendig
* Eine mit <tt>ux</tt> ausgeführte Hilfsanwendung wird von AppArmor nicht kontrolliert bzw. "eingesperrt" und kann somit u.&nbsp;U.&nbsp;eine erhebliche Lücke in ein ansonsten sicheres Profil der Hauptanwendung reißen
* Auch die Benutzung von <tt>Ux</tt> wird nicht empfohlen
* Zwar wird hier ein sog. [https://stackoverflow.com/questions/5835664/how-does-apparmor-do-environment-scrubbing "environment scrubbing"] durchgeführt (d.&nbsp;h.&nbsp;ein Bereinigen der Umgebung, indem [https://wiki.ubuntuusers.de/Umgebungsvariable/ Umgebungsvariable] wie <tt>LD_PRELOAD</tt> entfernt werden)
* Ansonsten gilt jedoch dieselbe Problematik wie unter <tt>ux</tt>
* Erheblich sicherer ist die Verwendung von <tt>ix</tt>
* Eine damit ausgeführte Hilfsanwendung erbt die Berechtigungen der Hauptanwendung, darf also nicht mehr, aber auch nicht weniger als diese
* Dies kann problematisch sein, wenn die Hilfsanwendung mehr Rechte benötigt als die Hauptanwendung oder wenn die Rechte der Hilfsanwendung gezielt beschränkt werden sollen
* Erheblich flexibler ist diesbezüglich die Verwendung von <tt>px</tt> (bzw. <tt>Px</tt>)
* Voraussetzung ist, dass für die Hilfsanwendung ein eigenes AppArmor-Profil definiert ist, in dem die Berechtigungen deutlich von denen der jeweiligen Hauptanwendung abweichen können, und auf das auch andere Hauptanwendungen zugreifen können
* Noch flexibler ist die Verwendung von <tt>cx</tt> (bzw. <tt>Cx</tt>)
* Hier wird für die Hilfsanwendung ein lokales Profil innerhalb des Profils der Hauptanwendung angelegt
* Der Vorteil gegenüber <tt>px</tt> ist, dass dadurch unterschiedliche Berechtigungen für die Hilfsanwendung festgelegt werden können, je nachdem, durch welche Hauptanwendung sie aufgerufen wird
* Beispiel: Erstellt man beispielsweise ein AppArmor-Profil für den Browser Google Chrome, werden u.&nbsp;a.&nbsp;als Hilfsanwendungen [https://wiki.ubuntuusers.de/xdg-open/ xdg-open] und '''xdg-settings''' benötigt, die über entsprechende Kind-Profile eingebunden werden können
* Die Syntax für das Profil '''/etc/apparmor.d/opt.google.chrome.chrome''' sieht dann auszugsweise folgendermaßen aus: <br/>vergrößern


{| class="wikitable sortable options"
Ausgabe
|-  
* ''Yes'' – AppArmor ist aktiv
|| 1
* ''No'' – AppArmor ist deaktiviert bzw.&nbsp;das Kernel-Modul nicht geladen
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|| <nowiki># Last Modified: Sat Feb 16 18:28:03 2013</nowiki>
<nowiki>#include <tunables/global></nowiki>


/opt/google/chrome/chrome {
; 1.&nbsp;Basisprofil erzeugen
[...]
<syntaxhighlight lang="bash" highlight="1" line copy>
/opt/google/chrome/xdg-settings Cx
sudo aa-genprof /usr/sbin/PROGRAMM
[...]
</syntaxhighlight>
/usr/bin/xdg-open Cx
/usr/bin/xdg-settings Cx


[...]
* Der Dienst wird gestartet/benutzt
* ''aa-genprof'' wertet Log-Einträge aus und fragt interaktiv nach Freigaben/Verboten


profile /opt/google/chrome/xdg-settings {
; 2.&nbsp;Profil testen
* Profil zunächst im ''complain''-Modus belassen
* Dienst normal verwenden und Logs auswerten
* Bei Bedarf ''aa-logprof'' wiederholt ausführen, bis keine relevanten Verstöße mehr auftreten


/bin/dash r
; 3.&nbsp;Profil scharf schalten
/bin/grep rix
<syntaxhighlight lang="bash" highlight="1" line copy>
/bin/readlink rix
sudo aa-enforce /usr/sbin/PROGRAMM
[...]
</syntaxhighlight>
}


profile /usr/bin/xdg-open {
* Der Dienst wird nun strikt gemäß Profil ausgeführt
<nowiki>#include <abstractions/base></nowiki>
* Weitere Verstöße erscheinen als abgewiesene Zugriffe in den Logs


/bin/dash r
== Logs auswerten ==
/etc/X11/cursors/oxy-white.theme r
AppArmor schreibt Meldungen je nach Systemkonfiguration z.B.&nbsp;in
[...]
* '''/var/log/syslog'''
}
* '''/var/log/kern.log'''
*'''/var/log/audit/audit.log


profile /usr/bin/xdg-settings {
Ein praktischer Live-Blick auf aktuelle Meldungen ist etwa
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo tail -F /var/log/syslog | grep "apparmor"
</syntaxhighlight>
* ''aa-logprof'' verarbeitet typischerweise Meldungen aus '''/var/log/syslog'''
* Für umfangreiche Analysen kann ''audit''-Modus sinnvoll sein, erhöht aber Log-Volumen deutlich


/bin/cat rix
Die Protokollierungseinstellungen werden über die Datei '''/etc/apparmor/logprof.conf''' verwaltet
/bin/dash r
[...]
}
}
|-
|}
* Als weitere Variante mit <tt>cx</tt> und <tt>Cx</tt> ist eine sog. "named profile transition" möglich
* Hier wird ein Kind-Profil namentlich explizit definiert
* Sollen in dem obigen Beispiel keine separaten Kind-Profile für '''/opt/google/chrome/xdg-settings''' und '''/usr/bin/xdg-settings''' erstellt werden, könnte etwa ein gemeinsames Kind-Profil namens ''gemeinsame_xdg_settings'' definiert werden, auf das die Hilfsanwendungen mit einem Pfeilsymbol verweisen
* Die Syntax ändert sich dann in:<br/>vergrößern


{| class="wikitable sortable options"
== Deaktivieren und Reaktivieren ==
|-
Die Steuerung von AppArmor erfolgt über einen Systemdienst
|| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|| <nowiki>#include <tunables/global></nowiki>


/opt/google/chrome/chrome {
; Dienst und Profile entladen
[...]
<syntaxhighlight lang="bash" highlight="1" line copy>
/opt/google/chrome/xdg-settings Cx -> gemeinsame_xdg_settings
sudo aa-teardown
[...]
</syntaxhighlight>
/usr/bin/xdg-settings Cx -> gemeinsame_xdg_settings
* Alle aktiven Profile werden aus dem Kernel entfernt
* Danach finden keine AppArmor-Prüfungen mehr statt


[...]
; Profile neu laden
<syntaxhighlight lang="bash" highlight="1"line copy>
sudo systemctl reload apparmor.service
</syntaxhighlight>


profile gemeinsame_xdg_settings {
Lädt alle aktiven Profile aus '''/etc/apparmor.d/''' neu


/bin/dash r
== AppArmor Notify ==
/bin/grep rix
Nach Installation von ''apparmor-notify'' können Desktop-Benachrichtigungen für verweigerte Zugriffe aktiviert werden
/bin/readlink rix
[...]
}
}
|-
|}
Ein weiteres interessantes Beispiel einer "named profile transition" enthält die abstraction '''/etc/apparmor.d/abstractions/ubuntu-browsers.d/java'''


===== Abstractions =====
; Aktivierung
Im Verzeichnis '''/etc/apparmor.d/abstractions''' befinden sich eine Vielzahl von vorgefertigten Regelsätzen, den sog. "abstractions"
<syntaxhighlight lang="bash" highlight="1" line copy>
* Sie enthalten Regeln, die typischerweise bei der Erstellung eines AppArmor-Profils von vielen Anwendungen benötigt werden
aa-notify -p
* Durch Einbinden über den "<tt><nowiki>#include</nowiki></tt>" - Befehl kann die Profilerstellung deutlich vereinfacht werden
</syntaxhighlight>


Die jeweiligen abstractions werden - wenn benötigt - bei der Regelerstellung bzw. &nbsp;Folgende Hinweise sollten dabei beachtet werden:
; Test mit einem bewusst restriktiven Zugriff
* In vielen abstractions sind andere abstractions über <tt><nowiki>#include</nowiki></tt> eingebunden, und in diese wiederum oft andere abstractions
<syntaxhighlight lang="bash" highlight="1" line copy>
* Durch diese mehrstufige Verschachtelung ist es - insbesondere bei der Verwendung mehrerer abstractions - häufig sehr schwierig, die effektiven Berechtigungen zu durchschauen, die man sich dadurch eingehandelt hat
sudo tcpdump -i enp8s0 -n -s 0 -w /foo
* Es besteht daher die Gefahr, dass auf diese Weise einer Anwendung mehr Rechte als nötig oder beabsichtigt erteilt werden
</syntaxhighlight>
* Das ist ein potentielles Sicherheitsrisiko
* Hinzu kommt, dass es bei der Verwendung mehrerer abstractions mitunter zu konkurrierenden Berechtigungen kommen kann, was beim Laden des Profils mit einer entsprechenden Fehlermeldung (beispielsweise "...&nbsp;conflicting permissions...") quittiert wird
* Aus diesen Gründen ist es ratsam, sich bei der Verwendung von abstractions in Zurückhaltung zu üben
* Wird von aa-logprof eine spezifische Regel und als Alternative eine oder mehrere abstractions angeboten, sollte man die Regel bevorzugen, auch wenn dies die Profilerstellung etwas mühsamer macht
* Nichtsdestotrotz sind eine Reihe von abstractions sehr sinnvoll
* Da den meisten Anwendungen Lese- und Schreibzugriff auf das Homeverzeichnis gewährt werden muss, ist es etwa sinnvoll, zur Absicherung sicherheitskritischer Dateien oder Verzeichnisse das Profil mit "<tt><nowiki>#include <abstractions/private-files></nowiki></tt>" (oder u.&nbsp;U.&nbsp;in einer erweiterten Form mit "<tt><nowiki>#include <abstractions/private-files-strict></nowiki></tt>") zu ergänzen


==== Generelle Hinweise zur Profilbearbeitung ====
Der Befehl startet tcpdump und versucht Folgendes
Das manuelle Editieren eines AppArmor-Profils sollte die Ausnahme darstellen
* Lesen des Datenverkehrs von der Schnittstelle enp8s0
* In der Praxis erfolgt das Hinzufügen von Regeln zu einem Profil mit Hilfe von <tt>aa-logprof</tt>
* Speichern der erfassten Daten in einer Datei unter dem Pfad /foo (im Stammverzeichnis des Dateisystems)
* Eine manuelle Nachbearbeitung beschränkt sich daher im wesentlichen auf drei Fälle:
* Normalerweise ist in AppArmor-Profilen das Schreiben in das Stammverzeichnis / verboten
# Es sollte überprüft werden, ob man nicht mit <tt>aa-logprof</tt> versehentlich die gefährlichen Ausführungsmodi <tt>ux</tt> und <tt>Ux</tt> gewählt hat
:* ''deny /foo w,''
# Es macht bei umfangreichen Profilen u.U.&nbsp;Sinn, zum Zwecke einer besseren Übersichtlichkeit die Regeln zu gruppieren bzw.&nbsp;anders zu sortieren oder auch ggfs.&nbsp;einzelne Regeln mit einer zusätzlichen Kommentarzeile (beginnend mit einem <tt><nowiki>#</nowiki></tt>) zu erläutern
# Es ist zu überprüfen, ob möglicherweise einzelne Regeln nachträglich modifiziert werden sollten, beispielsweise indem eine generelle Lese- und Schreibberechtigung für das Homeverzeichnis durch "<tt>deny</tt>"-Regeln für einzelne Unterverzeichnisse/Dateien eingeschränkt wird


Generell nicht manuell bearbeitet werden sollten die mit Ubuntu standardmäßig mitgelieferten und mit '''apparmor-profiles''' zusätzlich installierten Profile in '''/etc/apparmor.d''', da alle Modifizierungen (auch über aa-logprof) bei einem Update dieser Profile über die Paketverwaltung verloren gehen
== Profile bearbeiten ==
* Für diesen Zweck stehen stattdessen in '''/etc/apparmor.d/local''' jeweils leere "Unterprofile" zur Verfügung, die mit "<tt><nowiki>#include</nowiki></tt>" in das zugehörige Profil eingebunden sind
Grundsätzlich können Profile in '''/etc/apparmor.d/''' manuell editiert werden
* Alle hier manuell hinzugefügten Berechtigungen oder "<tt>deny</tt>"-Regeln bleiben bei einem Update des betreffenden Profils erhalten
* Es handelt sich um Textdateien mit eigener Regel-Syntax
* Diese Empfehlung gilt natürlich nicht für selbsterstellte Profile
* Ergänzende lokale Anpassungen werden in Dateien unter '''/etc/apparmor.d/local/''' vorgenommen, die per ''#include'' in das Hauptprofil eingebunden sind


=== Weitere Profile beziehen ===
; Hinweis
Ubuntu bringt bereits für ein paar Programme Profile mit, wobei diese jedoch teilweise [https://wiki.ubuntuusers.de/AppArmor/#disable-und-force-complain deaktiviert] sein könnten
* Manuelles Editieren sollte die Ausnahme sein
* Um nun weitere Profile zu beziehen kann man
* Typische Änderungen (neue Pfade, zusätzliche Rechte) werden durch ''aa-logprof'' vorgenommen
* Pakete mit weiteren Regeln installieren (siehe [https://wiki.ubuntuusers.de/AppArmor/#weitere-Regelsaetze Abschnitt Installation])
* Bei Profilen, die über Paketverwaltung geliefert werden, gehen direkte Änderungen in '''/etc/apparmor.d/''' bei Updates verloren - lokale Anpassungen gehören nach '''/etc/apparmor.d/local/'''
* fremde Profile übernehmen
* Details zur Profilsprache (Regeln, Rechte, Globbing, Ausführungsmodi, Abstractions) sind in '''[[AppArmor/Policy]]''' beschrieben.
* selber Profile selber erstellen
 
Es sollte aber bedacht werden, dass diese Regeln nicht blind übernommen werden sollen/können, sondern den individuellen Bedürfnissen angepasst werden müssen


Im Internet kursieren noch zahlreiche weitere Profile für AppArmor, doch es sollte immer überlegt werden, wie vertrauenswürdig die Quelle ist und wie kompetent im Erstellen von Profilen
== Weitere Profile beziehen ==
* Außerdem sind diese Regeln meist nicht auf die eigenen Bedürfnisse angepasst, sondern müssen nachträglich feinjustiert werden
* Debian-basierte Systeme liefern bereits Profile für viele Standardprogramme
* Auch hier gilt, dass keine Profile blind übernommen werden sollten
* Zusätzliche Regeln können über Pakete (''apparmor-profiles'', ''apparmor-profiles-extra'') installiert werden
* Fremde Profile sollten nur nach Prüfung der Quelle und anschließender Anpassung an die eigenen Anforderungen übernommen werden


=== Problembehebung ===
== Konfiguration ==
== Konfiguration ==
=== Verzeichnisstruktur ===
=== Verzeichnisstruktur ===
Globale und Systemeinstellungen sind in '''/etc/apparmor''' gespeichert
* Globale Einstellungen: '''/etc/apparmor'''
* Die Anwendungsprofile sowie mehrere vordefinierte Unterverzeichnisse befinden sich in '''/etc/apparmor.d/'''
* Profile: '''/etc/apparmor.d/'''
* Eine ausführliche Darstellung der Verzeichnisstruktur nebst Inhalten ist unter [https://gitlab.com/apparmor/apparmor/wikis/Policy_Layout Policy Layout] verfügbar
* Deaktivierte Profile: symbolische Links in '''/etc/apparmor.d/disable'''
* Profile, die zwangsweise im ''complain''-Modus geladen werden: Links in '''/etc/apparmor.d/force-complain'''


=== ''disable'' und ''force-complain'' ===
=== ''disable'' und ''force-complain'' ===
Enthält '''/etc/apparmor.d/disable''' eine Verknüpfung zu einem Profil, so wird dieses nicht automatisch geladen. Ähnlich sorgen Verknüpfungen unter '''/etc/apparmor.d/force-complain''' dafür, dass Profile nur im <tt>complain</tt>-Modus geladen werden ([https://wiki.ubuntuusers.de/AppArmor/#AppArmor-Modi-flags siehe unten])
Enthält '''/etc/apparmor.d/disable''' eine Verknüpfung zu einem Profil, wird dieses nicht automatisch geladen
* Verknüpfungen unter '''/etc/apparmor.d/force-complain''' sorgen dafür, dass Profile im ''complain''-Modus geladen werden
 
== Problembehebung ==
Typische Schritte bei Problemen mit AppArmor-Profilen
* Prüfen, ob der betroffene Prozess durch ein Profil eingeschränkt wird (''aa-status'')
* Log-Meldungen zu diesem Prozess filtern (''grep apparmor'' auf ''syslog'' / ''kern.log'')
* Profil mit ''aa-logprof'' anpassen
* Ggf
* Profil temporär in ''complain''-Modus versetzen, um Verhalten zu analysieren
* Wenn nötig, Profil für die Fehlersuche kurzzeitig deaktivieren – danach wieder aktivieren


=== Dateien ===
<noinclude>
<noinclude>


Zeile 697: Zeile 237:
# [https://wiki.kairaven.de/open/os/linux/apparmor AppArmor mit Ubuntu nutzen]- Einführung von Kai Raven
# [https://wiki.kairaven.de/open/os/linux/apparmor AppArmor mit Ubuntu nutzen]- Einführung von Kai Raven


[[Kategorie:AppArmor]]
</noinclude>
</noinclude>
[[Kategorie:AppArmor]]

Aktuelle Version vom 12. Dezember 2025, 16:15 Uhr

AppArmor/HowTo - Sicherheitsframework für Linux

Beschreibung

AppArmor ist ein Mandatory-Access-Control-(MAC)-Framework für Linux
  • Prozesse werden durch Profile eingeschränkt, die erlaubte Zugriffe auf Dateien, Verzeichnisse, Netzwerke und Fähigkeiten definieren
  • Auf Debian-basierten Systemen (z. B. Debian, Ubuntu) ist AppArmor typischerweise bereits installiert und beim Systemstart aktiv
  • AppArmor wird häufig als einfacher zu verwaltende Alternative zu SELinux eingesetzt
Als Mandatory Access Control (MAC) System kontrolliert es Anwendungen einzeln
  • Für diese können in Profilen Zugriffsrechte festgelegt werden, die feiner als die allgemeinen Dateirechte sind
  • Neben den vordefinierten können eigene Profile aufgestellt werden
  • Für jedes Profil kann einer von drei Eingriffs-Modi gesetzt werden
Zweck

Ziel ist die Begrenzung der Auswirkungen kompromittierter oder fehlerhafter Anwendungen

  • Typische Kandidaten sind Netzwerkdienste, Browser, Mail- und Büroanwendungen sowie Interpreter für potentiell unsichere Inhalte

Algorithmus

Ablauf (Kurzfassung)
  1. Prüfen, ob AppArmor installiert und aktiviert ist
  2. Netzwerkfähige Prozesse ohne Profil identifizieren
  3. Profil für einen ausgewählten Dienst erzeugen (ggf. automatisch) und mit Log-Daten verfeinern
  4. Profil in den passenden Modus (complain/enforce/audit) schalten
  5. Logs und ggf. Desktop-Benachrichtigungen auswerten
  6. Optional weitere Profile hinzufügen bzw. vorhandene Profile anpassen

Installation

Seit vielen Jahren wird AppArmor auf Debian-basierten Systemen standardmäßig mitinstalliert

  • Falls Pakete fehlen, können diese nachinstalliert werden
sudo apt install apparmor
Hilfsprogramme
sudo apt install apparmor-utils apparmor-notify apparmor-profiles apparmor-profiles-extra
Tool Beschreibung
apparmor-utils Kommandozeilenwerkzeuge (aa-*)
apparmor-notify Desktop-Benachrichtigung für AppArmor-Meldungen
apparmor-profiles zusätzliche, vorkonfigurierte Profile
apparmor-profiles-extra weitere, teilweise experimentelle Profile

Schutz durch AppArmor

AppArmor wird beim Systemstart geladen und aktiviert

  • Prozesse werden einem Profil zugeordnet, wenn ein dazu passender Regelsatz in /etc/apparmor.d/ vorhanden und geladen ist
  • Ohne Profil arbeiten Prozesse nur mit klassischen Unix-Dateirechten, aber ohne zusätzliche MAC-Einschränkungen

AppArmor-Modi (flags)

AppArmor kennt drei Hauptmodi pro Profil

Modus Beschreibung
complain Lernmodus
  • Regelverstöße werden geloggt, aber nicht blockiert
enforce Zwangsmodus
  • Regelverstöße werden geloggt und blockiert
audit Prüfmodus
  • alle Regelanwendungen und -verstöße werden geloggt
Profil wecheln
sudo <aa-complain|aa-enforce|aa-audit> <PROFIL>
Mehrere Profile gleichzeitig
sudo aa-complain /etc/apparmor.d/*
sudo aa-enforce /etc/apparmor.d/*
Hinweis
  • Neue oder stark angepasste Profile zunächst im complain-Modus testen
  • Nach Stabilisierung auf enforce umstellen
  • audit ist sinnvoll für detaillierte Analysen, erzeugt aber viele Log-Einträge

Status prüfen

Hinweis

Alle Befehle zur Steuerung von AppArmor erfordern Root-Rechte (z. B. durch sudo)

AppArmor aktiviert

sudo aa-enabled

Ausgabe

  • Yes – AppArmor ist aktiv
  • No – AppArmor ist deaktiviert bzw. das Kernel-Modul nicht geladen
1. Basisprofil erzeugen
sudo aa-genprof /usr/sbin/PROGRAMM
  • Der Dienst wird gestartet/benutzt
  • aa-genprof wertet Log-Einträge aus und fragt interaktiv nach Freigaben/Verboten
2. Profil testen
  • Profil zunächst im complain-Modus belassen
  • Dienst normal verwenden und Logs auswerten
  • Bei Bedarf aa-logprof wiederholt ausführen, bis keine relevanten Verstöße mehr auftreten
3. Profil scharf schalten
sudo aa-enforce /usr/sbin/PROGRAMM
  • Der Dienst wird nun strikt gemäß Profil ausgeführt
  • Weitere Verstöße erscheinen als abgewiesene Zugriffe in den Logs

Logs auswerten

AppArmor schreibt Meldungen je nach Systemkonfiguration z.B. in

  • /var/log/syslog
  • /var/log/kern.log
  • /var/log/audit/audit.log

Ein praktischer Live-Blick auf aktuelle Meldungen ist etwa

sudo tail -F /var/log/syslog | grep "apparmor"
  • aa-logprof verarbeitet typischerweise Meldungen aus /var/log/syslog
  • Für umfangreiche Analysen kann audit-Modus sinnvoll sein, erhöht aber Log-Volumen deutlich

Die Protokollierungseinstellungen werden über die Datei /etc/apparmor/logprof.conf verwaltet

Deaktivieren und Reaktivieren

Die Steuerung von AppArmor erfolgt über einen Systemdienst

Dienst und Profile entladen
sudo aa-teardown
  • Alle aktiven Profile werden aus dem Kernel entfernt
  • Danach finden keine AppArmor-Prüfungen mehr statt
Profile neu laden
sudo systemctl reload apparmor.service

Lädt alle aktiven Profile aus /etc/apparmor.d/ neu

AppArmor Notify

Nach Installation von apparmor-notify können Desktop-Benachrichtigungen für verweigerte Zugriffe aktiviert werden

Aktivierung
aa-notify -p
Test mit einem bewusst restriktiven Zugriff
sudo tcpdump -i enp8s0 -n -s 0 -w /foo

Der Befehl startet tcpdump und versucht Folgendes

  • Lesen des Datenverkehrs von der Schnittstelle enp8s0
  • Speichern der erfassten Daten in einer Datei unter dem Pfad /foo (im Stammverzeichnis des Dateisystems)
  • Normalerweise ist in AppArmor-Profilen das Schreiben in das Stammverzeichnis / verboten
  • deny /foo w,

Profile bearbeiten

Grundsätzlich können Profile in /etc/apparmor.d/ manuell editiert werden

  • Es handelt sich um Textdateien mit eigener Regel-Syntax
  • Ergänzende lokale Anpassungen werden in Dateien unter /etc/apparmor.d/local/ vorgenommen, die per #include in das Hauptprofil eingebunden sind
Hinweis
  • Manuelles Editieren sollte die Ausnahme sein
  • Typische Änderungen (neue Pfade, zusätzliche Rechte) werden durch aa-logprof vorgenommen
  • Bei Profilen, die über Paketverwaltung geliefert werden, gehen direkte Änderungen in /etc/apparmor.d/ bei Updates verloren - lokale Anpassungen gehören nach /etc/apparmor.d/local/
  • Details zur Profilsprache (Regeln, Rechte, Globbing, Ausführungsmodi, Abstractions) sind in AppArmor/Policy beschrieben.

Weitere Profile beziehen

  • Debian-basierte Systeme liefern bereits Profile für viele Standardprogramme
  • Zusätzliche Regeln können über Pakete (apparmor-profiles, apparmor-profiles-extra) installiert werden
  • Fremde Profile sollten nur nach Prüfung der Quelle und anschließender Anpassung an die eigenen Anforderungen übernommen werden

Konfiguration

Verzeichnisstruktur

  • Globale Einstellungen: /etc/apparmor
  • Profile: /etc/apparmor.d/
  • Deaktivierte Profile: symbolische Links in /etc/apparmor.d/disable
  • Profile, die zwangsweise im complain-Modus geladen werden: Links in /etc/apparmor.d/force-complain

disable und force-complain

Enthält /etc/apparmor.d/disable eine Verknüpfung zu einem Profil, wird dieses nicht automatisch geladen

  • Verknüpfungen unter /etc/apparmor.d/force-complain sorgen dafür, dass Profile im complain-Modus geladen werden

Problembehebung

Typische Schritte bei Problemen mit AppArmor-Profilen

  • Prüfen, ob der betroffene Prozess durch ein Profil eingeschränkt wird (aa-status)
  • Log-Meldungen zu diesem Prozess filtern (grep apparmor auf syslog / kern.log)
  • Profil mit aa-logprof anpassen
  • Ggf
  • Profil temporär in complain-Modus versetzen, um Verhalten zu analysieren
  • Wenn nötig, Profil für die Fehlersuche kurzzeitig deaktivieren – danach wieder aktivieren


Anhang

Siehe auch

Dokumentation

Man-Page
Info-Page

Links

Projekt

  1. AppArmor

Weblinks

  1. https://wiki.ubuntuusers.de/AppArmor/
  2. AppArmor-Übersichtsseite Im englischen Ubuntu-Wiki
  3. Using AppArmor Eintrag im englischen Wiki der Ubuntu-Community
  4. AppArmor mit Ubuntu nutzen- Einführung von Kai Raven