Hardening Dienstag: AppArmor Teil 1 - Alles auf Anfang

in #deutsch6 years ago

Prolog

Stell dir vor, du verwendest eine Anwendung unter Linux, die mit dem Internet kommuniziert (soll ja gelegentlich vorkommen).
Sagen wir mal, es ist ein Dienst mit einem root-Daemon um Dateien zu übertragen.
Was wäre nun, wenn dieser potentiellen Angreifern ermöglichen würde, auch in unerwünschte Verzeichnisse zu schauen und dort Dateien hoch-/runterzuladen?

Das Problem bei Software ab einem gewissen Komplexitätsgrad ist leider immer, das sich neben den gewünschten Funktionen auch gerne mal Bugs einschleichen.
Wäre es daher nicht schön, wenn man dem Betriebssystem mitteilen könnte, in welchem Rahmen, mit welchen Berechtigungen und auf welche Ordner/Dateien eine Anwendung im Normalbetrieb zugreifen sollte und welche nicht dazu gehören?

Wie einige von euch jetzt vermutlich schon erwartet haben, gibt es hierfür tatsächlich Ansätze.
Auf einen davon, AppArmor, bin ich vor einiger Zeit gestoßen und habe inzwischen ein wenig damit experimentiert.

Disclaimer

Eins gleich vorneweg: Ich bin kein Experte mit AppArmor, jedoch hat mich die unglaublich einfache Bedienbarkeit und schnelle Erlernbarkeit der Grundfunktionen sehr positiv überrascht.
Deshalb möchte ich mit dieser Reihe AppArmor ein wenig vorstellen und hoffe, dass es euch vielleicht in der ein oder anderen Situation weiterhelfen kann.

AppArmor ist eine LSM Kernel-Erweiterung[1]. Dementsprechend kann in manchen Distribution eine modifizierter, selbstgebauter Kernel von Nöten sein, um AppArmor für euch nutzbar zu machen. Diese Fälle alle zu behandeln würde leider den Rahmen sprengen, weshalb ich hierauf nicht genauer eingehen werde.

Die unten angegebenen Befehle werden als root-Nutzer ausgeführt. Dies kann beispielsweise erreicht werden, indem ihr sudo vor jeden der Befehle hängt.

Auslassungen im Text werden von mir durch ... gekennzeichnet. Diese gehören folglich nicht zur Ausgabe und sind durch die bei euch vorhandenen Werte zu ersetzen.

Warnung

Die unter Konfiguration angegebene Aktivierungsanleitung bezieht sich explizit auf Arch Linux (mit dem GRUB-Bootloader)! Überprüft unbedingt, ob die Aktivierungsschritte für eure Distribution abweichen, da eine Falschkonfiguration euch immer potentiell eure Installation zerschießen kann!

Ausgangssituation

Je nach Distribution wird AppArmor im Standartumfang mitgeliefert (beispielsweise in aktuellen Ubuntu und openSUSE Leap-Versionen). Bei Arch Linux muss es jedoch erst nachträglich aktiviert werden.

Um zu testen, ob AppArmor bei euch standardmäßig aktiv ist, springt direkt zur Sektion Testen der Installation.

Audit framework

Bei meinen ersten Tests mit dem automatischen Generieren von Profilen habe ich festgestellt, das das Audit framework hierfür zusätzlich erforderlich ist.[2]

Falls jemand auf dieses verzichten möchte, so lässt man einfach den Kernel-Parameter audit=1 in der unten folgenden GRUB-Konfiguration weg und ignoriert den folgenden Audit framework-Abschnitt.

Konfiguration (Arch Linux)

Dies ist die etwas ausführlichere Version der Installationsanleitung des Wiki-Eintrags zu AppArmor im Arch-Wiki. Erfahreneren Nutzern empfehle ich daher, direkt dort nachzusehen.[3]

Damit alle auf dem gleichen Stand sind, werde ich hier kurz die Aktivierungsschritte (anhand einer Arch Linux-Installation) aufzählen.

Hierfür müsst ihr in eurer Bootloader-Konfiguration die Kernelparameter apparmor=1 security=apparmor, sowie audit=1 für das Audit framework hinzufügen.
Ich für meinen Teil nutze GRUB, daher habe ich in der Datei /etc/default/grub der Zeile

GRUB_CMDLINE_LINUX_DEFAULT="quiet ..."

Die Parameter hinten angehängt:

GRUB_CMDLINE_LINUX_DEFAULT="quiet ... apparmor=1 security=apparmor audit=1"

(Bei den meisten beginnen die Parameter mit quiet. Falls dies bei euch nicht so ist, ist es auch nicht schlimm. Wichtig ist hier nur, das ihr die bei euch bereits vorhandenen Parameter nicht überschreibt, sondern die neuen hinten anhängt!)

Nun müsst ihr noch die Bootkonfiguration neu bauen, in meinem Falle mit dem Befehl

grub-mkconfig -o /boot/grub/grub.cfg

(Auch wenn der Pfad /boot/grub/grub.cfg der Standartpfad sein sollte, hier bitte nochmal überprüfen, ob dies auch bei euch der richtige ist!)

Damit die Profile automatisch geladen werden, müsst ihr nun mit

systemctl enable apparmor

den entsprechenden Dienst aktivieren.

Audit framework

Um das Audit framework vollständig funktionsfähig zu machen, installieren wir noch die audit-Software

pacman -S audit

und aktivieren den zugehörigen Dienst

systemctl enable auditd

Das wars auch schon!
Nach einem Neustart sollte nun AppArmor einsatzbereit sein.

Testen der Installation

Nun gehts los mit den ersten AppArmor-Befehlen:

Mit dem Befehl aa-enabled könnt ihr prüfen, ob alles richtig eingestellt ist.

aa-enabled
Ja

Um etwas detailliertere Infos zu erhalten, gebt aa-status ein:

aa-status
apparmor module is loaded.
50 profiles are loaded.
49 profiles are in enforce mode
...
0 profiles are in complain mode.
10 processes have profiles defined.
9 processes are in enforce mode.
...
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

(Die Zahlen werden bei euch vermutlich abweichen).
Hierbei noch ein Hinweis: Sollten bei euch keine Profile geladen sein, überprüft nochmal ob der apparmor-Service wirklich läuft:

systemctl status apparmor

Und damit war es das auch schon mit Teil 1 (und damit mit den Arch Linux-spezifischen Einstellungen).
Im zweiten Teil werden wir uns dann selber ein Profil für eine kleine Beispielanwendung generieren.

Danksagung

An dieser Stelle noch einmal ein herzliches Dankeschön für all die Wilkommensgrüße bei meinem Vorstellungsbeitrag und die Unterstützung!
Es hat mich sehr gefreut, das ich so viel positives Feedback erhalten habe.

Wie immer würde ich mich sehr über Feedback (sowohl inhaltlich als auch zur Struktur) freuen.

In diesem Sinne wünsche ich noch einen wunderschönen Dienstag.

[1] https://wiki.ubuntu.com/AppArmor
[2] https://wiki.archlinux.org/index.php/Audit_framework
[3] https://wiki.archlinux.org/index.php/AppArmor

Sort:  

Congratulations @maini! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 100 upvotes. Your next target is to reach 250 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

Carnival Challenge - Collect badge and win 5 STEEM
Vote for @Steemitboard as a witness and get one more award and increased upvotes!

Coin Marketplace

STEEM 0.17
TRX 0.16
JST 0.029
BTC 75890.23
ETH 2903.21
USDT 1.00
SBD 2.57