Возможности реализации средств защиты сетевой информации на пользовательском уровне. Реализация защиты на уровне приложений и собственных DLL.
Рассмотрим особенности реализации средств защиты на различных уровнях сетевой архитектуры ОС Windows NT. Под реализацией защиты на каком-либо уровне понимается следующее: можно ли с помощью разработки компоненты этого уровня осуществить функции защиты сетевой информации, и возможно ли реализовать средство защиты, которое, воздействуя каким-либо образом на уже существующие компоненты данного уровня, сможет осуществлять функции защиты.
К функциям защиты сетевых ресурсов, прежде всего, относятся:
- Шифрование сетевого трафика.
- Пассивный мониторинг сетевых пакетов, либо, на более высоком уровне, пассивный мониторинг доступа к сетевым системным DLL и сетевым сервисам.
- Активный мониторинг сетевых пакетов, то есть мониторинг и фильтрация нежелательных пакетов (на более высоком уровне – мониторинг и фильтрация запросов к сетевым системным DLL и сетевым сервисам).
Комбинируя перечисленные функции, можно получить любой класс системы безопасности – от простого шифрования данных приложения перед их отправкой в сеть, до брандмауэра с возможностями поддержки виртуальных соединений.
Реализация защиты на уровне приложений и собственных DLL
Разработка приложений или DLL с функциями защиты – это самая тривиальная и обеспечивающая наименьшую гибкость реализация. Защита на уровне приложения не является прозрачной, в этом случае пользователь должен сам решать, нужно ли защищать его данные перед отправкой в сеть.
При запуске приложения создается новый процесс, адресное пространство которого защищено от других процессов. Поэтому приложение может защищать только свои данные.
Для того чтобы данные других приложений могли обрабатываться приложением, реализующим защиту этих данных, должны использоваться специальные механизмы межпроцессной коммуникации: копирование данных из одного адресного пространства в другое или создание области совместно используемой памяти, видимой из обоих адресных пространств. Следовательно, приложение, данные которого необходимо защитить, должно быть разработано для взаимодействия с приложением, защищающим его данные, с использованием этих механизмов. Но оно не обязано знать о существовании какой-либо системы защиты.
Реализация защиты на уровне собственной DLL также не обеспечивает прозрачной защиты. Для того чтобы защиту данных приложений выполняла некоторая библиотека DLL, необходимо, чтобы приложения были разработаны так, чтобы вызывать функции из этой DLL. После того, как исполняемый код DLL спроецируется на адресное пространство вызывающего процесса (при помощи неявной компоновки при загрузке приложения, или явной – в период выполнения), код и данные DLL просто становятся частью процесса приложения.
Уровень приложений и собственных DLL не имеет всех возможностей по реализации функций защиты сетевых ресурсов. Интерфейсы API, предоставляемые операционной системой приложениям и DLLs, не позволяют им выполнять пассивный или активный мониторинг сетевых пакетов или контролировать доступ к сетевым системным DLL и сетевым сервисам. Единственное, что они могут – это зашифровывать собственные данные перед отправкой их в сеть и расшифровывать после получения их из сети для предоставления пользователю. Только лишь во взаимодействии с собственным драйвером приложение может стать мощным средством защиты, причем в некоторых случаях приложению приходится использовать недокументированные методы.