Qu’est-ce qu’une règle de détection ?
Une règle de détection est un test écrit une fois, qui lit les lignes d’un journal et lève une alerte quand il reconnaît une attaque. Au lieu de lire mille lignes à la main, vous laissez le test les lire pour vous.
Une équipe de sécurité en écrit des dizaines. Chacune cherche un comportement précis, comme trop d’échecs de connexion en peu de temps.
À la fin de cette leçon
Remarque
Je peux écrire une règle qui trouve une attaque dans des journaux.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Règle de détection | un test qui lit des journaux et signale une attaque | |
| Motif | le morceau de texte que la règle cherche | Failed password |
| Seuil | le nombre à partir duquel la règle sonne | 5 échecs |
| Fenêtre | la durée pendant laquelle la règle compte | 60 secondes |
| Force brute | essayer très vite beaucoup de mots de passe | |
| Faux négatif | une attaque que la règle n’a pas vue |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une règle commence par un motif
Une attaque laisse une trace dans les journaux, et la règle cherche cette trace. Une devinette de mots de passe laisse beaucoup de lignes « Failed password ». Un scanner demande des pages qui n’existent pas.
La commande grep cherche un motif. Avec -E, elle accepte plusieurs motifs séparés par une barre verticale.
Exemple travaillé : un motif par attaque
| Attaque | Motif à chercher | Journal |
|---|---|---|
| Devinette de mots de passe | Failed password | Connexions |
| Scanner de pages | Des pages comme .env ou wp-login.php | Serveur web |
| Essais sur des comptes inexistants | Invalid user | Connexions |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Compter un motif sur trois lignes inventées
printf 'Failed password for root from 10.0.0.9\nAccepted password for lea from 10.0.0.4\nFailed password for admin from 10.0.0.9\n' | grep -c "Failed password"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Compter deux motifs dans les connexions
grep -c -E "Invalid user|Failed password" case/var/log/auth.logAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Compter les demandes de pages de sondage
grep -c -E "\.env|wp-login|xmlrpc|phpmyadmin" case/var/log/nginx/access.logAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un seuil sépare le normal de l’attaque
Un échec de connexion n’est pas une attaque : une personne peut se tromper de touche. Vingt échecs de la même adresse en une minute, c’est autre chose.
Le seuil est le nombre à partir duquel la règle sonne. Trop bas, il donne des faux positifs. Trop haut, il laisse passer des attaques : ce sont des faux négatifs. Réglez-le d’abord sur des journaux normaux.
Exemple travaillé : un seuil de cinq échecs
| Adresse | Échecs en une minute | La règle sonne ? |
|---|---|---|
| 198.51.100.7 | 2 | Non : une faute de frappe |
| 198.51.100.8 | 6 | Oui : au moins cinq |
| 198.51.100.9 | 5 | Oui : le seuil est atteint |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Compter des échecs par minute
printf '02:11:03\n02:11:09\n02:11:40\n02:12:05\n' | cut -c1-5 | sort | uniq -cAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une fenêtre glissante ne coupe pas l’attaque
Compter par minute entière a un défaut. Une attaque qui commence à 02:11:50 se coupe en deux : une partie dans la minute 02:11, l’autre dans la minute 02:12.
Une fenêtre glissante part de chaque échec et compte tout ce qui arrive pendant la durée choisie. Elle ne coupe jamais une attaque en deux.
Exemple travaillé : huit échecs sur deux minutes
| Méthode | Ce qu’elle compte | Seuil de 5 atteint ? |
|---|---|---|
| Minutes fixes | 4 échecs en 02:11, puis 4 en 02:12 | Non : l’attaque passe |
| Fenêtre de 60 secondes | 8 échecs entre 02:11:50 et 02:12:09 | Oui : 8 est au moins 5 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Voir la coupure des minutes fixes
printf '02:11:50\n02:11:55\n02:11:58\n02:11:59\n02:12:00\n02:12:03\n02:12:06\n02:12:09\n' | cut -c1-5 | sort | uniq -cAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Compter dans une fenêtre
# Secondes des échecs, comptées depuis 02:11:00.
secondes = [50, 55, 58, 59, 60, 63, 66, 69]
debut = 50
largeur = 60
total = 0
for s in secondes:
# La fenêtre garde le début et exclut la fin.
if s >= debut and s < debut + largeur:
total = total + 1
print(total)
# À vous : mettez debut à 59, puis relancez. Combien en reste-t-il ?
Erreur fréquente
Attention
Beaucoup de gens pensent qu’une règle plus sensible est toujours meilleure. Un seuil trop bas déclenche des faux positifs, et l’équipe cesse de regarder. Un seuil trop haut manque l’attaque. Testez la règle sur des journaux normaux, puis sur une attaque connue.