Recherche de site Web

Aide-mémoire AppArmor pour les administrateurs système Linux


Beaucoup d'entre vous ont probablement entendu parler d'AppArmor lorsqu'ils travaillent avec des systèmes basés sur Debian, plus encore avec Ubuntu. Cependant, comme il ne s'agit pas d'une application qui s'affiche dans l'interface graphique, certains utilisateurs peuvent ne pas la connaître.

Application Armor abrégé en AppArmor est un module de sécurité sur les systèmes Linux. Il s'agit d'un système de contrôle d'accès obligatoire (MAC) utilisé par le noyau Linux pour restreindre les capacités d'un programme telles que configurées sur les profils de programme. Ces profils peuvent autoriser ou refuser des fonctionnalités telles que l'accès au réseau, l'accès aux sockets bruts, les autorisations de lecture, d'écriture et d'exécution sur les fichiers, etc. Ces profils sont généralement chargés dans le noyau au démarrage du système. Les profils AppArmor existent en deux modes, à savoir application et plainte. Le mode d'application applique la stratégie définie dans le profil et signale également toute tentative de violation de la stratégie à l'aide de Syslog ou d'audits. Le mode de réclamation, en revanche, n'applique pas la politique mais signale uniquement les tentatives de violation de la politique.

La technologie AppArmor existe depuis un certain temps. Il a été vu pour la première fois dans Immunix puis intégré dans les systèmes Novell/SUSE, Mandriva et Ubuntu. AppArmor est considéré comme un remplacement de SELinux, qui est parfois considéré comme difficile à installer et à maintenir. Contrairement à SELinux, qui fonctionne en appliquant des étiquettes aux fichiers, AppArmor fonctionne avec les chemins de fichiers. Les représentants d'AppArmor affirment qu'il est moins complexe et plus facile à configurer que SELinux.

Dans l'article d'aujourd'hui, nous apprendrons l'aide-mémoire AppArmor pour les administrateurs système Linux.

1. Vérifiez l'état d'AppArmor

AppArmor est installé par défaut sur les systèmes Ubuntu et se charge automatiquement au démarrage du système. Pour vérifier l'état, exécutez la commande ci-dessous :

sudo apparmor_status
##OR
sudo aa-status

Exemple de sortie :

La sortie ci-dessus montre les profils chargés et le mode AppArmor.

2. Afficher les profils AppArmor

AppArmor dispose de plusieurs profils préchargés qui se trouvent dans le répertoire « /etc/apparmor.d/ ». Certains profils sont désactivés et d'autres sont actifs.

Pour vérifier tous les profils, vous pouvez émettre :

$ ls /etc/apparmor.d/*
/etc/apparmor.d/lsb_release
/etc/apparmor.d/nvidia_modprobe
/etc/apparmor.d/sbin.dhclient
/etc/apparmor.d/usr.bin.evince
/etc/apparmor.d/usr.bin.man
....
/etc/apparmor.d/disable:
usr.sbin.rsyslogd

/etc/apparmor.d/force-complain:

/etc/apparmor.d/local:
lsb_release      usr.bin.tcpdump                          usr.sbin.cups-browsed
nvidia_modprobe  usr.lib.libreoffice.program.oosplash     usr.sbin.cupsd
README           usr.lib.libreoffice.program.senddoc      usr.sbin.mysqld
sbin.dhclient    usr.lib.libreoffice.program.soffice.bin  usr.sbin.rsyslogd
usr.bin.evince   usr.lib.libreoffice.program.xpdfimport
usr.bin.man      usr.lib.snapd.snap-confine.real

/etc/apparmor.d/tunables:
alias       etc     home.d      multiarch.d  securityfs  xdg-user-dirs
apparmorfs  global  kernelvars  proc         share       xdg-user-dirs.d
dovecot     home    multiarch   run          sys

Les profils ici ont une syntaxe de dénomination. Par exemple, un profil pour r /usr/bin/man sera situé dans /etc/apparmor.d/usr.bin.man.

Les profils désactivés se trouvent sous « /etc/apparmor.d/disable »

$ ls /etc/apparmor.d/disable/*
/etc/apparmor.d/disable/usr.sbin.rsyslogd

3. Activer/Désactiver les profils AppArmor

Bien qu'AppArmor vous permette d'avoir plusieurs profils, ils sont activés ou désactivés individuellement. Pour activer ou désactiver un profil, vous devez installer apparmor-utils

Commencez par mettre à jour et mettre à niveau votre système pour éviter les erreurs « Défaut de segmentation ».

sudo apt update && sudo apt upgrade -y

Installez maintenant l'utilitaire requis

sudo apt install apparmor-utils
  • Activer les profils AppArmor

Maintenant, continuez et activez un profil désactivé à l'aide de la commande avec la syntaxe ci-dessous :

##Enable a Profile
sudo aa-enforce /path/to/profile

Par exemple, pour activer le profil Rsyslogd, nous pouvons exécuter :

$ sudo aa-enforce /etc/apparmor.d/usr.sbin.rsyslogd
Setting /etc/apparmor.d/usr.sbin.rsyslogd to enforce mode.

Un autre exemple d'activation du profil HTTPD.

sudo aa-enforce /usr/sbin/httpd
  • Désactiver les profils AppArmor

Pour désactiver un profil, il vous suffit de le passer en mode réclamation en utilisant :

sudo aa-complain /path/to/profile

Par exemple:

sudo aa-complain /etc/apparmor.d/usr.sbin.rsyslogd
##OR
sudo aa-complain /usr/sbin/httpd

4. Création de profils AppArmor

AppArmor permet aux utilisateurs de créer leurs profils personnalisés pour protéger les applications. Le profil comporte généralement plusieurs configurations et variables pour votre application. AppArmor élimine les tracas en vous permettant de démarrer à partir d'un modèle ou de manière interactive.

Pour la méthode interactive, il inspecte les actions effectuées par le binaire et vous permet de décider des actions que vous souhaitez, si elles doivent être refusées ou autorisées.

Pour y parvenir, vous émettez une commande avec la syntaxe ci-dessous :

sudo aa-genprof /path/to/binary

Par exemple:

sudo aa-genprof /usr/bin/scp

Exemple de sortie :

Updating AppArmor profiles in /etc/apparmor.d.
Writing updated profile for /usr/bin/scp.
Setting /usr/bin/scp to complain mode.

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/scp

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

Ouvrez maintenant un terminal séparé et effectuez toutes les actions que le binaire peut effectuer. Par exemple:

scp ~/test remote_user@remote_IP:~/

Après avoir effectué la tâche, appuyez sur S dans la fenêtre de profilage AppArmor. Dans les actions enregistrées, définissez s'il faut ignorer, autoriser, etc.

[(S)can system log for AppArmor events] / (F)inish
Reading log entries from /var/log/syslog.

Profile:  /usr/bin/scp
Execute:  /usr/bin/ssh
Severity: unknown

(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish

Une fois terminé, appuyez sur « S » pour enregistrer les modifications.

The following local profiles were changed. Would you like to save them?

 [1 - /usr/bin/scp]
(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t

Maintenant, appuyez sur « f » et le profil sera enregistré sous /etc/apparmor.d/path.to.binary. (/etc/apparmor.d/usr.bin.scp pour ce cas)

$ cat /etc/apparmor.d/usr.bin.scp
# Last Modified: Fri Sep 29 14:14:11 2023
#include <tunables/global>

/usr/bin/scp flags=(complain) {
  #include <abstractions/base>

  deny /usr/bin/ssh x,
  deny owner /home/*/mysql-community-client_8.1.0-1ubuntu22.04_amd64.deb r,

  /usr/bin/scp mr,

}

Ci-dessus se trouve l'exemple de profil AppArmor que j'ai créé pour SCP.

Créer un profil à partir d'un modèle

Vous pouvez créer un squelette du profil de l'application. Commencez par installer le package requis :

sudo apt install apparmor-easyprof

Créez maintenant le modèle avec la commande :

sudo aa-easyprof /path/to/binary

Exemple de sortie :

# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###

#include <tunables/global>

# No template variables specified

"/path/to/binary" {
  #include <abstractions/base>

  # No abstractions specified

  # No policy groups specified

  # No read paths specified

  # No write paths specified
}

Vous pouvez ensuite continuer et modifier le profil comme vous le souhaitez.

Pour appliquer le profil, utilisez :

sudo apparmor_parser -a /etc/apparmor.d/profile.name

Il existe de nombreuses autres commandes pour gérer les profils AppArmor :

#Load a new profile in complain mode
sudo apparmor_parser -C /etc/apparmor.d/profile.name 

#Replace existing profile
sudo apparmor_parser -r /etc/apparmor.d/profile.name 

 #Remove profile
sudo apparmor_parser -R /etc/apparmor.d/profile.name

5. Modification d'un profil à partir des journaux

Il est également possible de modifier un profil à partir des logs. L'outil lit les journaux et vous demande si vous souhaitez autoriser certaines des actions interdites. Pour y parvenir, utilisez :

sudo aa-logprof

Vous pouvez ensuite naviguer à l'aide des touches fléchées et sélectionner le profil souhaité.

6. Afficher les journaux

Vous pouvez afficher les journaux AUDIT et DENIED à partir de /var/log/audit/audit.log. Installez le package requis :

sudo apt install apparmor-notify

Continuez et affichez les journaux :

sudo aa-notify -s 1 -v

Exemple de sortie :

Il existe d'autres options que vous pouvez utiliser, vérifiez avec la commande :

$ aa-notify -h
USAGE: aa-notify [OPTIONS]

Display AppArmor notifications or messages for DENIED entries.

OPTIONS:
  -p, --poll			poll AppArmor logs and display notifications
  --display $DISPLAY		set the DISPLAY environment variable to $DISPLAY
				(might be needed if sudo resets $DISPLAY)
  -f FILE, --file=FILE		search FILE for AppArmor messages
  -l, --since-last		display stats since last login
  -s NUM, --since-days=NUM	show stats for last NUM days (can be used alone
				or with -p)
  -v, --verbose			show messages with stats
  -h, --help			display this help
  -u USER, --user=USER		user to drop privileges to when not using sudo
  -w NUM, --wait=NUM		wait NUM seconds before displaying
				notifications (with -p)

7. Gérer le service AppArmor

Le service AppArmor peut être géré comme n’importe quel autre service système. Pour arrêter l'exécution du service :

sudo systemctl stop apparmor

Pour redémarrer le service :

sudo systemctl restart apparmor

Vérifiez l'état du service :

$ systemctl status apparmor
 apparmor.service - Load AppArmor profiles
     Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2023-09-29 15:44:32 EAT; 3s ago
       Docs: man:apparmor(7)
             https://gitlab.com/apparmor/apparmor/wikis/home/
    Process: 66332 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, status=0/SUC>
   Main PID: 66332 (code=exited, status=0/SUCCESS)

Ful 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 systemd[1]: Starting Load AppArmor profiles>
Ful 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 apparmor.systemd[66332]: Restarting AppArmor
.....

Dernières pensées

Cela marque la fin de ce guide sur l'aide-mémoire AppArmor pour les administrateurs système Linux. Il existe plusieurs autres commandes et aide-mémoire qui ne sont pas couvertes ici, n'hésitez pas à les partager dans les commentaires ci-dessous.

En savoir plus :

  • Aide-mémoire Kubectl pour les administrateurs Kubernetes et la préparation aux examens CKA
  • Aide-mémoire de stockage Stratis – guide de référence
  • Aide-mémoire Ansible Vault/Guide de référence

Articles connexes: