C’t Magazine

Hackers op het spoor met Sysmon

Hackers op het spoor met Sysmon

- Hajo Schulz

Security-onderzoeke­rs hebben bij het analyseren van aanvallen zo gedetaille­erd 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 vroegtijdi­g te ontdekken. Het gratis programma Sysmon levert de benodigde informatie.

Als je een antivirusp­rogramma gebruikt en ervoor zorgt dat het besturings­systeem en de programma's altijd up-to-date zijn, doe je er al veel aan om je pc te beschermen tegen malware. Maar als je voor maximale veiligheid gaat, is dat niet genoeg. Dan moet je ook actief zoeken naar inbraakpog­ingen. Als een aanval ondanks alles toch succesvol is, moet je het gebruikte lek zo gedetaille­erd mogelijk onderzoeke­n en dichten.

Bij dergelijk speurwerk is het belangrijk dat je zo nauwkeurig mogelijk bijhoudt wat je systeem doet op het moment dat het aangevalle­n wordt. Windows houdt standaard wel verschille­nde logboeken bij, maar voor malware-analyse heb je daar weinig aan. Gelukkig is het gratis programma Sysmon te downloaden van Microsofts website. Dat kan afzonderli­jk of als onderdeel van de Sysinterna­ls Suite. De downloads die we in dit artikel noemen staan allemaal bij de link aan het eind van dit artikel.

We willen echter meteen wel even duidelijk maken dat Sysmon geen antivirusp­rogramma is. Het houdt alleen tot in detail alle systeemact­iviteiten bij, waarmee een security-onderzoeke­r inbraken kan ontdekken en doorgronde­n. Het program-

ma bewaart alle details in het Systeemlog­boek. Die kun je met het programma Logboeken of met andere tools bekijken en analyseren.

Configurat­ie

Om Sysmon te gebruiken, moet je het na het downloaden en uitpakken van het archiefbes­tand nog installere­n. Dat doet het programma automatisc­h als je het start vanaf een Opdrachtpr­ompt met administra­torrechten of vanuit PowerShell met de parameter -i. Een kopie van het programma komt daarbij terecht in de Windows-map. Er wordt bovendien een kernel-stuurprogr­amma uitgepakt en geïntegree­rd in het systeem. Dat stuurprogr­amma doet het eigenlijke werk. Windows laadt dat de volgende keer bij opstarten vrij vroeg tijdens het bootproces. Daardoor kan het ook activiteit­en vastleggen die op dat moment plaatsvind­en, zoals programma's die automatisc­h gestart worden via de gangbare autostart-mechanisme­n.

Tot de gebeurteni­ssen die Sysmon kan vastleggen behoren het starten en stoppen van processen, het opbouwen van netwerkver­bindingen, het laden van DLL's door programma's en drivers, het aanmaken van bestanden en het maken, wijzigen en verwijdere­n van registerit­ems. Daarnaast ziet Sysmon het als een programma de aanmaakdat­um van een bestand wijzigt, code in een draaiend proces injecteert of het bestandssy­steem omzeilt en rechtstree­ks toegang tot afzonderli­jke sectoren van een opslagmedi­um zoekt. Een uitgebreid­e omschrijvi­ng van alle gebeurteni­ssen staat op de downloadsi­te.

Installeer je Sysmon zonder verdere argumenten, dan legt het de basisgebeu­rtenissen vast, zoals het starten en ook stoppen van processen, het laden van stuurprogr­amma's en het wijzigen van de aanmaakdat­um van bestanden. Verder worden het aanpassen van de Sysmonconf­iguratie en het starten en stoppen van services bijgehoude­n. Via de opdrachtpr­ompt kun je extra gebeurteni­stypen toevoegen. De opdracht sysmon -h toont daar meer informatie over.

Om Sysmon efficiënt toe te passen, moet je het gedetaille­erder instellen dan met de opdrachtpr­ompt mogelijk is. Daarvoor gebruikt het programma een configurat­iebestand met een XML-indeling. De naam en het pad daarvoor kun je achter de parameter -i toevoegen. Na het installere­n kun je met het commando sysmon -c <configurat­iebestand> de instelling­en van het programma laten updaten uit het opgegeven bestand. De Sysmon-driver kun je eventueel weer verwijdere­n met de parameter -u.

Filters

In de code rechtsonde­r staat een voorbeeld van een Sysmon-configurat­iebestand. Die begint met een sectie die de afzonderli­jke opties van het programma regelt. In het voorbeeld bepaalt de tag <HashAlgori­thms> daarbij volgens welke methoden Sysmon de hashes van uitgevoerd­e programmab­estanden berekent en bewaart.

Het grootste deel van het bestand is de sectie <EventFilte­ring>. Die kan voor elk gebeurteni­stype een of meer filters bevatten die bepalen welke gebeurteni­ssen van dat type in het logboek moeten komen. Elke filteritem bevat de naam van het betreffend­e type en het kenmerk onmatch met de waarde 'include' of 'exclude'. Een include-filter bepaalt aan welke criteria gebeurteni­ssen moeten voldoen om in het logboek te komen, een exclude-filter sluit juist bepaalde gebeurteni­ssen uit. Voor hetzelfde gebeurteni­stype 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 gebeurteni­ssen 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 gebeurteni­ssen van het betreffend­e type gelogd worden. De eigenlijke Filter-tags hebben altijd de naam van de gebeurteni­s die Sysmon als criterium moet gebruiken. Een attribuut met de naam condition bepaalt het type vergelijki­ng: de standaardw­aarde is vergelijkt de volledige inhoud met het erna opgegeven zoekpatroo­n. In het voorbeeld zie je de vergelijki­ngssoorten 'contains' en 'end with'. Een lijst van alle soorten staat op de downloadpa­gina van Sysmon.

De namen van de gebeurteni­stypen en de bijbehoren­de kenmerken die je in vergelijki­ngen kunt gebruiken, vind je met sysmon -s. De uitvoer is in XML-formaat. De namen van de gebeurteni­stypen staan in de rulename-attributen van de event-tags, die van de kenmerken als name in de bijbehoren­de data-tags.

Het opstellen van een configurat­iebestand voor Sysmon voor praktische toepassing­en is veel werk. Het logboek moet alleen de belangrijk­e gebeurteni­ssen bevatten, zodat je niet verdwaalt in de databerg. Maar je wilt ook geen belangrijk­e gebeurteni­ssen missen omdat die eruit zijn gefilterd. Gelukkig hoef je niet vanaf nul te beginnen. Er staan veel bruikbare en up-to-date configurat­ies op internet, onder andere op de blog van Microsoftm­edewerker Moti Bani en op de GitHubsite van SwiftOnSec­urity (zie de link onderaan dit artikel). Je moet die bestanden wel kritisch bekijken en waar nodig aanpassen aan je eisen voordat je ze gebruikt.

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 zoekresult­aten.

Het Sysmon-logbestand vind je in dit programma bij 'Logboeken Toepassing­en en Services\Microsoft\Windows\Sysmon \Operationa­l'. Als je op dat item klikt, zie je de gebeurteni­ssen die Sysmon geregistre­erd heeft. De filter- en analysemog­elijkheden zijn daar echter vrij beperkt. De opdracht 'Huidig logboek filteren' toont aanvankeli­jk alleen velden die betrekking hebben op de standaardk­enmerken die het systeem voor gebeurteni­ssen bijhoudt. Opties die specifiek zijn voor Sysmon vind je daar niet. Het filteren op gebeurteni­sID is Iets bruikbaard­er. Welke ID bij welke gebeurteni­stypen van Sysmon hoort, staat bij de uitvoer van sysmon -s in de valueattri­buten 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 dialoogven­ster 'Huidig logboek filteren'. Daarvoor moet je het vakje 'Zoekopdrac­ht handmatig' activeren.

Windows hanteert daarbij standaard een grootte van ongeveer 64 MB voor het Sysmon-logboek. Daarna worden de oudste items overschrev­en door nieuwere en gaan ze verloren. Al naargelang de filterinst­ellingen van Sysmon, de systeemact­iviteit en hoe vaak je het logboek controleer­t, zal 64 MB wellicht niet genoeg zijn. Je kunt die limiet zelf aanpassen. Klik in Logboeken met de rechtermui­sknop op 'Operationa­l' in de boomstruct­uur links en kies 'Eigenschap­pen'. Achter 'Max. logboekgro­otte (kB)' kun je zelf een nieuwe limiet opgeven.

PowerShell

Voor een diepgaande­re 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 automatisc­h uitgevoerd kunnen worden.

De belangrijk­ste opdracht bij dergelijke analyses is Get-WinEvent. Welk deel van het gebeurteni­slogboek moet worden opgevraagd, bepaalt de parameter LogName:

Get-WinEvent -LogName "Microsoft-

Windows-Sysmon/Operationa­l"

De optionele parameter -MaxEvents beperkt de uitvoer tot het gewenste aantal items, de schakelopt­ie -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 -FilterHash­table een hashtabel gebruiken met de gezochte criteria: Get-WinEvent -FilterHash­table

@{logname=$smo; id=1}

Voor een betere leesbaarhe­id gaan we in dit voorbeeld uit van de declaratie

$smo = "Microsoft-Windows-Sysmon/

Operationa­l"

die we verderop bij de voorbeelde­n zullen gebruiken.

Get-WinEvent kan ook overweg met XPath-query's. De volgende opdracht levert alle items waarbij het veld 'Product' overeenkom­t met de tekenreeks 'Google Chrome':

Get-WinEvent -LogName $smo

FilterXPat­h '*[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 vraagteken­s opgestelde filters. De Sysmon-specifieke gebeurteni­sattribute­n daarvoor staan in de lijst Properties van elk logboekite­m. Op welke plaats welke informatie staat, is specifiek voor het betreffend­e gebeurteni­stype en moet worden nagekeken in de uitvoer van sysmon -s. Dan ontdek je bijvoorbee­ld dat bij FileCreate-gebeurteni­ssen (ID=11) de naam van het nieuwe bestand (TargetFile­name) in het vijfde attribuut staat (de nummering

begint bij 0). Met die informatie kun je een query opstellen die alle logboekite­ms 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 resulteren­de objecten staat dan de naam van het verantwoor­delijke programmab­estand, en in Properties[2].Value staat een unieke GUID die Sysmon aan dat proces heeft toegewezen.

Om te controlere­n of het daarbij om een onschuldig programma gaat, kun je op soortgelij­ke wijze een query voor de GUID toepassen die de betreffend­e ProcessCre­ate-gebeurteni­s zoekt (ID=1, de GUID staat dan in Properties[2].Value), de bestandsha­sh uit het resultaat extraheert (Properties[16].Value) en bij virustotal. com kijkt of het bestand ongevaarli­jk is of niet. Je kunt de hash eenvoudigw­eg invoeren in het vak 'Search' op de website. Als je het optimaal wilt automatise­ren, kun je daar de VirusTotal-API voor gebruiken. Daarvoor moet je eerst bij www.virustotal.com/#/join-us een sleutel aanvragen, waarna je vier geautomati­seerde controles per minuut mag uitvoeren. Een bibliothee­k waarmee de API makkelijke­r vanuit PowerShell te gebruiken is, staat bij de link onderaan op deze pagina.

SQL

Een alternatie­f voor PowerShell is Microsofts Log Parser. Die kan bijna willekeuri­ge logbestand­en verwerken, waaronder de systeemgeb­eurtenisse­n van Windows. Het resultaat kan daarna geanalysee­rd worden met de databasequ­erytaal 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\CurrentCon­trolSet\Services\EventLog een nieuwe lege sleutel toe met de naam MicrosoftW­indows-Sysmon/Operationa­l.

Log Parser is op zich een wat log te bedienen consoletoo­l. Het gebruik wordt een stuk comfortabe­ler met het gratis bij Microsoft te downloaden Log Parser Studio. Dat biedt onder andere de mogelijkhe­id om vaak gebruikte query's te bewaren in een eigen bibliothee­k of om query's te combineren in batch-jobs.

Een minimale SQL-query voor het Sysmon-logboek ziet er bijvoorbee­ld zo uit: SELECT * FROM 'Microsoft-Windows-

Sysmon/Operationa­l' WHERE EventID=3

In Log Parser Studio kies je eenvoudigw­eg de menuopdrac­ht 'File / New Query' of klik je op de betreffend­e knop. Daarna typ je de query in het onderste invoervak. Kies daaronder bij de keuzelijst 'Log Type' de optie 'EVTLOG' en klik op het uitroeptek­en om de query te bewaren.

Log Parser geeft de Sysmon-specifieke data uit de logboekite­ms terug in een veld genaamd Strings. Afzonderli­jke 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 attribuutn­ummer. Die kun je zoals beschreven achterhale­n met de uitvoer van sysmon -s.

Een query voor schrijfact­ies in de Windows-map ziet er dan bijvoorbee­ld zo uit:

SELECT

EventID,

EXTRACT_TOKEN(Strings, 2, '|')

AS ProcessGUI­D, EXTRACT_TOKEN(Strings, 4, '|')

AS Image,

EXTRACT_TOKEN(Strings, 5, '|')

AS TargetFile­name

FROM

'Microsoft-Windows-Sysmon/Operationa­l' WHERE EventID=11

AND TargetFile­name LIKE

'C:\\Windows\\%' Let er daarbij op dat je het voor SQL standaard jokerteken % gebruikt en 'letterlijk­e' \-tekens moet verdubbele­n.

Log Parser Studio kan het resultaat van query's met het menu-item 'File / Export / Output as .CSV' exporteren naar een tekstbesta­nd. Dat kun je met scripts, batchbesta­nden of een spreadshee­tprogramma 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 betreffend­e 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 systeemana­lyse met Sysmon wilt duiken, kun je de GitHub-pagina van Michael Haag (MHaggis) raadplegen – vooral de met liefde bijgehoude­n linkverzam­eling 'SysmonDFIR'. Daar staan onder andere relevante blogartike­len en presentati­es, onder meer van Sysmon-ontwikkela­ar Mark Russinovic­h. Voor beheerders van grotere organisati­es staan er ook links naar instructie­s voor het gebruik van Sysmon-logboeken met de SIEM-oplossinge­n van een bedrijf (Security Informatio­n and Event Management). (mdt)

 ??  ??
 ??  ?? Met een XML-bestand kun je configurer­en welke gebeurteni­ssen Sysmon moet loggen. Dit voorbeeldb­estand is niet erg praktisch, maar toont de opbouw.
Met een XML-bestand kun je configurer­en welke gebeurteni­ssen Sysmon moet loggen. Dit voorbeeldb­estand is niet erg praktisch, maar toont de opbouw.
 ??  ?? Met de toepassing Logboeken kun je alle extra informatie bekijken die Sysmon bewaart voor de geregistre­erde gebeurteni­ssen.
Met de toepassing Logboeken kun je alle extra informatie bekijken die Sysmon bewaart voor de geregistre­erde gebeurteni­ssen.
 ??  ?? Met Microsofts Log Parser Studio kun je de logboekite­ms met de querytaal SQL op dezelfde manier uitlezen als je bij een database doet.
Met Microsofts Log Parser Studio kun je de logboekite­ms met de querytaal SQL op dezelfde manier uitlezen als je bij een database doet.

Newspapers in Dutch

Newspapers from Netherlands