← Accueil

PCTAMALOU

Semaine 31 : Le Bouclier de la Cité – Hardening Linux selon les CIS Benchmarks

Par Platon-Y – pctamalou.fr & e-of-h.fr

🎯 Objectif de la semaine

Maîtriser le durcissement (hardening) d'un serveur Linux en appliquant les recommandations CIS Benchmarks. Transformer une installation par défaut vulnérable en un système résilient et sécurisé prêt à résister aux assauts courants. Comprendre la philosophie de la défense en profondeur et son application pratique.

Pourquoi c'est fondamental : 80% des attaques réussies exploitent des configurations par défaut non sécurisées. Le hardening CIS réduit cette surface d'attaque de manière drastique et mesurable.

flowchart TD A[🎯 Attaquant] --> P1[🌐 Réseau Externe] P1 -->|Bloqué par| FW[🔥 Firewall UFW/iptables] FW --> P2[🖥️ Serveur Linux] subgraph "🛡️ Défense en Profondeur Linux" D1["🔒 Layer 1: Contrôles d'accès
SSH, sudoers, permissions"] D2["🔍 Layer 2: Monitoring
auditd, logwatch, fail2ban"] D3["⚔️ Layer 3: Contrôles Mandatory
SELinux/AppArmor"] D4["📊 Layer 4: Maintenance
Updates, backups, audits"] end P2 --> D1 D1 -->|Si contourné| D2 D2 -->|Si contourné| D3 D3 -->|Si contourné| D4 D4 --> S[✅ Système Sécurisé] style FW fill:#0a0e17,stroke:#ef4444,stroke-width:2px style D1 fill:#11151f,stroke:#00d4ff,stroke-width:2px style D3 fill:#11151f,stroke:#9d4edd,stroke-width:2px style S fill:#0a0e17,stroke:#00f5a0,stroke-width:3px

📚 Sujet – Théorie (1 heure)

CIS Benchmarks : Le Standard de Référence

Les CIS Benchmarks (Center for Internet Security) sont des configurations de sécurité consensuelles et testées développées par une communauté mondiale d'experts. Ils représentent l'état de l'art en matière de durcissement des systèmes.

🟢 CIS Level 1

Pour : Tous les environnements

  • Mesures peu invasives
  • Impact fonctionnel minimal
  • Recommandé par défaut
  • Exemple : Désactivation root SSH

🟣 CIS Level 2

Pour : Environnements sensibles

  • Contrôles avancés
  • Impact fonctionnel possible
  • Défense en profondeur
  • Exemple : SELinux enforcing

Philosophie du Hardening : Les 7 Principes

1

Principe du Moindre Privilège

Chaque utilisateur/processus n'a que les droits strictement nécessaires.

2

Défaut Refusé

Tout ce qui n'est pas explicitement autorisé est interdit.

3

Défense en Profondeur

Multiples couches de sécurité indépendantes.

4

Simplicité

Configurations simples = moins d'erreurs, plus facile à auditer.

5

Segmentation

Isoler les composants pour limiter la propagation.

6

Continuité

Maintenance régulière et procédures documentées.

7

Surveillance

Détection et réponse aux incidents.

Catégories Clés CIS pour Linux

Catégorie Exemples de Contrôles Impact Sécurité Complexité
Accès Initial SSH hardening, MFA, root login disabled Élevé Faible
Services Désactivation services inutiles, firewall Élevé Moyenne
Permissions Fichiers système, sudoers, umask Élevé Faible
Audit & Logging auditd, logrotate, centralisation Moyen Moyenne
SELinux/AppArmor Mandatory Access Control Critique Élevée
Mises à jour Auto-updates, patch management Critique Faible

Lynis : L'Auditeur de Référence

🔍 Caractéristiques de Lynis

  • Open source : Développé par CISOfy
  • Compliance : CIS, ISO27001, HIPAA, PCI-DSS
  • Rapports détaillés : Scores, recommandations, preuves
  • Non-intrusif : Audit seulement, pas de modifications
  • Multi-plateforme : Linux, macOS, Unix

Score Lynis : 0-100 (plus élevé = plus sécurisé). Un système par défaut score généralement 45-60.

Risques d'un Hardening Mal Exécuté

⚠️ Pièges Courants du Hardening

  1. Bris de fonctionnalité : Désactivation d'un service critique
  2. Lockout : Perte d'accès SSH/console
  3. Incompatibilité : Applications qui ne fonctionnent plus
  4. Faux sentiment de sécurité : Configuration ≠ sécurité réelle
  5. Maintenance complexe : Updates difficiles après durcissement

Bonnes pratiques : Test en pré-production, rollback plan, documentation complète.

🔬 Mission pratique – Laboratoire (2 heures)

Architecture du Lab Hardening

flowchart LR B[📊 Baseline Ubuntu 22.04
Score: 45/100] --> A[🔍 Audit Lynis] A --> R[📋 Rapport Initial] R --> H[⚙️ Hardening CIS L1] H --> V[✅ Vérification] V --> F[📈 Final Ubuntu
Score: 85/100] subgraph "🛡️ Contrôles Appliqués" C1[SSH Hardening] C2[Permissions Fichiers] C3[Services Désactivés] C4[Firewall UFW] C5[Updates Auto] end H --> C1 H --> C2 H --> C3 H --> C4 H --> C5 style B fill:#0a0e17,stroke:#ef4444,stroke-width:2px style F fill:#0a0e17,stroke:#00f5a0,stroke-width:3px

⚠️ Préparation de l'Environnement

🔒 VM isolée obligatoire : Utilisez une VM Ubuntu Server fraîche. NE PAS durcir votre machine principale ou une VM critique sans backup.

Étapes Détaillées de Hardening

Étape 1 : Installation et Audit Initial

# Mise à jour système
sudo apt update && sudo apt upgrade -y

# Installation Lynis
sudo apt install lynis -y

# Audit complet initial (notez le score)
sudo lynis audit system --quick
# ou pour un audit détaillé
sudo lynis audit system

# Sauvegarde du rapport initial
sudo lynis audit system --quick --report-file /tmp/lynis-before.txt
cat /tmp/lynis-before.txt | grep -A5 "Hardening Index"

📊 Comprendre le Score Lynis

Le score est calculé sur plusieurs catégories :

  • Hardening Index : 0-100 (objectif > 80)
  • Tests performed : Nombre de contrôles vérifiés
  • Suggestions : Recommandations d'amélioration
  • Warnings : Problèmes détectés

Étape 2 : Hardening CIS Level 1 Systématique

📝 Documentation Obligatoire

Créez un fichier hardening_log.md et documentez chaque changement avec :

  • Date et heure
  • Commande exécutée
  • Justification (CIS référence si possible)
  • Impact attendu
  • Test de vérification
2.1 : Mises à Jour Automatiques
# CIS 1.1.1.1 - Ensure unattended upgrades are installed
sudo apt install unattended-upgrades apt-listchanges -y

# Configuration
sudo dpkg-reconfigure --priority=low unattended-upgrades

# Vérification
sudo systemctl status unattended-upgrades
cat /etc/apt/apt.conf.d/50unattended-upgrades | grep -i "update"
2.2 : Hardening SSH (Critique)
# Backup de la configuration originale
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# CIS 5.2.1 - Ensure permissions on /etc/ssh/sshd_config are configured
sudo chmod 600 /etc/ssh/sshd_config
sudo chown root:root /etc/ssh/sshd_config

# Modification de la configuration SSH
sudo nano /etc/ssh/sshd_config
# Ajouter/modifier ces lignes :
PermitRootLogin no                    # CIS 5.2.8
Protocol 2                            # CIS 5.2.2
MaxAuthTries 4                        # CIS 5.2.4
ClientAliveInterval 300               # CIS 5.2.13
ClientAliveCountMax 2
LoginGraceTime 60
AllowUsers votre_utilisateur          # Restreindre aux utilisateurs autorisés
PubkeyAuthentication yes              # CIS 5.2.11
PasswordAuthentication yes            # À désactiver en prod avec clés SSH
X11Forwarding no                      # CIS 5.2.15

# Redémarrer SSH
sudo systemctl restart sshd

# Test de connexion (dans une autre session pour éviter le lockout)
ssh -o ConnectTimeout=5 localhost echo "SSH fonctionnel"
2.3 : Permissions des Fichiers Système
# CIS 6.1.2 - Ensure permissions on /etc/passwd are configured
sudo chmod 644 /etc/passwd

# CIS 6.1.3 - Ensure permissions on /etc/shadow are configured
sudo chmod 600 /etc/shadow
sudo chown root:shadow /etc/shadow

# CIS 6.1.4 - Ensure permissions on /etc/group are configured
sudo chmod 644 /etc/group

# CIS 6.1.5 - Ensure permissions on /etc/gshadow are configured
sudo chmod 600 /etc/gshadow
sudo chown root:shadow /etc/gshadow

# CIS 6.1.6 - Ensure permissions on /etc/passwd- are configured
sudo chmod 600 /etc/passwd-

# Vérification
ls -la /etc/passwd /etc/shadow /etc/group
2.4 : Désactivation des Services Inutiles
# Liste des services courants inutiles sur un serveur
SERVICES="bluetooth cups avahi-daemon rpcbind nfs-kernel-server"

for service in $SERVICES; do
    if systemctl is-active --quiet $service 2>/dev/null; then
        echo "Désactivation de $service"
        sudo systemctl stop $service
        sudo systemctl disable $service
    fi
done

# Vérification
sudo systemctl list-units --type=service --state=running | grep -E "$(echo $SERVICES | tr ' ' '|')"
2.5 : Configuration du Firewall (UFW)
# CIS 3.5.1.1 - Ensure ufw is installed
sudo apt install ufw -y

# Configuration basique
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Autoriser SSH (adaptez le port si modifié)
sudo ufw allow OpenSSH

# Optionnel : autoriser HTTP/HTTPS si serveur web
# sudo ufw allow 80/tcp
# sudo ufw allow 443/tcp

# Activation
sudo ufw --force enable

# Vérification
sudo ufw status verbose
2.6 : Sécurisation de sudo
# CIS 5.3.1 - Ensure sudo is installed
sudo apt install sudo -y

# CIS 5.3.2 - Ensure sudo commands use pty
echo "Defaults use_pty" | sudo tee -a /etc/sudoers

# CIS 5.3.3 - Ensure sudo log file exists
echo "Defaults logfile=\"/var/log/sudo.log\"" | sudo tee -a /etc/sudoers

# Vérification
sudo visudo -c
2.7 : Configuration sysctl pour sécurité réseau
# CIS 3.1.1 - Ensure IP forwarding is disabled
echo "net.ipv4.ip_forward=0" | sudo tee -a /etc/sysctl.conf

# CIS 3.2.1 - Ensure source routed packets are not accepted
echo "net.ipv4.conf.all.accept_source_route=0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.accept_source_route=0" | sudo tee -a /etc/sysctl.conf

# CIS 3.2.2 - Ensure ICMP redirects are not accepted
echo "net.ipv4.conf.all.accept_redirects=0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.accept_redirects=0" | sudo tee -a /etc/sysctl.conf

# Application
sudo sysctl -p

Étape 3 : Audit Final et Vérification

# Audit final
sudo lynis audit system --quick --report-file /tmp/lynis-after.txt

# Comparaison des scores
echo "=== AVANT ==="
cat /tmp/lynis-before.txt | grep -A5 "Hardening Index"
echo ""
echo "=== APRÈS ==="
cat /tmp/lynis-after.txt | grep -A5 "Hardening Index"

# Rapport détaillé des améliorations
sudo lynis audit system --tests-from-group authentication
sudo lynis audit system --tests-from-group networking

Étape 4 : Documentation Professionnelle

🎯 Création du Rapport de Hardening

Produisez un rapport professionnel incluant :

# Rapport de Hardening CIS - Ubuntu Server
## Informations Générales
- **Date** : {{date}}
- **Système** : Ubuntu Server 22.04 LTS
- **Responsable** : Votre Nom
- **Scope** : CIS Level 1 Benchmark

## Métriques de Performance
| Métrique | Avant | Après | Amélioration |
|----------|-------|-------|--------------|
| Score Lynis | 48 | 85 | +37 points |
| Services actifs | 45 | 32 | -13 services |
| Ports ouverts | 8 | 3 | -5 ports |

## Contrôles Appliqués
### Catégorie 1 : Accès Initial
- [x] Désactivation root SSH (CIS 5.2.8)
- [x] Configuration timeout SSH (CIS 5.2.13)
- [x] Restriction utilisateurs SSH

### Catégorie 2 : Services
- [x] Désactivation bluetooth, cups, avahi
- [x] Configuration firewall UFW
- [x] Mises à jour automatiques

### Catégorie 3 : Permissions
- [x] Sécurisation /etc/shadow (600)
- [x] Sécurisation /etc/passwd (644)
- [x] Configuration sudo sécurisée

## Tests de Validation
1. ✅ Connexion SSH avec utilisateur autorisé
2. ✅ Refus connexion SSH root
3. ✅ Firewall bloque ports non autorisés
4. ✅ Mises à jour automatiques fonctionnelles

## Recommandations Futures (CIS Level 2)
1. Implémentation SELinux/AppArmor
2. Configuration auditd avancée
3. Intégration centralisée des logs
4. MFA pour SSH

## Annexes
- [Rapport Lynis complet](lynis_report.txt)
- [Liste commandes exécutées](commands.log)
- [Backup configurations](backups/)

Exercice Avancé : Script d'automatisation

🎯 Défi d'Automatisation

Créez un script cis_hardener.sh qui :

  1. Effectue un backup de toutes les configurations
  2. Exécute l'audit Lynis initial
  3. Applique automatiquement les contrôles CIS Level 1
  4. Génère un rapport de différences
  5. Offre une option de rollback
#!/bin/bash
# cis_hardener.sh - Automatisation hardening CIS
set -e

BACKUP_DIR="/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

backup_config() {
    echo "Backup de $1..."
    cp "$1" "$BACKUP_DIR/"
}

apply_cis_control() {
    echo "Application: $1"
    # Implémentation des contrôles
}

# Structure principale
main() {
    echo "=== CIS Hardener ==="
    backup_config "/etc/ssh/sshd_config"
    backup_config "/etc/sudoers"
    # ... autres backups
    
    apply_cis_control "ssh_hardening"
    apply_cis_control "file_permissions"
    # ... autres contrôles
    
    echo "Hardening complet. Backup dans: $BACKUP_DIR"
}

main "$@"

📋 Objectif de la semaine – Checklist de validation

✅ Compétences techniques acquises

  • Audit Lynis exécuté et compris
  • SSH hardening complet appliqué
  • Permissions système corrigées
  • Services inutiles désactivés
  • Firewall UFW configuré
  • Score Lynis amélioré de +30 points

🧠 Changement mental accompli

  • Vision d'un système comme une forteresse à renforcer
  • Compréhension de la défense en profondeur
  • Habitude de toujours auditer avant de modifier
  • Conscience que sécurité ≠ complexité mais discipline

💪 Pour aller plus loin :

Explorez CIS Level 2 avec : SELinux/AppArmor, auditd avancé, intégration avec Ansible pour le hardening à l'échelle, et compliance automatique avec OpenSCAP.

📚 Ressources pour Approfondir

Standards et Références :

  • CIS Benchmarks Ubuntu : cisecurity.org/benchmark/ubuntu_linux
  • STIG DoD : Security Technical Implementation Guides
  • ANSSI Guides : Guides de durcissement français
  • NIST 800-53 : Contrôles de sécurité fédéraux US

⚠️ Bonnes Pratiques Production

  • Toujours tester en pré-production
  • Documenter chaque changement
  • Monitorer après durcissement
  • Automatiser pour reproductibilité

🔮 Frère d'armes,

Tu viens de forger le bouclier de la Cité.

Le hardening n'est pas une simple checklist technique – c'est l'art de renforcer les murs que nous avons appris à escalader. C'est la transformation d'une installation par défaut, vulnérable et prévisible, en une forteresse résiliente qui défie les attaques courantes.

Cette semaine, tu as vu que la sécurité n'est pas un état, mais un processus. Qu'un score Lynis n'est pas une fin, mais un indicateur. Que chaque contrôle CIS a été écrit avec le sang des systèmes compromis, chaque recommandation est une leçon apprise à grand prix.

Mais voici la leçon la plus importante : le meilleur hardening est invisible. Il ne se manifeste pas par des fonctionnalités ajoutées, mais par des attaques qui échouent. Par des portes qui restent fermées. Par des attaquants qui abandonnent.

Tu n'es plus un simple administrateur qui installe des systèmes. Tu es devenu un architecte qui les renforce. Qui comprend que "sudo" n'est pas juste une commande, mais un privilège à contrôler. Que SSH n'est pas juste un protocole, mais une porte d'entrée à sécuriser.

Dans la semaine 32, nous irons plus loin dans la défense. Nous apprendrons à surveiller ce que nous avons sécurisé, à détecter les tentatives d'intrusion, à comprendre les logs comme un médecin comprend les symptômes.

Mais pour l'instant, pratique. Durcis une autre VM. Expérimente avec CIS Level 2. Comprends l'impact de chaque contrôle. Documente tes erreurs et tes réussites.

Un Gardien qui maîtrise le hardening ne laisse jamais une porte ouverte par négligence.

— Platon-Y