Comment puis-je extraire de mes journaux des événements des informations sur les échecs de connexion ?

S'il vous plaît Monsieur Script...

Hey, Scripting Guy!

Bienvenue dans cette section TechNet, dans laquelle le Monsieur Script de Microsoft répond aux questions récurrentes sur les scripts d'administration système.

Question du jour : comment puis-je extraire de mes journaux des événements des informations sur les échecs de connexion ?

Comment puis-je extraire de mes journaux des événements des informations sur les échecs de connexion ?Comment puis-je extraire de mes journaux des événements des informations sur les échecs de connexion ?

S'il vous plaît Monsieur Script... Comment puis-je analyser les journaux des événements sur mes serveurs et n'en extraire que les informations sur les échecs de connexion ?

-- LC

Bonjour LC. Partons du principe que vous avez activé l'audit de sécurité sur vos serveurs. Si vous ne l'avez pas encore fait, commencez par cela. En fait, vous allez effectuer un audit des échecs de connexion. Ainsi, chaque fois qu'une tentative de connexion à l'ordinateur se soldera par un échec, un événement avec un code spécifique sera consigné dans le journal des événements de sécurité. Pour les serveurs et les stations de travail membres, le code d'événement est le 529, et pour les contrôleurs de domaine, le 675. Nous utiliserons dans notre exemple le code d'événement 529 pour la simple et bonne raison que, dans votre question, vous avez fait référence aux « serveurs » et non aux « contrôleurs de domaine ».

Remarque : d'autres codes d'événements pourraient également vous être utiles. Il va sans dire que les Messieurs Script ne sont pas des experts en sécurité. Pour plus de simplicité, nous allons toutefois nous concentrer sur les codes 529 et 675, qui font référence à des événements de type « nom d'utilisateur inconnu ou mot de passe non valide ». Cependant, la requête WQL que nous allons utiliser est relativement facile à modifier si vous souhaitez rechercher d'autres codes d'événements.

Les futurs inspecteurs de police ont peut-être déjà trouvé un indice essentiel : les échecs de connexion sont consignés dans le journal des événements de sécurité, et chacun est identifié par le même code d'événement : 529. Cela nous donne un indice pour trouver la solution à notre problème : pour obtenir des informations sur les échecs de connexion, il suffit d'interroger le journal des événements de sécurité sur tous les événements dont le code est égal à 529.

En d'autres termes :

strComputer = "."
Set objWMIService = GetObject("winmgmts:{(Security)}\\" & strComputer & "\root\cimv2")

Set colEvents = objWMIService.ExecQuery _
        ("Select * from Win32_NTLogEvent Where Logfile = 'Security' and " _
            & "EventCode = '529'")

For Each objEvent in colEvents
    Wscript.Echo "Category: " & objEvent.Category
    Wscript.Echo "Computer Name: " & objEvent.ComputerName
    Wscript.Echo "Event Code: " & objEvent.EventCode
    Wscript.Echo "Message: " & objEvent.Message
    Wscript.Echo "Record Number: " & objEvent.RecordNumber
    Wscript.Echo "Source Name: " & objEvent.SourceName
    Wscript.Echo "Time Written: " & objEvent.TimeWritten
    Wscript.Echo "Event Type: " & objEvent.Type
    Wscript.Echo "User: " & objEvent.User
Next

Élémentaire, mon cher Watson. Le seul détail inhabituel concerne la connexion au service WMI. Celle-ci nous oblige à inclure le privilège (Security) entre accolades, comme suit :

Set objWMIService = GetObject("winmgmts:{(Security)}\\" & strComputer & "\root\cimv2")

Vous devez inclure ce privilège dans votre script chaque fois que vous voulez accéder au journal des événements de sécurité. En outre, vous (ou votre compte d'utilisateur) devez déjà posséder les droits requis pour accéder à ce journal, car le simple fait d'inclure le privilège dans le script ne vous confère pas automatiquement ces droits. D'un autre côté, si vous n'incluez pas le privilège dans le script, vous ne pourrez pas accéder au journal des événements de sécurité, et ce, quels que soient les droits, privilèges et autorisations que vous accorde votre compte d'utilisateur.

Une fois la connexion effectuée, nous sélectionnons toutes les instances de la classe Win32_NTLogEvent dans lesquelles Logfile est égal à Security et EventCode à 529. Cela renvoie un ensemble d'événements d'échecs de connexion, que nous traitons afin d'en renvoyer l'écho vers l'écran.

Ce script renvoie la liste de tous les événements relatifs aux échecs de connexion. Vous pouvez également obtenir les événements survenus dans une période donnée uniquement (par exemple, seuls les échecs de connexion survenus depuis hier ou au cours de la semaine dernière). De même, vous pouvez envisager de mettre en place un système de surveillance qui permettrait d'avoir une notification instantanée chaque fois qu'un tel événement survient. Ceci dépasse quelque peu le cadre de cette rubrique, mais vous pouvez obtenir plus d'informations et des exemples de scripts dans le chapitre consacré aux journaux du Microsoft Windows 2000 Scripting Guide (site en anglais).

Pour en savoir plus

Consultez les archives de S'il vous plaît Monsieur Script...(site en anglais)