Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Écrire une règle de détection

Après cette leçon: Je peux écrire une règle qui trouve une attaque dans des journaux.

Leçon de 60 min5 commandesLab de réponse à incident et d’investigation : enquêter sur un serveur compromis

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

MotCe que ça veut direExemple
Règle de détectionun test qui lit des journaux et signale une attaque
Motifle morceau de texte que la règle chercheFailed password
Seuille nombre à partir duquel la règle sonne5 échecs
Fenêtrela durée pendant laquelle la règle compte60 secondes
Force bruteessayer très vite beaucoup de mots de passe
Faux négatifune 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

AttaqueMotif à chercherJournal
Devinette de mots de passeFailed passwordConnexions
Scanner de pagesDes pages comme .env ou wp-login.phpServeur web
Essais sur des comptes inexistantsInvalid userConnexions

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Compter un motif sur trois lignes inventées

Commande
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

Commande
grep -c -E "Invalid user|Failed password" case/var/log/auth.log

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 les demandes de pages de sondage

Commande
grep -c -E "\.env|wp-login|xmlrpc|phpmyadmin" case/var/log/nginx/access.log

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.

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 minuteLa règle sonne ?
198.51.100.72Non : une faute de frappe
198.51.100.86Oui : au moins cinq
198.51.100.95Oui : le seuil est atteint

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Compter des échecs par minute

Commande
printf '02:11:03\n02:11:09\n02:11:40\n02:12:05\n' | cut -c1-5 | sort | uniq -c

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.

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éthodeCe qu’elle compteSeuil de 5 atteint ?
Minutes fixes4 échecs en 02:11, puis 4 en 02:12Non : l’attaque passe
Fenêtre de 60 secondes8 échecs entre 02:11:50 et 02:12:09Oui : 8 est au moins 5

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Voir la coupure des minutes fixes

Commande
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 -c

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 dans une fenêtre

Code: python
# 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.

À propos de ce labo et de sa source: Lab de réponse à incident et d’investigation : enquêter sur un serveur compromis

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.