
Wrapper C# per ETW che serializza i dati degli eventi in modalità kernel e utente in JSON per la caccia alle minacce, l'analisi malware e la risposta agli incidenti, con integrazione Yara e invio a Elasticsearch.
SilkETW e SilkService sono wrapper flessibili in C# per ETW, progettati per astrarre le complessità di ETW e fornire alle persone un'interfaccia semplice per effettuare ricerca e introspezione. Sebbene entrambi i progetti abbiano ovvie applicazioni difensive (e offensive), dovrebbero essere considerati principalmente come strumenti di ricerca.
Per un consumo facile, i dati di output sono serializzati in JSON. I dati JSON possono essere scritti su file e analizzati localmente usando PowerShell, archiviati nel registro eventi di Windows o inviati a infrastrutture di terze parti come Elasticsearch.
Per maggiori informazioni sul futuro di SilkETW e SilkService, consulta la sezione Roadmap.
Per ulteriori informazioni su SilkETW e SilkService, consulta le seguenti risorse.
SilkETW è costruito su .Net v4.5 e utilizza diverse librerie di terze parti, come mostrato sotto. Consulta LICENSE-3RD-PARTY per ulteriori dettagli.
ModuleId Version LicenseUrl
-------- ------- ----------
McMaster.Extensions.CommandLineUtils 2.3.2 https://licenses.nuget.org/Apache-2.0
Microsoft.Diagnostics.Tracing.TraceEvent 2.0.36 https://github.com/Microsoft/perfview/blob/master/LICENSE.TXT
Newtonsoft.Json 12.0.1 https://licenses.nuget.org/MIT
System.ValueTuple 4.4.0 https://github.com/dotnet/corefx/blob/master/LICENSE.TXT
YaraSharp 1.3.1 https://github.com/stellarbear/YaraSharp/blob/master/LICENSE
L'utilizzo da riga di comando è abbastanza semplice e l'input utente viene validato nel prologo di esecuzione. Vedi l'immagine sotto per ulteriori dettagli.

SilkService è stato creato perché molte persone volevano eseguire SilkETW in modalità headless e raccogliere ETW da più fonti contemporaneamente. Sebbene ciò sia ovviamente interessante, i seguenti punti dovrebbero essere tenuti a mente.
Dopo aver compilato o scaricato il pacchetto di rilascio, puoi installare il servizio eseguendo il seguente comando da un prompt dei comandi elevato.
sc create SillkService binPath= "C:\Path\To\SilkService.exe" start= demand
SilkService legge un file di configurazione XML, "SilkServiceConfig.xml", che dovrebbe essere posizionato nella stessa directory del binario del servizio. Un esempio di file di configurazione è mostrato sotto.
<SilkServiceConfig>
<!--
This is a user collector
-> Microsoft-Windows-DotNETRuntime
-> GUID or string based name
-->
<ETWCollector>
<Guid>45c82358-c52d-4892-8237-ba001d396fb4</Guid>
<CollectorType>user</CollectorType>
<ProviderName>e13c0d23-ccbc-4e12-931b-d9cc2eee27e4</ProviderName>
<UserKeywords>0x2038</UserKeywords>
<OutputType>url</OutputType>
<Path>https://some.elk:9200/NetETW/_doc/</Path>
</ETWCollector>
<!--
This is a user collector
-->
<ETWCollector>
<Guid>6720babc-dedc-4906-86b9-d0bc0089ec50</Guid>
<CollectorType>user</CollectorType>
<ProviderName>Microsoft-Windows-DNS-Client</ProviderName>
<OutputType>eventlog</OutputType>
<YaraScan>C:\Some\Path\RuleFolder</YaraScan>
<YaraOptions>Matches</YaraOptions>
</ETWCollector>
<!--
This is a kernel collector
-->
<ETWCollector>
<Guid>21ac2393-3bbb-4702-a01c-b593e21913dc</Guid>
<CollectorType>kernel</CollectorType>
<KernelKeywords>Process</KernelKeywords>
<OutputType>file</OutputType>
<Path>C:\Users\b33f\Desktop\kproc.json</Path>
</ETWCollector>
</SilkServiceConfig>
Nota che ogni elemento ETWCollector dovrebbe avere un GUID casuale, utilizzato per monitoraggio e registrazione interni. Puoi generare GUID in PowerShell usando il seguente comando:
PS C:\> [guid]::NewGuid()
Guid
----
eee52b87-3f32-4651-b0c3-e7bb9af334aa
Durante l'esecuzione, SilkService creerà una sottocartella "Logs" per registrare le informazioni di runtime del servizio. Questa è una risorsa inestimabile per interrogare lo stato del servizio, verificare la validazione dei parametri e rivedere le informazioni sugli errori. SilkService preferisce arrestarsi in modo pulito se incontra qualsiasi tipo di errore, anche se tale errore non richiede strettamente la terminazione. Questa decisione di design è stata presa intenzionalmente poiché non è una strategia valida avere collector pendenti o operatività parziale.
Consulta sempre il log del servizio se il servizio si arresta da solo!
È sempre possibile che qualcosa vada storto. Consulta il log del servizio per maggiori dettagli. Sebbene SilkService sia configurato per terminare e pulire i collector ETW in caso di errore, è possibile che un collector obsoleto rimanga registrato dopo la terminazione del processo. Per elencare i collector in esecuzione, puoi usare il seguente comando.
logman -ets
Se vengono identificati collector obsoleti, possono essere rimossi eseguendo i seguenti comandi da un prompt elevato.
Get-EtwTraceProvider |Where-Object {$.SessionName -like "SilkService*"} |ForEach-Object {Stop-EtwTraceSession -Name $.SessionName}
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |Remove-EtwTraceProvider
L'output JSON, prima della serializzazione, è formattato secondo la seguente struct C#.