Apparmor From Scratch

Aus xinux.net
Zur Navigation springen Zur Suche springen
  • apt install apparmor-utils

Einführung

  • Man kann fast jedes Profil für AppArmor im Community-Forum oder beim Projektautor erhalten
  • Es gibt aber auch einige Tools zum Erstellen Ihres Profils von Grund auf bereitstellt
  • Die geschieht sowohl interaktiv (unter Verwendung des Audit-Protokolls) als auch mit Hilfe von Vorlagen.

Konkret

  • Wir wollen hier ein Programmprofil für das cat-Programm schreiben, das es daran hindert, den Inhalt der Dateien /etc/passwd und /etc/group zu lesen
  • Jede andere Datei im /tmp-Verzeichnis und im Home-Verzeichnis soll aber gelesen werden können
  • Wir machen eine kopie von "cat" mit den Namen "katze"
  • Für diese erstellen wir dann ein apparmor-Profil

Einige wichtige Punkte für die Profildefinition

  • Sie können sowohl absolute Pfade als auch Glob-Muster einbeziehen.
  • Sie können beispielsweise entweder den absoluten Pfad /etc/passwd hinzufügen oder alle Dateien über das Glob-Muster /tmp/* einbinden lassen.
  • Sie können einen oder mehrere Zugriffstypen auf die Datei aus der folgenden Liste haben
    • r ⇒ bietet Lesezugriff auf die Datei
    • w ⇒ bietet Schreibzugriff auf die Datei
    • m ⇒ Memory Map als ausführbar. Es wird für Programmdateien oder *.so-Dateien verwendet
    • l ⇒ bietet Erstellung für Symlinks
    • k ⇒ Sperren von Zeiten. Dies wird normalerweise verwendet, wenn mehr als ein Prozess die Datei öffnen könnte, zum Beispiel das /tmp-Verzeichnis. Es wird meistens in Verbindung mit Schreibzugriff verwendet
  • Es gibt weitere Berechtigungen wie ix, Px, Cx und Ux, aber in den meisten Fällen werden die oben genannten verwendet
  • Unterstützt auch Zugriffskontrollen von Fähigkeiten, Netzwerken, DBus, PTrace und UNIX-Domain-Sockets.
  • Auch Variablen werden im Profil unterstützt, zum Beispiel @{MY_VAR}.
  • Einige gemeinsame Variablen sind in /etc/apparmor.d/tunables/global definiert.
  • Sie können #include <tunables/global>-Makros am Anfang der Datei haben
  • Explizite Verweigerungsregeln werden unterstützt.
  • Dies haben wir bereits im letzten Beitrag besprochen

Profil für /bin/katze wird erstellt

Es gibt zwei Möglichkeiten, die Profile für ein Programm zu erstellen

aa-genprof

  • Mit aa-genprof können Sie ein Profil erstellen und die Binärdatei als Audit markieren.
  • Danach werden Sie aufgefordert, die Binärdatei auszuführen, und dies erzeugt Protokolle in der Datei /var/log/audit/audit.log.
  • Es wird dann diese Datei scannen und Ihnen automatisch Einträge und Optionen dafür anzeigen.
  • Dies wird für laufende Programme/Anwendungen verwendetfür eine begrenzte Zeit (z. B. Webbrowser, Mailclient) und in diesem Fall /bin/katze

aa-autodep

  • Mit aa-autodep können Sie ein Profil erstellen, das sich auf mehrere Programme auswirkt,
  • Die auf unbestimmte Zeit oder kontinuierlich über Neustarts hinweg ausgeführt werden. Zum Beispiel Webserver usw.

konkret

  • Da der Befehl in diesem Fall für eine endliche Zeit eins ist, verwenden wir den Befehl aa-genprof zum Generieren des Profils.
  • Um mit der Profilerstellung zu beginnen, führen Sie den Befehl gefolgt vom Pfad des Programms sudo aa-genprof /bin/katze aus.
  • Dies dient dazu, eine grundlegende Profildatei zu erstellen und sie mit „Beschweren“ zu kennzeichnen.

Terminal 1

  • aa-genprof /bin/katze
Before you begin, you may wish to check if a
profile already exists for the application you
wish to confine. See the following wiki page for
more information:
https://gitlab.com/apparmor/apparmor/wikis/Profiles

Profiling: /usr/bin/katze

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

Once completed, select the "Scan" option 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.

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

Terminal 2

  • katze /etc/passwd
katze: /etc/passwd: Keine Berechtigung

Terminal 3

  • tail -f /var/log/syslog | grep app
May 11 14:18:14 iandeb kernel: [  201.510824] audit: type=1400 audit(1652271494.740:18): apparmor="ALLOWED" operation="open" profile="/usr/bin/katze" name="/etc/passwd" pid=689 comm="katze" requested_mask="r" denied_mask="r" fsuid=0 ouid=0

Terminal 1

  • Gehen Sie nun zurück zum Terminal, wo Sie den Befehl aa-genprof starten, und drücken Sie die Taste S.
  • Dadurch wird die Datei automatisch für Sie analysiert und Sie werden aufgefordert, Dateien und Optionen auszuwählen.
  • Sie können die NACH-OBEN- und NACH-UNTEN-Pfeiltasten verwenden, um durch die Dateinamen und Tasten zu navigieren, um die Regelaktion auszuwählen.
  • In der folgenden Abbildung habe ich zuerst den Eintrag für die Datei /etc/passwd ausgewählt, dann t ausgewählt, um das Audit-Flag für den Eintrag zu setzen,
  • und dann D oder d gedrückt (bei der Auswahl wird die Groß-/Kleinschreibung nicht berücksichtigt)
  • um den Lesezugriff auf die Datei zu verweigern.
  • Dann habe ich dasselbe für die Datei /etc/group gemacht und zuletzt S gedrückt,
  • um die Konfiguration zu speichern, und F, um die Ausführung zu beenden, und aa-genprof und das Profil neu geladen
Reading log entries from /var/log/syslog.
Complain-mode changes:

Profile:  /usr/bin/katze
Path:     /etc/passwd
New Mode: owner r
Severity: 4

 [1 - #include <abstractions/nameservice>]
  2 - owner /etc/passwd r, 
(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish

Quellen