Понять,
что такое драйвер, мы попробуем на
типовом примере взаимодействия прикладной программы с драйвером. В NT существует
два типа драйверов: драйверы пользовательского
режима и драйверы режима ядра. В этом разделе мы рассмотрим, какое программное
обеспечение необходимо для разработки и отладки драйверов, а также его установку
и настройку Для построения драйверов и связанных с ними прикладных программ используется
утилита BUILD, входящая в состав
DDK. Необходимо особо отметить, что драйверы предполагается писать
на С, а не на C++. Microsoft не поддерживает использование C++ для компонентов
ядра.
Общая архитектура Windows NT
В этой главе рассматриваются ключевые
архитектурные особенности и характеристики ОС
Windows NT. Эти сведения необходимы для получения представления о назначении
различных компонентов ОС, их взаимодействии друг с другом, а также для ознакомления
с терминологией При обсуждении архитектуры ОС Windows NT постоянно используются
понятия «режим пользователя» и «режим
ядра», поэтому стоит определить, что это значит. Защищенный
режим является основным и наиболее естественным режимом работы 32-разрядных
процессоров. Этот режим был в полной мере реализован в процессорах серии i386
и с тех пор существенных изменений не претерпел. Основные
характеристики Windows NT На NT иногда ссылаются как на операционную систему
на основе микроядра (microkernel-based
operating system). Идея, лежащая в основе концепции микроядра, состоит в том,
что все компоненты ОС за исключением небольшой основы (собственно, микроядра)
исполняются как процессы пользовательского режима. Базовые компоненты в микроядре
исполняются в привилегированном режиме.
Подсистемы окружения операционной
системы NT реализованы как системы типа
клиент/сервер. Микроядро и Слой
Абстрагирования от Оборудования (HAL) изолируют подсистемы Исполнительной
Системы от конкретной
архитектуры процессора. В исполнительной системе объект
(object) - это отдельный образец статически определенного типа объектов, существующий
во время выполнения. Поток
(thread) - единица исполнения в NT. Поток - это сущность внутри процесса,
которую ядро направляет на исполнение, он может принадлежать только одному процессу.
NT позволяет нескольким единицам исполнения - потокам - выполняться одновременно,
быстро переключаясь между ними. Такое поведение называется многозадачностью
(multitasking).
Виртуальное адресное
пространство (virtual address space) процесса - это набор адресов, которые
могут использовать потоки процесса, оно равно четырем гигабайтам (232 байт), два
из которых предназначены для использования программой, а другие два зарезервированы
для ОС. NT поддерживает только архитектуру с симметричной
мультипроцессорной обработкой - SMP Windows NT разработана со
встроенной сетевой поддержкой и включает широкую поддержку сети, интегрированную
с системой ввода/вывода и интерфейсом Win32 API. Структура
Windows NT Серверы Windows NT называются защищенными
подсистемами, так как каждый из них - это отдельный процесс, память которого
защищена от других процессов системой виртуальной памяти исполнительной системы
NT.
Подсистема
среды - это сервер пользовательского режима, реализующий API некоторой ОС
Другой тип защищенных подсистем - неотъемлемые
подсистемы - это серверы, выполняющие важные функции ОС. Надо отметить, что
в разных источниках понятие исполнительной
системы интерпретируется по-разному Диспетчер
Объектов (object manager), который является вероятно наименее известной из
подсистем Исполнительной Системы NT, является также одним из наиболее важных.
Система ввода/вывода исполнительной
системы - это часть кода ОС, получающая запросы ввода/вывода от процессов пользовательского
режима и передающая их, в преобразованном виде, устройствам ввода/вывода.
Ядро
ОС Windows NT реагирует на прерывания и исключения, занимается планированием
потоков, сохранением и восстановлением контекстов потоков, направляет потоки на
выполнение, выполняет межпроцессорную синхронизацию, предоставляет набор сервисов,
элементарных объектов и интерфейсов, используемых компонентами исполнительной
системы Слой абстрагирования от оборудования
(Hardware Abstraction Layer, HAL) является относительно тонким слоем кода, взаимодействующим
напрямую с процессором, шинами и другим оборудованием, и отвечает за обеспечение
стандартного интерфейса к платформенно-зависимым ресурсам для ядра, диспетчера
ввода/вывода и драйверов устройств. Windows NT имеет двухуровневую
модель приоритетов В любое время исполняющийся код будет иметь определенный
уровень IRQL. Этот уровень определяет, что позволено делать коду, применяется
ли к коду механизм квантования времени планировщика и каковы его взаимосвязи с
другими потоками исполнения. Динамические
приоритеты и приоритеты реального времени
NT управляет
прерываниями путем отображения уровней прерывания контроллера прерываний в
собственную аппаратно-независимую таблицу уровней прерываний. Сведения об IRQL
показывают, что уровень Dispatch Level связан с операциями
планирования Текущий уровень IRQL свой у каждого CPU. Код режима ядра может
определить IRQL, в котором он выполняется, посредством вызова функции
KeGetCurrentlrql Организация памяти
в защищенном режиме работы процессора Как уже отмечалось, системное
адресное пространство сильно отличается от пользовательского
Как мы
уже отмечали, линейный и виртуальный
адреса в NT совпадают Эта возможность позволяет приложениям совместно использовать
одну и ту же физическую память (обращаясь
при этом к различным виртуальным адресам) Диспетчер Памяти в NT экспортирует единственную
структуру для контроля данных - Объект-Секцию
Диспетчер памяти использует структуру
MDL для описания набора страниц физической памяти, составляющих буфер виртуальной
памяти в контексте памяти некоторого процесса. Функции
работы с памятью
В исполнительной
системе драйвер устройства и файловая система строятся и выглядят для остальной
части ОС одинаково Итак, файловый
объект - это объект, видимый из режима пользователя, который представляет
всевозможные открытые источники или приемники ввода/вывода: файл на диске или
устройство (физическое, логическое, виртуальное). Драйверы
скрыты от программ пользовательского режима. Устройства (физические, логические
и виртуальные), создаваемые и управляемые драйверами, видны программам пользовательского
режима как именованные файловые объекты Диспетчер ввода/вывода определяет тип
объекта - объект-устройство,
используемый для представления физического, логического или виртуального устройства,
чей драйвер был загружен в систему. Что происходит при
успешном открытии объекта-устройства (неважно, с помощью какой функции: CreateFile()
или NtCreateFile()?
Сейчас мы коротко рассмотрим операции
установки и управления драйверами Точки
входа драйвера Драйвер режима ядра не может использовать API пользовательского
уровня или стандартные библиотеки времени исполнения языка С. Можно использовать
только функции ядра. Диспетчер ввода/вывода вызывает точку
входа DriverEntry при загрузке драйвера Код пользовательского уровня не
может напрямую вызвать код режима ядра
Характеристики
подсистемы ввода/вывода При осуществлении операции ввода/вывода диспетчер
ввода/вывода создает специальный пакет, описывающий эту операцию - пакет
запроса ввода/вывода (I/O Request Packet, IRP). Описатель для буфера
данных инициатора запроса находится в фиксированной
части IRP. NT использует коды функции ввода/вывода для определения конкретной
операции ввода/вывода, которая будет иметь место для конкретного объекта-файла.
Информация, требуемая для выполнения запроса ввода/вывода, содержится в различных
элементах как фиксированной части IRP,
так и стека размещения ввода/вывода.
Ранее в качестве одной из характеристик
подсистемы ввода/вывода упоминалась ее
многоуровневость Стек драйверов
обычно создается самими драйверами Подключение фильтра
к устройству Сериализация -
это процесс выполнения различных операций в нужной последовательности Когда немедленное
завершение запроса ввода/вывода в диспетчерской функции невозможно, драйвер
должен указать Диспетчеру ввода/вывода, что обработка запроса продолжается.
Всякий
раз, когда запрос ввода/вывода удерживается
драйвером в течение продолжительного отрезка времени, драйвер должен быть
готов к отмене данного запроса. Механизмы
синхронизации Спин-блокировка
- простейший механизм синхронизации Спин-блокировки абсолютно необходимы в случаях,
когда требуется синхронизация кода,
работающего на повышенных уровнях IRQL. Ресурсы являются вариантом быстрого
мьютекса
Обобщенная таблица
механизмов синхронизации Любой исполняемый код, как и код драйвера, работает в
контексте некоторого потока. В процессе системной
инициализации NT создает несколько потоков в процессе System В случае, когда
использование системных рабочих потоков
невозможно, драйвер должен создать свой собственный поток. Как говорилось в разделе,
посвященном механизмам синхронизации, поток является диспетчерским
объектом, который переходит в сигнальное состояние при своем завершении. Одной
из основных обязанностей NT является сопряжение
компьютера с его периферийными устройствами Драйверам устройств необходим
способ сообщения NT, что они хотят,
чтобы исполнялась определенная функция, когда процессор получает прерывание, относящееся
к их устройствам. Вдобавок к использованию для работы Диспетчера (планировщика)
NT, IRQL dispatch_level также используется для обработки Отложенных
Вызовов Процедур (DPC)
Сетевая архитектура Windows NT
Эта глава
посвящена рассмотрению сетевой архитектуры
ОС Windows NT. Рассматривается соответствие сетевой архитектуры модели OSI,
описаны сетевые интерфейсы, сетевые компоненты, их предназначение и взаимосвязи.
Чтобы помочь производителям в стандартизации и интегрировании их сетевого программного
обеспечения, Международная организация
по стандартизации (ISO) определила программную модель пересылки сообщений
между компьютерами - модель соединения открытых систем (Open System Interconnection
reference model, OSI). Windows NT реализует несколько сетевых
API для обеспечения поддержки сетевых приложений и совместимости с промышленными
стандартами. Приложения получают доступ к удаленным файлам, используя стандартные
Win32-функции ввода/вывода (открытия, закрытия, чтения, записи и т. п) Windows
NT обеспечивает множество независимых от сети WNet-функций,
которые позволяют работать через провайдеров разных сетей.
Это прикладной
программный интерфейс, позволяющий
обмениваться запросами ввода/вывода с удаленным компьютером. Именованные
каналы обеспечивают надежное двунаправленное взаимодействие между двумя процессами,
независимо от того, является ли принимающая сторона локальной или удаленной. Этот
API реализует 16 и 32-разрядные сокеты
- стандартный сетевой интерфейс, используемый UNIX. Winsock поддерживает надежное,
ориентированное на соединение, а также ненадежное, не ориентированное на соединение
взаимодействия. Средство удаленного вызова
процедур позволяет создавать распределенные приложения, вызывающие функции,
реализованные как локально, так и на удаленных компьютерах. Network
DDE используется для установления и поддержания сетевых соединений, необходимых
для динамического обмена данными между приложениями, выполняющимися на разных
компьютерах в сети.
Сервер Windows NT поддерживает удаленный
доступ (RAS) для создания временных соединений с системами, которые не находятся
в локальной сети, обычно это соединения через телефонные линии. Интерфейс
TAPI - множество функций, позволяющих запрограммировать устройства, передающие
данные по телефонным линиям, не зависящим от конкретного устройства образом, предоставляя
пользователям возможность взаимодействия по телефону. В Windows NT приложения
могут использовать интерфейс DLC,
обращаясь к библиотеке dlcapi.dll. Cтандартный
протокол Internet для обмена управляющей информацией между консолями управления,
такими как HP Openview, Novell NMS, IBM NetView, Sun Net Manager, и набором управляемых
устройств, такими как маршрутизаторы, мосты, концентраторы. COM
API фирмы Microsoft позволяет приложениям состоять из разных компонентов,
где каждый компонент является заменяемым самостоятельным модулем.
Сетевые
сервисы - это процессы, похожие на защищенные подсистемы Сетевые
файловые системы позволяют пользователям разделять свои локальные диски с
другими пользователями в локальной или глобальной сети. Сетевой
редиректор является компонентом уровня ядра, предоставляющий ин-терфейс файловой
системы локальным пользователям, для этого он принимает запросы ввода/вывода для
удаленных файлов и устройств, пересылает их сетевому серверу на удаленном узле,
получает данные с удаленного компьютера и предоставляет их локальному пользователю
Этот компонент должен отвечать на удаленные
запросы, полученные от редиректора на клиентской стороне, взаимодействуя с
локальной файловой системой или принтером В случае сетевых файловых систем, несмотря
на то, что весь механизм транспортировки
данных скрыт от пользователя файловой системы, он все равно знает, каю данные
хранятся локально, а какие были получены с удаленного серверного узла.
Маршрутизатор
многосетевого доступа (Multiple Provider Router, MPR) - это библиотека DLL,
предоставляющая приложениям интерфейс API WNet, и определяющая к какой сети следует
обратиться, когда приложение использует этот интерфейс для просмотра удаленной
файловой системы. Многосетевой UNC
(Multiple UNC Provider, MUP) - драйвер, определяющий, к какой сети следует обратиться,
когда приложение использует стандартный Win32 API ввода/вывода для открытия удаленных
файлов. Windows NT предоставляет для взаимосвязи между транспортными драйверами
и TDI-клиентами уровня ядра, такими как эмуляторы сетевых интерфейсов, редиректоры,
серверы, единый программный интерфейс, называемый интерфейсом
транспортных драйверов (Transport Driver Interface, TDI). Транспортный
протокол NetBEUI STREAMS, основанная
на UNIX STREAMS, является средой
для существующих STREAMS-совместимых транспортных драйверов, которая обеспечивает
переносимость этим драйверам в ОС Windows NT из других ОС с незначительными модификациями
или вовсе без изменений.
В 1989 г Microsoft и 3Com совместно разработали
спецификацию интерфейса взаимодействия между подуровнем MAC канального уровня
модели OSI и драйверами протоколов, располагающихся на вышележащих уровнях. Стандарт
получил название Network Driver Interface
Specification (NDIS - спецификация интерфейса сетевых драйверов). Драйвер
протокола верхнего уровня в своей верхней части предоставляет
TDI-интерфейс или, возможно, другой интерфейс, необходимый пользователям сети.
Обобщенная схема сетевой архитектуры
Windows NT Связь между сетевыми
программными компонентами
Анализ
сетевой архитектуры ОС Windows NT с точки зрения возможностей реализации средств
защиты и анализа сетевого трафика Используемые средства построения
объединенных сетей и их влияние на уровень расположения средства защиты (согласно
модели OSI) От расположения средства
защиты относительно иерархии сетевых компонентов, зависит количество проходящих
через это средство данных, и, следовательно, возможность контроля и защиты этих
данных Рассмотрим особенности реализации средств защиты на
различных уровнях сетевой архитектуры ОС Windows NT. Разработка
приложений или DLL с функциями защиты - это самая тривиальная и обеспечивающая
наименьшую гибкость реализация.
Реализация защиты на
уровне системных DLL, предоставляющих приложениям различные сетевые интерфейсы
Почти все сетевые сервисы, такие
как сервис рабочей станции (LanMan Workstation), сервис сервера (LanMan Server),
сервис оповещений (alerter), сервис сообщений (messenger), обозреватель сети (Computer
Browser), DHCP client содержатся в одном ЕХЕ-файле с именем services. Один из
способов обеспечения прозрачной защиты
связан с заменой механизма предоставления функций «родного» API. С этого момента
начинается анализ сетевых компонент,
исполняющихся в привилегированном режиме - режиме ядра, и являющихся драйверами.
Система ввода/вывода Windows NT является расширяемой.
Один из методов расширения возможностей системы ввода/вывода - разработка и применение
драйверов-фильтров.
Как уже отмечалось ранее, драйвер
mup.sys вовлекается при попытке достижения удаленных разделяемых ресурсов,
используя UNC имена Драйвер файловой
системы обеспечивает пользователям механизм хранения и получения информации,
реализуя возможности по созданию, модификации, удалению, разделению файлов и идентификации
файлов по их символическим/логическим именам. Транспортные драйверы являются,
фактически, стандартными драйверами
промежуточного уровня и реализуют в своей верхней части стандартный интерфейс,
со-тветствующий TDI спецификации. Реализация защиты с помощью перехвата функций
NDIS - библиотеки Разработка NDIS
драйверов промежуточного уровня - это один из хорошо документированных механизмов
расширения возможностей системы ввода/вывода ОС Windows NT.
Реализация
защиты на уровне драйверов сетевых устройств Сравнительный
анализ способов реализации защиты Зависимость способа
реализации средства защиты от предъявляемых к нему требований Переносимость
и поддержка многопроцессорности NDIS предоставляет механизм спин-блокировок,
который может быть использован, чтобы синхронизировать
доступ к общим ресурсам между потоками, имеющими одинаковый приоритет.
Драйвер
протокола выделяет ресурсы под NDIS-пакеты,
заполняет их данными и посылает вниз следующему NDIS-драйверу. Множество функций
интерфейса верхнего уровня драйвера сетевой карты и функций интерфейса нижнего
уровня драйвера протокола разработаны для поддержки асинхронных
операций. Промежуточный NDIS-драйвер
обычно экспортирует функции MiniportXxx на своем верхнем уровне и функции ProtocolXxx
на своем нижнем уровне Точка входа DriverEntry
Возможные обязательные и необязательные функции
протокольной части промежуточного драйвера перечислены ниже Возможные обязательные
и необязательные функции минипортовой
части промежуточного драйвера перечислены ниже Пример реализации драйвера
шифрования сетевых пакетов
Передача
дискретных данных по линиям связи
Сетевая
технология Пропускная способность
Волоконно-оптические кабели физическое
кодирование аналоговая модуляция
цифровое, логическое
кодирование ИКМ
Канальный уровень Компрессия
Коммутация каналов,
пакетов, сообщений
Виртуальные каналы
Общая
характеристика протоколов локальных сетей
Взаимодействия
узлов стандартизация локальных сетей
метод доступа к среде кадры
10Base-5 Стандарт
10Base-2 Стандарт 10Bаse-T
Сети Token Ring Технология
FDDI технологии
Fast Ethernet 100Base-FX
100Base-TX 100Base-T4
100VG-AnyLAN Gigabit
Ethernet
Построение локальных
сетей на базе коммутаторов
коммутационная
матрица Комбинированные коммутаторы Технология
виртуальных сетей Производительность коммутатора
фильтрация трафика
Маршрутизация
в локальных сетях
маршрутизация
таблицы маршрутизации Протоколы
маршрутизации функция маршрутизатора
Сетевой протокол Dynamic
Host Configuration Protocol DNS
Структура IP-пакета маски
сегмент Протокол
RIP Протокол OSPF
Протокол IPX TCP-сообщения
Механизм
идентификации и аутентификации в ОС Windows NT Основные сведения о процессе
Winlogon Протокол взаимодействия
процесса Winlogon и библиотеки GINA
В ОС Windows NT для идентификации используется имя
пользователя, а для подтверждения введенного имени - процедура аутентификации,
использующая символьный пароль пользователя. Сетевая
аутентификация пользователя осуществляется в процессе его подключения к серверу
с целью получения доступа к сетевым ресурсам (например, к сетевому диску) Основные
подходы к созданию изолированной программной среды При создании системы
защиты информации (СЗИ) от несанкционированного доступа необходимо реализовать
следующие функциональные подсистемы Реализация драйвером перехвата
файловых операций основана на недокументированном механизме перехвата системных
сервисов, описанном в разделе «Реализация защиты на уровне собственного API для
ОС Windows NT». Собственный обработчик
создания (открытия) файла может, например, проверить права доступа текущего
процесса к создаваемому (открываемому) файлу Реализация драйвером функции получения
имени обращающегося к ресурсу процесса необходима для создания системы защиты
от НСД не ниже 3 класса по классификации
Руководящих документов Государственной технической комиссии РФ Вывод сообщений
на «синий» экран Процедура распределения
IRP_MJ_DEVICE_CONTROL драйвера контроля
доступа Модифицированная библиотека
Gina
Курс теоретических основ
электротехники