Библиотеки, содержащие средства для работы с WFP. Работа с сетевым трафиком. Блокировка трафика отдельных соединений по IP-адресу либо по порту. Добавление и удаление фильтров. Блокирование и разблокирование приложений. Добавление массива фильтров.
При низкой оригинальности работы "Разработка межсетевого экрана для компьютеров пользователей с использованием технологии WFP", Вы можете повысить уникальность этой работы до 80-100%
В нашем случае переменная этого типа будет предназначена для работы с фильтром. Инициализации этой переменной происходит при вызове функции 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(
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_ {
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
где: 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 в защите и нападении. Статья с журнала Хакер.
()
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы