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

Trouver une attaque dans les journaux

Après cette leçon: Je peux trouver une intrusion dans un journal, la contenir et nommer la correction.

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

Des centaines d’échecs, un seul important

Le journal d'un serveur web pour une journée contient des centaines de connexions ratées. La plupart viennent de robots qui n'entrent jamais. Quelques-unes sont le propriétaire qui se trompe de mot de passe.

Une adresse est différente. Elle échoue encore et encore, puis elle réussit.

Cette leçon trouve cette adresse, la met dehors et ferme le trou qu'elle a utilisé.

À la fin de cette leçon

Remarque

Je peux trouver une intrusion dans un journal, la contenir et nommer la correction.

Mots clés

MotCe que ça veut dire
Journalun fichier où un système note ce qui s'est passé, une ligne à chaque fois
Force bruteessayer beaucoup de mots de passe jusqu'à ce qu'un marche
Adresse sourcel'adresse réseau d'où une connexion est venue
Confinementarrêter le dommage avant qu'il s'étende, avant de réparer la cause
Bruitdes lignes de journal qui font peur et ne veulent rien dire
Pivotle fait unique qui sépare une attaque du bruit

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

Compter d'abord, puis demander qui est entré

Le cas est une copie du journal SSH d'un serveur, dans le dossier case. Il est en lecture seule, pour que la preuve reste telle quelle.

Un gros nombre n'est pas une attaque à lui seul. Comptez d'abord les échecs de chaque adresse. Demandez ensuite quelles adresses sont entrées un jour.

Compter les connexions ratées par adresse

Commande
grep "Failed password" case/var/log/auth.log | awk '{for (i = 1; i <= NF; i++) if ($i == "from") print $(i + 1)}' | sort | uniq -c | sort -rn | head -n 3

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.

Les trois premières

Le Run a écrit trois lignes, chacune avec un nombre et une adresse. Sur la machine d'essai, les nombres étaient 260, 70 et 3. Les adresses sont les mêmes pour tous les étudiants de ce labo.

L'adresse aux 260 échecs est la plus bruyante. Bruyant ne veut pas dire dangereux : ne vous arrêtez pas là.

Qui est entré, et d'où ?

Commande
awk '$6 == "Accepted" {print $9, $11}' case/var/log/auth.log | 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.

Garder les adresses qui sont entrées

Commande
awk '$6 == "Accepted" {print $11}' case/var/log/auth.log | sort -u > acceptes.txt

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.

Quelle adresse bruyante est aussi entrée ?

Commande
awk '$6 == "Failed" {for (i = 1; i <= NF; i++) if ($i == "from") print $(i + 1)}' case/var/log/auth.log | sort | uniq -c | awk '$1 >= 20 {print $2}' | sort | comm -12 - acceptes.txt | tee suspect.txt

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.

Voir sa première connexion réussie

Commande
grep Accepted case/var/log/auth.log | grep -F -f suspect.txt | head -n 1

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.

Ce qu'ont trouvé les quatre Run

Le premier a écrit trois groupes. L'administrateur est entré depuis l'adresse du bureau, et une fois depuis l'adresse où il s'était trompé en tapant. Un troisième compte est entré deux fois depuis l'adresse du suspect.

Le Run du pivot a écrit une adresse. Elle a échoué au moins vingt fois, puis réussi. Le dernier Run a montré la ligne de sa première réussite, avec l'heure et le compte.

Contenir d'abord, puis corriger la cause

Quand vous savez, faites les étapes dans cet ordre. Le confinement est rapide et peut être défait. La correction est plus longue et doit être juste.

Ne supprimez encore rien. La preuve sert à savoir ce qui a été touché d'autre.

Exemple : de la ligne à la correction

ÉtapeCe que vous faitesPourquoi
DétecterCompter les échecs par adresse, puis voir qui est entréTrouve le pivot
ContenirVerrouiller le compte et refuser l'adresseL'intrus ne peut plus s'en servir
Corriger la causeClés SSH seulement, une règle pour le port, pas de mot de passeLe même essai ne peut plus marcher
VérifierChercher ce qui a été laissé : clés, tâches, nouveaux comptesFerme un second chemin de retour

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

S'entraîner à contenir sur un compte à vous

Vous ne touchez aucun compte du cas. Créez un compte jetable appelé demo7, verrouillez-le, lisez son état et supprimez-le.

Un compte verrouillé ne peut plus se connecter avec un mot de passe, et rien n'est supprimé. C'est pourquoi c'est la première étape.

Créer le compte jetable

Commande
sudo useradd -m -s /bin/bash demo7

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.

Verrouiller son mot de passe

Commande
sudo passwd -l demo7

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.

Lire son état

Commande
sudo passwd -S demo7

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.

Supprimer le compte et son dossier

Commande
sudo userdel -r demo7

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.

Ce qu'ont écrit les Run du compte

Le Run de verrouillage a écrit passwd: password changed.. Le Run d'état a écrit une ligne qui commence par demo7 L. La lettre L veut dire verrouillé. Un compte qui peut se connecter montre P.

Le Run de suppression peut écrire un avertissement sur une boîte aux lettres. C'est sans danger : le compte n'a jamais eu de courrier.

Supprimer les deux fichiers créés

Commande
rm acceptes.txt suspect.txt

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 erreur fréquente

Attention

Beaucoup de gens bloquent l'adresse qui a le plus d'échecs et déclarent l'incident clos. Cette adresse n'est jamais entrée. Celle qui l'a fait est plus discrète, et elle est encore dedans. Demandez toujours qui a réussi, puis vérifiez ce qu'il a changé.

Aller plus loin : que faisait aussi l'adresse ?

Regardez le journal du serveur web, case/var/log/nginx/access.log. Relancez les deux Run qui enregistrent pour refaire suspect.txt, puis comptez les requêtes de cette adresse avec grep -c -F -f suspect.txt. Supprimez ensuite les deux fichiers.

Écrivez une phrase : que demandait-elle, une heure avant de commencer à deviner des mots de passe ?

À 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.