Comment créer un profil AppArmor pour Nginx sur Ubuntu 14.04

introduction

Un bon administrateur de serveur cherche de nouvelles vulnérabilités. Lorsque vous exécutez un serveur avec des ports ouverts au public, vous devez être obsédé par sa sécurité.

Malheureusement, même si vous suivez les derniers correctifs de sécurité pour vos applications et votre système d’exploitation, votre serveur peut toujours être vulnérable aux attaques «zero-day»: attaques ciblant des vulnérabilités inconnues dépourvues de correctifs. * AppArmor * est un module de noyau Linux qui agit comme un système de contrôle d’accès protégeant votre serveur de telles attaques. Ce module est disponible par défaut sur Ubuntu depuis la publication d’Ubuntu 8.04.

Lorsque AppArmor est actif pour une application, le système d’exploitation permet à l’application d’accéder uniquement aux fichiers et aux dossiers mentionnés dans son profil de sécurité. Ainsi, avec un profil de sécurité bien planifié, même si l’application est compromise lors d’une attaque, elle ne pourra pas faire beaucoup de dégâts.

Ce que couvre ce tutoriel

Dans ce didacticiel, nous allons créer un profil de sécurité AppArmor simple, qui est un fichier texte contenant les détails des autorisations pour * Nginx *, un serveur HTTP populaire.

Afin de démontrer le fonctionnement d’AppArmor, nous allons configurer Nginx pour qu’il serve les fichiers statiques à partir de deux répertoires: et, et configurons AppArmor pour limiter Nginx à.

Avec cette configuration, lorsque AppArmor est inactif, un utilisateur externe pourra accéder aux fichiers des deux répertoires. Lorsque AppArmor est actif, l’utilisateur ne pourra accéder qu’aux fichiers contenus dans.

Conditions préalables

Vous aurez besoin des éléments suivants:

  • * Ubuntu 14.04 * serveur

  • Un utilisateur sudo

Première étape - Installer Nginx

Utilisez pour mettre à jour votre serveur et installer Nginx:

sudo apt-get update
sudo apt-get install nginx

Votre serveur Nginx est maintenant opérationnel. Le serveur par défaut sera exécuté sur le port 80. Vous pouvez le tester dans un navigateur en consultant l’adresse IP de votre Droplet en tant qu’URL:. Vous devriez voir la page d’accueil par défaut de Nginx.

image: https: //assets.digitalocean.com/articles/AppArmor_Nginx/1.jpg [page d’accueil de Nginx]

Étape 2: Configurer Nginx pour servir des fichiers statiques

Créez les répertoires à partir desquels les fichiers statiques seront servis.

sudo mkdir -p /data/www/safe
sudo mkdir -p /data/www/unsafe

Ajouter un fichier au répertoire en utilisant:

sudo nano /data/www/safe/index.html

Laissez le fichier avoir le contenu suivant:

<html>
   <b>Hello! Accessing this file is allowed.</b>
</html>

De même, créez un autre fichier dans named, avec le contenu suivant:

<html>
   <b>Hello! Accessing this file is NOT allowed.</b>
</html>

Le fichier de configuration de Nginx se trouve à. Éditez ce fichier pour créer un nouveau serveur qui écoute sur le port et sert les fichiers à partir de. En ignorant les lignes commentées, après modification, votre fichier doit ressembler à celui illustré ci-dessous. Vous devrez ajouter un signe dièse pour commenter la ligne + include / etc / nginx / sites-enabled / *; +. Vous devrez également ajouter tout le bloc * server * indiqué en rouge ci-dessous:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
   worker_connections 768;
}

http {
   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;
   types_hash_max_size 2048;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;

   gzip on;
   gzip_disable "msie6";

   include /etc/nginx/conf.d/*.conf;







}

Enregistrez vos modifications et chargez la nouvelle configuration en exécutant la commande suivante:

sudo nginx -s reload

À ce stade, étant donné qu’AppArmor n’a pas encore été activé pour Nginx, vous devriez pouvoir accéder à la fois à et. La page de sécurité ressemble à ceci:

image: https: //assets.digitalocean.com/articles/AppArmor_Nginx/2.jpg [Safe Page]

La configuration de Nginx est maintenant terminée.

Troisième étape - Vérifier les profils AppArmor existants

Ubuntu 14.04 est livré avec quelques profils AppArmor préchargés. Installez-en plusieurs avec cette commande:

sudo apt-get install apparmor-profiles

Répertoriez tous les profils disponibles en exécutant cette commande:

sudo apparmor_status

Vous devriez voir pas mal de profils. Certains seront en mode d’application, d’autres en mode réclamation. Lorsque le profil d’une application est en mode * plainte *, AppArmor enregistre les activités de l’application sans la restreindre.

Une fois que vous avez quelque chose à enregistrer, vous trouverez les fichiers journaux du serveur Nginx dans le répertoire.

AppArmor restreint ce qu’une application peut faire uniquement lorsque son profil est en mode * d’application *.

Vous remarquerez également qu’il n’existe aucun profil pour le serveur Nginx. Nous en créerons un à la prochaine étape.

Quatrième étape - Créer un nouveau profil AppArmor pour Nginx

Installer Il s’agit d’un ensemble d’utilitaires qui vous aident à gérer AppArmor.

sudo apt-get install apparmor-utils

Vous êtes maintenant prêt à commencer à profiler les activités de Nginx. Utilisez la commande pour créer un nouveau profil vierge. Le profil sera créé dans.

cd /etc/apparmor.d/
sudo aa-autodep nginx

Une fois le profil créé, utilisez-le pour le mettre en mode réclamation.

sudo aa-complain nginx

Redémarrez Nginx.

sudo service nginx restart

Ouvrez un navigateur et visitez. Cela déclenchera les entrées normales pour accéder au site Web sécurisé à apparaître dans vos journaux Nginx.

Retournez au terminal. Nous allons maintenant utiliser un utilitaire AppArmor pour parcourir les journaux Nginx et approuver ou refuser chaque action trouvée.

sudo aa-logprof

Cette commande analyse les fichiers journaux et met à jour le profil AppArmor Nginx. Vous serez invité plusieurs fois à autoriser ou à refuser une capacité. En supposant que votre serveur ne subisse actuellement aucune attaque, vous pouvez appuyer sur * A * à chaque fois, car toutes les fonctionnalités demandées sont nécessaires au fonctionnement correct de Nginx. Enfin, lorsque vous êtes invité à enregistrer les modifications, appuyez sur * S *.

Ce processus général permettant d’activer AppArmor pour une nouvelle application est le suivant:

  • Créer un nouveau profil vierge pour l’application

  • Mettez-le en mode plainte

  • Effectuez des actions normales avec l’application pour que les entrées appropriées soient ajoutées aux journaux

  • Exécutez l’utilitaire AppArmor pour parcourir les journaux et approuver ou désapprouver diverses actions de l’application.

Étape 5: Modifier le profil AppArmor Nginx

Pour Nginx en particulier, vous devrez apporter des modifications au fichier généré automatiquement pour que celui-ci fonctionne correctement. Ouvrez le fichier + / etc / apparmor.d / usr.sbin.nginx + pour le modifier.

sudo nano /etc/apparmor.d/usr.sbin.nginx

Vous devez au moins apporter les modifications suivantes:

  • Ajoutez la ligne + # include <abstractions / apache2-common> + - oui, le signe dièse est intentionnel

  • Ajouter la ligne

  • Ajouter la ligne

  • Mettre à jour la ligne pour inclure tout le répertoire avec un astérisque (*)

  • Ajouter la ligne, y compris la virgule

  • Assurez-vous que Nginx peut écrire dans le journal des erreurs en définissant * w * pour

L’inclusion permet à Nginx d’écouter sur différents ports. Les nouvelles lignes * de capacité * permettent à Nginx de démarrer de nouveaux processus. La règle * deny * nous permet d’empêcher Nginx d’accéder au répertoire.

Un profil de travail ressemble à ceci:

#include <tunables/global>

/usr/sbin/nginx {

 #include <abstractions/base>
 #include <abstractions/nis>

 capability dac_override,
 capability dac_read_search,
 capability net_bind_service,



 /data/www/safe/ r,

 /etc/group r,
 /etc/nginx/conf.d/ r,
 /etc/nginx/mime.types r,
 /etc/nginx/nginx.conf r,
 /etc/nsswitch.conf r,
 /etc/passwd r,
 /etc/ssl/openssl.cnf r,
 /run/nginx.pid rw,
 /usr/sbin/nginx mr,
 /var/log/nginx/access.log w,
 /var/log/nginx/error.log ,
}

Votre profil peut paraître un peu différent, car il a été généré sur la base de votre fichier journal. C’est à vous de décider si vous préférez rechercher et mettre à jour des paramètres individuels, ou copier ce fichier en gros, avec les réserves d’usage concernant la prise en compte de votre propre environnement de serveur. Les autorisations d’AppArmor peuvent être délicates à obtenir, vous pouvez donc utiliser cet exemple de fichier et vos fichiers générés automatiquement comme points de départ, mais soyez prêt à effectuer un dépannage.

Le profil AppArmor Nginx est prêt. Utilisez le pour mettre le profil en mode respecté.

sudo aa-enforce nginx

Il est recommandé de recharger tous les profils et de redémarrer Nginx pour être sûr que les dernières modifications sont en vigueur. Tapez ce qui suit:

sudo /etc/init.d/apparmor reload
sudo service nginx restart

Si vous rencontrez des erreurs à l’une de ces étapes, lisez-les, revérifiez vos fichiers de configuration et vérifiez que vous êtes dans la bonne direction.

Vérifier le statut d’AppArmor:

sudo apparmor_status

Vous devriez voir les processus Nginx s’exécuter en mode imposé.

Retournez dans le navigateur et visitez. Vous devriez pouvoir voir la page. Alors visitez. Vous devriez voir une page d’erreur comme celle présentée ci-dessous. Cela prouve que notre profil fonctionne comme prévu.

image: https: //assets.digitalocean.com/articles/AppArmor_Nginx/3.jpg [Erreur interdite]

Dépannage

Si votre serveur Nginx ne parvient pas à démarrer après avoir appliqué le profil, il est probable que le profil n’inclut pas une autorisation nécessaire à Nginx. Vous devriez vérifier:

  • Le texte d’erreur

  • {Vide}

  • {Vide}

Vous devrez ensuite modifier votre profil en fonction de ces erreurs.

Par exemple, si vous avez oublié d’inclure dans le profil, vous verrez une erreur du type:

[emerg] 3611#0: socket() 0.0.0.0:8080 failed (13: Permission denied)

Dans un scénario réel, arriver à un profil AppArmor utile pour une nouvelle application nécessite beaucoup d’essais et d’erreurs, mais prend également beaucoup de temps.

Conclusion

Avec ce didacticiel, vous avez appris à créer un profil AppArmor à partir de rien. Dans un scénario réel, vous souhaiterez suivre un processus plus rigoureux avant d’activer AppArmor pour une application volumineuse.

Tout d’abord, activez le mode de réclamation avec la commande. Ensuite, les administrateurs système attendent généralement plusieurs jours avant d’exécuter la commande pour que le système ait le temps de consigner les actions les plus courantes de l’application. Il est recommandé de faire de même si vous souhaitez créer un profil qui sera utilisé dans les systèmes de production.