
C#-Wrapper für ETW, der Kernel- und Benutzermodus-Ereignisdaten in JSON serialisiert für Bedrohungsjagd, Malware-Analyse und Incident Response, mit Yara-Integration und Elasticsearch-Versand.
SilkETW & SilkService sind flexible C#-Wrapper für ETW. Sie sollen die Komplexität von ETW abstrahieren und den Leuten eine einfache Schnittstelle bieten, um Forschung und Introspektion durchzuführen. Obwohl beide Projekte offensichtliche defensive (und offensive) Anwendungen haben, sollten sie in erster Linie als Forschungswerkzeuge betrachtet werden.
Zur einfachen Verwendung werden Ausgabedaten in JSON serialisiert. Die JSON-Daten können entweder in eine Datei geschrieben und lokal mit PowerShell analysiert, im Windows-Ereignisprotokoll gespeichert oder an eine Drittanbieter-Infrastruktur wie Elasticsearch gesendet werden.
Weitere Informationen zur Zukunft von SilkETW & SilkService finden Sie im Abschnitt Fahrplan.
Weitere Hintergrundinformationen zu SilkETW und SilkService finden Sie in den folgenden Ressourcen.
SilkETW basiert auf .Net v4.5 und verwendet eine Reihe von Drittanbieter-Bibliotheken, wie unten gezeigt. Weitere Einzelheiten finden Sie in LICENSE-3RD-PARTY.
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
Die Verwendung der Befehlszeile ist recht einfach und die Benutzereingaben werden im Ausführungsprolog validiert. Siehe das Bild unten für weitere Details.

SilkService wurde erstellt, weil viele Leute SilkETW kopflos ausführen und ETW-Sammlung für mehrere Quellen gleichzeitig durchführen wollten. Obwohl dies offensichtlich attraktiv ist, sollten die folgenden Punkte beachtet werden.
Nach dem Kompilieren oder Herunterladen des Release-Pakets können Sie den Dienst installieren, indem Sie den folgenden Befehl in einer erhöhten Eingabeaufforderung ausführen.
sc create SillkService binPath= "C:\Path\To\SilkService.exe" start= demand
SilkService verwendet eine XML-Konfigurationsdatei, "SilkServiceConfig.xml", die im selben Verzeichnis wie die Dienstbinärdatei abgelegt werden sollte. Eine Beispielkonfigurationsdatei ist unten zu sehen.
<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>
Beachten Sie, dass jedes ETWCollector-Element eine zufällige GUID haben sollte, die für die interne Verfolgung und Protokollierung verwendet wird. Sie können GUIDs in PowerShell mit dem folgenden Befehl generieren:
PS C:\> [guid]::NewGuid()
Guid
----
eee52b87-3f32-4651-b0c3-e7bb9af334aa
Zur Laufzeit erstellt SilkService einen Unterordner "Logs", um Laufzeitinformationen des Dienstes aufzuzeichnen. Dies ist eine unschätzbare Ressource, um den Dienstzustand abzufragen, die Parameterüberprüfung des Dienstes zu verifizieren und Fehlerinformationen zu überprüfen. SilkService hat die Präferenz, sich ordnungsgemäß herunterzufahren, wenn es auf einen Fehler stößt, selbst wenn ein solcher Fehler nicht unbedingt eine Beendigung erfordert. Diese Designentscheidung wurde bewusst getroffen, da es keine gute Strategie ist, lose Sammler oder partielle Betriebsfähigkeit zu haben.
Konsultieren Sie immer das Dienstprotokoll, wenn der Dienst sich selbst herunterfährt!
Es ist immer möglich, dass etwas schief geht. Konsultieren Sie das Dienstprotokoll für weitere Details. Während SilkService so konfiguriert ist, dass es ETW-Sammler bei Fehlern beendet und bereinigt, kann es vorkommen, dass nach der Prozessbeendigung ein veralteter Sammler registriert bleibt. Um laufende Sammler aufzulisten, können Sie den folgenden Befehl verwenden.
logman -ets
Wenn veraltete Sammler identifiziert werden, können sie durch Ausführen der folgenden Befehle in einer erhöhten Eingabeaufforderung entfernt werden.
Get-EtwTraceProvider |Where-Object {$.SessionName -like "SilkService*"} |ForEach-Object {Stop-EtwTraceSession -Name $.SessionName}
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |Remove-EtwTraceProvider
Die JSON-Ausgabe wird vor der Serialisierung gemäß der folgenden C#-Struktur formatiert.