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 firewalld
systemctl 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
getenforce
etsestatus
- 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.html
avec 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/www
avec 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_INPUT
dans la tableinet firewalld
avec 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
goto
de la tableinet firewalld
et é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.