Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 1122 minIntermédiaire

Détecter les incidents types : force brute, compte administrateur, PowerShell

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • reconnaître les symptômes d'une attaque par force brute ou par pulvérisation ;
  • repérer la création d'un compte ou l'ajout à un groupe d'administration ;
  • identifier une exécution PowerShell suspecte dans Sysmon et le journal 4104 ;
  • qualifier une alerte et décider de la suite.

3 exercices corrigés1 schéma

Détecter un incident avec Wazuh, c'est reconnaître dans les alertes les symptômes d'une attaque connue (une rafale d'échecs de connexion, un compte ajouté à un groupe d'administration, un script PowerShell masqué), puis les qualifier : vraie attaque, fausse alerte ou action légitime mais inhabituelle. Ce chapitre décrit, pour les incidents les plus courants dans une PME, les traces qu'ils laissent dans les journaux, les règles de Wazuh qui se déclenchent, les règles personnalisées qui complètent la détection, et ce qu'il faut vérifier avant de décider. Les attaques sont décrites par leurs traces, jamais par les moyens de les mener.

De l'alerte à la décision

Face à une alerte, la même démarche à chaque fois :

  1. Lire : quelle règle, quel niveau, quelle machine (agent.name), quel compte, quelle adresse source, à quelle heure ?
  2. Remettre en contexte : que s'est-il passé juste avant et juste après, sur la même machine, avec le même compte, depuis la même adresse ? Une recherche sur une heure autour de l'alerte (chapitre 10).
  3. Qualifier l'alerte :
QualificationSensExemple
Vrai positifUne attaque, ou une action malveillante, a bien eu lieu312 mots de passe essayés sur un compte, puis un succès
Faux positifLa règle s'est trompée : rien d'anormalLe copieur qui échoue avec un ancien mot de passe (chapitre 7)
Vrai positif béninL'événement est réel et inhabituel, mais autoriséUn administrateur qui modifie un groupe la nuit, avec un ticket de changement
  1. Décider : clore l'alerte avec une justification ; ou ouvrir un incident et déclencher la réponse à incident (confinement, éradication, retour à la normale) ; ou escalader à quelqu'un de plus expérimenté.
  2. Tracer : la décision, ses raisons et les vérifications faites vont dans le ticket. Un faux positif récurrent devient une exception documentée ou une correction de la cause.

Force brute sur SSH

Le principe. L'attaquant essaie des mots de passe en série sur un compte, ou des comptes courants (root, admin, deploy) avec des mots de passe courants, jusqu'à en trouver un qui marche.

Les traces. Sur srv-web, dans journald, des dizaines de lignes en quelques minutes, depuis la même adresse :

text
Nov  3 02:58:41 srv-web sshd-session[3101]: Invalid user admin from 192.168.10.71 port 40112
Nov  3 02:58:42 srv-web sshd-session[3101]: Failed password for invalid user admin from 192.168.10.71 port 40112 ssh2
Nov  3 02:58:46 srv-web sshd-session[3102]: Failed password for root from 192.168.10.71 port 40114 ssh2
...
Nov  3 03:00:50 srv-web sshd-session[3139]: Accepted password for deploy from 192.168.10.71 port 40256 ssh2

Les alertes de Wazuh.

RègleNiveauDescriptionDéclencheur
57105sshd: Attempt to login using a non-existent userUn essai sur un compte qui n'existe pas
571210sshd: brute force trying to get access to the system. Non existent user.8 essais sur des comptes inexistants en 120 s, même source
57605sshd: authentication failed.Un mauvais mot de passe pour un compte existant
576310sshd: brute force trying to get access to the system. Authentication failed.8 échecs en 120 s, même source
57153sshd: authentication success.Une connexion réussie
4011212Multiple authentication failures followed by a success.Un succès venant d'une adresse qui vient de déclencher une alerte d'échecs multiples, dans les 240 s

La règle 40112 est celle qui compte : des échecs en rafale, c'est une tentative ; un succès juste après, depuis la même adresse, c'est probablement une réussite. La tentative relève de la surveillance, la réussite d'un incident.

Vérifier. L'adresse source est-elle connue (le poste .71 est celui d'un salarié du VLAN 10, il n'a aucune raison de faire du SSH vers un serveur de la DMZ) ? Le compte qui a réussi est-il légitime, et cette connexion était-elle prévue ? Qu'a fait la session ensuite (commandes sudo, fichiers modifiés, alertes FIM) ?

Réagir. Si la réussite est confirmée : couper la session et désactiver le compte, isoler srv-web, examiner le poste source, qui est lui-même probablement compromis. Pour prévenir : SSH par clé uniquement, connexion limitée au VLAN d'administration, et la règle de niveau 10 sur root du chapitre 7.

Force brute sur l'annuaire

Les traces. Sur le contrôleur de domaine, des 4625 en série sur un même compte, depuis la même adresse, avec le code d'erreur 0xC000006A (mauvais mot de passe) ; puis, si la stratégie de verrouillage est en place, un 4740 (compte verrouillé) ; parfois un 4624 final.

RègleNiveauDescription
601225Logon Failure - Unknown user or bad password
6020410Multiple Windows Logon Failures (8 échecs en 240 s depuis la même adresse)
601159User account locked out (multiple login errors)

Pour repérer un succès après une rafale, l'équivalent Windows de la règle 40112, une règle personnalisée rapproche une ouverture de session réussie (60106) d'une alerte d'échecs multiples venue de la même adresse :

xml
<group name="sorbier,windows,">
  <rule id="100300" level="12" timeframe="300">
    <if_sid>60106, 92651, 92652, 92653, 92657</if_sid>
    <if_matched_sid>60204</if_matched_sid>
    <same_field>win.eventdata.ipAddress</same_field>
    <description>Sorbier : ouverture de session réussie après une rafale d'échecs depuis la même adresse</description>
    <mitre>
      <id>T1110</id>
      <id>T1078</id>
    </mitre>
  </rule>
</group>

<if_sid> désigne l'événement qui déclenche (une connexion réussie), <if_matched_sid> celui qui doit s'être produit dans les 300 secondes précédentes (l'alerte d'échecs multiples), et <same_field> exige la même adresse source dans les deux.

Pourquoi cinq parents et pas seulement 60106 ? Parce qu'une règle n'est évaluée que si aucune de ses « sœurs » plus prioritaires n'a déjà pris l'événement. Wazuh fournit sous 60106 une règle de niveau 0, 92651 « Successful Remote Logon », qui intercepte toute connexion réussie venue d'une adresse IPv4 distante ; les règles de niveau 0 sont évaluées en premier. Sous elle, 92652 (authentification NTLM, niveau 6) et 92653 (bureau à distance, niveau 3) prennent le relais, et 92657 est l'enfant de 92652 quand le nom du poste client est renseigné. Une règle accrochée au seul 60106 ne serait donc jamais évaluée pour une connexion réseau ou RDP réussie, c'est-à-dire exactement le cas visé. D'où la liste de parents.

Pulvérisation de mots de passe

Le principe. La pulvérisation (password spraying) inverse la force brute : un mot de passe courant (Sorbier2026!, Bienvenue1) essayé sur beaucoup de comptes, un ou deux essais chacun. Aucun compte n'atteint le seuil de verrouillage, et les règles qui comptent les échecs par compte ne voient rien.

Les traces. Des 4625 depuis une même adresse, chacun sur un compte différent, étalés sur quelques minutes. Une règle personnalisée compte exactement ce motif :

xml
<group name="sorbier,windows,">
  <rule id="100310" level="12" frequency="10" timeframe="300">
    <if_sid>60122, 60204</if_sid>
    <if_matched_sid>60122</if_matched_sid>
    <same_field>win.eventdata.ipAddress</same_field>
    <different_field>win.eventdata.targetUserName</different_field>
    <description>Sorbier : échecs de connexion sur de nombreux comptes depuis la même adresse (pulvérisation)</description>
    <mitre>
      <id>T1110.003</id>
    </mitre>
    <group>authentication_failures,</group>
  </rule>
</group>

Dix échecs en cinq minutes, depuis la même adresse, sur des comptes différents : niveau 12. La règle compte les événements 60122, mais elle est aussi accrochée à 60204 : dès que huit échecs venus de la même adresse sont réunis en quatre minutes, la règle fournie 60204, évaluée avant la tienne, peut classer l'événement à la place de 60122 ; une règle accrochée au seul 60122 risquerait alors de ne plus être évaluée au moment précis où la pulvérisation devient visible. Une pulvérisation qui passe par Kerberos produit, sur le contrôleur, des 4771 (échec de pré-authentification) plutôt que des 4625 ; une seconde règle sur le même modèle couvre ce cas.

Réagir. Identifier les comptes visés, vérifier si l'un d'eux a ensuite réussi à se connecter (un 4624 depuis la même adresse), forcer le changement de mot de passe des comptes concernés, et revoir la politique de mots de passe : un mot de passe comme Sorbier2026! ne devrait pas pouvoir exister.

Un nouveau compte d'administration

Le principe. Une fois entré, l'attaquant veut rester et monter en droits : il crée un compte à lui, ou en réutilise un, et l'ajoute à un groupe d'administration.

Les traces et les alertes.

ÉvénementSensRègle WazuhNiveau
4720Compte utilisateur créé60109 « User account enabled or created »8
4728 sur Admins du domaineMembre ajouté au groupe global60159 « Domain Admins Group Changed »12
4732 sur AdministrateursMembre ajouté au groupe local intégré60154 « Administrators Group Changed »12
4756Membre ajouté à un groupe universel (comme Administrateurs de l'entreprise)60113 et ses enfantsselon le groupe

Wazuh reconnaît les groupes sensibles par leur SID, qui ne change pas avec la langue du système : S-1-5-32-544 pour Administrateurs, un SID qui se termine par -512 pour Admins du domaine. Un domaine en français est donc couvert comme un domaine en anglais.

L'enchaînement « compte créé, puis ajouté à un groupe d'administration dans l'heure » est caractéristique. Une règle le signale :

xml
<group name="sorbier,windows,">
  <rule id="100320" level="14" timeframe="3600">
    <if_sid>60154,60159</if_sid>
    <if_matched_sid>60109</if_matched_sid>
    <description>Sorbier : compte créé puis groupe d'administration modifié dans l'heure</description>
    <mitre>
      <id>T1136.002</id>
      <id>T1098.007</id>
    </mitre>
  </rule>
</group>

Elle ne vérifie pas qu'il s'agit du même compte (le 4720 et le 4728 ne rangent pas le compte dans le même champ) : c'est à l'analyste de le constater en ouvrant les deux alertes. Avec la règle 100110 du chapitre 7, qui monte au niveau 14 toute modification de ces groupes la nuit, les cas graves sont couverts.

Vérifier. Qui a fait la modification (le champ subjectUserName de l'événement) ? Un ticket de changement existe-t-il ? Le compte ajouté est-il nominatif, connu, et doit-il être administrateur ? Un compte de service qui ajoute quelqu'un à Admins du domaine n'a aucune raison légitime de le faire : son mot de passe est probablement volé.

Réagir. Retirer le compte du groupe, le désactiver, réinitialiser le mot de passe du compte qui a fait la modification, et chercher ce que le nouveau compte a fait depuis sa création (connexions 4624 avec son nom). La protection de l'annuaire (comptes à privilèges, modèle en tiers) est traitée dans le cours Sécurité de l'Active Directory, qui liste aussi les événements à surveiller.

Un PowerShell suspect

Le principe. PowerShell est l'outil d'administration de Windows, donc aussi l'outil préféré des attaquants : il est présent partout, signé par Microsoft, et peut télécharger et exécuter du code en mémoire. Les attaquants masquent leurs commandes, en particulier en les encodant en Base64 (paramètre -EncodedCommand et ses abréviations), pour qu'un antivirus ou un administrateur ne les reconnaisse pas.

Les traces. Elles n'existent que si les sources du chapitre 5 sont actives :

  • Sysmon, événement 1 : powershell.exe lancé avec une longue chaîne encodée sur sa ligne de commande, et surtout son processus parent : PowerShell lancé par WINWORD.EXE ou OUTLOOK.EXE, c'est presque toujours une pièce jointe piégée ;
  • PowerShell/Operational, événement 4104 : le code réellement exécuté, décodé, qui contient par exemple FromBase64String ou le téléchargement d'un contenu distant.
RègleNiveauDescription
9205712Powershell.exe spawned a powershell process which executed a base64 encoded command
9180910Powershell script may be using Base64 decoding method
9180314Screen capture method invoked from PowerShell script

Les règles fournies ne couvrent pas tous les parents suspects. Celle-ci, accrochée à la création de processus de Sysmon (règle 61603, niveau 0), alerte quand une application Office lance un interpréteur de commandes :

xml
<group name="sorbier,sysmon,">
  <rule id="100330" level="12">
    <if_sid>61603, 92021, 92028</if_sid>
    <field name="win.eventdata.parentImage" type="pcre2">(?i)\\(winword|excel|powerpnt|outlook)\.exe$</field>
    <field name="win.eventdata.image" type="pcre2">(?i)\\(powershell|pwsh|cmd|wscript|cscript|mshta)\.exe$</field>
    <description>Sorbier : une application Office a lancé un interpréteur de commandes</description>
    <mitre>
      <id>T1059</id>
      <id>T1566.001</id>
    </mitre>
  </rule>
</group>

T1566.001 est la sous-technique Spearphishing Attachment : la pièce jointe piégée, très probable origine de ce lancement. Les deux parents supplémentaires viennent des règles fournies : une règle fournie peut correspondre avant la tienne. 92028 « Powershell executed script », de niveau 0, prend tout PowerShell lancé avec un fichier de script (.ps1, .bat, .vbs…) sur sa ligne de commande, et 92021 tout PowerShell qui supprime des fichiers : sans elles dans <if_sid>, une macro qui lance powershell.exe -File … ne serait jamais vue par la règle. Teste la règle sur une machine de laboratoire en provoquant l'événement légitimement (une macro de test que tu as écrite toi-même, qui lance cmd.exe et ne fait rien d'autre), et vérifie dans l'alerte quel rule.id a été retenu. Une application Office qui lance mshta.exe est déjà couverte par la règle fournie 92047 (niveau 12).

Vérifier. Quel utilisateur, quel document ouvert juste avant (Sysmon 11, fichiers créés), quelles connexions réseau a faites le processus (Sysmon 3, 22) ? Le contenu du 4104 montre ce que le script a voulu faire.

Réagir. Isoler le poste du réseau (sans l'éteindre), bloquer au pare-feu les adresses contactées, chercher le même document ou les mêmes adresses sur les autres machines (indicateurs de compromission), et réinitialiser le mot de passe de l'utilisateur.

Journal effacé, service installé, agent arrêté

Trois traces de l'attaquant qui s'installe ou se cache :

Ce qui se passeÉvénementRègle WazuhCe qu'il faut savoir
Le journal Sécurité est effacé110260117, niveau 9 (12 avec l'overwrite du chapitre 7)Toujours suspect. Les événements déjà envoyés à Wazuh restent : c'est tout l'intérêt de la centralisation
Un service est installé7045 (Système)61138 « New Windows Service Created », niveau 5Normal lors d'une installation de logiciel ; suspect si le programme est dans un dossier utilisateur ou temporaire
L'agent Wazuh s'arrête—506 « Wazuh agent stopped », niveau 3Un attaquant coupe ce qui le surveille ; sur un serveur qui ne s'arrête jamais, c'est grave
L'agent ne donne plus de nouvelles—504 « Wazuh agent disconnected », niveau 3Machine éteinte, réseau coupé, ou agent neutralisé

Les postes s'éteignent tous les soirs : les règles 504 et 506 restent au niveau 3 pour eux. Pour les serveurs, une règle les relève, en reconnaissant le nom de l'agent dans le message :

xml
<group name="sorbier,wazuh,">
  <rule id="100340" level="12">
    <if_sid>504,506</if_sid>
    <match>srv-ad|srv-fichiers|srv-gestion|srv-collecte|srv-web</match>
    <description>Sorbier : l'agent Wazuh d'un serveur s'est arrêté ou ne répond plus</description>
    <mitre>
      <id>T1685</id>
    </mitre>
  </rule>
</group>

Le nom de l'agent figure bien dans le message, que le serveur Wazuh fabrique lui-même : ossec: Agent disconnected: 'srv-ad-any'. pour la règle 504 (le nom, un tiret, puis l'adresse enregistrée, any par défaut), ossec: Agent stopped: 'srv-ad->any'. pour la règle 506. srv-ad couvre aussi srv-ad2, puisque <match> cherche le texte n'importe où dans le message. Lors d'une maintenance planifiée d'un serveur, l'alerte est attendue : on la rattache au ticket de changement.

Un balayage vu par le pare-feu

Les traces. Dans le journal de pfSense, des dizaines de paquets bloqués en quelques secondes depuis la même adresse, vers des ports ou des adresses qui se suivent. Wazuh lève la règle 87702 (18 blocages en 45 secondes depuis la même source, niveau 10). Depuis Internet, c'est le bruit de fond permanent des robots : on le constate, on ne s'en alarme pas. Depuis l'intérieur (un poste du VLAN 10 qui balaie le VLAN 20), c'est tout autre chose : une machine compromise qui explore le réseau (Discovery). Même règle, même niveau, gravité réelle très différente : c'est la remise en contexte qui fait la différence.

2 h 503 h 452 h 585763, niveau 10échecs SSH répétésCredential Access3 h 0040112, niveau 12succès après échecsInitial Access3 h 1287702, niveau 10balayage bloquéDiscovery3 h 21100110, niveau 14Admins du domainePrivilege Escalation3 h 4060117journal effacéDefense ImpairmentSeule, chaque alerte passe pour du bruit ; ensemble, elles racontent l'intrusion.
Une intrusion en cinq alertes : c'est l'enchaînement, sur une même nuit et autour des mêmes machines, qui la révèle

Exercices

Exercice 1 sur 3 Lire une alerte et décider Réussi À revoir

Un mardi à 10 h 05, tu reçois cette alerte. Qualifie-la (vrai positif, faux positif, vrai positif bénin), dis ce que tu vérifies et ce que tu fais.

ChampValeur
rule.id, rule.level60159, 12
rule.descriptionDomain Admins Group Changed
agent.namesrv-ad
data.win.system.eventID4728
data.win.eventdata.subjectUserNameadm0-amercier
data.win.eventdata.memberNameCN=adm0-mdiallo,OU=Administration,OU=Sorbier,DC=ad,DC=sorbier,DC=example

Dans l'outil de tickets, une demande de changement validée la veille prévoit de « donner à Moussa Diallo son compte d'administration du domaine pour la migration des serveurs ».

Voir la réponseMasquer la réponse de l'exercice 1

Vrai positif bénin : l'événement est réel (un compte a bien été ajouté à Admins du domaine), mais il est autorisé : fait par le compte d'administration de tier 0 du responsable, adm0-amercier, en heures ouvrées, pour un compte d'administration séparé (adm0-mdiallo) d'un technicien, conformément à un changement validé.

Vérifications : le compte ajouté est bien le compte d'administration de Moussa Diallo, pas son compte de tous les jours ; la modification a été faite depuis le poste d'administration (alerte 4624 associée, adresse dans le VLAN 99) ; le changement prévoit une durée (la migration) ou non.

Actions : clore l'alerte en la rattachant au ticket de changement. Si la migration est temporaire, programmer le retrait du compte du groupe à la fin, car Admins du domaine doit rester réduit au strict minimum.

Tu avais trouvé ?

Exercice 2 sur 3 Pulvérisation ou force brute ? Réussi À revoir

Voici deux extraits d'alertes 60122 sur srv-ad, chacun sur cinq minutes. Pour chacun, dis de quoi il s'agit, quelle règle (fournie ou personnalisée de ce chapitre) se déclenche, et ce que tu vérifies en premier.

Extrait A : 40 échecs, tous sur le compte clambert, depuis 192.168.10.84.

Extrait B : 26 échecs, sur 26 comptes différents (amercier, jlefevre, kmorel…), un par compte, depuis 192.168.10.84.

Voir la réponseMasquer la réponse de l'exercice 2
  • A, force brute sur un seul compte : la règle 60204 (niveau 10) se déclenche dès 8 échecs en 4 minutes, et si le verrouillage est en place, 60115 (compte verrouillé). Première vérification : y a-t-il eu un succès (4624) de clambert depuis .84 juste après ? Si oui, la règle 100300 l'aura signalé, à condition d'être accrochée aux règles qui classent réellement les connexions réussies (92651 et ses enfants, pas seulement 60106). Puis : qui utilise le poste .84 ? Peut-être Chloé Lambert elle-même, avec un mot de passe oublié enregistré dans une application : à vérifier avec elle, par téléphone.
  • B, pulvérisation : un essai par compte, sous tout seuil de verrouillage. La règle 60204 se déclenche aussi (elle compte les échecs par adresse, quels que soient les comptes), mais seule la règle personnalisée 100310 (niveau 12) dit précisément « beaucoup de comptes différents ». Première vérification : un des 26 comptes a-t-il réussi à se connecter depuis .84 ensuite ? Le poste .84 est très probablement compromis : un utilisateur ne tape pas les noms de 26 collègues.

Tu avais trouvé ?

Exercice 3 sur 3 Choisir les sources Réussi À revoir

La direction te demande de « détecter les macros malveillantes » sur les postes. Dis quelles sources de journaux doivent être actives, quelle règle de ce chapitre s'en sert, et ce qui manquerait si seule la stratégie d'audit par défaut était en place.

Voir la réponseMasquer la réponse de l'exercice 3

Il faut Sysmon sur les postes (événement 1 : création de processus avec le processus parent), collecté par l'agent (canal Microsoft-Windows-Sysmon/Operational dans l'agent.conf du groupe windows-postes), et la journalisation des blocs de script PowerShell (4104) activée par GPO et collectée. La règle personnalisée 100330 (une application Office qui lance un interpréteur) repose sur Sysmon ; les règles fournies 91809 et 92057 sur le 4104 et Sysmon.

Avec la seule stratégie d'audit par défaut, il manque tout : la création de processus (4688) n'est pas auditée par défaut sur un poste, et même activée sans la ligne de commande ni le processus parent détaillé, elle ne permet pas de voir qu'une macro de Word a lancé PowerShell, ni ce que le script a exécuté.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Réponse active et notifications : courriel et TeamsRevoir le sommaire du cours