Volume 2 : Linux, Terminal & Bash Scripting Avancé/Module 2 : Scripting Bash & Automatisation d'Audit
PROJET 01 : Développement d'un Script d'Audit Système et Durcissement
PROJET 01 : Script d'Administration & Audit de Sécurité Linux
Dans le cadre du Projet 01 de CyberPath, vous allez développer un outil d'inspection automatisé en Bash capable de dresser un bilan de sécurité rapide sur tout serveur Debian ou Ubuntu fraîchement provisionné.
---
1. Objectifs Techniques du Script d'Audit
Le script doit vérifier automatiquement : 1. Les comptes utilisateurs anormaux : Repérer tout compte autre que
root possédant l'identifiant UID 0 dans /etc/passwd.
2. Les mots de passe vides : Vérifier qu'aucun compte n'a de champ de mot de passe vide dans /etc/shadow.
3. Les binaires SUID non standards : Inventorier les exécutables ayant le bit SUID activé.
4. Les ports TCP en écoute : Vérifier quels démons écoutent sur 0.0.0.0 (exposés à Internet).
5. La configuration SSH : Vérifier si PermitRootLogin et PasswordAuthentication sont autorisés dans /etc/ssh/sshd_config.---
2. Implémentation Complète du Script (audit_securite.sh)
Voici le script complet, commenté et conforme aux standards de production :
``
bash
#!/usr/bin/env bash
=============================================================================
RAYLAB SECURITY TOOLKIT - PROJET 01 CYBERPATH
Script d'Audit Rapide de Durcissement Linux
Usage : sudo ./audit_securite.sh
=============================================================================
set -euo pipefail
Couleurs pour le terminal
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}=====================================================${NC}"
echo -e "${BLUE} AUDIT DE SÉCURITÉ SYSTÈME LINUX — RAYLAB ${NC}"
echo -e "${BLUE}=====================================================${NC}"
echo -e "Date de l'audit : $(date '+%Y-%m-%d %H:%M:%S')"
echo -e "Hôte audité : $(hostname -f) ($(uname -srm))\n"
1. Vérification des privilèges d'exécution
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}[!] ERREUR : Ce script d'audit doit être exécuté en root (sudo).${NC}"
exit 1
fi
2. Vérification des comptes UID 0
echo -e "${YELLOW}[*] Vérification des comptes avec UID 0 (Privilèges root) :${NC}"
comptes_uid0=$(awk -F: '($3 == 0) {print $1}' /etc/passwd)
for compte in $comptes_uid0; do
if [[ "$compte" == "root" ]]; then
echo -e " [+] Compte root légitime identifié : ${GREEN}root${NC}"
else
echo -e " ${RED}[ALERTE CRITIQUE] Compte suspect avec UID 0 détecté : $compte${NC}"
fi
done
3. Vérification des binaires SUID critiques
echo -e "\n${YELLOW}[*] Inventaire des binaires SUID critiques dans /usr/bin :${NC}"
suid_critiques=("bash" "sh" "python" "python3" "perl" "ruby" "vim" "nano" "nmap" "find")
for binaire in "${suid_critiques[@]}"; do
if find /usr/bin -name "$binaire" -perm -4000 2>/dev/null | grep -q "$binaire"; then
echo -e " ${RED}[DANGER SUID GTFOBINS] Binaire exploitable en root : /usr/bin/$binaire${NC}"
fi
done
echo -e " ${GREEN}[✓] Contrôle des binaires SUID dangereux terminé.${NC}"
4. Vérification de la configuration SSH
echo -e "\n${YELLOW}[*] Audit de la configuration SSH (/etc/ssh/sshd_config) :${NC}"
if [[ -f /etc/ssh/sshd_config ]]; then
root_login=$(grep -Ei '^\s*PermitRootLogin' /etc/ssh/sshd_config || echo "PermitRootLogin non spécifié (défaut)")
echo -e " Statut Root Login : ${root_login}"
auth_pass=$(grep -Ei '^\s*PasswordAuthentication' /etc/ssh/sshd_config || echo "PasswordAuthentication non spécifié")
echo -e " Statut Mot de Passe : ${auth_pass}"
else
echo -e " ${BLUE}[i] Aucun service SSH installé sur cet hôte.${NC}"
fi
5. Vérification des ports TCP en écoute
echo -e "\n${YELLOW}[*] Services en écoute sur toutes les interfaces (0.0.0.0) :${NC}"
ss -tulpn | grep LISTEN | grep '0.0.0.0' | while read -r line; do
echo -e " ${YELLOW}->${NC} $line"
done
echo -e "\n${GREEN}=====================================================${NC}"
echo -e "${GREEN} RAPPORT D'AUDIT TERMINÉ ${NC}"
echo -e "${GREEN}=====================================================${NC}"
`
---
3. Recommandations de Durcissement (CIS Benchmarks)
À l'issue de cet audit, voici les trois règles immédiates à appliquer :
1. Désactiver la connexion directe en root sous SSH : PermitRootLogin no.
2. Imposer l'authentification par clé publique SSH (Ed25519) et désactiver les mots de passe : PasswordAuthentication no.
3. Supprimer les permissions SUID superflues sur les utilitaires administratifs : chmod u-s /usr/bin/find`.
Informations
Formatinteractive
Durée50 min
StatutEn cours
Laboratoire Virtuel Pratique
Pratiquez cette le?on dans le Terminal Linux et l'ex?cuteur WebAssembly Python en direct.
Ouvrir dans le Labo >_