WinDivert — драйвер перехвата трафика Windows¶
WinDivert (Windows Divert) — это свободный (open source) драйвер для операционных систем Windows, предназначенный для перехвата, модификации и подавления сетевых пакетов на уровне ядра. Драйвер работает как виртуальный сетевой интерфейс и позволяет пользовательским приложениям перехватывать входящий и исходящий трафик, а также отправлять собственные пакеты в сеть. WinDivert написан на языке C и распространяется под лицензией LGPL, исходный код доступен на GitHub.
¶Назначение и принцип работы
WinDivert предоставляет механизм перехвата сетевых пакетов, аналогичный утилитам WinPcap/Npcap, однако работает на более низком уровне — на уровне драйвера ядра Windows. После загрузки драйвера он подключается к стеку сетевых протоколов Windows и может перехватывать пакеты до их доставки приложению-получателю или после их отправки приложением-отправителем.
Основные возможности:
- Перехват входящих и исходящих IP-пакетов (IPv4 и IPv6).
- Модификация заголовков и полезной нагрузки пакетов.
- Полное подавление (drop) пакетов.
- Отправка поддельных (спуфленных) пакетов в сеть.
- Фильтрация трафика на основе правил, заданных на языке, похожем на BPF.
Пользовательское приложение взаимодействует с драйвером через API, предоставляемый библиотекой WinDivert.dll. Программист описывает правила фильтрации (например, перехватывать только TCP-трафик на определённый порт), после чего драйвер передаёт соответствующие пакеты в буфер приложения.
¶Применение
WinDivert активно используется в следующих сценариях:
- Сетевые утилиты и ускорители — перехват и перенаправление трафика, приоритизация пакетов.
- Файрволы и средства мониторинга — анализ трафика на уровне ядра.
- Инструменты тестирования — эмуляция потерь пакетов, задержек, изменение TTL.
- Античиты и игровые утилиты — некоторые программы используют WinDivert для модификации игрового трафика.
- VPN-клиенты и прокси — перехват соединений для их перенаправления через туннель.
Известные проекты, использующие WinDivert, включают утилиты для оптимизации сетевых подключений, а также различные инструменты для работы с игровым трафиком.
¶WinDivert как vulnerable driver
В контексте информационной безопасности WinDivert относится к категории vulnerable drivers (уязвимых драйверов) или, точнее, к драйверам, которые могут быть использованы в целях обхода систем безопасности. Проблема заключается не столько в наличии уязвимостей в коде самого драйвера, сколько в самой природе его функциональности.
Драйвер WinDivert имеет следующие свойства, делающие его потенциально опасным:
- Доступ к ядру ОС — драйвер работает в режиме ядра (Ring 0) и имеет полный доступ к системной памяти и сетевому стеку.
- Отсутствие проверки цифровой подписи Microsoft — драйвер не подписан сертификатом Microsoft, что ограничивает его загрузку на системах с включённой политикой подписи драйверов (Driver Signature Enforcement).
- Возможность обхода безопасности — вредоносное ПО может использовать WinDivert для перехвата сетевого трафика, включая пароли, передаваемые по незащищённым протоколам, или для подмены содержимого загружаемых файлов.
Из-за этих характеристик WinDivert включён в различные списки уязвимых драйверов, используемых для обхода систем безопасности (BYOVD — Bring Your Own Vulnerable Driver). Атакующий, получивший административные привилегии, может загрузить WinDivert для перехвата трафика или модификации сетевых соединений без необходимости во внедрении собственного вредоносного драйвера.
¶Ограничения и защита
По умолчанию Windows 10 и Windows 11 требуют, чтобы драйверы ядра были подписаны сертификатом, доверенным Microsoft. Это ограничивает загрузку WinDivert на системах с включённой политикой подписи драйверов. Однако на системах с отключённой политикой (например, в режиме тестовой подписи или с отключённой проверкой подписи) драйвер может быть загружен.
Для защиты от подобных драйверов Microsoft рекомендует:
- Включать HVCI (Hypervisor-protected Code Integrity) — виртуализацию изоляции памяти ядра.
- Использовать Windows Defender Application Control (WDAC) для контроля загружаемых драйверов.
- Включать Blocklist уязвимых драйверов, обновляемую Microsoft.
¶Исходный код и лицензирование
WinDivert распространяется под лицензией LGPL (GNU Lesser General Public License). Исходный код доступен на GitHub. Проект поддерживается небольшой командой разработчиков. Драйвер совместим с Windows Vista и более новыми версиями, включая Windows 10 и Windows 11.
Для использования WinDivert в собственных проектах разработчики должны учитывать требования лицензии LGPL, а также необходимость подписи драйвера для его загрузки на системах с включённой проверкой подписи.
Источники:
- Официальная документация WinDivert
- GitHub-репозиторий WinDivert
- Microsoft Docs: Driver signing requirements
- Microsoft: Vulnerable and malicious driver reporting center
