Aller au contenu

TP – Un collecteur de journaux et une alerte multi-machines

BTS SIO SISR 2e année – Bloc 3 – S11 – en binôme : un tape, l'autre lit ; on échange les rôles à chaque partie

Note

But. Centraliser les journaux de deux serveurs sur un collecteur, écrire une règle de corrélation qui repère une même adresse attaquant plusieurs machines, vérifier la reprise après coupure, et fixer une durée de conservation.

Durée : 3 h 10. Prérequis : cours S11 lu ; S04 (RGPD).

Note

Comment ce TP fonctionne. Tu anticipes (« J'anticipe »), tu manipules, tu notes ce que tu constates, puis tu expliques (« Je comprends »). Un bilan de compétences clôt la séance.

Binôme : ____________ / ____________

Le laboratoire

Trois machines virtuelles Debian sur un réseau interne isolé, avec un compte sudo :

Machine Nom Adresse Rôle
1 coll 10.20.0.1 Collecteur central
2 srv1 10.20.0.11 Source
3 srv2 10.20.0.12 Source
srv1 : 10.20.0.11 coll : 10.20.0.1 TCP 514 /var/log/central/ srv2 : 10.20.0.12 TCP 514

Contraintes. Instantané de chaque machine avant de commencer ; paquet rsyslog sur les trois (sudo apt install -y rsyslog) ; chaque machine a un nom différent (hostnamectl set-hostname srv1, etc.) ; tu notes la sortie de chaque commande (capture datée).

Warning

Les événements d'échec de connexion de ce TP sont simulés avec la commande logger, qui injecte une ligne dans le journal comme le ferait le service SSH. Les adresses 203.0.113.x et 198.51.100.x sont des adresses réservées à la documentation : elles ne désignent aucune vraie machine. Le laboratoire reste isolé.


Partie A – Lire un journal local (≈ 20 min)

Sur srv1 :

sudo tail -5 /var/log/auth.log
logger -t sshd -p authpriv.warning "Failed password for invalid user test from 203.0.113.5 port 4000 ssh2"
sudo tail -2 /var/log/auth.log

J'anticipe. Avant la deuxième commande : la ligne apparaîtra-t-elle dans auth.log ? Pourquoi dans ce fichier-là ? ______________________

Je comprends. Retrouve dans la ligne les quatre éléments qui, quoi, quand, d'où. Lesquels manquent ? ______________________


Partie B – Le collecteur (≈ 35 min)

Sur coll :

B1 – Un dossier réservé

sudo install -d -o syslog -g adm -m 750 /var/log/central

Je comprends. Le service rsyslog s'exécute sous l'utilisateur syslog, pas root. Que se passerait-il si le dossier appartenait à root ? (Tu peux le vérifier : c'est l'erreur la plus fréquente de ce TP.) ______________________

B2 – La configuration de réception

Crée /etc/rsyslog.d/10-collecteur.conf (avec sudo nano) :

# Reception des journaux des autres machines (TCP 514, reseau de laboratoire uniquement)
module(load="imtcp")
input(type="imtcp" port="514")

# Un dossier par machine, un fichier par programme
template(name="ParMachine" type="string" string="/var/log/central/%HOSTNAME%/%programname%.log")

# Format du fichier d'alertes : date, machine, message
template(name="Alerte" type="string" string="%timegenerated:::date-rfc3339% %HOSTNAME% %msg%\n")

# Les echecs de connexion sont copies dans un fichier dedie
if $msg contains "Failed password" then {
    action(type="omfile" file="/var/log/central/echecs-connexion.log" template="Alerte")
}

# Tout ce qui vient du reseau est range par machine, puis ne va pas plus loin
if $fromhost-ip != "127.0.0.1" then {
    action(type="omfile" dynaFile="ParMachine")
    stop
}
sudo rsyslogd -N1
sudo systemctl restart rsyslog
ss -ltn | grep 514

rsyslogd -N1 vérifie la syntaxe sans rien lancer. Une ligne LISTEN sur le port 514 confirme la réception.

Je comprends. Explique chaque bloc de la configuration en une phrase. Pourquoi la dernière règle contient-elle stop ? ______________________

Warning

Le port 514 en clair convient à un laboratoire isolé. En production, on chiffre (TLS) et on filtre (pare-feu, séance S05) pour que seules les sources connues puissent écrire sur le collecteur : sinon n'importe qui peut polluer les journaux avec de faux événements.

Point de contrôle : capture du fichier de configuration et de la ligne LISTEN.


Partie C – Les sources (≈ 30 min)

Sur srv1 et srv2 :

C1 – La configuration d'envoi

Crée /etc/rsyslog.d/90-envoi.conf :

*.* action(type="omfwd" target="10.20.0.1" port="514" protocol="tcp"
           action.resumeRetryCount="-1"
           queue.type="LinkedList" queue.size="10000"
           queue.filename="envoi" queue.saveOnShutdown="on")
sudo rsyslogd -N1
sudo systemctl restart rsyslog

Je comprends. protocol="tcp" plutôt qu'UDP : pourquoi ? Que font resumeRetryCount="-1" et les lignes queue.* ? ______________________

C2 – Envoyer des événements

Sur srv1, puis sur srv2 :

for i in 1 2 3; do logger -t sshd -p authpriv.warning "Failed password for invalid user admin from 203.0.113.50 port 400$i ssh2"; done
logger -t sshd "Accepted password for alice from 192.0.2.10 port 5000 ssh2"

Sur coll :

sudo find /var/log/central -type f | sort
sudo cat /var/log/central/echecs-connexion.log
sudo cat /var/log/central/srv1/sshd.log

J'anticipe. Combien de fichiers vas-tu trouver, et lesquels ? Le message Accepted figurera-t-il dans echecs-connexion.log ? ______________________

Point de contrôle : capture de find et du contenu des deux fichiers.


Partie D – Corréler (≈ 40 min)

D1 – Une règle de seuil, tous serveurs confondus

Sur coll, crée ~/correle.sh :

#!/bin/sh
# Alerte si une meme adresse source cumule au moins SEUIL echecs, tous serveurs confondus
SEUIL=${1:-5}
sudo cat /var/log/central/echecs-connexion.log \
 | awk -v s="$SEUIL" '{ for(i=1;i<=NF;i++) if($i=="from"){ip=$(i+1); n[ip]++; h[ip" "$2]=1} }
   END{ for(ip in n) if(n[ip]>=s){ c=0; for(k in h){split(k,a," "); if(a[1]==ip)c++}; print "ALERTE: "ip" : "n[ip]" echecs sur "c" serveur(s)" } }'
chmod +x ~/correle.sh
~/correle.sh 5
~/correle.sh 10

J'anticipe. Avec les six échecs de la partie C, que va afficher chaque commande ? ______________________

Je comprends. Explique ce que fait le script (lecture, comptage par adresse, comptage des machines concernées). Pourquoi une alerte sur deux serveurs est-elle plus inquiétante qu'une alerte sur un seul ? ______________________

D2 – Régler le seuil

Génère maintenant du « bruit » légitime : un échec depuis 192.0.2.10 (un collègue qui se trompe de mot de passe) sur chaque serveur, puis une attaque : huit échecs depuis 198.51.100.7 sur srv1 uniquement.

logger -t sshd -p authpriv.warning "Failed password for alice from 192.0.2.10 port 6000 ssh2"
for i in 1 2 3 4 5 6 7 8; do logger -t sshd -p authpriv.warning "Failed password for invalid user root from 198.51.100.7 port 70$i ssh2"; done

(Lance la première commande sur les deux serveurs, la boucle sur srv1 seulement.) Puis ~/correle.sh 5 sur coll.

Seuil testé Alertes obtenues Fausses alertes ? Attaque manquée ?
2
5
10

Je comprends. Quel seuil retiens-tu, et pourquoi ? Que répondrais-tu à un responsable qui demande « une alerte dès le premier échec » ? ______________________

D3 – Une règle qui n'existe pas encore

Rédige en une phrase une règle de séquence (plusieurs échecs, puis un succès depuis la même adresse) : quelles données faut-il, et où la calculer ? ______________________


Partie E – Fiabilité (≈ 30 min)

E1 – Le collecteur tombe

Sur coll : sudo systemctl stop rsyslog. Sur srv1 :

logger -t sshd -p authpriv.warning "Failed password for invalid user root from 198.51.100.99 port 9 ssh2"

Attends une minute, puis relance le collecteur (sudo systemctl start rsyslog) et, sur coll, cherche la ligne :

sudo grep 198.51.100.99 /var/log/central/echecs-connexion.log

J'anticipe. La ligne arrivera-t-elle ? Au bout de combien de temps environ ? ______________________

Je comprends. Quelle est la limite d'une file en mémoire ? Quelle option du fichier d'envoi la réduit ? ______________________

E2 – L'attaquant efface ses traces

Sur srv1 : sudo truncate -s 0 /var/log/auth.log, puis compare avec ce que le collecteur conserve de srv1.

Je comprends. Que démontre cette expérience pour la preuve (séance S15) ? Qu'est-ce qu'un attaquant avisé ferait avant d'effacer ? ______________________

E3 – Le temps

Sur chaque machine : date -u, puis timedatectl | grep -i synchronized.

Je comprends. Les trois horloges concordent-elles à la seconde ? Pourquoi est-ce indispensable pour reconstituer une chronologie, et quel service installerais-tu pour le garantir ? ______________________

Note

La synchronisation sur un serveur de temps (par exemple avec chrony) n'est pas demandée dans ce TP, car le réseau du laboratoire est isolé. Elle fait partie des recommandations à écrire en partie F.


Partie F – Conserver (≈ 25 min)

F1 – Rotation

Sur coll, crée /etc/logrotate.d/central :

/var/log/central/*.log /var/log/central/*/*.log {
    daily
    rotate 180
    compress
    delaycompress
    missingok
    notifempty
    create 0640 syslog adm
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}
sudo logrotate -d /etc/logrotate.d/central

L'option -d simule sans rien modifier.

Je comprends. Cette configuration conserve environ combien de temps ? Est-ce une valeur imposée ou un choix ? ______________________

F2 – La politique de journalisation de l'Atelier Verdier

Reprends le dossier de la séance S02. En une demi-page, rédige la politique de journalisation : sources à collecter, durée de conservation justifiée (cours, partie 6), accès aux journaux, information du personnel (S04), surveillance de l'absence de journaux, synchronisation du temps.


Retour en entreprise (si ta situation le permet)

  • Observer : où vont les journaux dans ton entreprise ? Y a-t-il un collecteur ? Pendant combien de temps les conserve-t-on, et qui les lit ?
  • Documenter : compare avec ta politique de F2.

Rendu

Compte rendu PDF, nommé RENDU-B3A2-S11-NOM.pdf, contenant les captures datées des parties A à F, le tableau des seuils (D2) et la politique de F2.

Bilan de la séance

Compétence du référentiel Ce que j'ai fait dans cette séance Niveau
B3.4 – Garantir la disponibilité, l'intégrité et la confidentialité des services informatiques et des données de l'organisation face à des cyberattaques
B3.5A – Assurer la cybersécurité d'une infrastructure réseau, d'un système, d'un service

Note

Je sais faire, sans aide :

  • Envoyer les journaux de plusieurs machines vers un collecteur ;
  • Écrire une règle de corrélation et régler son seuil ;
  • Expliquer pourquoi la centralisation protège la preuve ;
  • Justifier une durée de conservation.

Ce que je dois reprendre : ______________________