Troubleshoot windows event logs

PowerShell gebruiken om Windows event logs te doorzoeken voor troubleshooting

 

Windows event logs zijn een hulpmiddel dat elke cybersecurity- en IT-professional in zijn of haar arsenaal zou moeten hebben. Ze kunnen lokaal worden gebruikt voor het oplossen van problemen of worden gecentraliseerd voor netwerkbewustzijn. Bij centraal gebruik kan krachtige software die bekend staat als een Security Information Event Management (SIEM) worden gebruikt om logs te parseren en te doorzoeken. Maar wat als u lokaal werkt?  Is er een efficiënte methode om hetzelfde te doen? Het antwoord op deze vragen vind je in Microsofts krachtigste tool kit, Microsoft PowerShell.

Wat zijn Windows event logs?

Windows event logs bevatten een gedetailleerd overzicht van systeem-, beveiligings- en applicatie meldingen die door het besturingssysteem zijn gemaakt en opgeslagen. Naast de meer bekende logboeken kan ook extra event registratie worden ingeschakeld voor een aantal specifieke toepassingen op het systeem, zoals Microsoft AppLocker, PowerShell of Sysmon.  Windows event logs zijn beschikbaar via logboeken. Als u de logs wilt openen, kunt u deze vinden in het configuratiescherm of door de command eventvwr te typen.  Windows event logs zijn beschikbaar in de map C:\WINDOWS\system32\config\ .

Zoals elke standaardregistratiepraktijk hebben Windows event logs een standaardindeling. Elke gebeurtenis bevat de datum, tijd, gebruiker, computer, gebeurtenis-id, bron en type. Deze standaardisatie maakt logboeken gemakkelijk doorzoekbaar met PowerShell door gebruik te maken van de opdracht Get-WinEvent.

Get-WinEvent

Get-WinEvent is een PowerShell-command-let beschikbaar in Windows Vista en hoger. Hiermee kunt u gebeurtenislogboeken verzamelen en doorzoeken op lokale of externe computers. Doorzoekbare logs omvatten klassieke logs, nieuwe logboeken die zijn geïntroduceerd met Windows Vista en logboekbestanden die zijn gegenereerd met event tracking voor Windows. Meerdere logs kunnen worden opgegeven met één command. Als u geen parameters opgeeft, haalt Get-WinEvent alle gebeurtenissen op uit alle event logs op de computer. Get-WinEvent is alleen beschikbaar in Windows Vista/2008 R2 of hoger en vereist Microsoft .NET Framework 3.5 of hoger.  In de onderstaande tabel worden alle parameters beschreven die aan deze opdracht zijn gekoppeld.

ParameterFormatterenBeschrijving
ListLogstringDeze parameter neemt een door komma's gescheiden lijst met namen van event logs.  Jokertekens zijn toegestaan.  Met de waarde * worden alle logboeken doorzocht.
LognaamstringDeze parameter neemt ook logboeknamen in een door komma's gescheiden lijst.
Listprovider
Deze parameter neemt een door komma's gescheiden lijst met providers, het programma of de service die gebeurtenissen naar het event log schrijft.  Jokertekens zijn toegestaan.  Met een waarde van * worden alle logboeken doorzocht.
Providernaam
Deze parameter neemt een door komma's gescheiden lijst met providers, het programma of de service die gebeurtenissen naar het gebeurtenislogboek schrijft.
PadstringDeze parameter accepteert paden naar EVT-, evtx- en .etl-bestanden in een door komma's gescheiden lijst.
MaxEventsInt64Dit is het maximale aantal gebeurtenissen dat get-winevent retourneert.  De standaard retourneert alle logboeken.
Computernaamstring
  • Deze parameter neemt de NetBIOS-naam, IP-adres of FQDN. De standaardinstelling is de lokale computer.
  • Als u event logs of gebeurtenissen op meerdere computers wilt zoeken, gebruikt u een ForEach-instructie . Zorg ervoor dat u de firewall opent voor toegang tot event logs en het verplaatsen naar event logs toestaat.
CredentialPSCredential
  • Met deze parameter geeft u een gebruikersaccount op met toestemming om de event logs te doorzoeken. De standaardwaarde is de huidige gebruiker.
  • Het werkt door te vragen om referenties of door een PSCredential-object te gebruiken.

 

FilterXPathString
  • Gebruik een XPath-query om event uit een of meer logs te selecteren. XML filteren
FilterXMLXMLDocument
  • Met de parameter wordt een gestructureerde XML-query opgegeven
  • Als u een geldige XML-query wilt genereren, gebruikt u de functies Aangepaste weergave maken en Huidig logboek filteren in Logboeken.
  • Wordt gebruikt voor complexe questions met verschillende XPath instructies
FilterHashTablehastable
  • Deze parameter ccepteert een lijst met een of meer hoofdletterongevoelige sleutel-waardeparen
  • De  geldige sleutel-waardeparen zijn als volgt
  • LogName=String[]
  • ProviderName=String[]
  • Path=String[]
  • Keywords=Long[]
  • ID=Int32[]
  • Level=Int32[]
  • StartTime=DateTime
  • EndTime=DateTime
  • UserID=SID
  • Data=String[]
  • *=String[]

 

ForceBoolean
  • Vereist om debug foutopsporings- en analyselogboeken te krijgen
  • Oudst Booleaans Deze parameter retourneert de gebeurtenissen in oudste-eerste volgorde.   Het is vereist om gebeurtenissen op te halen uit .etl- en .evt-bestanden en uit foutopsporings- en analyselogboeken
OldestBoolean
  • Oudst Booleaans Deze parameter retourneert de events in de oudste-eerst volgorde.  Het is vereist om gebeurtenissen op te halen uit .etl- en .evt-bestanden en uit debug- en analyselogs
 

    Enkele voorbeelden

    Als u eerst wilt zien uit welke logs u moet kiezen, gebruikt u de parameter listlog. U zult merken dat de lijst erg lang is.

    PS C: \\ > Get-WinEvent -listlog *

    U kunt het beperken tot alle logs die betrekking hebben op een bepaald onderwerp, bijvoorbeeld AppLocker.

    PS C: \ > get-winevent -listlog * AppLock *

    Als u alle beschikbare informatie met betrekking tot één logboek wilt ophalen, zoals het toepassingslogboek, gebruikt u de volgende opdracht.

    Als u alle logs op de lokale computer wilt weergeven die events bevatten, kunt u het volgende doen.

    PS C:\> Get-WinEvent -listlog * | where {$_.Recordcount}

    U kunt ook naar meerdere computers tegelijk zoeken naar logboeken. Dit gebeurt met een vooraanmerking,  bijvoorbeeld:

    PS C:\> $hosts = "Server1", "Server2", "Server3" PS C:\> foreach ($server in $hosts) {$server; get-winevent -listlog "Windows PowerShell" -computername $server}

    Brute Force-aanvallen identificeren

    Logboeken op de domeincontroller kunnen worden gecontroleerd op meerdere storingen om een brute force-aanval te identificeren. Een domeincontroller registreert een mislukt Kerberos-ticket met log event 4771. Een voorbeeld van een manier om een mogelijke brute force-aanval te onderzoeken, is door de onderstaande command uit te voeren op een domeincontroller om te zoeken naar alle mislukte log ins in het laatste uur.

    Get-WinEvent -Filterhashtable @{LogName='Security';id=4771;starttime=(Get-Date). AddHours(-1);endtime=(Get-Date)  }

    Windows Event Tracing gebruiken

    Windows event tracing is een tool die door ontwikkelaars wordt gebruikt om fouten in hun applicaties op te sporen. Het kan worden gebruikt voor het traceren van het afsluit- en opstartproces of voor diagnoses zoals het bepalen van de energie-efficiëntie van een toepassing. Even tracing logs worden opgeslagen in bestanden met de extensie .etl. PowerShell biedt een aanvullende methodologie voor het openen of analyseren van deze trace logs. Vergeet niet de parameter –Oldest te gebruiken wanneer u Get-WinEvent gebruikt om een event trace logs te parseren.

    PS C:\>Get-WinEvent -Path "C:\Tracing\TraceLog.etl" -Oldest

    Windows event logs zijn uiterst eenvoudig te doorzoeken en te parseren met PowerShell. Dit is uiterst gunstig, of u nu controleert op een bepaalde storing of een bepaald type aanval. PowerShell is een handige tool voor elk arsenaal aan cyberverdedigers.

     

    Tags