Une adresse essaie tous les ports
Repérer une attaque réseau, c'est reconnaître dans le trafic et les journaux des traces qui ne ressemblent pas à un usage normal. Plus tôt on les voit, moins l'attaquant a de temps.
Le serveur d'une école d'ingénieurs reçoit des milliers de demandes chaque nuit. Parmi elles, une adresse en essaie cent différentes en quelques secondes. Cette leçon apprend à la voir.
À la fin de cette leçon
Remarque
Je peux reconnaître une analyse de ports ou une série d'échecs dans des lignes de journal.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Journal | un fichier où un système note ce qui se passe, ligne par ligne |
| Signature | une trace connue qui décrit une attaque précise |
| Seuil | la valeur à partir de laquelle on déclenche une alerte |
| Force brute | essayer très vite beaucoup de mots de passe |
| Faux positif | une alerte déclenchée par un usage normal |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Deux manières de reconnaître une attaque
La première cherche une signature : une trace déjà connue, par exemple une demande qui contient un morceau de code malveillant. Elle est précise mais ne voit pas ce qu'on n'a jamais vu.
La seconde cherche un comportement inhabituel : trop de demandes, trop d'échecs, trop de ports. Elle voit du nouveau, mais se trompe plus souvent.
Exemple : deux méthodes comparées
| Méthode | Elle repère | Sa faiblesse |
|---|---|---|
| Signature | Une attaque déjà connue | Rate une attaque nouvelle |
| Taux inhabituel | Beaucoup de demandes en peu de temps | Déclenche aussi pour un usage normal |
| Nombre de ports | Une analyse de ports | Un outil de supervision fait pareil |
| Échecs répétés | Une force brute sur un mot de passe | Un utilisateur distrait échoue aussi |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un journal compte, ligne par ligne
Le serveur extérieur du labo note chaque demande dans /var/log/netlab/outside-server.log : l'heure, l'adresse qui demande, puis le chemin. Un journal de pare-feu ou de serveur suit une idée semblable.
Pour repérer un comportement, on ne lit pas mille lignes. On compte : combien de lignes par adresse, combien de ports différents, combien d'échecs.
Exemple : cinq lignes de journal
| Adresse | Port visé | Lignes | Ce que cela suggère |
|---|---|---|---|
| 203.0.113.9 | 22, 23, 80, 445 | 4 lignes, 4 ports | Une analyse de ports |
| 198.51.100.4 | 443 | 1 ligne | Un usage normal |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Compter les lignes par adresse
printf '203.0.113.9 22\n203.0.113.9 23\n203.0.113.9 80\n198.51.100.4 443\n203.0.113.9 445\n' | cut -d' ' -f1 | 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.
Comment lire ce compte
Les cinq lignes inventées sortent de printf. cut garde la première colonne, sort range les adresses, et uniq -c compte les lignes identiques qui se suivent.
Vous lisez deux lignes : 198.51.100.4 avec 1, puis 203.0.113.9 avec 4. Une adresse en a quatre, c'est elle qu'on regarde de plus près.
Compter les ports différents
printf '203.0.113.9 22\n203.0.113.9 22\n203.0.113.9 80\n' | sort -u | wc -lAffiché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 ports différents comptent, pas les lignes
La commande affiche 2. L'adresse a écrit trois lignes, mais le port 22 revient deux fois, et sort -u ne garde qu'un exemplaire de chaque ligne.
C'est le bon chiffre pour une analyse de ports. Un essai répété sur le même port est peut-être une panne. Cent ports différents sont une exploration.
Un seuil transforme un compte en alerte
Un seuil dit à partir de quand un compte devient une alerte. Par exemple : plus de dix ports différents pour une adresse en une minute.
Trop bas, il déclenche tout le temps, et personne ne lit plus les alertes. Trop haut, il laisse passer un attaquant patient. On le règle avec les journaux d'un jour normal.
Appliquer un seuil à un compte
# Le nombre de ports différents vus pour chaque adresse.
ports_vus = {
"203.0.113.9": 4,
"198.51.100.4": 1,
"192.0.2.77": 12,
}
seuil = 5
for adresse in ports_vus:
if ports_vus[adresse] >= seuil:
print("alerte pour", adresse)
# À vous : montez le seuil à 20, puis descendez-le à 1, et comparez.
Une erreur fréquente
Attention
On croit souvent qu'une alerte prouve une attaque. Elle prouve seulement qu'un compte a dépassé le seuil. Un outil de supervision qui teste vos propres ports déclenche la même alerte : c'est un faux positif. Il faut vérifier avant de conclure.