Parsear sysmon en Azure Sentinel

Anteriormente ya vimos como conectar diferentes recursos para obtener información de diferentes dispositivos, en este caso vamos a parsear los eventos que nos llega de Sysmon  

Si observamos como nos llega los eventos de Sysmon nos damos cuenta que realmente los eventos importantes se almacenan dentro de las dos columnas «ParameterXml» y «EventData»:

 esas columnas se pueden analizar mediante consultas KQL.  Microsoft Publico en su repositorio unos parsers los cuales podemos utilizar:  https://github.com/Azure/Azure-Sentinel/tree/master/Parsers

También tenemos los parsers de BlueTeamLabs: https://github.com/BlueTeamLabs/sentinel-attack/tree/master/parsers

Para agregar los parsers nos tenemos que ir: Azure Sentinel > Seleccionamos nuestro workspace > Logs y ejecutamos el parse que hemos mostrado en las paginas anteriores.

Una vez ejecutado la query presionamos sobre Save

Guardamos la query ejecutado como Funtion

Por alguna razón que aun no se cual es  me dio muchos problemas los diferentes parsers y por lo tanto tuve que realizar algunas modificaciones en las querys. 

Finalmente mi query quedo de la siguiente manera: 

Event
| where Source == "Microsoft-Windows-Sysmon"
| extend RenderedDescription = tostring(split(RenderedDescription, ":")[0])
| extend EventData = parse_xml(EventData).DataItem.EventData.Data
| mv-expand bagexpansion=array EventData
| evaluate bag_unpack(EventData)
| extend Key=tostring(['@Name']), Value=['#text']
| evaluate pivot(Key, any(Value), TimeGenerated, Source, EventLog, Computer, EventLevel, EventLevelName, EventID, UserName, RenderedDescription, MG, ManagementGroupName, Type, _ResourceId)
| extend RuleName = column_ifexists("RuleName", ""), TechniqueId = column_ifexists("TechniqueId", ""),  TechniqueName = column_ifexists("TechniqueName", "")
| parse RuleName with * 'technique_id=' TechniqueId ',' * 'technique_name=' TechniqueName
| project TimeGenerated, Source, EventLog, Computer, EventLevel, EventLevelName, EventID, UserName, RenderedDescription, MG, ManagementGroupName, Type, _ResourceId, CommandLine, Company, CurrentDirectory, Description, DestinationHostname, DestinationIp, DestinationIsIpv6, DestinationPort, DestinationPortName, FileVersion, Hashes, Image, ImageLoaded, Initiated, IntegrityLevel, LogonGuid, LogonId, OriginalFileName, ParentCommandLine, ParentImage, ParentProcessGuid, ParentProcessId, ProcessGuid, ProcessId, Product, Protocol,  
 RuleName, Signature, SignatureStatus, Signed, SourceHostname, SourceIp, SourceIsIpv6, SourcePort, SourcePortName, TerminalSessionId, User,  UtcTime, TechniqueId, TechniqueName

Ahora si lanzamos cualquier query utilizando la función creada anteriormente podemos comprobar que ya podemos obtener con mayor facilidad los datos que se encontraban en «ParameterXml» y «EventData»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *