
Плагин Wireshark для инструментирования ETW
Плагин для Wireshark для работы с Event Tracing for Windows
Microsoft Message Analyzer устарел, и его пакеты загрузки были удалены с сайтов microsoft.com 25 ноября 2019 года.
Wireshark имеет огромную библиотеку дисекторов сетевых протоколов.
Лучшим инструментом для Windows был бы тот, который может собирать и смешивать все типы журналов...
Добро пожаловать, Winshark!!!
Winshark основан на бэкенде libpcap для захвата ETW (Event Tracing for Windows) и генераторе, который создаст дисекторы для всех известных провайдеров ETW на вашем компьютере.
Мы добавили поддержку Tracelogging, чтобы охватить почти все методы ведения журналов в операционной системе Windows.
С помощью Winshark и возможностей Windows мы теперь можем захватывать сетевые и системные события в одном инструменте. Windows предоставляет множество провайдеров ETW, в частности один для захвата сети ;-) Больше не нужен внешний NDIS-драйвер.
Это огромное улучшение с точки зрения использования:
Если вы хотите:
Пожалуйста, сначала установите Wireshark. Затем просто установите Winshark.
На данный момент вам нужно заставить Wireshark интерпретировать DLT_USER 147 как ETW. Это связано с тем, что у нас ещё нет истинного значения от libpcap для нашего нового типа канала данных.
Мы отправили pull request для получения выделенного значения DLT; он всё ещё на рассмотрении.
Для этого откройте вкладку Preferences в панели Edit. Выберите DLT_USER в разделе Protocols и нажмите Edit для изменения таблицы инкапсуляции:

И установите winshark для DLT = 147 :

Наслаждайтесь!
Winshark работает на cmake:
git clone https://github.com/airbus-cert/winshark --recursive
mkdir build_winshark
cd build_winshark
cmake ..\Winshark
cmake --build . --target package --config release
Чтобы лучше понять, как работает Winshark, сначала нужно понять, как работает ETW.
ETW делится на три части:
Существует много разных типов провайдеров. Наиболее распространённые и полезные — это зарегистрированные провайдеры. Зарегистрированный провайдер (или провайдер на основе манифеста) записан в разделе реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers.
Это устанавливает связь между ID провайдера и dll. Манифест находится в соответствующей dll в ресурсе с именем WEVT_TEMPLATE.
Вы можете вывести список всех зарегистрированных провайдеров на вашей машине с помощью logman:
logman query providers
Вы также можете вывести список всех провайдеров, связанных с определённым процессом:
logman query providers -pid 1234
Некоторые из них могут отображаться без имени; такие провайдеры могут создавать логи WPP или TraceLogging.
Сессии создаются для сбора логов от нескольких провайдеров.
Вы можете создать свою собственную сессию с помощью logman:
logman start Mysession -p "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS" -ets -rt
logman update MySession -p "Microsoft-Windows-NDIS-PacketCapture" -ets -rt
Вы можете вывести список всех активных сессий из командной строки с правами администратора:
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.
Здесь вы можете увидеть несколько интересных сессий, используемых системным журналом событий для захвата логов из сессий Application и System, а также из Sysmon.
Потребитель — это простая программа, которая читает логи из сессии. Известные потребители:
logmannetshtracertИ теперь Winshark!!! Winshark — это простой потребитель ETW. Реальным базовым потребителем является libpcap (wpcap.dll для Windows), который используется dumpcap.exe — процессом, отвечающим за захват пакетов.
Wireshark разделён на три части (да, он тоже):
Wireshark.exe, который отвечает за разбор и дисекцию протоколовdumpcap.exe, который отвечает за захват пакетовlibpcap (wpcap.dll), который отвечает за взаимодействие между dumpcap.exe и операционной системойWinshark встраивается в первую и последнюю части. Он реализует бэкенд для libpcap для захвата событий ETW.
Winshark работает с сессиями ETW, поэтому вы можете выбрать сессию ETW вместо сетевого интерфейса при начале захвата.
Затем Winshark генерирует дисекторы lua для каждого зарегистрированного на вашем компьютере провайдера на основе манифеста во время установки.
Winshark также может разбирать провайдеры на основе tracelogging.
Для захвата сетевого трафика с помощью Winshark можно использовать два простых способа:
pktmon — это встроенный кросскомпонентный инструмент диагностики сети для Windows. Он может использоваться для захвата пакетов, обнаружения отбрасывания пакетов, фильтрации и подсчёта пакетов (поддерживается с RS5)
(https://docs.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon)
pktmon start -c -m real-mode
вы можете запустить pktmon -h для получения дополнительных опций (от имени администратора)
Например: Добавить фильтр для пакетов
pktmon filter add -t icmp
pktmon filter add -t tcp -p 80
Затем запустите Wireshark с правами администратора и выберите интерфейс Pktmon:

Это запустит захват пакетов:

netsh.exe trace start capture=yes report=no correlation=no
И затем создайте сессию ETW, связанную с провайдером Microsoft-Windows-NDIS-PacketCapture:
logman start Winshark-PacketCapture -p "Microsoft-Windows-NDIS-PacketCapture" -rt -ets
Затем запустите Wireshark с правами администратора и выберите интерфейс Winshark-PacketCapture:

Это запустит захват пакетов:

ETW помечает каждый пакет заголовком, содержащим метаданные об отправителе.
Одним из них является Process ID отправителя. Это огромное улучшение по сравнению с классическим захватом пакетов от драйвера NDIS.
Просто введите в поле фильтра Wireshark следующее выражение:
winshark.header.ProcessId == 1234

@kobykahane предоставил драйвер фильтра файловой системы, который генерирует ETW для каждого действия, выполняемого над NamedPipe.
bcdedit /set testsigning on
Winshark, дважды щёлкнув C:\Program Files\Wireshark\WinsharkUpdate.bat с правами Администратораcmd.exe в режиме Администратораsc start NpEtw
logman start namedpipe -p NpEtw -ets -rt
Wireshark и выберите сессию namedpipe. Наслаждайтесь!
Этот проект является частью презентации, подготовленной для SSTIC