Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
SilkETW — 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. | Kitploit
Herramientas/GitHubGitHub/mandiant/silketw
Herramientas DefensivasForensia de MemoriaAnálisis ForenseAnálisis de MalwareForensia DigitalInteligencia de AmenazasDetección de IntrusionesAprendizaje y EducaciónRespuesta a IncidentesDetección de AnomalíasAnálisis de RegistrosArchived
852139hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHubmandiant/silketw

SilkETW

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.

Ver Repositorio

SilkETW y SilkService

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.

Medios

Para obtener más antecedentes sobre SilkETW y SilkService, consulte los siguientes recursos.

  • SilkETW: Porque la Telemetría Gratuita es … ¡Gratuita! - aquí
  • SilkETW y SilkService en BlackHat Arsenal 2019 - aquí
  • Caza de Amenazas con eventos ETW y HELK — Parte 1: Instalando SilkETW (por @Cyb3rWard0g) - aquí
  • Caza de Amenazas con eventos ETW y HELK — Parte 2: Enviando eventos ETW a HELK (por @Cyb3rWard0g) - aquí
  • Eventos de todos los proveedores ETW basados en manifiestos y mof en versiones de Windows 10 (por @jdu2600) - aquí
  • Buscando Actividad LDAP Sospechosa con SilkETW y Yara - aquí

Detalles de implementación

Bibliotecas

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.

root@kitploit:~
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

SilkETW

Opciones de línea de comandos

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.

Ayuda

SilkService

Advertencia

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.

  • SilkETW y SilkService fueron creados por un ejército de ingeniería de un solo hombre, (@FuzzySec); no cuentan con el respaldo de un departamento de desarrolladores y, por lo tanto, pueden contener errores. Si encuentra errores o ve formas de mejorar estos proyectos, le animamos encarecidamente a que presente tickets y/o envíe solicitudes de extracción.
  • La recolección de ETW puede consumir muchos recursos. No implemente SilkService en una amplia gama de hosts sin realizar pruebas de rendimiento exhaustivas. Asegúrese de que la configuración pueda ejecutarse de manera estable en sus máquinas menos potentes.

Configuración

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.

root@kitploit:~
sc create SillkService binPath= "C:\Path\To\SilkService.exe" start= demand

Configuración

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.

root@kitploit:~
<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:

root@kitploit:~
PS C:\> [guid]::NewGuid()

Guid
----
eee52b87-3f32-4651-b0c3-e7bb9af334aa

Auditoría

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!

¿Algo salió mal?

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.

root@kitploit:~
logman -ets

Si se identifican recolectores obsoletos, se pueden eliminar ejecutando los siguientes comandos desde un símbolo del sistema elevado.

root@kitploit:~
Get-EtwTraceProvider |Where-Object {$.SessionName -like "SilkService*"} |ForEach-Object {Stop-EtwTraceSession -Name $.SessionName}
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |Remove-EtwTraceProvider

Formato de salida

Estructura de salida JSON

La salida JSON, antes de la serialización, se formatea según la siguiente estructura de C#.

root@kitploit:~
public struct EventRecordStruct
{
    public Guid ProviderGuid;
    public List<String> YaraMatch;
    public string ProviderName;
    public string EventName;
    public TraceEventOpcode Opcode;
    public string OpcodeName;
    public DateTime TimeStamp;
    public int ThreadID;
    public int ProcessID;
    public string ProcessName;
    public int PointerSize;
    public int EventDataLength;
    public Hashtable XmlEventData;
}

Tenga en cuenta que, dependiendo del proveedor y del tipo de evento, tendrá datos variables en la tabla hash XmlEventData. A continuación se muestra un ejemplo de salida JSON para "Microsoft-Windows-Kernel-Process" -> "ThreadStop/Stop".

root@kitploit:~
{
   "ProviderGuid":"22fb2cd6-0e7b-422b-a0c7-2fad1fd0e716",
   "YaraMatch":[

   ],
   "ProviderName":"Microsoft-Windows-Kernel-Process",
   "EventName":"ThreadStop/Stop",
   "Opcode":2,
   "OpcodeName":"Stop",
   "TimeStamp":"2019-03-03T17:58:14.2862348+00:00",
   "ThreadID":11996,
   "ProcessID":8416,
   "ProcessName":"N/A",
   "PointerSize":8,
   "EventDataLength":76,
   "XmlEventData":{
      "FormattedMessage":"Thread 11,996 (in Process 8,416) stopped. ",
      "StartAddr":"0x7fffe299a110",
      "ThreadID":"11,996",
      "UserStackLimit":"0x3d632000",
      "StackLimit":"0xfffff38632d39000",
      "MSec":"560.5709",
      "TebBase":"0x91c000",
      "CycleTime":"4,266,270",
      "ProcessID":"8,416",
      "PID":"8416",
      "StackBase":"0xfffff38632d40000",
      "SubProcessTag":"0",
      "TID":"11996",
      "ProviderName":"Microsoft-Windows-Kernel-Process",
      "PName":"",
      "UserStackBase":"0x3d640000",
      "EventName":"ThreadStop/Stop",
      "Win32StartAddr":"0x7fffe299a110"
   }
}

Post-Recolección

Filtrar datos en PowerShell

Puede importar la salida JSON de SilkETW en PowerShell usando la siguiente función simple.

root@kitploit:~
function Get-SilkData {
	param($Path)
	$JSONObject = @()
	Get-Content $Path | ForEach-Object {
		$JSONObject += $_ | ConvertFrom-Json
	}
	$JSONObject
}

En el ejemplo a continuación, recopilaremos datos de eventos de proceso del proveedor Kernel y usaremos cargas de imágenes para identificar la ejecución de Mimikatz. Podemos recopilar los datos requeridos con el siguiente comando.

root@kitploit:~
SilkETW.exe -t kernel -kk ImageLoad -ot file -p C:\Users\b33f\Desktop\mimikatz.json

Con los datos en mano, es fácil ordenar, grep y filtrar para las propiedades que nos interesan.

Mimikatz

Yara

SilkETW incluye funcionalidad Yara para filtrar o etiquetar datos de eventos. Nuevamente, esto tiene capacidades defensivas obvias, pero también se puede utilizar para mejorar su investigación de ETW.

En este ejemplo, usaremos la siguiente regla Yara para detectar la ejecución de Seatbelt en memoria a través de execute-assembly de Cobalt Strike.

root@kitploit:~
rule Seatbelt_GetTokenInformation
{
	strings:
		$s1 = "ManagedInteropMethodName=GetTokenInformation" ascii wide nocase
		$s2 = "TOKEN_INFORMATION_CLASS" ascii wide nocase
		$s3 = /bool\(native int,valuetype \w+\.\w+\/\w+,native int,int32,int32&/
		$s4 = "locals (int32,int64,int64,int64,int64,int32& pinned,bool,int32)" ascii wide nocase
	
	condition:
		all of ($s*)
}

Podemos comenzar a recopilar datos ETW de .Net con el siguiente comando. ¡La opción "-yo" aquí indica que solo debemos escribir las coincidencias de Yara en el disco!

root@kitploit:~
SilkETW.exe -t user -pn Microsoft-Windows-DotNETRuntime -uk 0x2038 -l verbose -y C:\Users\b33f\Desktop\yara -yo matches -ot file -p C:\Users\b33f\Desktop\yara.json

Podemos ver en tiempo de ejecución que nuestra regla Yara fue alcanzada.

Seatbelt

Tenga en cuenta también que solo estamos capturando un subconjunto de los eventos "Microsoft-Windows-DotNETRuntime" (0x2038), específicamente: JitKeyword, InteropKeyword, LoaderKeyword y NGenKeyword.

¿Cómo obtener SilkETW y SilkService?

Puede descargar el código fuente y compilarlo en Visual Studio. Tenga en cuenta que puede obtener la edición comunitaria de Visual Studio de forma gratuita. O puede obtener la última versión precompilada desde lanzamientos.

Trabajo Futuro

Registro de cambios

Para obtener detalles sobre los cambios específicos de la versión, consulte el Registro de cambios.

Hoja de ruta

  • Ofrecer a los usuarios la opción de escribir datos de seguimiento en disco como archivos *.etl.
  • * Ofrecer a los usuarios la opción de escribir datos de seguimiento en el registro de eventos de Windows. (v0.5+)
  • * Ofrecer a los usuarios versiones precompiladas. (v0.6+)
  • * Crear una instancia separada (SilkService) que se pueda implementar como un servicio con un archivo de configuración. (v0.7+)
  • ¡Las sugerencias son bienvenidas!
Descargar herramienta