Réponse à incident et investigation numérique sur Linux
Quitter

Leçon 1 sur 12 · Fondamentaux

Le cycle de réponse à incident et la préparation

40 min Debian 12

Objectif

Savoir dans quel ordre agir quand un serveur Linux est compromis, qui fait quoi dans l'équipe, et ce qu'il faut avoir préparé avant la crise pour ne pas improviser le jour J.

L'essentiel

  • Une réponse à incident suit un cycle : préparation, détection et analyse, confinement, éradication, reprise, retour d'expérience. Sauter une étape coûte cher (on réinstalle avant de comprendre, l'attaquant revient par la même porte).
  • La première règle est de ne pas détruire les preuves : on n'éteint pas la machine, on ne « nettoie » pas à la main, on ne lance pas d'outil qui réécrit le disque.
  • Chaque action est notée dans un journal de bord horodaté en UTC, avec l'auteur.
  • La préparation se fait à froid : contacts, droits d'accès d'urgence, journaux centralisés, trousse d'outils de confiance avec leurs empreintes, fiches réflexes, exercices.
  • On répond à une question métier, pas seulement technique : quelles données, quels clients, quelles obligations légales ?

1. Les six phases

Le modèle le plus utilisé en entreprise découpe la réponse en six étapes. Les guides officiels les regroupent parfois autrement (le guide américain du NIST, dans sa version de 2025, les range sous les fonctions du cadre de cybersécurité CSF 2.0 : gouverner, identifier, protéger, détecter, répondre, rétablir), mais le travail sur le terrain reste le même.

Phase Question Exemple sur ml-web-01
Préparation Sommes-nous prêts ? Journaux envoyés sur ml-log-01, sauvegardes testées, trousse d'outils prête
Détection et analyse Que se passe-t-il vraiment ? Une alerte sur un pic de CPU, puis une connexion root inconnue dans auth.log
Confinement Comment arrêter l'hémorragie sans effacer les traces ? Retirer le serveur du réseau public, garder la machine allumée, bloquer l'IP
Éradication Qu'a laissé l'attaquant ? Supprimer la clé SSH ajoutée, le compte caché, la tâche cron, corriger la faille
Reprise Comment revenir en service en confiance ? Reconstruire depuis une image saine, restaurer les données vérifiées, surveiller de près
Retour d'expérience Qu'apprenons-nous ? Réunion sans recherche de coupable, plan d'action daté, mise à jour des fiches

Ce n'est pas une ligne droite : pendant l'éradication, on découvre souvent une deuxième machine touchée, et l'on revient à l'analyse.

Confinement court et confinement long

  • Court terme : couper l'accès de l'attaquant le plus vite possible (règle de pare-feu, groupe de sécurité cloud, câble réseau, désactivation d'un compte).
  • Long terme : garder le service rendu aux clients pendant l'enquête (un serveur de remplacement propre, une page de maintenance).

Couper l'électricité est presque toujours une erreur : la mémoire vive (processus, connexions, clés de chiffrement, fichiers supprimés encore ouverts) disparaît. On isole du réseau, on garde la machine allumée, on collecte (leçon 1.2).

2. L'équipe et les rôles

Même dans une petite structure, chaque rôle a un nom avant la crise :

Rôle Mission
Responsable de l'incident Décide, priorise, tient le journal de bord, parle à la direction
Analystes Collectent, analysent, proposent les mesures techniques
Administrateurs du système Exécutent les actions de confinement et de reprise
Communication Messages internes, clients, presse (leçon 4.1)
Juridique / délégué à la protection des données Obligations légales, plainte, déclarations
Direction Arbitre les choix qui coûtent (arrêt d'un service, rançon refusée, communication publique)

Au Maroc, les administrations et les infrastructures d'importance vitale ont en plus une obligation de déclaration à la DGSSI (leçon 4.1). Le contact doit être dans la fiche avant l'incident.

3. Le journal de bord

Une enquête dure des jours ; sans journal, personne ne sait plus qui a redémarré quoi et à quelle heure. Une ligne par action :

# Format simple : heure UTC | auteur | action
date -u +%Y-%m-%dT%H:%M:%SZ          # 2026-10-20T08:15:00Z
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | ops | ml-web-01 retiré du groupe de sécurité public" >> journal-de-bord.txt

Règles :

  • toujours UTC (le serveur, le pare-feu et le SIEM ne sont pas forcément dans le même fuseau ; le Maroc a changé d'heure plusieurs fois) ;
  • ajouter (>>), jamais réécrire ; le journal lui-même est une pièce du dossier ;
  • noter aussi les décisions et leurs raisons (« décision de ne pas éteindre : collecte mémoire prévue »).

4. La trousse d'outils de confiance

Sur une machine compromise, ls, ps ou netstat peuvent avoir été remplacés pour cacher l'attaquant. On prépare donc à froid des binaires sains et leurs empreintes :

mkdir -p /media/cle-ir/outils && cd /media/cle-ir/outils
cp /usr/bin/{ls,find,grep,stat,sha256sum,ps,ss,lsof} .   # depuis une machine saine de même version
sha256sum * > SHA256SUMS
# Le jour J, sur le serveur suspect, on lance les outils depuis la clé :
/media/cle-ir/outils/sha256sum -c /media/cle-ir/outils/SHA256SUMS
/media/cle-ir/outils/ls -la /tmp

On y ajoute : un disque de collecte vide et formaté, un câble réseau, les fiches réflexes imprimées, la liste des contacts, des scripts de collecte testés (leçon 1.2), et les accès d'urgence (compte de secours, accès à la console du fournisseur cloud).

5. Préparer, concrètement

  • Inventaire : quelles machines, quelles données, qui en est responsable.
  • Journaux : persistants, synchronisés en heure (NTP), copiés hors du serveur.
  • Sauvegardes : hors ligne ou immuables, restauration testée.
  • Fiches réflexes : « compte compromis », « serveur web défiguré », « rançongiciel », « fuite de données ».
  • Exercices sur table : deux heures par trimestre, un scénario, chacun joue son rôle.

Pièges fréquents

  • Éteindre ou redémarrer « pour être tranquille » : la moitié des preuves part avec la mémoire.
  • Réinstaller tout de suite sans comprendre l'entrée de l'attaquant : il revient par la même faille la semaine suivante.
  • Prévenir l'équipe par la messagerie qui est peut-être compromise : utilisez un canal séparé (téléphone, messagerie hors du domaine).
  • Heures locales mélangées : une chronologie fausse d'une heure mène à de mauvaises conclusions.

Lab

Vous préparez la réponse à l'incident INC-2026-0007 :

  1. ouvrir le journal de bord avec une première ligne horodatée en UTC ;
  2. y ajouter une seconde ligne sans écraser la première ;
  3. constituer la trousse d'outils de confiance et son fichier d'empreintes ;
  4. ranger les actions menées pendant l'incident dans la bonne phase du cycle.

Quiz

  1. Citez les six phases dans l'ordre.
  2. Pourquoi ne faut-il pas éteindre un serveur compromis ?
  3. Quelle différence entre confinement et éradication ?
  4. Pourquoi noter les heures en UTC dans le journal de bord ?
  5. À quoi sert le fichier SHA256SUMS de la trousse d'outils ?
Réponses
  1. Préparation, détection et analyse, confinement, éradication, reprise, retour d'expérience.
  2. La mémoire vive (processus, connexions, fichiers supprimés encore ouverts, clés) disparaît à l'arrêt ; ce sont souvent les meilleures preuves.
  3. Le confinement empêche l'attaquant d'agir davantage ; l'éradication retire ce qu'il a installé et corrige la faille utilisée.
  4. Pour comparer sans erreur des sources de fuseaux différents (serveur, pare-feu, SIEM, fournisseur cloud).
  5. À vérifier, le jour J, que les outils de la trousse n'ont pas été modifiés.

Exercices pratiques

À réaliser sur Debian 12

Faites ce lab sur votre machine

Le terminal, c’est le vôtre : une VM Linux (VirtualBox, VMware, Hyper-V, WSL…) ou Docker/Podman. L’outil ml prépare l’exercice et corrige votre travail ; la leçon se valide toute seule ici.

Créez un compte gratuit pour obtenir votre commande personnelle et faire valider vos labs automatiquement.

Créer mon compte

Tâches à réaliser

  1. Ouvrez le journal de bord de l'incident : créez /root/ir/journal-de-bord.txt dont la première ligne commence par l'heure UTC actuelle au format 2026-10-20T08:15:00Z, suivie de « | ops | » puis d'un texte (ex. ouverture INC-2026-0007).
    Afficher un indicedate -u +%Y-%m-%dT%H:%M:%SZ donne l'heure UTC au bon format ; utilisez-la dans un echo.
    Voir la solution
    echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | ops | ouverture INC-2026-0007" > /root/ir/journal-de-bord.txt

    Vérification : head -n 1 /root/ir/journal-de-bord.txt 2>/dev/null | grep -Eq "^20[0-9]{2}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]Z \| ops \| .+"

  2. Ajoutez au journal de bord une deuxième ligne au même format (heure UTC, « | ops | », texte) : le journal ne s'écrase jamais, il se complète.
    Afficher un indiceUtilisez >> (ajout) et non > (écrasement).
    Voir la solution
    echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) | ops | serveur isolé, collecte des preuves en cours" >> /root/ir/journal-de-bord.txt

    Vérification : f=/root/ir/journal-de-bord.txt; test "$(grep -Ec "^20[0-9]{2}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]Z \| ops \| .+" $f)" -ge 2 && sort -c $f

  3. Préparez la trousse d'outils de confiance : copiez ls, find, grep, stat et sha256sum (depuis /usr/bin) dans /root/ir/outils/, puis créez /root/ir/outils/SHA256SUMS avec l'empreinte des cinq outils (noms de fichiers sans chemin).
    Afficher un indicecd /root/ir/outils puis sha256sum ls find grep stat sha256sum > SHA256SUMS
    Voir la solution
    mkdir -p /root/ir/outils && cd /root/ir/outils && for o in ls find grep stat sha256sum; do cp /usr/bin/$o .; done && sha256sum ls find grep stat sha256sum > SHA256SUMS

    Vérification : cd /root/ir/outils 2>/dev/null && for o in ls find grep stat sha256sum; do test -x $o && grep -Eq "^[0-9a-f]{64} $o$" SHA256SUMS || exit 1; done && sha256sum -c --quiet SHA256SUMS

  4. Classez les six actions de /root/ir/actions.txt par phase : créez /root/ir/phases.txt avec une ligne par action, « numéro phase », la phase étant un mot parmi preparation, detection, confinement, eradication, reprise, retour.
    Afficher un indiceIsoler sans éteindre, c'est contenir ; supprimer ce que l'attaquant a laissé, c'est éradiquer ; reconstruire, c'est la reprise.
    Voir la solution
    printf "%s\n" "1 confinement" "2 retour" "3 reprise" "4 eradication" "5 detection" "6 preparation" > /root/ir/phases.txt

    Vérification : test "$(sed "s/é/e/g;s/É/e/g" /root/ir/phases.txt 2>/dev/null | tr -d "\r" | tr A-Z a-z | awk "NF>=2{print \$1\":\"\$2}" | sort | tr "\n" " ")" = "1:confinement 2:retour 3:reprise 4:eradication 5:detection 6:preparation "