
Um plugin do Wireshark para instrumentar ETW
Plugin Wireshark para trabalhar com Event Tracing for Windows
Microsoft Message Analyzer está sendo aposentado e seus pacotes de download foram removidos dos sites da microsoft.com em 25 de novembro de 2019.
O Wireshark construiu uma enorme biblioteca de dissecadores de protocolos de rede.
A melhor ferramenta para Windows seria aquela que pudesse coletar e misturar todos os tipos de logs...
Bem-vindo Winshark!!!
Winshark é baseado em um backend libpcap para capturar ETW (Event Tracing for Windows) e um gerador que produzirá todos os dissecadores para provedores ETW conhecidos em sua máquina.
Adicionamos suporte a Tracelogging para cobrir quase todas as técnicas de log no Sistema Operacional Windows.
Com o Winshark e o poder do Windows, agora podemos capturar logs de Rede e Eventos na mesma ferramenta. O Windows expõe muitos provedores ETW, em particular um para captura de rede ;-) Não há mais necessidade de um driver NDIS externo.
Esta é uma enorme melhoria em termos de uso:
Se você quiser:
Por favor, instale o Wireshark antes. Depois, instale o Winshark.
Atualmente, você precisa pedir ao Wireshark para interpretar o DLT_USER 147 como ETW. Isso porque você ainda não tem um valor verdadeiro do libpcap para nosso novo Data Link.
Enviamos um pull request para ter um valor DLT dedicado; ainda está pendente.
Para fazer isso, você precisa abrir a aba Preferences no painel Edit. Selecione DLT_USER em Protocols e Edit a tabela de encapsulamentos:

E defina winshark para DLT = 147:

Aproveite!
Winshark é alimentado por cmake:
git clone https://github.com/airbus-cert/winshark --recursive
mkdir build_winshark
cd build_winshark
cmake ..\Winshark
cmake --build . --target package --config release
Para entender melhor como o Winshark funciona, precisamos primeiro entender como o ETW funciona.
ETW é dividido em três partes:
Existem muitos tipos diferentes de providers. Os mais comuns e utilizáveis são os providers registrados. Um provider registrado, ou provider baseado em manifesto, é registrado na chave de registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers.
Isso faz a ligação entre um provider ID e uma dll. O manifesto está contido na dll associada em um recurso chamado WEVT_TEMPLATE.
Você pode listar todos os providers registrados em sua máquina usando logman:
logman query providers
Você também pode listar todos os providers vinculados a um processo específico:
logman query providers -pid 1234
Alguns deles podem aparecer sem nome; esses tipos de providers podem produzir logs WPP ou TraceLogging.
Sessões são criadas para coletar logs de mais de um provider.
Você pode criar sua própria sessão usando logman:
logman start Mysession -p "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS" -ets -rt
logman update MySession -p "Microsoft-Windows-NDIS-PacketCapture" -ets -rt
Você pode listar todas as sessões ativas a partir de uma linha de comando de administrador:
logman query -ets
Data Collector Set Type Status
-------------------------------------------------------------------------------
...
EventLog-Application Trace Running
EventLog-Microsoft-Windows-Sysmon-Operational Trace Running
EventLog-System Trace Running
...
The command completed successfully.
Você pode ver aqui algumas sessões interessantes usadas pelo registrador de eventos para capturar logs das sessões Application e System e do Sysmon.
Um consumer é um programa simples que lerá logs de uma sessão. Consumers conhecidos são:
logmannetshtracertE agora Winshark!!! Winshark é um consumidor ETW simples. O consumidor subjacente real é libpcap, (wpcap.dll para Windows), que é usado pelo dumpcap.exe, que é o processo responsável pela captura de pacotes.
Wireshark é dividido em três partes (sim, ele também):
Wireshark.exe que é responsável por analisar e dissecar protocolosdumpcap.exe que é responsável por capturar pacoteslibpcap (wpcap.dll) que é responsável pela interface entre dumpcap.exe e o Sistema OperacionalWinshark atua na primeira e na última partes. Ele implementa um backend para libpcap capturar eventos ETW.
Winshark funciona em sessões ETW, é por isso que você pode selecionar uma sessão ETW no lugar da interface de rede no início da captura.
Em seguida, Winshark gera dissecadores lua para cada provider baseado em manifesto registrado em seu computador, durante a etapa de instalação.
Winshark também é capaz de analisar providers baseados em tracelogging.
Para capturar tráfego de rede usando Winshark, você pode usar duas maneiras simples:
pktmon é uma ferramenta de diagnóstico de rede integrada e entre componentes para Windows. Pode ser usada para captura de pacotes, detecção de queda de pacotes, filtragem e contagem de pacotes (suportado a partir do RS5)
(https://docs.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)
pktmon start -c -m real-mode
você pode executar pktmon -h para mais opções (como administrador)
Por exemplo: Adicione um filtro para pacotes
pktmon filter add -t icmp
pktmon filter add -t tcp -p 80
Então inicie o Wireshark com privilégios de administrador e selecione a interface Pktmon:

Isso iniciará a captura de pacotes:

netsh.exe trace start capture=yes report=no correlation=no
E então crie uma sessão ETW associada ao provider Microsoft-Windows-NDIS-PacketCapture:
logman start Winshark-PacketCapture -p "Microsoft-Windows-NDIS-PacketCapture" -rt -ets
Então inicie o Wireshark com privilégios de administrador e selecione a interface Winshark-PacketCapture:

Isso iniciará a captura de pacotes:

ETW marca cada pacote com um cabeçalho que define alguns metadados sobre o remetente.
Um deles é o ID do Processo do emissor. Esta é uma enorme melhoria em relação a uma captura de pacotes clássica de um driver NDIS.
Simplesmente preencha o campo de filtro do Wireshark com a seguinte expressão:
winshark.header.ProcessId == 1234

@kobykahane fornece um driver de filtro do sistema de arquivos que emite um ETW para cada ação realizada em um NamedPipe.
bcdedit /set testsigning on
Winshark clicando duas vezes em C:\Program Files\Wireshark\WinsharkUpdate.bat com direitos de Admincmd.exe em Modo Administradorsc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark e selecione a sessão namedpipe. Aproveite!
Este projeto faz parte de uma apresentação feita para o SSTIC