Sysmon gebruiken om systeemactiviteit te loggen en analyseren

Marco den Teuling
0

Inhoudsopgave

Security-onderzoekers hebben bij het analyseren van aanvallen zo gedetailleerd mogelijke data nodig om te kunnen nagaan hoe een aanvaller toegang tot een systeem weet te krijgen. Maar ook privé is het zinvol om dat soort informatie te bekijken om infecties vroegtijdig te ontdekken. Je kunt het gratis programma Sysmon gebruiken om systeemactiviteit te loggen en analyseren en de benodigde informatie te vinden.

Als je een antivirus­programma gebruikt en ervoor zorgt dat het besturingssysteem en de programma’s altijd up-to-date zijn, doe je er al veel aan om je pc te beschermen tegen malware. Ook met de ingebouwde tools van Windows kun je het nodige bereiken. Maar als je voor maximale veiligheid gaat, is dat niet genoeg. Dan moet je ook actief zoeken naar inbraakpogingen. Als een aanval ondanks alles toch succesvol is, moet je het gebruikte lek zo gedetailleerd mogelijk onderzoeken en dichten.

Bij dergelijk speurwerk is het belangrijk dat je zo nauwkeurig mogelijk bijhoudt wat je systeem doet op het moment dat het aangevallen wordt. Windows houdt standaard wel verschillende logboeken bij, maar voor malware-analyse heb je daar weinig aan. Gelukkig is het gratis programma Sysmon te downloaden van Microsofts website. Dat kan afzonderlijk of als onderdeel van de Sysinternals Suite.

We willen echter meteen wel even duidelijk maken dat Sysmon geen antivirus­programma is. Het houdt alleen tot in detail alle systeemactiviteiten bij, waarmee een security-onderzoeker inbraken kan ontdekken en doorgronden. Het programma bewaart alle details in het Systeem-logboek. Die kun je met het programma Logboeken of met andere tools bekijken en analyseren.

Sysmon gebruiken loggen analyseren Logboeken gebeurtenissen

Met de toepassing Logboeken kun je alle extra informatie bekijken die Sysmon bewaart voor de geregistreerde gebeurtenissen.

Configuratie van Sysmon

Om Sysmon te gebruiken, moet je het na het downloaden en uitpakken van het archiefbestand nog installeren. Dat doet het programma automatisch als je het start vanaf een Opdrachtprompt met administrator­rechten of vanuit Power­Shell met de para­meter -i. Een kopie van het programma komt daarbij terecht in de Windows-map. Er wordt bovendien een kernel-stuur­programma uitgepakt en geïntegreerd in het systeem. Dat stuur­programma doet het eigenlijke werk. Windows laadt dat de volgende keer bij opstarten vrij vroeg tijdens het boot­proces. Daardoor kan het ook activiteiten vastleggen die op dat moment plaatsvinden, zoals programma’s die automatisch gestart worden via de gangbare autostart-mechanismen.

Tot de gebeurtenissen die Sysmon kan vastleggen behoren het starten en stoppen van processen, het opbouwen van netwerkverbindingen, het laden van DLL’s door programma’s en drivers, het aanmaken van bestanden en het maken, wijzigen en verwijderen van registeritems. Daarnaast ziet Sysmon het als een programma de aanmaakdatum van een bestand wijzigt, code in een draaiend proces injecteert of het bestandssysteem omzeilt en rechtstreeks toegang tot afzonderlijke sectoren van een opslagmedium zoekt. Een uitgebreide omschrijving van alle gebeurtenissen staat op de downloadsite.

Installeer je Sysmon zonder verdere argumenten, dan legt het de basis­gebeurtenissen vast, zoals het starten en ook stoppen van processen, het laden van stuur­programma’s en het wijzigen van de aanmaakdatum van bestanden. Verder worden het aanpassen van de Sysmon-configuratie en het starten en stoppen van services bijgehouden. Via de opdrachtprompt kun je extra gebeurtenistypen toevoegen. De opdracht sysmon -h toont daar meer informatie over.

Om Sysmon efficiënt toe te passen, moet je het gedetailleerder instellen dan met de opdrachtprompt mogelijk is. Daarvoor gebruikt het programma een configuratiebestand met een XML-indeling. De naam en het pad daarvoor kun je achter de parameter -i toevoegen. Na het installeren kun je met het commando sysmon -c <configuratiebestand> de instellingen van het programma laten updaten uit het opgegeven bestand. De Sysmon-driver kun je eventueel weer verwijderen met de ­parameter -u.

Filters voor Sysmon

In de code hieronder staat een voorbeeld van een Sysmon-configuratie­bestand. Die begint met een sectie die de afzonderlijke opties van het programma regelt. In het voorbeeld bepaalt de tag <HashAlgorithms> daarbij volgens welke methoden Sysmon de hashes van uitgevoerde programma­bestanden berekent en bewaart.

Sysmon gebruiken loggen analyseren XML configuratie bestand

Met een XML-bestand kun je configureren welke gebeurtenissen Sysmon moet loggen. Dit voorbeeldbestand is niet erg praktisch, maar toont de opbouw.

Het grootste deel van het bestand is de sectie <EventFiltering>. Die kan voor elk gebeurtenistype een of meer filters bevatten die bepalen welke gebeurtenissen van dat type in het logboek moeten komen. Elke filteritem bevat de naam van het betreffende type en het kenmerk onmatch met de waarde ‘include’ of ‘exclude’. Een include-filter bepaalt aan welke criteria gebeurtenissen moeten voldoen om in het logboek te komen, een exclude-filter sluit juist bepaalde gebeurtenissen uit. Voor hetzelfde gebeurtenistype kunnen meerdere filters zijn opgenomen: bij conflicten wint het exclude-filter.

De manier waarop je een type compleet negeert of net logt, is niet intuïtief. Een include-item zonder filters sluit alle gebeurtenissen van dat type uit: alles wat op de lijst staat wordt gelogd, maar die lijst is leeg. Op dezelfde manier zorgt een exclude-tag zonder inhoud ervoor dat alle gebeurtenissen van het betreffende type gelogd worden.

De eigenlijke Filter-tags hebben altijd de naam van de gebeurtenis die Sysmon als criterium moet gebruiken. Een attribuut met de naam condition bepaalt het type vergelijking: de standaardwaarde is vergelijkt de volledige inhoud met het erna opgegeven zoekpatroon. In het voorbeeld zie je de vergelijkingssoorten ‘contains’ en ‘end with’. Een lijst van alle soorten staat op de downloadpagina van Sysmon.

De namen van de gebeurtenistypen en de bijbehorende kenmerken die je in vergelijkingen kunt gebruiken, vind je met sysmon -s. De uitvoer is in XML-formaat. De namen van de gebeurtenistypen staan in de rulename-attributen van de event-tags, die van de kenmerken als name in de bijbehorende data-tags.

Het opstellen van een configuratie­bestand voor Sysmon voor praktische toepassingen is veel werk. Het logboek moet alleen de belangrijke gebeurte­nissen bevatten, zodat je niet verdwaalt in de data­berg. Maar je wilt ook geen belangrijke gebeurtenissen missen omdat die eruit zijn gefilterd. Gelukkig hoef je niet vanaf nul te beginnen. Er staan veel bruikbare en up-to-date configuraties op internet, onder andere op de blog van Microsoft-medewerker Moti Bani en op de GitHub-site van SwiftOnSecurity. Je moet die bestanden wel kritisch bekijken en waar nodig aanpassen aan je eisen voordat je ze gebruikt.

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Logboek bekijken

Om een eerste idee te krijgen van wat Sysmon eigenlijk allemaal bijhoudt, kun je de Logboeken-­toepassing van Windows gebruiken. Om die te starten, klik je op de startknop en typ je de eerste letters van ‘Logboeken’. Kies de bureaublad-app in de zoekresultaten.

Het Sysmon-logbestand vind je in dit programma bij ‘Logboeken Toepassingen en Services\Microsoft\Windows\Sysmon \Operational’. Als je op dat item klikt, zie je de gebeurtenissen die Sysmon geregistreerd heeft. De filter- en analysemogelijk­heden zijn daar echter vrij beperkt. De opdracht ‘Huidig logboek filteren’ toont aanvankelijk alleen velden die betrekking hebben op de standaardkenmerken die het systeem voor gebeurtenissen bijhoudt. Opties die specifiek zijn voor Sysmon vind je daar niet. Het filteren op gebeurtenis-ID is Iets bruikbaarder. Welke ID bij welke gebeurtenistypen van Sysmon hoort, staat bij de uitvoer van sysmon -s in de value-attributen van de event-tags.

Om een filter te creëren dat de gegevens van Sysmon opvraagt, moet je overweg kunnen met de XML-querytaal XPath. Het voert hier te ver om daar op in te gaan. Je kunt de query invoeren op het tabblad ‘XML’ van het dialoogvenster ‘Huidig logboek filteren’. Daarvoor moet je het vakje ‘Zoekopdracht handmatig’ activeren.

Windows hanteert daarbij standaard een grootte van ongeveer 64 MB voor het Sysmon-­logboek. Daarna worden de oudste items overschreven door nieuwere en gaan ze verloren. Al naargelang de filter­instellingen van Sysmon, de systeemactiviteit en hoe vaak je het logboek controleert, zal 64 MB wellicht niet genoeg zijn. Je kunt die limiet zelf aanpassen. Klik in Logboeken met de rechtermuisknop op ‘Operational’ in de boomstructuur links en kies ‘Eigenschappen’. Achter ‘Max. logboekgrootte (kB)’ kun je zelf een nieuwe limiet opgeven.

Sysmon gebruiken loggen analyseren

PowerShell voor analyse

Voor een diepgaandere analyse van de informatie die Sysmon in het logboek bewaart is PowerShell een aanrader. Een extra voordeel daarbij is dat de query’s als scripts bewaard kunnen worden en zo automatisch uitgevoerd kunnen worden.

De belangrijkste opdracht bij dergelijke analyses is Get-WinEvent. Welk deel van het gebeurtenislogboek moet worden opgevraagd, bepaalt de parameter LogName:

Get-WinEvent -LogName “Microsoft-Windows-Sysmon/Operational”

De optionele parameter -MaxEvents beperkt de uitvoer tot het gewenste aantal items, de schakeloptie -01-dest draait de volgorde van de uitvoer om en toont eerst de oudste items.

Net als in de Logboek-toepassing kun je items filteren op basis van universele attributen zoals de ID. Daarvoor laat je de opdracht Get-WinEvent met de parameter -FilterHashtable een hashtabel gebruiken met de gezochte criteria:

Get-WinEvent -FilterHashtable @{logname=$smo; id=1}

Voor een betere leesbaarheid gaan we in dit voorbeeld uit van de declaratie

$smo = “Microsoft-Windows-Sysmon/Operational”

die we verderop bij de voorbeelden zullen gebruiken.

Get-WinEvent kan ook overweg met XPath-query’s. De volgende opdracht levert alle items waarbij het veld ‘Product’ overeenkomt met de tekenreeks ‘Google Chrome’:

Get-WinEvent -LogName $smo FilterXPath ‘*[EventData[Data[@Name=”Product”]:=”Google Chrome”]]’

Als je je niet wilt verdiepen in XPath, kun je de uitvoer van Get-WinEvent ook doorgeven aan gangbare, met Where-Object of vraagtekens opgestelde filters. De Sysmon-specifieke gebeurtenisattributen daarvoor staan in de lijst Properties van elk log­boekitem. Op welke plaats welke informatie staat, is specifiek voor het betreffende gebeurtenistype en moet worden nagekeken in de uitvoer van sysmon -s. Dan ontdek je bijvoorbeeld dat bij FileCreate-gebeurtenissen (ID=11) de naam van het nieuwe bestand (TargetFilename) in het vijfde attribuut staat (de nummering begint bij 0). Met die informatie kun je een query opstellen die alle logboekitems oplevert waarbij een proces een bestand in de Windows-map heeft gemaakt:

Get-WinEvent -LogName $smo | ? {($_.ID -eq 11) -and ($_.Properties[5].Value -like ‘C:\Windows\*’) }

In Properties[4].Value van de resulterende objecten staat dan de naam van het verantwoordelijke programmabestand, en in Properties[2].Value staat een unieke GUID die Sysmon aan dat proces heeft toege­wezen.

Om te controleren of het daarbij om een onschuldig programma gaat, kun je op soortgelijke wijze een query voor de GUID toepassen die de betreffende ProcessCreate-gebeurtenis zoekt (ID=1, de GUID staat dan in Properties[2].Value), de bestandshash uit het resultaat extraheert (Properties[16].Value) en bij virustotal.com kijkt of het bestand ongevaarlijk is of niet. Je kunt de hash eenvoudigweg invoeren in het vak ‘Search’ op de website. Als je het optimaal wilt automatiseren, kun je daar de VirusTotal-API voor gebruiken. Daarvoor moet je eerst bij www.virus­total.com/#/join-us een sleutel aanvragen, waarna je vier geautomatiseerde controles per minuut mag uitvoeren. Er is ook een bibliotheek waarmee je makkelijker de API van VirusTotal vanuit PowerShell gebruiken kunt.

SQL en Log Parser

Een alternatief voor PowerShell is Microsofts Log Parser. Die kan bijna willekeurige logbestanden verwerken, waaronder de systeemgebeurtenissen van Windows. Het resultaat kan daarna geanalyseerd worden met de databasequerytaal SQL. Om ervoor te zorgen dat Log Parser het Sysmon-logboek kan benaderen, moet je dat eerst in het register instellen. Voeg onder HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\EventLog een nieuwe lege sleutel toe met de naam Microsoft-Windows-Sysmon/Operational.

Log Parser is op zich een wat log te bedienen consoletool. Het gebruik wordt een stuk comfortabeler met het gratis bij Microsoft te downloaden Log Parser Studio. Dat biedt onder andere de mogelijkheid om vaak gebruikte query’s te bewaren in een eigen bibliotheek of om query’s te combineren in batch-jobs.

Sysmon gebruiken loggen analyseren Microsoft Log Parser Studio SQL

Met Microsofts Log Parser Studio kun je de logboekitems met de querytaal SQL op dezelfde manier uitlezen als je bij een database doet.

Een minimale SQL-query voor het Sysmon-logboek ziet er bijvoorbeeld zo uit:

SELECT * FROM ‘Microsoft-Windows-Sysmon/Operational’ WHERE EventID=3

In Log Parser Studio kies je eenvoudigweg de menuopdracht ‘File / New Query’ of klik je op de betreffende knop. Daarna typ je de query in het onderste invoervak. Kies daaronder bij de keuzelijst ‘Log Type’ de optie ‘EVTLOG’ en klik op het uitroepteken om de query te bewaren.

Log Parser geeft de Sysmon-specifieke data uit de logboekitems terug in een veld genaamd Strings. Afzonderlijke attributen worden daarbij gescheiden door het |-teken. Om uit dat veld het gewenste attribuut te halen, kun je de SQL-functie EXTRACT_TOKEN() gebruiken. Die verwacht als tweede argument het attribuutnummer. Die kun je zoals beschreven achterhalen met de uitvoer van sysmon -s.

Een query voor schrijfacties in de Windows-map ziet er dan bijvoorbeeld zo uit:

sql
SELECT
EventID,
EXTRACT_TOKEN(Strings, 2, '|')
AS ProcessGUID,
EXTRACT_TOKEN(Strings, 4, '|')
AS Image,
EXTRACT_TOKEN(Strings, 5, '|')
AS TargetFilename
FROM
'Microsoft-Windows-Sysmon/Operational'
WHERE EventID=11
AND TargetFilename LIKE
'C:\\Windows\\%'

Let er daarbij op dat je het voor SQL standaard jokerteken % gebruikt en ‘letterlijke’ \-tekens moet verdubbelen.

Log Parser Studio kan het resultaat van query’s met het menu-item ‘File / Export / Output as .CSV’ exporteren naar een tekstbestand. Dat kun je met scripts, batchbestanden of een spreadsheetprogramma als Excel weer verder analyseren.

Je kunt Log Parser Studio bovendien gebruiken om query’s op te stellen, die te testen en vervolgnes met ‘File / Export / As PowerShell Script’ naar een PowerShell-script te exporteren. Zo’n script geeft de betreffende query dan aan Log Parser en levert het resultaat in de vorm van objecten die naar wens verder verwerkt kunnen worden.

Tot slot

Als je dieper in het analyseren van een systeemanalyse met Sysmon wilt duiken, kun je de GitHub-pagina van Michael Haag (MHaggis) raadplegen – vooral de met liefde bijgehouden linkverzameling ‘Sysmon-DFIR‘. Daar staan onder andere relevante blogartikelen en presentaties, onder meer van Sysmon-ontwikkelaar Mark Russinovich. Voor beheerders van grotere organisaties staan er ook links naar instructies voor het gebruik van Sysmon-logboeken met de SIEM-oplossingen van een bedrijf (Security Information and Event Management).(mdt) c

(Hajo Schulz, c’t magazine)

Meer diepgang, achtergronden en workshops in c't magazine. Nieuwste uitgave: c't 05/2024

Meer over

Software

Deel dit artikel

Marco den Teuling
Marco den TeulingHad als eerste eigen computer ooit een 16-bit systeem, waar van de 48 kilobyte toch echt niet ‘genoeg voor iedereen’ was. Sleutelt graag aan pc’s, van de hardware tot het uitpluizen van de BIOS-instellingen. Vindt ‘Software as a Service’ een onbedoeld ironische naamgeving.

Lees ook

Google Gemini gebruiken: dit kun je allemaal met de chatbot van Google

Eerst kon je alleen ChatGPT gebruiken, maar nu is het ook mogelijk om Gemini van Google te gebruiken. Beide chatbots die gebaseerd zijn op AI kunnen w...

Energie meten met Raspberry Pi: snel en overzichtelijk je verbruik zien

Wanneer je thuis een slimme meter hebt geïnstalleerd, kun je je energie meten met Raspberry Pi. Energieverbruik is in te zien via gratis te downloaden...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er