Hardening ANSSI-BP028

Contexte et objectifs

Qu'est-ce que l'ANSSI ?

L'ANSSI (Agence Nationale de la Securite des Systemes d'Information) est l'autorite nationale francaise en matiere de cybersecurite. Rattachee au SGDSN (Secretariat General de la Defense et de la Securite Nationale), elle definit les referentiels de securite applicables aux systemes d'information en France.

Pourquoi ANSSI-BP028 ?

Le referentiel ANSSI-BP028 (Recommandations de configuration d'un systeme GNU/Linux) est le guide de reference pour le durcissement des systemes Linux. Il fournit des recommandations concretes, classees par niveau de priorite, pour reduire la surface d'attaque d'un systeme.

Pertinence pour le projet

Toutes les VMs de l'infrastructure tournent sous Rocky Linux 9. Appliquer ANSSI-BP028 garantit un socle de securite conforme aux standards nationaux, indispensable pour une infrastructure hebergeant un SOC.

CIS Benchmark vs ANSSI-BP028

Critere CIS Benchmark ANSSI-BP028
Origine Center for Internet Security (USA) ANSSI (France)
Portee Specifique a chaque OS/application Generique GNU/Linux
Niveaux Level 1 (basique), Level 2 (avance) Minimal, Intermediaire, Renforce
Format Checklist detaillee avec scoring Recommandations argumentees
Audit Wazuh SCA, OpenSCAP Wazuh SCA (regles custom)
Recouvrement ~70% des mesures se recoupent ~70% des mesures se recoupent

Approche complementaire

Nous appliquons les deux referentiels. ANSSI-BP028 pour les recommandations specifiques au contexte francais, CIS Benchmark pour le scoring automatise. Les mesures se recoupent largement, avec des specificites propres a chacun.

Mesures par categorie

Comptes et authentification

Politique de mots de passe

Les mots de passe locaux sont soumis a des contraintes strictes via PAM (Pluggable Authentication Modules) :

Parametre Valeur Fichier
Longueur minimale 12 caracteres /etc/security/pwquality.conf
Complexite minclass=4 (majuscule, minuscule, chiffre, special) /etc/security/pwquality.conf
Historique remember=5 (5 derniers mots de passe interdits) /etc/pam.d/system-auth
Age maximal 90 jours /etc/login.defs
Age minimal 1 jour /etc/login.defs

Verrouillage de compte (faillock)

Apres des tentatives d'authentification echouees, le compte est verrouille pour prevenir le brute force :

Parametre Valeur Description
deny 5 Nombre de tentatives avant verrouillage
unlock_time 900 Duree du verrouillage (15 min)
fail_interval 900 Fenetre de comptage des echecs
even_deny_root yes Le compte root est aussi verrouille

Timeout de session

Les sessions inactives sont automatiquement deconnectees :

  • TMOUT=300 dans /etc/profile.d/ : deconnexion apres 5 minutes d'inactivite shell
  • ClientAliveInterval 300 dans sshd_config : deconnexion SSH apres 5 min sans activite
  • readonly TMOUT : l'utilisateur ne peut pas desactiver le timeout

Restriction su/sudo

Mesure Configuration Objectif
Restriction su pam_wheel.so requis, groupe wheel limite Seuls les membres du groupe wheel peuvent utiliser su
Sudo avec mot de passe Defaults timestamp_timeout=5 Redemande le mot de passe apres 5 min
Pas de NOPASSWD Interdit sauf comptes de service Ansible Empeche l'utilisation de sudo sans authentification
Logging sudo Defaults logfile=/var/log/sudo.log Toutes les commandes sudo sont tracees

Banniere legale

Un avertissement est affiche avant toute connexion (SSH, console) pour informer que le systeme est surveille et que l'acces non autorise est interdit. Configure dans /etc/issue, /etc/issue.net et la banniere SSH.

Configuration systeme

Partitionnement securise

Chaque point de montage sensible est isole sur une partition separee avec des options restrictives :

Point de montage Options Justification
/tmp noexec,nosuid,nodev Empeche l'execution de binaires depuis /tmp
/var nosuid,nodev Isole les logs et donnees variables
/var/log noexec,nosuid,nodev Protege les journaux contre la manipulation
/var/log/audit noexec,nosuid,nodev Isole specifiquement les logs d'audit
/var/tmp noexec,nosuid,nodev Memes restrictions que /tmp
/home noexec,nosuid,nodev Empeche l'execution depuis les repertoires utilisateurs
/dev/shm noexec,nosuid,nodev Protege la memoire partagee

Impact du partitionnement

L'option noexec sur /tmp et /home peut bloquer certains installeurs ou scripts. Le role Ansible gere les exceptions necessaires (ex. Ansible lui-meme utilise /tmp pour ses scripts temporaires, configure via remote_tmp).

Services desactives

Tous les services non necessaires sont desactives et masques :

cups, avahi-daemon, rpcbind, nfs-server, autofs,
bluetooth, vsftpd, dovecot, named, dhcpd

Configuration systeme supplementaire

Mesure Valeur Objectif
Umask 027 Fichiers crees lisibles uniquement par le proprietaire et le groupe
SUID/SGID audit Inventaire regulier Detection de binaires SUID/SGID non autorises
Core dumps Desactives (* hard core 0) Empeche la fuite de donnees en memoire via core dumps
ASLR Active (kernel.randomize_va_space=2) Randomisation de l'espace d'adressage contre les exploits memoire
Ctrl+Alt+Del Desactive Empeche le redemarrage physique non autorise

Securite reseau

Firewall deny-by-default

flowchart LR
    IN["Trafic entrant"] --> FW{"firewalld"}
    FW -->|Regle explicite| ACCEPT["Autorise"]
    FW -->|Pas de regle| DROP["Rejete (DROP)"]

    style DROP fill:#D32F2F,color:#fff
    style ACCEPT fill:#2E7D32,color:#fff

Chaque VM utilise firewalld en zone drop par defaut. Seuls les ports explicitement necessaires sont ouverts. Exemples :

Service Port autorise Source
SSH 22/TCP VLAN administration uniquement
Wazuh agent 1514/TCP VIP SOC 10.15.80.50
Zabbix agent 10050/TCP Serveur Zabbix
Node exporter 9100/TCP Serveur Prometheus

Durcissement reseau (sysctl)

Parametre Valeur Objectif
net.ipv6.conf.all.disable_ipv6 1 IPv6 desactive (non utilise)
net.ipv4.conf.all.accept_redirects 0 ICMP redirect desactive (previent le MitM)
net.ipv4.conf.all.send_redirects 0 Empeche l'envoi de redirections ICMP
net.ipv4.ip_forward 0 IP forwarding desactive (pas un routeur)
net.ipv4.tcp_syncookies 1 SYN cookies contre les attaques SYN flood
net.ipv4.conf.all.rp_filter 1 Reverse path filtering (anti-spoofing)
net.ipv4.conf.all.log_martians 1 Log des paquets avec adresses impossibles

Modules noyau blacklistes

Les protocoles reseau non utilises sont desactives au niveau du noyau pour reduire la surface d'attaque :

Module Protocole Raison du blocage
dccp Datagram Congestion Control Non utilise, vulnerabilites connues
sctp Stream Control Transmission Non utilise, surface d'attaque inutile
tipc Transparent Inter-Process Communication Non utilise, risque d'exploitation locale
rds Reliable Datagram Sockets Non utilise, CVE multiples

Durcissement SSH

Configuration sshd

Parametre Valeur Justification
PermitRootLogin prohibit-password Login root uniquement par certificat Vault CA
PasswordAuthentication no Seules les cles et certificats sont acceptes
Protocol 2 SSH-2 uniquement (SSH-1 est vulnerable)
Ciphers chacha20-poly1305, aes256-gcm@openssh.com, aes256-ctr Chiffrement fort uniquement
MACs hmac-sha2-512-etm, hmac-sha2-256-etm Integrite forte (Encrypt-then-MAC)
KexAlgorithms curve25519-sha256, diffie-hellman-group16-sha512 Echange de cles robuste
ClientAliveInterval 300 Deconnexion apres 5 min d'inactivite
ClientAliveCountMax 0 Pas de tentative de keep-alive
MaxAuthTries 3 Limite les tentatives d'authentification
MaxSessions 2 Limite le nombre de sessions simultanees
AllowAgentForwarding no Desactive le forwarding d'agent SSH
X11Forwarding no Desactive le forwarding X11

Exception root via Vault CA

Le login root est autorise uniquement par certificat SSH signe par Vault CA. Cela permet l'administration d'urgence sans mot de passe, tout en maintenant la tracabilite complete (chaque certificat est nominatif et a une duree de vie limitee).

Audit et journalisation

Regles auditd

Le systeme d'audit Linux (auditd) enregistre les evenements de securite critiques :

Categorie Fichiers/Syscalls surveilles Objectif
Authentification /etc/passwd, /etc/shadow, /etc/group Modification des comptes
Privileges execve avec UID change, /etc/sudoers Escalade de privileges
Reseau connect, accept, bind Connexions reseau suspectes
Fichiers critiques /etc/ssh/, /etc/pam.d/, /boot/ Modification de configuration
Modules noyau init_module, delete_module Chargement/dechargement de modules
Temps adjtimex, settimeofday Manipulation de l'horloge (anti-forensic)

Centralisation des logs

flowchart LR
    VM["VM Rocky 9<br/>auditd + rsyslog"] -->|514/UDP + 1514/TCP| VIP["VIP SOC<br/>10.15.80.50"]
    VIP --> LS["Logstash"]
    LS --> ES["Elasticsearch"]
    ES --> KIB["Kibana"]
    ES --> EA["ElastAlert2"]

    style VIP fill:#1565C0,color:#fff

Tous les logs sont envoyes au SOC via rsyslog vers la VIP 10.15.80.50. La retention locale est assuree par logrotate (rotation quotidienne, compression, retention 30 jours sur disque local).

Wazuh FIM

En complement d'auditd, le FIM Wazuh fournit une couche supplementaire de surveillance de l'integrite. Contrairement a auditd qui trace les appels systeme, Wazuh FIM compare les hash SHA256 des fichiers et detecte tout ecart par rapport a la baseline.

Automatisation Ansible

Role hardening-anssi

Le durcissement est entierement automatise via le role Ansible hardening-anssi :

Propriete Detail
Nom hardening-anssi
Idempotence Oui -- peut etre relance sans effet de bord
Phase Phase 2 du site.yml (apres common, avant services)
Cible Toutes les VMs de l'infrastructure
Variables Parametrables par groupe ou par hote
Tags accounts, network, ssh, audit, sysctl, services
flowchart TB
    PLAY["site.yml -- Phase 2"]
    PLAY --> R1["Task: Politique mots de passe (PAM)"]
    PLAY --> R2["Task: faillock"]
    PLAY --> R3["Task: Timeout session"]
    PLAY --> R4["Task: Partitionnement (fstab)"]
    PLAY --> R5["Task: Sysctl reseau"]
    PLAY --> R6["Task: Firewalld deny-by-default"]
    PLAY --> R7["Task: SSH hardening"]
    PLAY --> R8["Task: Auditd rules"]
    PLAY --> R9["Task: Services desactives"]
    PLAY --> R10["Task: Modules blacklistes"]

    style PLAY fill:#E65100,color:#fff

Idempotence

Le role est concu pour etre idempotent : chaque execution produit le meme resultat, qu'elle soit la premiere ou la dixieme. Cela permet de le relancer regulierement comme outil de remise en conformite sans risque d'effet de bord.

Conformite continue

Wazuh CIS Benchmark Scans

Wazuh execute periodiquement des scans SCA (Security Configuration Assessment) qui evaluent chaque VM contre les referentiels CIS et ANSSI-BP028 :

Metrique Detail
Frequence Toutes les 12 heures
Referentiels CIS Rocky Linux 9, ANSSI-BP028 custom
Score cible > 95% de conformite
Alertes Score < 90% = alerte warning, < 80% = alerte critique

Detection de derive

Le drift detection compare l'etat actuel de chaque VM avec l'etat attendu :

  1. Scan SCA : Wazuh verifie la conformite selon les regles CIS/ANSSI
  2. FIM : toute modification des fichiers de configuration est detectee en temps reel
  3. Alerte : l'equipe est notifiee via Shuffle SOAR + ntfy
  4. Remediation : le role Ansible hardening-anssi est relance pour corriger la derive

Derive de configuration

Une derive de configuration (modification manuelle d'un fichier durci, desactivation d'une regle auditd, ouverture d'un port non autorise) est traitee comme un incident de securite. Elle peut indiquer une compromission ou une erreur humaine -- dans les deux cas, elle doit etre investiguee et corrigee.