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
| Mot | Ce que ça veut dire |
|---|---|
| Journal | un fichier où un système note ce qui s'est passé, une ligne à chaque fois |
| Force brute | essayer beaucoup de mots de passe jusqu'à ce qu'un marche |
| Adresse source | l'adresse réseau d'où une connexion est venue |
| Confinement | arrêter le dommage avant qu'il s'étende, avant de réparer la cause |
| Bruit | des lignes de journal qui font peur et ne veulent rien dire |
| Pivot | le 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
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 3Affiché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ù ?
awk '$6 == "Accepted" {print $9, $11}' case/var/log/auth.log | 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.
Garder les adresses qui sont entrées
awk '$6 == "Accepted" {print $11}' case/var/log/auth.log | sort -u > acceptes.txtAffiché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 ?
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.txtAffiché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
grep Accepted case/var/log/auth.log | grep -F -f suspect.txt | head -n 1Affiché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
| Étape | Ce que vous faites | Pourquoi |
|---|---|---|
| Détecter | Compter les échecs par adresse, puis voir qui est entré | Trouve le pivot |
| Contenir | Verrouiller le compte et refuser l'adresse | L'intrus ne peut plus s'en servir |
| Corriger la cause | Clés SSH seulement, une règle pour le port, pas de mot de passe | Le même essai ne peut plus marcher |
| Vérifier | Chercher ce qui a été laissé : clés, tâches, nouveaux comptes | Ferme 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
sudo useradd -m -s /bin/bash demo7Affiché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
sudo passwd -l demo7Affiché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
sudo passwd -S demo7Affiché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
sudo userdel -r demo7Affiché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
rm acceptes.txt suspect.txtAffiché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 ?