Разработка межсетевого экрана для компьютеров пользователей с использованием технологии WFP - Контрольная работа

бесплатно 0
4.5 170
Библиотеки, содержащие средства для работы с WFP. Работа с сетевым трафиком. Блокировка трафика отдельных соединений по IP-адресу либо по порту. Добавление и удаление фильтров. Блокирование и разблокирование приложений. Добавление массива фильтров.


Аннотация к работе
В нашем случае переменная этого типа будет предназначена для работы с фильтром. Инициализации этой переменной происходит при вызове функции FWPMENGINEOPEN0, которая открывает сессию для работы с фильтром. ENGINEHANDLE Уже описанная выше переменная для открытия работы с фильтром. Следующим шагом необходимо добавить подуровень, в который, в дальнейшем, пропишем наш фильтр. Для этого объявим и проинициализируем переменную типа FWPM_FILTER0: typedefstruct FWPM_FILTER0_ {В ходе работы над практическим заданием мы изучили и разобрались с относительно новым продуктом от Microsoft для работы с сетевым трафиком - Windows Filtering Platform.

План
Оглавление

Введение

Теоретическая часть

Инструкция

Практическая часть

Заключение

Список используемых источников

Приложение

Введение
Начиная с версий Server 2008 и Vista в Windows был встроен механизм WFP (Windows Filtering Platform - платформа фильтрации Windows), представляющий собой набор API и системных сервисов. Данный набор позволяет запрещать и разрешать соединения, управлять отдельными пакетами. Эти нововведения были предназначены для упрощения жизни разработчиков различных защит. Внесенные в сетевую архитектуру изменения затронули как kernel-mode, так и user-mode части системы. В первом случае необходимые функции экспортируются fwpkclnt.sys, во втором - fwpuclnt.dll (буквы "k" и "u" в названиях библиотек означают kernel и user соответственно).

В ходе данного отчета будут рассмотрены основные методы, позволяющие реализовать пакетный фильтр для блокировки трафика отдельных соединений по IP-адресу либо по порту.

Теоретическая часть

Библиотеки, содержащие средства для работы с WFP, находятся в наборе для разработчиков WDK (Windows Driver Kit).

Первым делом необходимо создать экземпляр типа Handle - дескриптор, описывающий различные объекты. В нашем случае переменная этого типа будет предназначена для работы с фильтром. Инициализации этой переменной происходит при вызове функции FWPMENGINEOPEN0, которая открывает сессию для работы с фильтром.

Прототип этой функции выглядит следующим образом: DWORD WINAPI FWPMENGINEOPEN0(

__in_optconstwchar_t *SERVERNAME, __in UINT32AUTHNSERVICE, __in_OPTSEC_WINNT_AUTH_IDENTITY_W *AUTHIDENTITY, __in_optconst FWPM_SESSION0 *session, __out HANDLE *ENGINEHANDLE

);

где: SERVERNAME Данное значение должно быть NULL

AUTHNSERVICE Особенности аутентификации. Допустимые значения:RPC_C_AUTHN_WINNTИ RPC_C_AUTHN_DEFAULT.

AUTHIDENTITY Аутентификация и авторизация для доступа к фильтру. Для нашей задачи можно использовать NULL session Специфические параметры открытия сессии. Для нашей задачи можно использовать NULL

ENGINEHANDLE Уже описанная выше переменная для открытия работы с фильтром.

В случае успеха операции метод возвращает ERROR_SUCCESS.

Сетевой уровень можно разделить на три группы подуровней: 1) Подуровни сетевого доступа - протоколы, занимающиеся интерфейсом сетей, такие как X.25

2) Подуровни зависимого сетевого сближения - необходимо для приведения уровня транзитной сети до уровня сети на другой стороне

3) Подуровни независимого сетевого сближения - для переноса через многочисленные сети

Следующим шагом необходимо добавить подуровень, в который, в дальнейшем, пропишем наш фильтр.

Для этого создадим переменную типа FWPM_SUBLAYER0 typedefstruct FWPM_SUBLAYER0_ {

GUID SUBLAYERKEY;

FWPM_DISPLAY_DATA0DISPLAYDATA;

UINT16 flags;

GUID *PROVIDERKEY;

FWP_BYTE_BLOB PROVIDERDATA;

UINT16 weight;

} FWPM_SUBLAYER0;

где: SUBLAYERKEY Уникальный идентификатор подуровня (GUID).

DISPLAYDATA Название и описание подуровня в понятной для пользователя форме.

Flags Флаг. Должен быть FWPM_SUBLAYER_FLAG_PERSISTENT

PROVIDERKEY Уникальный идентификатор провайдера, управляющего данным подуровнем.

PROVIDERDATA Специфические данные провайдера.

Weight Вес подуровня. Подуровни с большим весом вызываются раньше.

Добавим созданный подуровень в систему при помощи метода FWPMSUBLAYERADD0

DWORD WINAPI FWPMSUBLAYERADD0(

__in HANDLE ENGINEHANDLE, __in const FWPM_SUBLAYER0 *SUBLAYER, __in_opt PSECURITY_DESCRIPTOR sd

);

где: ENGINEHANDLE переменная для открытия работы с фильтром.

SUBLAYER добавляемый подуровень sd информация о безопасности для данного подуровня

В случае успеха операции метод возвращает ERROR_SUCCESS.

Теперь создадим уже непосредственно фильтр. Для этого объявим и проинициализируем переменную типа FWPM_FILTER0: typedefstruct FWPM_FILTER0_ {

GUIDFILTERKEY;

FWPM_DISPLAY_DATA0DISPLAYDATA;

UINT32 flags;

GUID *PROVIDERKEY;

FWP_BYTE_BLOB PROVIDERDATA;

GUIDLAYERKEY;

GUIDSUBLAYERKEY;

FWP_VALUE0 weight;

UINT32NUMFILTERCONDITIONS;

FWPM_FILTER_CONDITION0 *FILTERCONDITION;

FWPM_ACTION0 action;

union{

UINT64 RAWCONTEXT;

GUID PROVIDERCONTEXTKEY;

};

GUID *reserved;

UINT64FILTERID;

FWP_VALUE0EFFECTIVEWEIGHT;

} FWPM_FILTER0;

где: FILTERKEY Уникальный идентификатор фильтра (GUID).

DISPLAYDATA Название и описание фильтра в понятной для пользователя форме.

FLAGSКОМБИНАЦИЯ значений. Для нашей задачи берется значение по умолчанию - FWPM_FILTER_FLAG_NONE

PROVIDERKEY Уникальный идентификатор провайдера, управляющего данным подуровнем.

PROVIDERDATA Специфические данные провайдера.

LAYERKEYУНИКАЛЬНЫЙ идентификатор уровня, на который нужно добавить фильтр.

FILTERINGLAYERIDENTIFIERS - список доступных значений.

SUBLAYERKEY Уникальный идентификатор подуровня, на который нужно добавить фильтр.

Filtering SUBLAYER Identifiers - список встроенных подуровней. Так же можно добавить идентификатор созданного вручную подуровня. weightвесфильтра. Для нашей задачи будем ИСПОЛЬЗОВАТЬFWP_EMPTY - автоматически принимаемое значение веса, основанное на условиях фильтра.

FILTERWEIGHTIDENTIFIERS - список встроенных констант данного параметра.

NUMFILTERCONDITIONS количество условий фильтра.

FILTERCONDITION массив условий фильтра. Содержат информацию о типе блокировки (по IP адресу, по порту, по идентификатору приложения, либо что-то другое), а так же значение, которое нужно блокировать. actionctpyktypa, описывающая действие, возникающее при выдачи всеми фильтрами значения true.

В нашей задаче будем использовать FWP_ACTION_BLOCK

RAWCONTEXT Доступно, когда фильтр не имеет контекстной информации провайдера.

Filter Context Identifiers - список доступных значений.

PROVIDERCONTEXTKEY Доступно, когда фильтр имеет контекстной информации провайдера.

Builtin Provider Context Identifiers - список доступных значений.

Reserved Запасной параметр для системного пользования.

FILTERID уникальный идентификатор фильтра

EFFECTIVEWEIGHT структура, содержащая вес фильтра.

Добавим созданный фильтр при помощи метода FWPMFILTERADD0

DWORD WINAPI FWPMFILTERADD0(

__in HANDLE ENGINEHANDLE, __in const FWPM_FILTER0 *filter, __in_opt SECURITY_DESCRIPTOR sd, __out_opt UINT64 *id

);

где: ENGINEHANDLE переменная для открытия работы с фильтром. filter добавляемый фильтр

Sdинформация о безопасности для данного подуровня id уникальный идентификатор фильтра

В случае успеха операции метод возвращает ERROR_SUCCESS.

И, наконец, необходимо закрыть сеанс. Для этого воспользуемся методом FWPMENGINECLOSE0

DWORD WINAPI FWPMENGINECLOSE0(

__in HANDLEENGINEHANDLE

);

где: ENGINEHANDLE переменная, использованная для открытия сессии.

В случае успеха операции метод возвращает ERROR_SUCCESS.

Для отключения фильтра используется функция FWPMFILTERDELETEBYID0

DWORD WINAPI FWPMFILTERDELETEBYID0(

__in HANDLE ENGINEHANDLE, __INUINT64id

);

где: ENGINEHANDLE переменная, использованная для открытия сессии, id уникальный идентификатор фильтра, который нужно отключить.

В случае успеха операции метод возвращает ERROR_SUCCESS.

Для удаления созданного подуровня существует метод FWPMSUBLAYERDELETEBYKEY0

DWORD WINAPI FWPMSUBLAYERDELETEBYKEY0(

__in HANDLE ENGINEHANDLE, __in CONSTGUID *key

);

где: ENGINEHANDLE переменная, использованная для открытия сессии, key Уникальный идентификатор подуровня (GUID), который хотим удалить.

Инструкция

Запуск программы.

Для начала работы нужно запустить приложение PRACTICGUI. При запуске программы необходимо запускать ее с правами администратора. Так же необходимо, чтобы файлы CONSOLEFILTER.exe и PRACTICGUI.exe находились в папке "C:\Program Files\Filter", иначе графическая оболочка закончит работу автоматически. При запуске графической оболочки консольное приложение начнет работу. Работа графической оболочки и консольного приложения изображены на рисунках 1 и 2.

Рисунок 1. Начальный вид графической оболочки.

Рисунок 2. Вид работы консольного приложения.

Просмотр списка фильтров.

Для просмотра списка фильтров нужно нажать кнопку Show Information. При нажатии появится сообщение с информацией, как например на рисунке 3.

Рисунок 3. Сообщение с информацией.

Если у вас стоит фильтр, который блокирует весь трафик то появится сообщение, как на рисунке 4:

Рисунок 4. Сообщение о блокировании всего трафика.

Вся информация о фильтрах хранится в файле BLOCKLIST

Добавление и удаление фильтров.

Для того, чтобы добавить или удалить необходимый фильтр нужно нажать на соответствующую кнопку: Block/Unblock all traffic, Block/Unblock by IP-adress, Block/Unblock by port или Block/Unblock application.

Блокирование и разблокирование всего трафика.

Если вы хотите добавить или удалить фильтр, который будет блокировать(блокирует) весь ваш трафик, вам нужно нажать на кнопку Block/Unblock all traffic. На рисунках 5 и 6 изображены сообщения об успешном выполнении:

Рисунок 5. Выполнение операции разблокирования всего трафика.

Рисунок 6. Выполнение операции блокирования всего трафика.

Блокирование и разблокирование IP-адресов и портов.

Для добавления или удаления фильтра, который будет блокировать(блокирует) IP-адрес или порт, вам нужно нажать на соответствующую кнопку Block/Unblock by IP-adress или Block/Unblock by port(на рисунке 7 изображена панель добавления/удаления IP-адреса). При нажатии появится панель для ввода необходимого IP-адреса или порта, выбора действия Add или Delete и кнопки вернуться в начальную панель Back или применить действие для введенного IP-адреса или порта Apply. Для добавления или удалении фильтра необходимо ввести необходимый IP-адрес или порт(при вводе IP-адреса не забудьте расставить точки, например: 192.168.0.1) выбрать действие и нажать кнопку подтверждения Apply.

Рисунок 7. Окно добавления/удаления IP-адреса.

На рисунках 8 и 9 показана ошибки добавления уже существующего фильтра или удаления несуществующего фильтра.

Рисунок 8. Ошибка при добавлении уже существующего фильтра.

На рисунках 10 и 11 показаны ошибки о вводе неверных данных.

Рисунок 10. Ошибка при вводе неверного IP-адреса.

Рисунок 11. Ошибка при вводе неверного порта.

При успешном добавлении или удалении фильтра появится первая панель с выбором действий.

Блокирование и разблокирование приложений.

Для добавления или удаления фильтра, который будет блокировать(блокирует) приложение, вам нужно нажать на соответствующую кнопку Block/Unblock application. При нажатии появится панель, как на рисунке 12:

Рисунок 12. Панель добавления/удаления в список фильтров программ

На панели присутствуют кнопки Add и Delete для выбора необходимого действия, Choose necessary program для выбора необходимого приложения, Back для возврата в начальную панель, Apply для применения необходимого действия. На рисунке 13 изображена ошибка, которая возникает, если нажать на кнопку Apply до выбора приложения:

Рисунок 13. Ошибка, если не выбрана программа.

Применение изменений.

Для перезапуска приложения CONSOLEFILTER нужно нажать на кнопку Reboot Filter. При успешном выполнении операции будет показано сообщение, как на рисунке 14: Рисунок 14. Сообщение о перезапуске фильтра.

Закрытие программы.

При закрытии программы, если вы забыли нажать после некоторых изменений кнопку Reboot Filter, вам будет показано сообщение с вопросом, которое изображено на рисунке 15, хотите ли вы перезапустить фильтры сейчас или же они будут перезапущены при следующем запуске программы или перезагрузке компьютера.

Рисунок 15.Сообщение с запросом о перезапуске фильтра.

Если нажать кнопку "Да", то фильтры будут перезапущены, если "Нет", то фильтры перезапустятся при следующем запуске программы.

Фильтры обнулятся после перезагрузки компьютера.

Практическая часть

Для практической реализации использовалась среда VISUALSTUDIO 2012 RELEASECANDIDATE с предустановленным пакетом WINDOWSDRIVERKIT 8.0.

Работа с WFP происходит в консольном приложении, написанном на языке C (исходный код представлен в приложении). Графическая оболочка написана в той же среде программирования, но на языке С#(исходный код представлен в приложении).

Все условия добавляются и хранятся в файле BLOCKLIST.

Вывод
сетевой трафик блокировка фильтр

В ходе работы над практическим заданием мы изучили и разобрались с относительно новым продуктом от Microsoft для работы с сетевым трафиком - Windows Filtering Platform. Мы разработали работоспособную программу для блокирования трафика по IP-адресу либо по порту соединения на языке C , а так же графическую оболочку для более удобной работы с нашей программой. При написании графическом оболочки были повторены и углублены знания языка C#. Так же мы познакомились с новой версией одной из самых популярных сред программирования - Visual Studio 2012 RC с обновленным пакетом для разработчиков Windows Driver Kit 8.0.

Список литературы
1. Windows Filtering Platform. Введение и преимущества WFP.

()

2. WFPFUNCTIONS. Описание и пояснение в использовании методов WFP.

()

3. WFPERRORCODES. Специфические ошибки WFP с кодом и описанием.

(

4. Windows Filtering Platform в защите и нападении. Статья с журнала Хакер.

()
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?