linux-suse-opensuse security apparmor troubleshooting cli debugging

AppArmor CLI Reference: Debugging Tools (Artikel 149)

Der definitive Werkzeugkasten für AppArmor-Admins. Erfahren Sie den Umgang mit spezialisierten Tools wie aa-decode, aa-exec und aa-unconfined zur Fehlerdiagnose.

# AppArmor CLI Reference: Der Werkzeugkasten für die Fehlersuche

TL;DR / Management Summary Ein Senior Admin verlässt sich nicht nur auf aa-status. Wenn die Fehlerursache tief im System liegt, kommen spezialisierte Tools zum Einsatz. Wir lernen, wie man hexadezimale Audit-Meldungen mit aa-decode lesbar macht, wie man Programme mit aa-exec testweise in ein Profil zwingt und wie man mit aa-unconfined Sicherheitslücken durch “ungeschützte” Netzwerk-Dämons aufdeckt.


# 1. Einführung & Architektur

Die Tools hinter dem Wizard.

Die meisten AppArmor-Tools sind Perl- oder Python-Skripte, die direkt auf die Kernel-Schnittstelle unter /sys/kernel/security/apparmor/ zugreifen.

# Die Werkzeug-Hierarchie (Mermaid)

graph TD
    A[Kernel /sys/...] --> B[AppArmor Utils]
    B --> C[Diagnosis: aa-status, aa-unconfined]
    B --> D[Manipulation: aa-exec, apparmor_parser]
    B --> E[Log Processing: aa-decode, aa-logprof]
    B --> F[Automation: aa-autodep]

# 2. Diagnose-Tools im Detail

Sichtbarkeit schaffen.

# aa-status: Die Ist-Analyse

Der erste Befehl bei jedem Problem.

sudo aa-status
# Zeigt: Geladene Profile, Profile im Complain-Mode, Prozesse mit/ohne Profil.

# aa-unconfined: Das Sicherheits-Audit

Findet Prozesse, die Netzwerkports öffnen, aber kein AppArmor-Profil haben.

sudo aa-unconfined --active
# Jeder hier gelistete Prozess ist ein potenzieller Angriffsvektor!

# 3. Log-Analyse Tools

Die Wahrheit aus den Logs lesen.

# aa-decode: Hex-Code übersetzen

Audit-Logs enthalten oft kryptische Pfade in Hexadezimal-Form (z.B. bei Dateinamen mit Sonderzeichen).

# Übergabe der Logzeile an das Tool
echo "name=2f6574632f736861646f77" | aa-decode
# Output: Decoded: /etc/shadow

# 4. Day-2 Operations: Manipulation & Testing

Experimente sicher durchführen.

# aa-exec: Erzwungene Profile

Ideal, um zu testen, ob ein Programm mit einem Profil funktionieren würde, ohne es global zu aktivieren.

# Startet die Bash im Kontext des Nginx-Profils (Vorsicht: sehr restriktiv!)
sudo aa-exec -p /usr/sbin/nginx /bin/bash

# apparmor_parser: Der rohe Weg

Wenn systemd-reload nicht reicht, laden wir Profile manuell in den Kernel.

# Profil laden/ersetzen
sudo apparmor_parser -r /etc/apparmor.d/my.profile

# Profil komplett aus dem Kernel löschen
sudo apparmor_parser -R /etc/apparmor.d/my.profile

# 5. Troubleshooting & “War Stories”

Vermeiden Sie klassische Werkzeug-Fehler.

# Story 1: “Der falsche Pfad im Tool”

Symptom: aa-genprof findet keine Events, obwohl die Applikation blockiert wird. Ursache: Das Tool sucht standardmäßig in /var/log/audit/audit.log. Auf Systemen ohne auditd landen die Meldungen aber in /var/log/messages oder nur im Journal. Lösung: Installieren Sie auditd für die beste Tool-Kompatibilität oder nutzen Sie das Flag -f, um den Logpfad anzugeben.

# Story 2: “Das veraltete Cache-Problem”

Symptom: Das Profil wurde auf der Disk geändert, aber der Fehler bleibt bestehen, obwohl der Parser fehlerfrei durchlief. Ursache: AppArmor nutzt einen binären Cache unter /var/cache/apparmor/. Manchmal wird dieser nicht sauber aktualisiert. Lösung: Cache löschen und neu parsen:

sudo rm -rf /var/cache/apparmor/*
sudo systemctl restart apparmor

# 6. Fazit & Empfehlung

  • Audit: Nutzen Sie aa-unconfined wöchentlich, um neue Dienste ohne Profil zu finden.
  • Debugging: Nutzen Sie aa-decode bei komplexen Web-Applikationen mit langen URL-Pfaden.
  • Sicherheit: Geben Sie nur erfahrenen Admins Zugriff auf aa-exec.

# Anhang: Cheatsheet

Aufgabe Befehl
Schnelle Übersicht aa-status --summary
Prozesse ohne Profil aa-unconfined
Profile neu laden apparmor_parser -r /etc/apparmor.d/*
Debugging-Mode apparmor_parser -d /etc/apparmor.d/profile
Hilfe zu Profil-Syntax man apparmor.d
Kernel Interface ls /sys/kernel/security/apparmor/
Profil-Integrität `aa-status
Hex-Decoding aa-decode --string <hex>