Фильтр-драйвер
Фильтр-драйвер — это специализированная системная программа (драйвер), которая перехватывает и обрабатывает запросы ввода-вывода (I/O) между операционной системой и аппаратным устройством или файловой системой. В отличие от обычного драйвера устройства, который напрямую управляет оборудованием, фильтр-драйвер встраивается в стек драйверов и выполняет роль посредника, модифицируя, блокируя или логируя проходящие через него данные.
Принцип работы
Фильтр-драйверы функционируют на уровне ядра операционной системы. В современных ОС (Windows, Linux, macOS) драйверы устройств и файловых систем организованы в иерархические стеки. Каждый запрос от пользовательского приложения к устройству или файлу проходит через последовательность драйверов, расположенных друг над другом. Фильтр-драйвер устанавливается в определённую точку этого стека, обычно выше или ниже функционального драйвера устройства.
При перехвате запроса фильтр-драйвер может выполнять следующие действия:
- Пропуск запроса без изменений, передавая его следующему драйверу в стеке.
- Модификация запроса (изменение данных, параметров, адресов).
- Блокировка запроса (возврат кода ошибки приложению, без передачи устройству).
- Создание нового запроса (например, для дублирования данных или выполнения дополнительных операций).
- Логирование информации о запросе (время, тип, источник, объём данных).
Классификация
Фильтр-драйверы классифицируются по типу перехватываемых операций и месту в стеке драйверов.
По типу перехватываемых операций
- Фильтр-драйверы устройств (Device Filter Drivers) — перехватывают IRP (I/O Request Packets), направляемые к конкретному аппаратному устройству. Применяются для управления питанием, обработки ошибок, шифрования данных на диске.
- Фильтр-драйверы файловых систем (File System Filter Drivers) — перехватывают запросы к файловой системе (открытие, чтение, запись, удаление файлов). Наиболее распространённый тип, используемый для антивирусной защиты, шифрования, контроля доступа, резервного копирования.
- Фильтр-драйверы сетевых протоколов (Network Filter Drivers) — перехватывают сетевые пакеты на разных уровнях модели OSI (LSP, NDIS, WFP). Используются в брандмауэрах, VPN-клиентах, системах обнаружения вторжений.
По месту в стеке драйверов
- Верхние фильтры (Upper Filters) — располагаются над функциональным драйвером устройства. Перехватывают запросы от приложений до того, как они достигнут основного драйвера. Часто используются для добавления дополнительных функций (например, поддержка сжатия).
- Нижние фильтры (Lower Filters) — располагаются под функциональным драйвером, но над шинным драйвером. Перехватывают запросы уже после обработки основным драйвером, но до отправки на шину. Применяются для коррекции ошибок, управления питанием, мониторинга состояния оборудования.
История и развитие
Концепция фильтр-драйверов возникла вместе с развитием многоуровневых архитектур операционных систем. В ранних версиях Windows (Windows 95, Windows NT 3.1) драйверы устройств были монолитными, что усложняло добавление новых функций без изменения исходного кода.
В Windows NT 4.0 (1996 год) компания Microsoft представила модель WDM (Windows Driver Model), которая ввела понятие стека драйверов и фильтров. Это позволило сторонним разработчикам создавать драйверы, не изменяя системные компоненты. В Windows 2000 и XP модель WDM была расширена, появились фильтры файловых систем (File System Filter Drivers).
В Windows Vista (2006 год) была внедрена модель KMDF (Kernel-Mode Driver Framework) и UMDF (User-Mode Driver Framework), упростившая разработку фильтр-драйверов и повысившая их стабильность. В Windows 7 и 8 появился Filter Manager (FltMgr.sys) — специальный диспетчер, управляющий фильтрами файловых систем, что позволило создавать мини-фильтры (minifilter drivers) — более компактные и безопасные версии.
В Linux фильтр-драйверы реализуются через механизмы VFS (Virtual File System) и Netfilter. В macOS используется система I/O Kit и Kernel Extensions (kexts), которые позволяют создавать фильтры для устройств и файловых систем.
Применение
Фильтр-драйверы широко используются в различных областях информационных технологий.
Антивирусная защита
Антивирусные программы (например, «Лаборатория Касперского», Dr.Web) используют фильтр-драйверы файловых систем для перехвата всех операций чтения и записи файлов. При попытке открытия файла фильтр-драйвер передаёт его содержимое антивирусному движку для проверки на наличие вредоносного кода. Если файл признан опасным, запрос блокируется, и приложению возвращается код ошибки.
Шифрование данных
Программы шифрования дисков (например, VeraCrypt, BitLocker) устанавливают фильтр-драйверы, которые перехватывают запросы к зашифрованному разделу. При записи данные шифруются, при чтении — расшифровываются, причём этот процесс прозрачен для пользовательских приложений.
Контроль доступа и аудит
Системы DLP (Data Loss Prevention) и SIEM (Security Information and Event Management) используют фильтр-драйверы для мониторинга действий пользователей. Фильтр-драйверы могут перехватывать попытки копирования файлов на USB-накопители, отправки данных по сети или печати документов, блокируя неавторизованные действия и записывая события в журнал.
Резервное копирование
Программы резервного копирования (например, Acronis True Image, Veeam) применяют фильтр-драйверы для создания «теневых копий» (Volume Shadow Copy Service в Windows). Фильтр-драйвер перехватывает запросы записи на диск и создаёт снимок состояния файловой системы, позволяя выполнять резервное копирование без остановки работы приложений.
Виртуализация
В системах виртуализации (VMware, VirtualBox) фильтр-драйверы используются для эмуляции аппаратных устройств. Они перехватывают запросы гостевой операционной системы к виртуальному оборудованию и перенаправляют их к реальному оборудованию хоста.
Примеры
- Windows Filtering Platform (WFP) — набор API и фильтр-драйверов в Windows, используемый для создания брандмауэров, систем обнаружения вторжений и VPN-клиентов.
- File System Minifilter Drivers — в Windows 7 и выше, компактные фильтры, управляемые Filter Manager. Примеры: антивирусные фильтры, фильтры шифрования, фильтры для контроля доступа.
- Netfilter — фреймворк в ядре Linux, предоставляющий возможность создания фильтр-драйверов для сетевых пакетов. Используется в iptables, nftables, fail2ban.
- I/O Kit (macOS) — система для разработки драйверов, включая фильтры, для устройств и файловых систем.
Критика и проблемы
Фильтр-драйверы, работая на уровне ядра, могут вызывать серьёзные проблемы с производительностью и стабильностью системы. Ошибка в фильтр-драйвере способна привести к «синему экрану смерти» (BSOD) в Windows или панике ядра в Linux. Из-за этого разработка фильтр-драйверов требует высокой квалификации и тщательного тестирования.
Кроме того, злоумышленники могут использовать фильтр-драйверы для создания руткитов (rootkits) — вредоносных программ, скрывающих своё присутствие в системе. Фильтр-драйвер может перехватывать запросы к файловой системе и скрывать файлы руткита, а также маскировать сетевые соединения.
В связи с этим, в Windows начиная с Vista, для установки драйверов (включая фильтры) требуется цифровая подпись, а в Windows 10 и 11 — подпись от Microsoft (WHQL). В Linux и macOS также существуют механизмы проверки подлинности драйверов (например, модули ядра с подписью).
Источники
- Microsoft Docs. «Windows Driver Kit (WDK)» — разделы по WDM, KMDF, UMDF, Filter Manager.
- Microsoft Docs. «File System Minifilter Drivers» — описание архитектуры и разработки мини-фильтров.
- Linux Kernel Documentation. «Netfilter» — документация по фреймворку.
- Apple Developer Documentation. «I/O Kit Fundamentals» — описание архитектуры драйверов macOS.
- «Windows Internals, Part 1» by Mark E. Russinovich, David A. Solomon, Alex Ionescu — описание стека драйверов и фильтров в Windows.
- «Understanding the Linux Kernel» by Daniel P. Bovet, Marco Cesati — описание VFS и Netfilter в Linux.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →