
Envoltorio en C# para ETW que serializa datos de eventos de kernel y modo usuario a JSON para caza de amenazas, análisis de malware y respuesta a incidentes, con integración de Yara y envío a Elasticsearch.
SilkETW y SilkService son envoltorios flexibles en C# para ETW, diseñados para abstraer las complejidades de ETW y ofrecer a los usuarios una interfaz simple para realizar investigación e introspección. Aunque ambos proyectos tienen aplicaciones defensivas (y ofensivas) obvias, deben considerarse principalmente como herramientas de investigación.
Para un consumo sencillo, los datos de salida se serializan en JSON. Los datos JSON pueden escribirse en un archivo y analizarse localmente mediante PowerShell, almacenarse en el registro de eventos de Windows o enviarse a infraestructura de terceros como Elasticsearch.
Para obtener más información sobre el futuro de SilkETW y SilkService, consulte la sección Hoja de Ruta.
Para obtener más antecedentes sobre SilkETW y SilkService, consulte los siguientes recursos.
SilkETW está construido sobre .Net v4.5 y utiliza varias bibliotecas de terceros, como se muestra a continuación. Consulte LICENSE-3RD-PARTY para obtener más detalles.
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
El uso desde la línea de comandos es bastante sencillo y la entrada del usuario se valida en el prólogo de ejecución. Consulte la imagen a continuación para obtener más detalles.

SilkService fue creado porque muchas personas querían ejecutar SilkETW sin interfaz gráfica y realizar la recolección de ETW de múltiples fuentes al mismo tiempo. Aunque esto tiene un atractivo obvio, se deben tener en cuenta los siguientes puntos.
Después de compilar o descargar el paquete de lanzamiento, puede instalar el servicio ejecutando el siguiente comando desde un símbolo del sistema elevado.
sc create SillkService binPath= "C:\Path\To\SilkService.exe" start= demand
SilkService ingiere un archivo de configuración XML, "SilkServiceConfig.xml", que debe colocarse en el mismo directorio que el binario del servicio. A continuación se puede ver un ejemplo de archivo de configuración.
<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>
Tenga en cuenta que cada elemento ETWCollector debe tener un GUID aleatorio; esto se utiliza para el seguimiento interno y fines de registro. Puede generar GUID en PowerShell usando el siguiente comando:
PS C:\> [guid]::NewGuid()
Guid
----
eee52b87-3f32-4651-b0c3-e7bb9af334aa
En tiempo de ejecución, SilkService creará una subcarpeta "Logs" para registrar información de ejecución del servicio. Este es un recurso invaluable para consultar el estado del servicio, verificar la validación de parámetros del servicio y revisar información de errores. SilkService prefiere cerrarse sin problemas si encuentra cualquier tipo de error, incluso si dicho error no requiere estrictamente terminación. Esta decisión de diseño se tomó deliberadamente, ya que no es una estrategia sólida tener recolectores colgantes u operabilidad parcial.
¡Consulte siempre el registro del servicio si el servicio se apaga solo!
Siempre es posible que algo salga mal. Consulte el registro del servicio para obtener más detalles. Si bien SilkService está configurado para terminar y limpiar los recolectores ETW o error, es posible que un recolector obsoleto permanezca registrado después de la terminación del proceso. Para listar los recolectores en ejecución, puede usar el siguiente comando.
logman -ets
Si se identifican recolectores obsoletos, se pueden eliminar ejecutando los siguientes comandos desde un símbolo del sistema elevado.
Get-EtwTraceProvider |Where-Object {$.SessionName -like "SilkService*"} |ForEach-Object {Stop-EtwTraceSession -Name $.SessionName}
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |Remove-EtwTraceProvider
La salida JSON, antes de la serialización, se formatea según la siguiente estructura de C#.