M62 : Sécurité Linux « avancée » — Travaux pratiques
Travaux SELinux
Pré-requis :
- Activer selinux :
setenforce 1 - Arrêter et désactiver le parefeu :
systemctl stop firewalldsystemctl disable firewalld
Politique
- Consulter le fichier de configuration principale
- SELinux est-il activé ? Si oui, quelle type de politique est appliquée ?
- Vérifier avec les commandes
getenforceetsestatus - Explorer les fichiers de la politique
- Où sont stockés ces fichiers ?
Mauvaise étiquette
- Créer un fichier
/var/www/html/index.html - Vérifier son contexte de sécurité (étiquette)
- Quelle ligne de commande avez-vous utilisée ?
- Créer un fichier
~/toto.html, le déplacer dans/var/www/html - Essayer d’accéder à
http://<IP_du_serveur>/toto.html - Analyser le contenu du journal d’audit avec
audit2why - Quelle ligne de commande avez-vous utilisée ?
- Modifier le contexte du fichier
toto.htmlavec la commandechcon, vérifier - Quelle ligne de commande avez-vous utilisée ?
- Recommencer l’étape 5
- Recommencer les étapes 4 et 5
- Restaurer le contexte du répertoire
/var/wwwavec la commanderestorecon, vérifier - Quelle ligne de commande avez-vous utilisée ?
Booléens
- Créer un utilisateur
toto - Modifier la configuration d’apache pour autoriser le répertoire
de publication de cet utilisateur (
public_html) - Créer un répertoire
/home/toto/public_html - Y créer un fichier index.html
- Vérifier le contexte de sécurité avec
getfattr - Quelle ligne de commande avez-vous utilisée ?
- Essayer d’accéder à
http://<IP_du_serveur>/~toto/ - Décoder le message du journal d’audit
- Rechercher une solution définitive utilisant les booléens
- Quelle ligne de commande avez-vous utilisée ?
Port non standard
- Installer
setroubleshoot-server - Configurer ssh pour utiliser le port 1337
- Redémarrer le service
- Que se passe-t-il ?
- Chercher une solution définitive utilisant la commande
semanage port - Vérifier
- Quelle ligne de commande avez-vous utilisée ?
- Lancer la commande
sealert -a /var/log/audit/audit.log - Expliquer les résultats fournis par cet utilitaire, les différences entre les informations fournies par les plugins en particulier
- Utiliser les commandes fournies par le plugin catchall
- Que contiennent les fichiers générés ?
- Que signifie l’extension du fichier ascii ?
Travaux Netfilter
Filtrage IP
Suite à la modification du port utilisé par le serveur SSH, le parefeu
a très probablement été arrêté (systemctl stop firewalld), voire
désactivé (systemctl disable firewalld).
Afin de pouvoir réactiver ce parefeu, il faut autoriser le « nouveau » flux. Pour cela il faut commencer par :
- Spécifier en termes réseau les paquets reçus par le serveur SSH :
- interface d’entrée,
- protocole de transport,
- adresses source et destination,
- ports source et destination.
- Traduire cette spécification en règle
nft
Pour la mise en œuvre de cette règle :
- Reconfigurer SSH pour qu’il écoute le port 22 et se connecter sur ce port,
- Redémarrer le parefeu (
systemctl start firewalld),
Utilisation de la commande nft :
- Lister l’ensemble des règles (
ruleset). Quelle commande avez-vous utilisé ? - Lister l’ensemble des tables. Quelles sont celles liées à
firewalld? Quelle commande avez-vous utilisé ? (grep?) - Lister les tables relatives à
firewalld. Quelle commande avez-vous utilisé ? Observer le nom des chaînes. Que constatez-vous ? - Lister les chaînes de la table
inet firewalld. - Vérifier les règles de la chaîne
filter_INPUTdans la tableinet firewalldavec l’option-a:- Quelle commande avez-vous utilisé ?
- Que signifie
ct state { established, related }? - Que fait la dernière ligne de cette chaîne ? Quels paquets concerne-t-elle ?
- Examiner les directives
gotode la tableinet firewalldet établir « l’arborescence » des chaînes de cette table.
Modifications des règles :
- Insérer la règle requise dans la chaîne
filter_IN_public_allow. Quelle commande avez-vous utilisée ? - Reconfigurer SSH pour qu’il écoute sur les ports 1337 et 22.
- Vérifier le bon fonctionnement du service en ouvrant une nouvelle connexion sur le serveur.
- Redémarrer le firewall. Constater.
Gestion du filtrage IP avec FirewallD
FirewallD propose une couche d’abstraction à iptables et nft ainsi
que d’autres fonctionnalités (cf Vue d’ensemble). Il peut être
piloté avec la commande firewall-cmd (RTFM !).
Pour chacune des demandes fonctionnelles ci-dessous, indiquer la ou
les options de commande firewall-cmd utilisées et le ou les résultats
obtenus :
- Quel est l’état du parefeu ?
- Quelles sont les zones actives ?
- Quelles sont la ou les zones par défaut ?
- Quelle est la zone associée à l’interface ethernet ?
- Lister toutes les informations concernant la zone « public »
- Autoriser les connexions SSH sur le nouveau port (1337) de manière pérenne
- Interdire les connexions SSH sur le port 22
- Redémarrer le firewall. Constater.
S’il vous reste du temps :
- Lister tous les services
- Quel est le format des fichiers de configuration ?
- Qu’est-ce que le mode panique ?
- FirewallD permet-il de filtrer les paquets sortants ?
SELinux sur Rocky
Lire la documentation Rocky Linux concernant SELinux : https://docs.rockylinux.org/guides/security/learning_selinux/ et relever les concepts et commandes qui n’auraient pas été abordés dans le cours.
AppArmor
Lire la documentation Debian (chapitres 1 à 5) concernant AppArmor : https://wiki.debian.org/AppArmor/HowToUse et relever les informations qui ont été fournies pendant le cours ainsi que les analogies et les différences avec SELinux.
