/
/

Analyser les journaux d’événements de sécurité avec PowerShell et signaler les tentatives de force brute

par Team Ninja
How to Use PowerShell to Parse Security Event Logs and Flag Brute-Force Attempts blog banner image

À mesure que les entreprises renforcent leur sécurité face aux attaques par force brute, les traces de ces tentatives passent souvent inaperçues, jusqu’à ce qu’un identifiant soit compromis ou qu’un compte soit verrouillé.

Les administrateurs informatiques peuvent utiliser PowerShell pour récupérer et analyser les journaux d’événements de sécurité afin de renforcer les défenses de leur entreprise. Ce guide détaille étape par étape la détection des attaques par force brute et la mise sur liste noire avec PowerShell.

Configurer les journaux d’événements de sécurité avec PowerShell

Avant de commencer, assurez-vous de réunir les prérequis suivants :

📌 Prérequis :

  • Un accès administrateur aux systèmes locaux ou distants
  • PowerShell 5.1+
  • L’audit de sécurité Windows activé via une GPO
  • Un accès au Registre Windows pour marquer l’état de détection
  • Une plateforme RMM (NinjaOne, par exemple) pour déployer les scripts et les alertes
  • Facultatif : le transfert d’événements vers un SIEM ou une journalisation centralisée

Étape 1 : activer l’audit des échecs de connexion via une stratégie de groupe

La première étape consiste à vérifier que l’audit est actif sur tous les terminaux. Vous pouvez l’activer via une stratégie de groupe. Une fois l’audit activé, les tentatives de connexion réussies comme les échecs sont enregistrés avec des ID d’événement tels que 4625 (échec de connexion) et 4624 (connexion réussie).

Pour activer l’audit des échecs de connexion :

  1. Appuyez sur Win + R, saisissez gpmc.msc et appuyez sur Entrée pour ouvrir la console de gestion des stratégies de groupe.
  2. Rendez-vous dans Configuration ordinateur > Stratégies > Paramètres Windows > Paramètres de sécurité > Configuration avancée de la stratégie d’audit > Stratégies d’audit > Ouverture/Fermeture de session.
  3. Modifiez le paramètre Auditer l’ouverture de session sur Succès et Échec.

⚠️ Important : des paramètres d’audit de connexion incorrects peuvent provoquer des problèmes. Pour en savoir plus, consultez la section Points de vigilance.

Étape 2 : analyser les échecs de connexion avec PowerShell

  1. Ouvrez PowerShell en tant qu’administrateur.
  2. Utilisez les commandes suivantes :
    • Analyser l’ID d’événement 4625 sur les 24 dernières heures :

$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = (Get-Date).AddHours(-24)
} | Select-Object TimeCreated, Message

Remarque : si aucun événement correspondant n’est trouvé, la commande renvoie un résultat vide.

    • Extraire les sources et les noms d’utilisateur des échecs de connexion :

$failedLogons = $events | ForEach-Object {

if ($_.Message -match "(?s)Account For Which Logon Failed:.*Account Name:\s+(\S+).*Source Network Address:\s+(\S+)") {

[PSCustomObject]@{

Time = $_.TimeCreated

Username = $matches[1]

SourceIP = $matches[2]

}

}

}

    • Exporter au format CSV :

$failedLogons | Export-Csv "C:\Reports\FailedLogons.csv" -NoTypeInformation

Étape 3 : repérer les schémas de force brute à partir de seuils

Dès lors que vous savez analyser les journaux d’événements, vous pouvez détecter des schémas récurrents et appliquer des seuils de force brute pour renforcer votre sécurité. Pour le mettre en place avec PowerShell, utilisez les commandes suivantes :

Regrouper et compter par IP source ou par nom d’utilisateur :

$grouped = $failedLogons | Group-Object SourceIP | Where-Object { $_.Count -ge 10 }
$grouped | ForEach-Object {
Write-Output "Potential brute-force from $($_.Name) with $($_.Count) attempts"
}

Ce script analyse les échecs de connexion sur un seul ordinateur, les regroupe par IP source et signale toute adresse IP totalisant au moins 10 tentatives infructueuses comme une possible attaque par force brute.

Remarque : le seuil défini dans cette ligne est ajustable. Vous pouvez modifier le nombre qui suit Count -ge pour définir le nombre d’échecs déclenchant une alerte de force brute.

💡 Astuce : vous pouvez également regrouper par nom d’utilisateur pour détecter les attaques par force brute ciblant un compte précis :

$groupedUsers = $failedLogons | Group-Object Username | Where-Object { $_.Count -ge 10 }

Les seuils s’ajustent selon votre tolérance au risque (par exemple, 5 tentatives ou plus en 10 minutes).

Étape 4 : écrire la détection dans le Registre et dans des journaux accessibles depuis CMD (invite de commande)

L’étape 4 consiste à relier les événements analysés au RMM et à des journaux accessibles depuis CMD (invite de commande) pour gagner en visibilité et faciliter la remédiation. Les clés suivantes vous permettent de déclencher des alertes dans NinjaOne ou de couper automatiquement l’accès réseau :

Marquage dans le Registre pour le RMM ou une inspection manuelle :

New-Item -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Name "LastBruteForceDetected" -Value (Get-Date).ToString("u")
Set-ItemProperty -Path "HKLM:\SOFTWARE\Org\SecurityAlerts" -Name "OffendingIP" -Value $grouped[0].Name

Vérification de l’état de détection depuis CMD (invite de commande) :

reg query HKLM\SOFTWARE\Org\SecurityAlerts

⚠️ Points de vigilance

RisquesConséquences possiblesSolutions
Paramètres de GPO incorrects pour les événements d’audit de connexionAucun journal n’est renvoyé lorsque PowerShell tente d’analyser les événements.Vérifiez vos paramètres de GPO relatifs aux événements d’audit de connexion et confirmez que le journal de sécurité n’est pas écrasé en raison d’une taille de journal trop faible.

Étapes suivantes : blocage d’IP ou alertes

Le blocage d’adresses IP, les alertes et les autres actions de mitigation interviennent généralement après l’analyse de vos journaux d’événements de sécurité. Cette section présente les actions possibles avec PowerShell en cas de multiples échecs de connexion ou de détection d’une attaque par force brute.

Écrire l’événement dans le journal d’événements :

Write-EventLog -LogName Application -Source "BruteForceDetector" -EventId 1010 -EntryType Warning -Message "Brute-force detected from $($grouped[0].Name)"
Remarque : si la source de l’événement n’existe pas, vous pouvez la créer une seule fois (en tant qu’administrateur) avec :

New-EventLog -LogName Application -Source ‘BruteForceDetector’

De plus, les administrateurs informatiques peuvent choisir de bloquer l’adresse IP localement (si la source est externe) :

New-NetFirewallRule -DisplayName "Block Brute IP" -Direction Inbound -RemoteAddress $grouped[0].Name -Action Block

💡 Remarque : documentez chaque blocage d’IP et chaque politique de nettoyage dans votre RMM afin d’assurer la cohérence sur l’ensemble de vos appareils.

Autres points à prendre en compte pour la détection des attaques par force brute et la mise sur liste noire avec PowerShell

Attaques locales et attaques RDP

Les journaux d’une tentative de force brute n’ont pas la même allure selon l’origine de l’attaque. Les tentatives via Remote Desktop Protocol (RDP) affichent généralement une adresse IP externe sous Source Network Address, alors qu’une attaque locale n’indique que 127.0.0.1. Le type d’ouverture de session (Logon type) peut apporter un contexte supplémentaire.

Contrôleurs de domaine

Dans les environnements Active Directory (AD), les échecs de connexion sont généralement consignés sur les contrôleurs de domaine (DC), et pas uniquement sur le poste de travail depuis lequel la connexion a été tentée. Il est recommandé d’exécuter les scripts PowerShell de façon centralisée ou via le transfert d’événements.

Faux positifs

Tous les échecs de connexion répétés ne proviennent pas d’attaques par force brute. Des comptes de service ou des outils de synchronisation peuvent occasionnellement générer des échecs de connexion. Pour rester efficace, excluez les comptes connus et sûrs de vos règles de détection (il suffit d’ajouter une liste blanche dans votre script pour que ces comptes soient ignorés automatiquement)

Intégrations SIEM

Pour les entreprises équipées d’un système SIEM (Security Information and Event Management), intégrer les données de détection de force brute améliore nettement la visibilité. Si vous en avez la possibilité, transmettez les données à un collecteur de journaux central afin de détecter les attaques dans l’ensemble de votre environnement.

Résolution des problèmes courants

Les règles de pare-feu ne s’appliquent pas

Si votre script tente de bloquer une adresse IP malveillante avec une règle de pare-feu PowerShell sans résultat, le problème peut venir des profils de pare-feu ou des autorisations du script. Les pare-feu Windows disposent de profils distincts (Domaine, Privé, Public) et la règle doit s’appliquer au bon profil. De plus, les stratégies d’exécution PowerShell ou des privilèges insuffisants peuvent empêcher la commande de s’exécuter. Exécutez toujours le script avec des droits d’administrateur et vérifiez que le pare-feu du système est actif et correctement configuré.

Les entrées de Registre ne se mettent pas à jour

Écrire les résultats de détection dans le Registre exige des autorisations adéquates, en particulier lorsque l’on cible HKLM:\SOFTWARE. Si un utilisateur standard exécute le script, les écritures dans le Registre échouent silencieusement ou renvoient une erreur d’accès. Pour éviter cela, assurez-vous que le script s’exécute dans le contexte Administrateur ou SYSTEM, ce que vous pouvez imposer lors d’un déploiement via des outils comme NinjaOne. Il est également judicieux de vérifier que la clé de Registre existe et qu’elle n’est pas verrouillée par une stratégie de groupe ou par un logiciel de sécurité des terminaux.

Renforcer la détection des attaques par force brute avec les services NinjaOne

Avec NinjaOne, les administrateurs informatiques et les MSP peuvent mettre en place une détection des attaques par force brute à grande échelle et intégrer la réponse aux incidents grâce à ces possibilités :

  • déployer des scripts de détection PowerShell sur l’ensemble des appareils ou par groupe de clients ;
  • surveiller des valeurs de Registre ou des fichiers de sortie pour signaler une détection ;
  • déclencher des workflows de remédiation automatisés (alertes, blocage d’IP, notifications aux utilisateurs) ;
  • générer des rapports multiclients présentant les tentatives de force brute et les IP sources ;
  • alerter en cas de détections répétées ou de comptes ciblés.

Récupérer le journal d’événements de sécurité avec PowerShell

Analyser les journaux d’événements de sécurité avec PowerShell pour y repérer les tentatives de force brute offre aux MSP une méthode puissante et évolutive pour détecter les attaques sur les identifiants et y répondre. Ce guide propose aux administrateurs informatiques une marche à suivre détaillée ainsi qu’une aide à la résolution des problèmes les plus fréquents.

Sujets connexes :

Guide de démarrage rapide

PowerShell et détection des attaques par force brute dans NinjaOne

NinjaOne propose un script natif conçu spécifiquement pour aider à détecter les tentatives de connexion par force brute. Ce script repose sur des conditions et permet d’identifier les menaces de sécurité potentielles liées aux tentatives de connexion.

Approche recommandée :
1. Utilisez le script intégré « Check for Brute Force login attempts » de la bibliothèque de scripts NinjaOne.
2. Pour une analyse plus poussée, vous pouvez créer un script PowerShell personnalisé qui :
, interroge les journaux d’événements de sécurité (ID d’événement 4625 pour les échecs de connexion) ;
, suit les échecs de connexion sur une période donnée ;
, définit un seuil au-delà duquel une attaque par force brute est suspectée.

Exemple de logique PowerShell :

powershell
$failedAttempts = Get-WinEvent -FilterHashtable @{
LogName = ‘Security’
ID = 4625 # Failed Login Attempts
} | Where-Object { $_.TimeCreated -gt (Get-Date).AddHours(-1) }

$uniqueIPs = $failedAttempts | Group-Object { $_.Properties[19].Value } |
Where-Object { $_.Count -gt 10 } # Adjust threshold as needed

if ($uniqueIPs) {
# Alert or take action for potential brute force
Write-Output “Potential Brute Force Detected”
}

Bonnes pratiques :
, configurez les seuils d’alerte en fonction des politiques de sécurité propres à votre entreprise ;
, intégrez le dispositif aux mécanismes d’alerte de NinjaOne ;
, passez régulièrement en revue les paramètres de détection et ajustez-les.

FAQs

L’absence d’IP source est fréquente pour les tentatives de force brute locales. Ce n’est pas forcément un problème, car cela signifie généralement qu’aucun réseau externe n’est impliqué. Pour obtenir plus d’informations sur un événement précis, croisez la donnée avec le champ LogonType afin de déterminer si la tentative était locale, réseau ou RDP.

Oui, une attaque par force brute peut être détectée si la surveillance adéquate est activée. Windows peut enregistrer les échecs de connexion, et des outils comme PowerShell ou les plateformes RMM sont capables d’analyser ces événements.

De multiples échecs de connexion sur une courte période, surtout lorsqu’ils proviennent de la même adresse IP ou visent le même compte ou le même appareil, constituent un signe fort d’activité de force brute. D’autres indices existent : des connexions depuis des zones géographiques inattendues ou des plages d’IP inhabituelles, des tentatives répétées contre des comptes d’administration ou de service, et des pics de trafic d’authentification qui ne correspondent pas à l’activité habituelle des utilisateurs.

Il n’existe pas de méthode unique et idéale pour se protéger des attaques par force brute. Vous pouvez toutefois renforcer votre sécurité en combinant plusieurs approches : le blocage géographique, la MFA (authentification forte) et des méthodes de détection proactive.

You might also like

Prêt à simplifier les aspects les plus complexes de l'informatique et de la sécurité ?