Реализация защиты на уровне транспортного драйвера
Транспортные драйверы являются, фактически, стандартными
драйверами про-[ежуточного уровня и реализуют в своей верхней части стандартный
интерфейс, со-тветствующий TDI спецификации. Этот интерфейс в основном
базируется на полу-ении и обработке пакетов IRP_MJ_INTERNAL_DEVICE_CONTROL,
содержащих различные значения контрольных кодов TDI_XXX, определяемых
TDI спецификаци-й. В своей нижней части TDI драйвер взаимодействует с
NDIS библиотекой.
Разработка драйверов транспорта хорошо документирована в Windows NT DDK
в паве Network drivers, в части Intermediate NDIS drivers and TDI drivers.
Имеется при-юр транспортного драйвера в DDK\src\network\tdi.
Можно также реализовать драйвер-фильтр, который будет присоединяться к
объек-ам-устройствам, создаваемым драйвером транспорта. Например, к объектам-устрой-твам
\Device\Tcp и \Device\Udp, создаваемым драйвером транспорта TCP/IP.
В связи с тем, что драйвер транспорта должен предоставлять единый, хорошо
до-ументированный интерфейс, облегчается задача его разработки. Вместе с тем, TDI-штерфейс является расширяемым интерфейсом, так как:
- TDI предоставляет возможность расширения множества операций, позволяющих взаимодействовать TDI-клиенту с определенным транспортом, в том числе и операций, связанных с управлением и конфигурацией.
- TDI предоставляет гибкую схему адресации, позволяющую определять и использовать множество форматов адресов.
- TDI определяет механизм, с помощью которого драйвер транспорта может сигнализировать клиенту об интересующих клиента событиях, произошедших в сети (без предварительного запроса от клиента). Это происходит с помощью вызова драйвером транспорта функций, указатели на которые передаются TDI-клиентом драйверу транспорта в самом начале сетевых операций в пакете IRP_MJ_INTERNAL_DEVICE_ CONTROL с контрольным кодом TDI_SET_ EVENTJHANDLER, и регистрируются драйвером транспорта. TDI-клиент даже может использовать подобный механизм функций обратного вызова в качестве альтернативы обычным пакетам запросов к транспорту с контрольными кодами TDI_XXX. Когда драйвер транспорта вызывает подобную функцию, он может передать TDI-клиенту в качестве параметров некоторое ограниченное количество данных. При этом, если существует драйвер-фильтр, присоединенный к драйверу транспорта, то он не получит возможности проконтролировать эти данные.
Подобное свойство расширения возможностей взаимодействия
клиента с определенным драйвером транспорта приводит к частичной закрытости
интерфейса между ними. В результате чего сильно затрудняется разработка
драйвера-фильтра, присоединяемого к транспортному драйверу, как и в случае
с драйверами файловых систем.
В то же время сохраняется возможность разработки собственного драйвера
транспорта с использованием документации DDK, который будет реализовать
требуемые функции защиты.