3.5. Deux méthodes de réalisation de profils

Étant donné la syntaxe des profils Novell AppArmor à la Section 3.1, « Composants et syntaxe des profils » (↑Guide d'administration de Novell AppArmor 2.0), vous pouvez créer des profils sans utiliser les outils. Toutefois, cela suppose des efforts importants. Pour éviter de telles complications, utilisez les outils de Novell AppArmor pour automatiser la création et le réglage des profils.

Il existe deux approches pour créer des profils Novell AppArmor, ainsi que les outils correspondants.

Profil autonome

Méthode adaptée à la réalisation de profils pour de petites applications ayant un temps d'exécution fini, par exemple les applications clientes d'un utilisateur telles que les clients de messagerie. Pour plus d'informations, reportez-vous à Section 3.5.1, « Profil autonome » (↑Guide d'administration de Novell AppArmor 2.0).

Profil systémique

Méthode adaptée à la réalisation de profils pour un grand nombre de programmes simultanément et pour la réalisation de profils pour des applications pouvant s'exécuter pendant des jours, des semaines ou en continu au fil des redémarrages, telles que des applications de serveur réseau comme les serveurs Web et les serveurs de messagerie. Pour plus d'informations, reportez-vous à Section 3.5.2, « Profil systémique » (↑Guide d'administration de Novell AppArmor 2.0).

Le développement automatisé de profils devient plus facile à gérer avec les outils de Novell AppArmor :

  1. Choisissez la méthode de réalisation de profils la mieux adaptée à vos besoins.

  2. Effectuez une analyse statique. Exécutez genprof ou autodep, selon la méthode choisie.

  3. Activez l'apprentissage dynamique. Activez le mode apprentissage pour tous les programmes profilés.

3.5.1. Profil autonome

La génération et l'amélioration de profils autonomes sont gérées par un programme nommé genprof. Cette méthode est simple car genprof s'occupe de tout, mais elle est limitée car elle nécessite que genprof fonctionne pendant toute la durée du cycle de test de votre programme (vous ne pouvez pas redémarrer la machine tandis que vous développez votre profil).

Pour utiliser genprof avec la méthode autonome de réalisation de profils, reportez-vous à Section 3.5.3.4, « genprof » (↑Guide d'administration de Novell AppArmor 2.0).

3.5.2. Profil systémique

Cette méthode se nomme profil systémique car elle met à jour tous les profils du système simultanément, sans se concentrer sur un seul ou sur les quelques profils visés par genprof ou par le profil autonome.

Avec le profil systémique, la création et l'amélioration des profils sont moins automatisées, mais sont plus souples. Cette méthode est adaptée à la réalisation de profils pour les applications d'exécution longue dont le comportement se poursuit après le redémarrage ou pour profiler simultanément un grand nombre de programmes.

La création d'un profil Novell AppArmor pour un groupe d'applications s'effectue de la façon suivante :

  1. Créez des profils pour les programmes individuels qui constituent votre application.  Bien que cette approche soit systémique, Novell AppArmor ne surveille que les programmes ayant des profils et leurs enfants. Ainsi, pour que Novell AppArmor considère un programme, vous devez au moins laisser autodep lui créer un profil approximatif. Pour créer ce profil approximatif, reportez-vous à Section 3.5.3.1, « autodep » (↑Guide d'administration de Novell AppArmor 2.0).

  2. Placez les profils concernés en mode apprentissage ou réclamation.  Activez le mode apprentissage ou réclamation pour tous les programmes profilés en entrant complain /etc/apparmor.d/* dans une fenêtre de terminal en étant logué en tant que root.

    En mode apprentissage, les demandes d'accès ne sont pas bloquées même si le profil indique qu'elles doivent l'être. Cela permet d'exécuter plusieurs tests (comme indiqué à l'Étape 3 (↑Guide d'administration de Novell AppArmor 2.0)) et d'apprendre les besoins d'accès du programme pour qu'il fonctionne correctement. Avec ces informations, vous pouvez décider du niveau de sécurité à appliquer au profil.

    Reportez-vous à Section 3.5.3.2, « Mode réclamation ou apprentissage » (↑Guide d'administration de Novell AppArmor 2.0) pour des instructions plus détaillées sur l'utilisation du mode apprentissage ou réclamation.

  3. Exercez votre application.  Exécutez votre application et exercez ses fonctionnalités. Vous devez décider de la durée d'exercice du programme, mais le programme doit accéder à chaque fichier correspondant à ses besoins. Du fait que l'exécution n'est pas supervisée par genprof, cette étape peut se poursuivre pendant des jours et des semaines et peut s'étendre sur des redémarrages complets du système.

  4. Analysez le journal.  Dans les profils systémiques, exécutez logprof directement au lieu de laisser genprof l'exécuter (comme dans les profils autonomes). La forme générale de logprof est la suivante :

    logprof [ -d /path/to/profiles ] [ -f /path/to/logfile ]

    Pour plus d'informations sur l'utilisation de logprof, reportez-vous à Section 3.5.3.5, « logprof » (↑Guide d'administration de Novell AppArmor 2.0).

  5. Répétez les étapes 3-4.  Cela génère des profils optimisés. Une approche itérative capture des jeux de données plus petits qui peuvent être entraînés et rechargés dans le moteur de stratégie. Des itérations successives génèrent un moins grand nombre de messages et s'exécutent plus rapidement.

  6. Modifiez les profils.  Vous pouvez examiner tous les profils générés. Vous pouvez ouvrir et modifier les profils dans /etc/apparmor.d/ à l'aide de vim. Pour obtenir de l'aide quant à l'utilisation optimale de vim, reportez-vous à Section 3.5.3.8, « apparmor.vim » (↑Guide d'administration de Novell AppArmor 2.0).

  7. Revenez en mode « imposition ».  Le système se remet alors à imposer les règles des profils sans se contenter de consigner des informations. Cela peut s'effectuer manuellement en supprimant le texte flags=(complain) des profils ou automatiquement en utilisant la commande imposition, qui fonctionne de façon identique à la commande réclamation mais qui définit les profils en mode imposition.

    Pour vous assurer que tous les profils sont sortis du mode réclamation et placés en mode imposition, entrez enforce /etc/apparmor.d/*.

  8. Analysez de nouveau tous les profils.  Pour que Novell AppArmor analyse de nouveau tous les profils et change le mode d'imposition dans le noyau, entrez /etc/init.d/apparmor restart.

3.5.3. Résumé des outils de réalisation de profils

Tous les utilitaires de profil de Novell AppArmor sont fournis dans le paquetage RPM apparmor-utils. La plupart est stockée dans /usr/sbin. Les sections qui suivent présentent chaque outil.

3.5.3.1. autodep

Cela crée un profil approximatif pour le programme ou l'application à laquelle vous appliquez la commande autodep. Vous pouvez générer des profils approximatifs pour les exécutables binaires et les programmes de script interprétés. Le profil résultant est nommé « approximatif » car il ne contient pas nécessairement toutes les entrées du profil dont le programme a besoin pour être confiné correctement par Novell AppArmor. Le profil approximatif autodep minimum a au moins une directive de base include, contenant les entrées de profil de base dont la plupart des programmes ont besoin. Pour certains types de programmes, autodep génère un profil plus développé. Le profil est généré en appelant de façon récursive ldd(1) sur les exécutables apparaissant sur la ligne de commande.

Pour générer un profil approximatif, utilisez le programme autodep. L'argument du programme peut être le simple nom du programme, qu'autodep trouve en cherchant dans la variable de chemin de votre shell, ou un chemin complet. Le programme lui-même peut être de n'importe quel type (fichier binaire ELF, script de shell, script Perl, etc.). autodep génère un profil approximatif qui sera amélioré par le profil dynamique qui suivra.

Le profil approximatif qui en résulte est écrit dans le répertoire /etc/apparmor.d et utilise la convention de nom de profil de Novell AppArmor pour nommer le profil d'après le chemin absolu du programme, en replaçant les barres obliques (/) du chemin par des points (.). La forme générale d'autodep consiste à entrer ce qui suit dans une fenêtre de terminal en étant logué en tant que root :

autodep [ -d /path/to/profiles ] [program1 program2...]

Si vous n'entrez pas le ou les noms des programmes, vous êtes invité à le faire. /path/to/profiles remplace l'emplacement par défaut /etc/apparmor.d.

Pour commencer la réalisation de profils, vous devez créer des profils pour chaque service exécutable principal qui fait partie de votre application (tout ce qui peut démarrer sans être un enfant d'un autre programme ayant déjà un profil). La recherche de ce type de programme dépend de l'application en question. Il existe plusieurs stratégies pour rechercher ces programmes :

Répertoires

Si tous les programmes que vous voulez profiler se trouvent dans un répertoire et s'il n'existe aucun autre programme dans celui-ci, la simple commande autodep /path/to/your/programs/* crée des profils nominaux pour tous les programmes de ce répertoire.

commande ps

Vous pouvez exécuter votre application et utiliser la commande ps standard de Linux pour rechercher tous les processus en cours d'exécution. Vous devez ensuite dénicher manuellement l'emplacement de ces programmes et exécuter le programme autodep pour chacun d'entre eux. Si ces programmes se trouvent dans votre chemin, autodep les trouve automatiquement. S'ils ne se trouvent pas dans votre chemin, la commande locate standard de Linux peut vous aider à les trouver. Si locate ne fonctionne pas (elle n'est pas installée par défaut sur SUSE Linux), utilisez find . -name '*foo*' -print.

3.5.3.2. Mode réclamation ou apprentissage

L'outil de mode réclamation ou apprentissage détecte les violations des règles de profil Novell AppArmor, telles que l'accès non autorisé à des fichiers par les programmes profilés. Les violations sont autorisées, mais elles sont également consignées. Pour améliorer le profil, activez le mode réclamation, exécutez une série de tests sur le programme pour générer des événements de journal qui caractérisent les besoins d'accès du programme, puis effectuez le post-traitement du journal à l'aide des outils de Novell AppArmor pour transformer les événements de ce journal en profils améliorés.

L'activation manuelle du mode réclamation (par la ligne de commande) ajoute une balise en haut du profil pour transformer /bin/foo en /bin/foo flags=(complain). Pour utiliser le mode réclamation, ouvrez une fenêtre de terminal et entrez l'une des lignes suivantes en tant qu'utilisateur root.

  • Si l'exemple de programme (programme1) se trouve dans votre chemin, utilisez :

    complain [program1 program2 ...]
  • Si le programme ne se trouve pas dans votre chemin, spécifiez le chemin complet de la façon suivante :

    complain /sbin/program1
    
  • Si les profils ne se trouvent pas dans /etc/apparmor.d, entrez ce qui suit pour remplacer l'emplacement par défaut :

    complain /path/to/profiles/ program1
         
  • Spécifiez le profil de program1, de la façon suivante :

    complain /etc/apparmor.d/sbin.program1

Chacune des commandes ci-dessus active le mode réclamation pour les profils/programmes de la liste. La commande peut afficher des programmes ou des profils. Si le nom du programme ne comporte pas son chemin complet, la réclamation recherche $PATH pour le programme. Ainsi, par exemple, complain /usr/sbin/* recherche les profils associés à tous les programmes de /usr/sbin et les place en mode réclamation, et complain /etc/apparmor.d/* place tous les profils de /etc/apparmor.d en mode réclamation.

3.5.3.3. Mode imposition

L'outil de mode imposition détecte les violations des règles de profil Novell AppArmor, telles que l'accès non autorisé à des fichiers par les programmes profilés. Les violations sont consignées et ne sont pas autorisées. Par défaut, le mode imposition est activé. Activez le mode imposition lorsque vous voulez que les profils Novell AppArmor contrôlent l'accès du programme profilé. Le mode imposition bascule avec le mode réclamation.

L'activation manuelle du mode imposition (par la ligne de commande) ajoute une balise en haut du profil pour transformer /bin/foo en /bin/foo flags=(enforce). Pour utiliser le mode imposition, ouvrez une fenêtre de terminal et entrez l'une des lignes suivantes en tant qu'utilisateur root.

  • Si l'exemple de programme (programme1) se trouve dans votre chemin, utilisez :

    enforce [program1 program2 ...]
  • Si le programme ne se trouve pas dans votre chemin, spécifiez le chemin complet de la façon suivante :

    enforce /sbin/program1
  • Si les profils ne se trouvent pas dans /etc/apparmor.d, entrez ce qui suit pour remplacer l'emplacement par défaut :

    enforce /path/to/profiles/ program1
  • Spécifiez le profil de program1, de la façon suivante :

    enforce /etc/apparmor.d/sbin.program1

Chacune des commandes ci-dessus active le mode imposition pour les profils et programmes de la liste.

Si vous n'entrez pas les noms du programme ou du profil, vous êtes invité à le faire. /path/to/profiles remplace l'emplacement par défaut /etc/apparmor.d.

L'argument peut être une liste de programmes ou une liste de profils. Si le nom du programme ne comporte pas son chemin complet, l'imposition recherche $PATH pour le programme. Ainsi, par exemple, enforce /usr/sbin/* recherche les profils associés à tous les programmes de /usr/sbin et les place en mode imposition. enforce /etc/apparmor.d/* place tous les profils de /etc/apparmor.d en mode imposition.

3.5.3.4. genprof

genprof (générer un profil) est l'utilitaire de génération de profil de Novell AppArmor. Il exécute autodep sur le programme spécifié en créant un profil approximatif (s'il n'en a pas encore), le définit en mode réclamation, le recharge dans Novell AppArmor, marque le journal du système et invite l'utilisateur à exécuter le programme et à en exercer les fonctionnalités. Sa syntaxe est la suivante :

genprof [ -d /path/to/profiles ]  program

Si vous vouliez créer un profil pour le programme httpd2-prefork du serveur Web Apache, vous procéderiez de la façon suivante dans un shell root :

  1. Entrez rcapache2 stop.

  2. Entrez ensuite genprof httpd2-prefork.

    À présent, genprof effectue l'opération suivante :

    • Il résout le chemin complet de httpd2-prefork selon les variables de chemin de votre shell. Vous pouvez également indiquer un chemin complet. Sur SUSE Linux, le chemin complet est /usr/sbin/httpd2-prefork.

    • Vérifie s'il existe un profil pour httpd2-prefork. S'il en existe un, il est mis à jour. Sinon, il en crée un en utilisant le programme autodep décrit à la Section 3.5.3, « Résumé des outils de réalisation de profils » (↑Guide d'administration de Novell AppArmor 2.0).

      [Note]Remarque

      Il existe une convention de nom qui relie le chemin complet d'un programme au nom de fichier de son profil de sorte que les différents outils de profil de Novell AppArmor puissent les manipuler avec de façon cohérente. La convention consiste à remplacer une barre oblique (/) par un point (.) afin que le profil de /usr/sbin/httpd2-prefork soit stocké dans /etc/apparmor.d/usr.sbin.httpd2-prefork.

    • Place le profil de ce programme en mode apprentissage ou réclamation afin que les violations soient consignées mais ne soient pas autorisées à se poursuivre. Un journal des événements ressemble à ceci :

      Oct  9 15:40:31 AppArmor: PERMITTING r access to /etc/apache2/httpd.conf (httpd2-prefork(6068) profile /usr/sbin/httpd2-prefork active /usr/sbin/httpd2-prefork)
    • Marque le journal du système avec un marqueur du début des événements du journal à prendre en considération. Exemple :

      Sep 13 17:48:52 h2o root: GenProf: e2ff78636296f16d0b5301209a04430d
  3. Lorsque vous y êtes invité par l'outil, exécutez l'application à profiler dans une autre fenêtre de terminal et utilisez le plus grand nombre possible de fonctions de l'application afin que le mode apprentissage puisse consigner les fichiers et les répertoires auxquels le programme doit accéder pour fonctionner correctement. Par exemple, entrez rcapache2 start dans une fenêtre de terminal.

  4. Sélectionnez parmi les options suivantes celles qui peuvent être utilisées après avoir exécuté les fonctionnalités du programme :

    • S exécute logprof par rapport au journal du système à partir d'où il a été marqué lorsque genprof a démarré, et recharge le profil.

      Si le journal contient des événements du système, Novell AppArmor analyse les fichiers journaux du mode apprentissage. Cela génère une série de questions auxquelles vous devez répondre pour guider genprof dans la génération du profil de sécurité.

    • F quitte l'outil et retourne au menu principal.

  5. Répondez à deux types de questions :

    Chacune de ces catégories se traduit par une série de questions auxquelles vous devez répondre pour ajouter la ressource ou le programme au profil. Les deux figures suivantes montrent un exemple de chaque cas. Les étapes suivantes décrivent vos options pour répondre à ces questions.

    Exemple 3.1. Exception du mode apprentissage : contrôle de l'accès aux ressources spécifiques

    Reading log entries from /var/log/messages.
    Mise à jour des profils apparmor dans /etc/apparmor.d.
    
    Profile: /usr/sbin/xinetd
    Execute: /usr/sbin/vsftpd
    
    [(I)nherit] / (P)rofile / (U)nconfined / (D)eny / Abo(r)t / (F)inish)
    

    La gestion des accès en exécution est complexe. Vous devez décider laquelle des trois sortes d'autorisations en exécution accorder au programme :

    inherit (ix)

    L'enfant hérite du profil du parent et s'exécute avec les mêmes contrôles d'accès que le parent. Ce mode est pratique lorsqu'un programme confiné doit appeler un autre programme confiné sans obtenir les autorisations du profil de la cible ou perdre les autorisations du profil courant. Ce mode est souvent utilisé lorsqu'un programme enfant est une application d'assistance, telle que le client /usr/bin/mail utilisant le programme less en tant que radiomessagerie ou le navigateur Web Mozilla utilisant le programme Acrobat pour afficher les fichiers PDF.

    profile (px)

    L'enfant s'exécute en utilisant son propre profil, qui doit être chargé dans le noyau. Si le profil n'est pas présent, les tentatives d'exécuter l'enfant échouent avec un refus d'autorisation. Cela est très pratique si le programme parent appelle un service global, tel que la recherche DNS ou l'envoi de messages via le MTA du système.

    unconfined (ux)

    L'enfant s'exécute entièrement non confiné, sans aucun profil Novell AppArmor appliqué à la ressource exécutée.

    Exemple 3.2. Exception du mode apprentissage : définition des autorisations d'exécution pour une entrée

    Adding /bin/ps ix to profile.
    
    Profile:  /usr/sbin/xinetd
    Path:     /etc/hosts.allow
    New Mode: r
    
     [1 - /etc/hosts.allow]
    
    [(A)llow] / (D)eny / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish
    

    Le menu ci-dessus montre les entrées suggérées de chemin de répertoire de Novell AppArmor auxquelles l'application que vous profilez a accédé. Vous devrez peut-être définir des autorisations en exécution pour les entrées.

    Novell AppArmor fournit un ou plusieurs noms de chemins ou instructions include. Cliquez sur le numéro de l'option pour sélectionner une ou plusieurs des options suivantes, puis passez à l'étape suivante.

    [Note]Remarque

    Le menu de Novell AppArmor ne contient pas toujours toutes ces options.

    #include

    Section d'un profil Novell AppArmor qui fait référence à un fichier include, et qui obtient les droits d'accès des programmes. Grâce à l'utilisation d'include, vous pouvez donner l'accès du programme à des chemins de répertoire ou à des fichiers qui sont également requis par d'autres programmes. Include peut également réduire la taille d'un profil. Il est conseillé de sélectionner des includes si la suggestion vous en est faite.

    Version générique

    L'accès s'effectue en cliquant sur Glob comme indiqué à l'étape suivante. Pour plus d'informations sur la syntaxe générique, reportez-vous à la Section 3.6, « Noms de chemin et syntaxe générique » (↑Guide d'administration de Novell AppArmor 2.0).

    Nom de chemin réel

    Chemin littéral auquel le programme doit accéder pour fonctionner correctement.

  6. Après avoir sélectionné un nom de chemin ou une instruction include, vous pouvez le traiter comme une entrée dans le profil Novell AppArmor en cliquant sur Autoriser ou sur Refuser. Si l'entrée du chemin de répertoire affichée ne vous satisfait pas, vous pouvez également lui appliquer l'option Glob ou Modifier.

    Les options suivantes permettent de traiter les entrées du mode apprentissage et de créer le profil :

    Appuyez sur Entrée

    Permet l'accès au chemin du répertoire sélectionné.

    Autoriser

    Permet l'accès aux entrées du chemin du répertoire spécifiées. Novell AppArmor suggère l'autorisation d'accès du fichier. Pour plus d'informations, reportez-vous à Section 3.7, « Modes d'autorisation d'accès aux fichiers » (↑Guide d'administration de Novell AppArmor 2.0)

    Refuser

    Empêche le programme d'accéder aux entrées du chemin de répertoire spécifié. Novell AppArmor passe ensuite à l'événement suivant.

    Nouveau

    Vous invite à entrer votre propre règle pour cet événement et permet de spécifier la forme d'expression régulière que vous souhaitez. Si l'expression que vous entrez ne satisfait pas pleinement l'événement ayant occasionné la question, Novell AppArmor vous demande confirmation et vous laisse entrer de nouveau l'expression.

    Glob

    Lorsque vous cliquez sur cette option, le chemin du répertoire est modifié (à l'aide de caractères joker) pour inclure tous les fichiers du répertoire de l'entrée suggéré. Lorsque vous double-cliquez sur cette option, l'accès est accordé à tous les fichiers et sous-répertoires se trouvant au-dessous de celui qui est affiché.

    Pour plus d'informations sur la syntaxe générique, reportez-vous à la Section 3.6, « Noms de chemin et syntaxe générique » (↑Guide d'administration de Novell AppArmor 2.0).

    Glob avec (E)xt

    Cette option modifie le chemin de répertoire d'origine tout en conservant l'extension du nom de fichier. Par exemple, /etc/apache2/file.ext devient /etc/apache2/*.ext, en ajoutant le caractère joker (l'astérisque) à la place du nom de fichier. Cela permet au programme d'accéder à tous les fichiers du répertoire suggéré qui se terminent par l'extension .ext. Lorsque vous double-cliquez sur cette option, l'accès est accordé à tous les fichiers (ayant cette extension particulière) et sous-répertoires se trouvant au-dessous de celui qui est affiché.

    Édition

    Permet de modifier la ligne sélectionnée. La nouvelle ligne modifiée apparaît au bas de la liste.

    Interrompre

    Interrompt logprof en éliminant toutes les modifications de règle entrées jusque-là et sans modifier aucun des profils.

    Terminer

    Ferme logprof en enregistrant toutes les modifications de règle entrées jusque-là et en modifiant tous les profils.

  7. Pour afficher et modifier votre profil avec vim, entrez vim /etc/apparmor.d/profilename dans une fenêtre de terminal. Pour activer les couleurs de la syntaxe lorsque vous modifiez un profil Novell AppArmor dans vim, utilisez les commandes :syntax on puis :set syntax=apparmor. Pour plus d'informations sur vim et sur les couleurs de la syntaxe, reportez-vous à Section 3.5.3.8, « apparmor.vim » (↑Guide d'administration de Novell AppArmor 2.0).

3.5.3.5. logprof

logprof est un outil interactif utilisé pour vérifier la sortie du mode apprentissage ou réclamation trouvée dans les entrées du journal du système, puis générer de nouvelles entrées dans les profils de sécurité de Novell AppArmor.

Lorsque vous exécutez logprof, il commence à analyser les fichiers journaux produits en mode apprentissage ou réclamation. S'il existe de nouveaux événements de sécurité non couverts par l'ensemble de profils existant, il émet des suggestions pour modifier le profil. Le mode apprentissage ou réclamation suit le comportement des programmes et le consigne dans le journal du système. logprof utilise ces informations pour observer le comportement du programme.

Si un programme confiné duplique ou exécute un autre programme, logprof le voit et demande à l'utilisateur quel mode d'exécution doit être utilisé lors du lancement du processus enfant. Les modes d'exécution suivants sont des options de démarrage du processus enfant : ix, px et ux. S'il existe un profil séparé pour le processus enfant, la sélection par défaut est px. Sinon, la sélection par défaut du profil est ix. autodep est exécuté sur les processus enfants avec des profils séparés et ces processus sont chargés dans Novell AppArmor, s'il fonctionne.

Lorsque logprof se termine, les profils sont mis à jour avec les modifications. Si le module AppArmor fonctionne, les profils mis à jour sont rechargés. Si des processus ayant généré des événements de sécurité fonctionnent toujours dans le profil null-complain, ces processus sont définis pour s'exécuter sous leurs propres profils.

Pour exécuter logprof, entrez logprof dans une fenêtre de terminal en étant logué en tant que root. Les options suivantes peuvent également être utilisées pour logprof :

logprof -d /path/to/profile/directory/

Spécifie le chemin complet vers l'emplacement des profils si ceux-ci ne se trouvent pas dans le répertoire standard, /etc/apparmor.d/.

logprof -f /path/to/logfile/

Spécifie le chemin complet vers l'emplacement du fichier journal si celui-ci ne se trouve pas dans le répertoire par défaut, /var/log/messages.

logprof -m "string marker in logfile"

Marque le point de départ de la recherche de logprof dans le journal du système. logprof ignore tous les événements du journal du système avant la rencontre de la marque spécifiée. Si la marque contient des espaces, elle doit être encadrée de guillemets pour fonctionner correctement. Exemple : logprof -m e2ff78636296f16d0b5301209a04430d

logprof analyse le journal et vous demande comment gérer chaque événement consigné. Chaque question présente une liste numérotée de règles Novell AppArmor pouvant être ajoutées en cliquant sur le numéro correspondant.

Par défaut, logprof recherche les profils dans /etc/apparmor.d/ et analyse le journal dans /var/log/messages de sorte que, dans de nombreux cas, l'exécution de logprof en tant que root suffit pour créer le profil.

Toutefois, il peut arriver que vous deviez rechercher des fichiers journaux archivés, par exemple si la période d'exercice du programme dépasse la fenêtre de rotation du journal (lorsque le fichier journal est archivé et qu'un nouveau fichier journal démarre). Dans ce cas, vous pouvez entrer zcat -f `ls -1tr /var/log/messages*` | logprof -f -.

3.5.3.6. logprof - Exemple 1

Vous trouverez ci-après un exemple de la manière dont logprof gère l'accès httpd2-prefork au fichier /etc/group. Cet exemple utilise [] pour indiquer l'option par défaut.

Dans cet exemple, l'accès à /etc/group fait partie des services de nom d'accès httpd2-prefork. La réponse appropriée est 1, qui récupère un ensemble prédéfini de règles Novell AppArmor. La sélection de 1 pour appliquer #include au paquetage du service de nom résout toutes les futures questions concernant la recherche DNS et rend également le profil moins fragile. En effet, toute modification de la configuration DNS et du paquetage de profil de nom de service associé peut être réalisée en une seule fois, évitant ainsi de mettre à jour un grand nombre de profils.

Profile:  /usr/sbin/httpd2-prefork
Path:     /etc/group
New Mode: r

[1 - #include <abstractions/nameservice>]
 2 - /etc/group
[(A)llow] / (D)eny / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish

Sélectionnez l'une des réponses suivantes :

Appuyez sur Entrée

Permet l'accès au chemin du répertoire sélectionné.

Autoriser

Permet l'accès aux entrées du chemin du répertoire spécifiées. Novell AppArmor suggère l'autorisation d'accès du fichier. Pour plus d'informations sur ce point, reportez-vous à la Section 3.7, « Modes d'autorisation d'accès aux fichiers » (↑Guide d'administration de Novell AppArmor 2.0).

Refuser

Empêche le programme d'accéder aux entrées du chemin de répertoire spécifié. Novell AppArmor passe ensuite à l'événement suivant.

Nouveau

Vous invite à entrer votre propre règle pour cet événement et permet de spécifier la forme d'expression régulière que vous souhaitez. Si l'expression que vous entrez ne satisfait pas pleinement l'événement ayant occasionné la question, Novell AppArmor vous demande confirmation et vous laisse entrer de nouveau l'expression.

Glob

Lorsque vous cliquez sur cette option, le chemin du répertoire est modifié (à l'aide de caractères joker) pour inclure tous les fichiers du répertoire de l'entrée suggéré. Lorsque vous double-cliquez sur cette option, l'accès est accordé à tous les fichiers et sous-répertoires se trouvant au-dessous de celui qui est affiché.

Pour plus d'informations sur la syntaxe générique, reportez-vous à la Section 3.6, « Noms de chemin et syntaxe générique » (↑Guide d'administration de Novell AppArmor 2.0).

Glob avec (E)xt

Cette option modifie le chemin de répertoire d'origine tout en conservant l'extension du nom de fichier. Par exemple, /etc/apache2/file.ext devient /etc/apache2/*.ext, en ajoutant le caractère joker (l'astérisque) à la place du nom de fichier. Cela permet au programme d'accéder à tous les fichiers du répertoire suggéré qui se terminent par l'extension .ext. Lorsque vous double-cliquez sur cette option, l'accès est accordé à tous les fichiers (ayant cette extension particulière) et sous-répertoires se trouvant au-dessous de celui qui est affiché.

Édition

Permet de modifier la ligne sélectionnée. La nouvelle ligne modifiée apparaît au bas de la liste.

Interrompre

Interrompt logprof en éliminant toutes les modifications de règle entrées jusque-là et sans modifier aucun des profils.

Terminer

Ferme logprof en enregistrant toutes les modifications de règle entrées jusque-là et en modifiant tous les profils.

3.5.3.7. logprof - Exemple 2

Dans un exemple de profil vsftpd, nous voyons la question :

Profile:  /usr/sbin/vsftpd
Path:     /y2k.jpg
New Mode: r

[1 - /y2k.jpg]

(A)llow / [(D)eny] / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish

Plusieurs éléments intéressants apparaissent dans cette question. En premier lieu, notez que vsftpd demande une entrée de chemin en haut de l'arborescence, bien que vsftpd sur SUSE Linux serve les fichiers FTP à partir de /srv/ftp par défaut. En effet, httpd2-prefork utilise chroot et, pour la partie du code qui se trouve à l'intérieur du chroot jail, Novell AppArmor voit les accès au fichier en termes d'environnement chroot et non comme le chemin global absolu.

Le second élément intéressant est que vous pouvez accorder l'accès en lecture FTP à tous les fichiers JPEG du répertoire, de sorte que vous pouvez utiliser Glob w/Ext ainsi que le chemin suggéré /*.jpg. Cela a pour effet de réduire toutes les règles précédentes accordant l'accès à des fichiers .jpg individuels et prévient toute future question relative à l'accès à ces fichiers.

Enfin, vous pouvez accorder un accès plus général aux fichiers FTP. Si vous sélectionnez Glob dans la dernière entrée, logprof remplace le chemin suggéré /y2k.jpg par /*. Il se peut que vous souhaitiez accorder un accès encore plus large à l'ensemble de l'arborescence du répertoire. Dans ce cas, vous pouvez utiliser l'option de chemin Nouveau et entrer /**.jpg (qui donne accès à tous les fichiers .jpg de l'ensemble de l'arborescence du répertoire) ou /** (qui donne accès à tous les fichiers de l'arborescence du répertoire).

Les points ci-dessus traitent des accès en lecture. Les accès en écriture sont similaires, si ce n'est qu'il est judicieux d'être plus prudent dans l'utilisation des expressions régulières.

La gestion des accès en exécution est plus complexe. Vous devez décider laquelle des trois sortes d'autorisations en exécution accorder :

Inherit (ix)

L'enfant hérite du profil du parent et s'exécute avec les mêmes contrôles d'accès que le parent. Ce mode est pratique lorsqu'un programme confiné doit appeler un autre programme confiné sans obtenir les autorisations du profil de la cible ou perdre les autorisations du profil courant. Ce mode est souvent utilisé lorsqu'un programme enfant est une application d'assistance, telle que le client /usr/bin/mail utilisant le programme less en tant que radiomessagerie ou le navigateur Web Mozilla utilisant le programme Acrobat pour afficher les fichiers PDF.

profile (px)

L'enfant s'exécute en utilisant son propre profil, qui doit être chargé dans le noyau. Si le profil n'est pas présent, les tentatives d'exécuter l'enfant échouent avec un refus d'autorisation. Cela est très pratique si le programme parent appelle un service global, tel que la recherche DNS ou l'envoi de messages via le MTA du système.

unconfined (ux)

L'enfant s'exécute entièrement non confiné, sans aucun profil Novell AppArmor appliqué à la ressource exécutée.

Dans l'exemple suivant, le client de messagerie /usr/bin/mail est profilé et logprof a découvert que /usr/bin/mail exécute /usr/bin/less en tant qu'application d'assistance pour « envoyer par radiomessagerie » de longs messages. C'est pourquoi il présente cette invite :

/usr/bin/nail -> /usr/bin/less
(I)nherit / (P)rofile / (U)nconstrained / (D)eny
[Tip]Astuce

Le fichier exécutable réel pour /usr/bin/mail est /usr/bin/nail, ce qui n'est pas une erreur typographique.

Le programme /usr/bin/less est simple pour faire défiler le texte plus long qu'un écran. C'est pourquoi /usr/bin/mail l'utilise. Toutefois, less est en fait un programme important et puissant qui utilise un grand nombre d'autres applications d'assistance, telles que tar et rpm.

[Tip]Astuce

Exécutez less sur un tarball ou un fichier RPM. Vous pouvez alors afficher l'inventaire de ces conteneurs.

Vous ne souhaitez pas exécuter rpm automatiquement lorsque vous lisez des messages électroniques (ceci conduit directement à des attaques virales de style Microsoft* Outlook, car rpm a le pouvoir d'installer et de modifier les programmes du système). Dans ce cas, le meilleur choix consiste donc à utiliser Inherit. Cela se traduit par l'exécution du programme less à partir de ce contexte sous le profil de /usr/bin/mail. Cela a deux conséquences :

  • Vous devez ajouter tous les accès de base au fichier de /usr/bin/less au profil de /usr/bin/mail.

  • Vous pouvez éviter d'ajouter les applications d'assistance, telles que tar et rpm, au profil /usr/bin/mail de sorte que lorsque /usr/bin/mail exécute /usr/bin/mail/less dans ce contexte, le programme less est beaucoup moins dangereux que sans la protection de Novell AppArmor.

Dans d'autres circonstances, vous pourriez utiliser l'option Profile. Cela a deux effets sur logprof :

  • La règle écrite dans le profil est px, ce qui force la transition vers le profil de l'enfant.

  • logprof construit un profil pour l'enfant et commence à le créer, de la même manière qu'il crée le profil du parent, en imputant les événements du processus enfant au profil de ce dernier et en posant à l'utilisateur de logprof les questions ci-dessus.

Enfin, vous pouvez accorder au processus enfant un accès très puissant en spécifiant Non confiné. Cela écrit ux dans le profil du parent, de sorte que l'exécution de l'enfant s'effectue sans aucun profil Novell AppArmor appliqué. Cela implique une exécution sans aucune protection et ne doit être utilisé qu'en cas d'absolue nécessité.

3.5.3.8. apparmor.vim

Un fichier de couleur de syntaxe pour l'éditeur de texte vim souligne différentes fonctions d'un profil Novell AppArmor à l'aide de couleurs. Grâce à vim et au mode de syntaxe Novell AppArmor pour vim, vous pouvez afficher les implications sémantiques de vos profils par leur mise en couleur. Utilisez vim pour afficher et modifier votre profil en entrant vim dans une fenêtre de terminal.

Pour activer les couleurs de la syntaxe lorsque vous modifiez un profil Novell AppArmor dans vim, utilisez les commandes :syntax on puis :set syntax=apparmor. Vous pouvez également placer ces lignes dans votre fichier ~/.vimrc :

syntax on
set modeline
set modelines=5

Lorsque vous activez cette fonction, vim colorie automatiquement les lignes du profil :

Bleux

Lignes #include qui récupèrent d'autres règles et commentaires de Novell AppArmor commençant par #

Blanc

Lignes d'accès en lecture ordinaires

Brun

Instructions de fonction et balises de réclamation

Jaune

Lignes accordant l'accès en écriture

Vert

Lignes accordant l'accès en exécution (ix ou px)

Rouge

Lignes accordant l'accès non confiné (ux)

Fond rouge

Erreurs de syntaxe qui ne se chargent pas correctement dans les modules AppArmor

[Note]Remarque

Il existe un risque de sécurité lorsque vous utilisez ces lignes dans votre fichier .vimrc, car vim fait confiance au mode syntaxique présenté dans les fichiers que vous modifiez. Cela peut permettre à un attaquant de vous envoyer un fichier à ouvrir avec vim, susceptible d'être malveillant.

Utilisez les pages de manuel apparmor.vim et vim ainsi que la syntaxe :help au sein de l'éditeur vim pour obtenir de l'aide concernant la mise en évidence de la syntaxe. La syntaxe Novell AppArmor est stockée dans /usr/share/vim/current/syntax/apparmor.vim.

3.5.3.9. Non confiné

La commande Non confiné examine les ports réseau ouverts de votre système, les compare à l'ensemble de profils chargés sur votre système et signale les services réseau qui n'ont pas de profils Novell AppArmor. Elle nécessite des privilèges root et ne doit pas être confinée par un profil Novell AppArmor.

Non confiné doit être exécuté en tant que root pour récupérer le lien exécutable du processus à partir du système de fichiers proc. Ce programme est soumis aux conflits d'accès suivants :

  • Un exécutable sans lien est mal géré

  • Un exécutable ayant démarré avant qu'un profil Novell AppArmor ne soit chargé n'apparaît pas dans le résultat, bien qu'il soit exécuté sans confinement

  • Un processus qui s'éteint entre netstat(8) et des vérifications futures est mal géré

[Note]Remarque

Ce programme répertorie les processus utilisant TCP et UDP uniquement. En résumé, ce programme n'est pas adapté à une utilisation légale et n'est fourni que comme une aide pour profiler tous les processus accessibles en réseau dans le laboratoire.

Pour plus d'informations sur les aspects scientifiques et de sécurité de Novell AppArmor, reportez-vous aux articles suivants :

SubDomain: Parsimonious Server Security par Crispin Cowan, Steve Beattie, Greg Kroah-Hartman, Calton Pu, Perry Wagle et Virgil Gligor

Décrit la conception et l'implémentation initiales de Novell AppArmor. Publié dans les actes de la conférence USENIX LISA, en décembre 2000 à la Nouvelle-Orléans.

Cet article est désormais périmé, car il décrit une syntaxe et des fonctions différentes du produit Novell AppArmor actuel. Il ne doit être utilisé que comme arrière-plan scientifique et non comme documentation technique.

Defcon Capture the Flag: Defending Vulnerable Code from Intense Attack par Crispin Cowan, Seth Arnold, Steve Beattie, Chris Wright et John Viega

Un bon guide d'utilisation stratégique et tactique de Novell AppArmor pour résoudre de graves problèmes de sécurité dans un temps très court. Publié dans les actes de la conférence et de l'exposition DARPA Information Survivability (DISCEX III), en avril 2003 à Washington.