Тестирование фаервола. Проверка фаерволов на защиту от внутренних атак

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

Многие из этих пользователей берут с собой ноутбуки в общественные места, например, в кафе, и подключаются к Интернету с использованием беспроводной Wi-Fi сети. Разумно при этом ожидать, что при запросе фаервола и выборе сети как общественная, компьютер должен быть защищен от вторжений со стороны других участников открытой сети.

Бизнес-пользователи, которые используют ноутбук в качестве единственного рабочего компьютера, могут оказаться в такой же ситуации, при этом их машины чаще всего настроены на контроль через удаленный рабочий стол (Microsoft Remote Desktop).

Цель этого теста определить, как наиболее популярные сторонние фаерволы (брандмауэры) – отдельные и в составе пакетов Internet Security – на самом деле обеспечивают основной контроль входящего доступа для пользователей ноутбуков, которые переключаются между домашней/рабочей и общественной сетью.

Пожалуйста, обратите внимание, что объем теста, очевидно, очень ограничен, и поэтому хороший результат в нем, не означает, что продукт обеспечивает полную безопасность сети.

Тестирование проводилось в январе 2014 года по заказу журнала CHIP Online (Германия). Используемые версии фаерволов были доступны по состоянию на 13 января 2014 года.

Процедура тестирования фаерволов

Тестовый ПК подключен к Интернету через беспроводную локальную сеть (WLAN), используя соединение сети, которая определяется как Частная в Центре управления сетями и общим доступом Windows (WNSC).

Тестовая версия каждого продукта, доступного по состоянию на 13 января 2014 года, устанавливается с настройками по умолчанию, и тестовый компьютер перезагружается. Если сам продукт предлагает пользователю определить текущий тип сети, как Частная/Доверенная – будет выбран данный вариант. Если продукт имеет функцию обновления, то оно выполняется. Проверяется, чтобы продукт был зарегистрирован в Центре поддержки Windows в качестве системного брандмауэра, и сам продукт показывал, что он работает должным образом. С помощью второго ПК проверяется подключение в существующей частной сети следующим образом:

  • Ping hostname -4
  • Ping hostname -6
  • Ping IPv4 address
  • Ping IPv6 address
  • File share hostname
  • File share IPv4 address
  • Remote Desktop (RDP) hostname
  • Remote Desktop (RDP) IPv4 address
  • Remote Desktop (RDP) IPv6 address

Проверяется, чтобы все эти формы удаленного доступа работали для обеспечения полной функциональности тестового ПК в частной сети и его максимального контроля. После этого выключается компьютер и роутер, к которому он был подключен, и снова запускается ПК. Затем он подключается к другой WLAN-сети, которая определяется как Общедоступная (Общественная) в WNSC, используя диалоговое окно Брандмауэра Windows.

Если фаервол показывает свой запрос на определение типа сети, устанавливается значение «Общественная» или «Недоверенная». Больше не делается никаких изменений в настройке продукта.

Эта процедура моделирует типичное поведение пользователя ноутбука, который перемещается из дома / офиса в общедоступную сеть в кафе, аэропорту или гостинице. После того, как компьютер подключен к новой общедоступной беспроводной сети, проводятся те же тесты, что и для подключения в частной сети. На этот раз ожидается, что все попытки подключения будут провалены, поскольку компьютер должен быть защищен от любого внешнего обнаружения и доступа в общедоступной сети.

Методика тестов

Тестирование производилось на экспериментальном ПК под управлением лицензионной Windows XP с установленным SP1 (тестирования проводились в идеализированных условиях - "операционная система + Firewall" для исключения влияния других программ на чистоту эксперимента). В качестве индикатора успешного доступа к сервисам использовалась утилита APS . В качестве средств внешнего воздействия применялись:
  • сканер XSpider 6.5 и 7.0
  • Retina Network Security Scanner 4.9
  • несколько сканеров моей разработки.
Кроме того, применялся сниффер CommView 4.1 (в качестве средства наблюдения за сетевым трафиком и в качестве утилиты для генерации и отправки пакетов с различными нарушениями в структуре). Применялись т.н. флудеры (flooder) распространенных типов, утилиты для имитации троянских программ.

На испытательном ПК в качестве средств доступа к сети и Интернет применялся IE 6, Outlook Express 6, TheBat 1.60, MSN Messanger 6.1. Кроме них в тесте участвовали имитаторы троянских программ и реальные троянские / Backdoor программы из моей коллекции (в частности Backdoor.Antilam, Backdoor.AutoSpy, Backdoor.Death, Backdoor.SubSeven, Backdoor.Netbus, Backdoor.BO2K), сетевые / почтовые вирусы (I-Worm.Badtrans, I-Worm.NetSky, I-Worm.Sircam, I-Worm.Mydoom, I-Worm.MSBlast), загрузчики троянских программ TrojanDownloader (в частности TrojanDownloader.IstBar) и шпионские SpyWare компоненты. Главной задачей тестов была попытка взглянуть на Firewall глазами пользователя, отметить его сильные и слабые с моей точки зрения стороны.

Kerio Technologies WinRoute Pro v4.2.5

Инсталляция и деинсталляция:
Проходит без проблем.
Установка с настройками "по умолчанию", без правил - действует только NAT. Работа в сети - без проблем, результаты сканирования - APS не показывает состояние тревоги, сканер считает, что все порты закрыты. Сам Winroute не выдает сигналов тревоги и никак визуально не идентифицирует факт сканирования.

Outpost Firewall Pro 2.1 Build 303.4009 (314)

Инсталляция и деинсталляция:
Установка под XP проходит без проблем, при запуске включается режим обучения.

ZoneLabs ZoneAlarm Pro with Web Filtering 4.5.594.000 - Personal Firewall

Инсталляция и деинсталляция:
В ходе установки подвесил XP в ходе попытки запуститься после инсталляции. После перезагрузки все заработало нормально.

AtGuard 3.22>

Инсталляция и деинсталляция:
Инталляция и деинсталляция особых проблем не вызывает

Достоинства:

  1. Небольшой по размеру Firewall, имеет интересное решение с точки зрения интерфейса - он выполнен в виде панели, размещаемой вверху экрана

Недостатки и особенности:

  1. В режиме обучения уязвим - с момента вывода запроса на создание правила до его создания пропускает пакеты в обоих направлениях
  2. Интерфейс немного поглючивает при перерисовке окон

Общая оценка:
Простой Firewall, однако вполне функциональный

Kerio Personal Firewall 4

Инсталляция и деинсталляция:
Установка проходит без проблем, удаление "чистое" - проблем после деинсталляции не замечено.

Norton Internet Security 2004 (NIS)

Инсталляция и деинсталляция: Установка не вызывает проблем, но из всех проанализированных инсталлятор самый тяжеловесный.

Internet Connection Firewall, ICF - встроенный брандмауэр Windows XP

Инсталляция и деинсталляция: Установка не требуется, является штатным средством XP. Включение производится в настройках сетевого адаптера. По умолчанию ICF работает в режиме максимальной безопасности и (это результат моего наблюдения) принцип его работы таков - запросы приложений выпускаются наружу, а снаружи принимаются только пакеты, пришедшие в ответ на мои запросы (соответствие запрос-ответ явно ведется в виде динамической таблицы). Таким образом, при сканировании портов на компьютере с включенным ICF нет ни одного открытого порта (это логично - пакеты сканера портов не будут пропущены, т.к. их никто не запрашивал). Аналогично дело обстоит с различного рода "нюками", основанными на отправке нестандартных пакетов

Internet Connection Firewall, ICF - встроенный брандмауэр Windows XP SP2

Инсталляция и деинсталляция: Установка не требуется, является штатным средством XP (входит в пакет обновлений SP2 для XP). Включение производится в настройках сетевого адаптера. Следует заметить, что при установке SP2 или при установке XP с интегрированным SP2 кроме Firewall в системе появляется центр обеспечения безопасности, который может показывать настройки ICF

Sygate Personal Firewall Pro 5.5 build 2525

Инсталляция и деинсталляция:

ISS BlackIce 3.6.cci

Инсталляция и деинсталляция: Установка программы и ее деинсталляция происходит без проблем, но в ходе инсталляции возникает ошибка в библиотеке ikernel. Эта-же ошибка возникла и при деинсталляции. Возникнование данной ошибки не влияет на процесс установки и удаления программы. Инсталлятор не потребовал перезагрузку системы, что для Firewall необычно

Visnetic Firewall 2.2

Инсталляция и деинсталляция: Установка программы и ее деинсталляция происходит без проблем. После инсталляции требуется перезагрузка.

Look n stop personal firewall 2.05

Инсталляция и деинсталляция: Установка программы и ее деинсталляция происходит без проблем. После инсталляции требуется перезагрузка. Для работы устанавливает свой драйвер.

Kaspersky AntiHacker 1.5

Инсталляция и деинсталляция: Установка программы и ее деинсталляция происходит без проблем. После инсталляции требуется перезагрузка.

Tiny Personal Firewall Pro 6.0

Инсталляция и деинсталляция:
Установка программы и ее деинсталляция происходит без проблем. После инсталляции требуется перезагрузка.

McAfee Personal Firewall Plus 6.0 Build 6014

Инсталляция и деинсталляция:
Установка программы и ее деинсталляция происходит без проблем. После инсталляции требуется перезагрузка.

R-Firewall 1.0 Build 43

Инсталляция и деинсталляция:
Установка программы и ее деинсталляция происходит без проблем. Размер дистрибутива небольшой (3.8 МБ), можно настроить состав продукта. Работа достаточно стабильная, на эталонном ПК явных сбоев и зависаний не замечено

Общие выводы и заключение

Итак, подведем итоги тестов. По сути, тесты подтвердили мои теоретические представления о состоянии проблемы:
  1. Firewall нужно настраивать . Все тестируемые Firewall неплохо работали, но только после настройки (обучения, создания настроек вручную - не важно). Эксплуатация ненастроенного Firewall может нанести больше вреда, чем пользы (он пропустит опасные пакеты и наоборот, будет мешать полезным программам);
  2. После настройки Firewall и IDS нужно тестировать - это тоже достаточно очевидный вывод, но тем не менее он важен. Первый шаг к созданию тестера я сделал - это утилита APS . Осталось еще два - имитатор троянской програмы (т.е. утилита, которая будет выполнять безопасные для пользователя попытки "сломать" Firewall изнутри (естественно, атаки будут описаны базой данных и будут проводиться по команде пользователя под его управлением), что позволит наблюдать за реакцией Firewall и IDS) и утилита для экспресс-сканирования портов и проведения базовых атак (по сути APS с точностью до наоборот - база портов у них может быть общая). Разработкой этих утилит я уже занимаюсь - их наличие в арсенале пользователя позволит произвести некий "инструментальный контроль".
  3. Персональный Firewall уязвим перед вредоносными программами, работающими из контекста полезных. Вывод - как минимум долой разные "левые" панели и прочие BHO из браузера и электронной почты!! Перед установкой любого плагина, панели, утилиты расширения и т.п. нужно десять раз подумать о их необходимости, т.к. они не являются отдельными процессами операционной системы и работают из контекста родительской программы . Троянская программа легко детектируется персональным Firewall - он "видит", что некоторый процесс (скажем, bo2k.exe) пытается начать прослушивание порта xxxxx или обмен с неким хостом - выдается запрос о допусимости, пользователь начинает разбираться, что же это за "bo2k.exe" и Backdoor оказывается пойман. А вот если бы троянская программа работала из контекста браузера, то на обращение браузера в Интернет почти наверняка никто не обратит внимание. Такие троянские программы существуют, ближайший пример - TrojanDownloader.IstBar - он устанавливается именно как панель IE (в процессах его естественно нет, в списке автозапуска - тоже);
  4. Многие персональные Firewall видны как процессы операционной системы и могут быть остановлены вирусом. Вывод - за работой Firewall нужно следить и его внезапное завершение может служить сигналом о проникновении на ПК вируса;
  5. Некоторые Firewall (например Kerio) допускают дистанционное управление - функцию дистанционного управления необходимо или отключить, или запаролить.

В этой второй статье описывается разрешение проблем, связанных с пакетным фильтром. Вместо приведения готовой таблицы в виде «проблема»-«решение» приводятся методы системного подхода для решения возникших проблем.

В этой второй статье (в серии из трёх) описывается разрешение проблем, связанных с пакетным фильтром. Вместо приведения готовой таблицы в виде «проблема»-«решение» приводятся методы системного подхода для решения возникших проблем.

Введение

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

В общем, в курсе этой главы мы будем сравнивать задачу написания набора правил фильтрации с программированием. Если же у вас нет навыков программирования, то это сравнение покажется вам скорее усложняющим задачу. Но ведь само по себе написание правил не требует наличия учёной степени по «computer science» или опыта программирования, не так ли?

Ответом будет «нет», этого вам наверняка не нужно. Язык, используемый для конфигурации пакетного фильтра, сделан похожим на человеческие языки. Например:

block all

pass out all keep state

pass in proto tcp to any port www keep state

На самом деле - не нужно иметь рядом программиста, чтобы понять, что делает данный набор или даже, воспользовавшись интуицией написать подобную политику фильтрации. Высок даже шанс того, что созданный по этому подобию набор правил фильтрации будет выполнять те действия, которые имел ввиду его автор.

К сожалению, компьютеры делают только то, что вы просите их сделать, а не то, что вы хотите сами. Хуже того, они не смогут отличить желаемое от действительного, если таковая разница есть. Значит, если компьютер неверно выполняет то, чего хотите вы, даже если считаете, что описали инструкции чётко - в ваших руках найти различия и изменить инструкции. А так как это и является общей проблемой в программировании, мы можем посмотреть, как же справляются с этим программисты. Тут и выходит, что навыки и методы, использующиеся для проверки и отладки программ и правил фильтрации очень похожи. И всё же тут вам не понадобится знание, какого бы то ни было языка программирования, для того чтобы понять implications для проверки и отладки.

Хорошая политика фильтрации.

Политика фильтрации - это неформальная спецификация того, чего мы хотим от файрвола. А набор правил напротив, реализация спецификации - набор стандартных инструкций, программа, выполняемая машиной. Соответственно, чтобы написать программу, вы должны определить, что же она должна делать.

Таким образом, первым шагом в конфигурации файрвола будет неформальное задание того, чего необходимо добиться. Какие соединения нужно блокировать либо пропускать?

Примером будет:

Есть три сети, которые должны быть отделены друг от друга файрволом. Любые соединения из одной сети в другую проходить через файрвол. У файрвола 3 интерфейса, каждый из которых, подключён к соответствующей сети:

$ext_if - во внешнюю сеть.

$dmz_if - DMZ с серверами.

$lan_if - LAN с рабочими станциями.

Хосты в LAN должны свободно соединяться с любыми хостами в DMZ или во внешней сети.

Серверы в DMZ должны свободно соединяться с хостами во внешней сети. Хосты внешней сети могут соединяться только к следующим серверам в DMZ:

Web-сервер 10.1.1.1 порт 80

Mail-сервер 10.2.2.2 порт 25

Все остальные соединения должны быть запрещены (к примеру, от машин во внешней сети к машинам в LAN).

Эта политика выражена неформально, так, чтобы любой читающий мог её понять. Она должна быть настолько конкретизирована, чтобы у читающего легко формулировались ответы на вопрос вида ‘Должно ли пропускаться соединение от хоста X к хосту Y входящее (или исходящее) на интерфейсе Z?’. Если вы задумались о тех случаях, когда ваша политика не отвечает такому требованию, значит она недостаточно чётко задана.

«Туманные» политики типа «разрешать только всё, что жизненно необходимо» или «блокировать атаки», необходимо уточнять, или у вас не получиться применить либо проверить их. Как и в разработке программного обеспечения, недостаточно формализованные задачи редко приводят к оправданным или корректным их реализациям. («Почему бы вам не пойти уже начать писать код, а я пока выясню, что нужно заказчику»).

Набор правил, реализующий политику

Набор правил записывается в виде текстового файла, содержащего предложения на формальном языке. Также как исходный код обрабатывается и переводится в инструкции машинного кода компилятором, «исходный текст» набора правил обрабатывается pfctl и результат интерпретируется pf в ядре.

Когда исходный код нарушает правила формального языка, анализатор рапортует о синтаксической ошибке и отказывается от дальнейшей обработки файла. Эта ошибка относится к ошибкам во время компиляции и обычно быстро исправляется. Когда pfctl не может разобрать ваш файл набора правил, он выдаёт строку, в которой обнаружена ошибка и более или менее информативное сообщение о том, что он не смог разобрать. До тех пор, пока весь файл не будет обработан без единой ошибки, pfctl не изменит предыдущий набор правил в ядре. А поскольку файл содержит одну или более синтаксических ошибок, не будет той «программы», которую pf может выполнить.

Второй тип ошибок называется «ошибки времени выполнения» (run-time errors), так как возникает при в синтаксически корректно записанной программе, которая успешно транслирована и выполняется. В общем случае, в языках программирования, такое может случиться, когда программой выполняется деление на нуль, делается попытка обратиться к недопустимым областям памяти или возникает нехватка памяти. Но так как наборы правил лишь отдалённо напоминают функционал языков программирования, большинство из подобных ошибок не может возникнуть во время применения правил, так например, правила не могут вызвать т.н. «падение системы», как это делают обычные программы. Однако набор правил может вызвать подобные ошибки, в виде блокирования или наоборот, пропускания пакетов, не соответствующих политике. Это иногда называется логической ошибкой, ошибкой которая не вызывает исключения и останова, а попросту выдаёт неверные результаты.

Итак, перед тем, как мы можем начать проверять, насколько корректно файрвол реализует нашу политику безопасности, необходимо сначала успешно загрузить набор правил.

Ошибки анализатора

Ошибки анализатора возникают при попытке загрузки списка правил с использованием pfctl, например:

# pfctl - f / etc/ pf. conf

/ etc/ pf. conf:3: syntax error

Это сообщение говорит о том, что в строке 3 файла /etc/pf.conf синтаксическая ошибка и pfctl не может загрузить правила. Набор в ядре не изменился, он остался таким же, как и до попытки загрузить новый.

Есть много разновидностей ошибок, выдаваемых pfctl. Для начала знакомства с pfctl необходимо просто внимательно их читать. Возможно, не все части сообщения откроют свой смысл для вас сразу, но необходимо прочесть их все, т.к. впоследствии это облегчит понимание того, что же пошло не так. Если в сообщении есть часть вида «имя файла:число: текст», оно ссылается на сточку с соответствующим номером в указанном файле.

Следующим шагом посмотрим на выданную строку, используя текстовый редактор (в vi вы можете перейти к 3 строке введя 3G в режиме beep), или так:

# cat -n /etc/pf.conf

1 int_if = "fxp 0"

2 block all

3 pass out on $int_if inet all kep state

pass out inet on $int_if all kep state

Проблема может быть в простой опечатке, как в этом случае (“kep” вместо “keep”). После исправления попробуйте перезагрузить файл:

# pfctl - f / etc/ pf. conf

/ etc/ pf. conf:3: syntax error

# head -n 3 /etc/pf.conf | tail -n 1

pass out inet on $int_if all keep state

Теперь все ключевые слова верны, но, при ближайшем рассмотрении, мы замечаем, что расположение ключевого слова “inet” перед “on $int_if” неверно. Это иллюстрирует то, что одна и также строка может содержать более одной ошибки. Pfctl выводит сообщение о первой найденной ошибке и прекращает свое выполнение. Если при повторном запуске был выдан тот же номер строки, значит в ней есть еще ошибки, либо предыдущие не были корректно устранены.

Неправильно расположенные ключевые слова также являются распространенной ошибкой. Это может быть выявлено при сравнении правила с эталонным BNF-синтаксисом в конце файла справки man pf.conf(5), которая содержит:

pf-rule= action [ ("in" | "out") ]

[ "log" | "log-all" ] [ "quick" ]

[ "on" ifspec ] [ route ] [ af ] [ protospec ]

hosts [ filteropt-list ]

ifspec = ([ "!" ] interface-name) | "{" interface-list "}"

af = " inet" | " inet6"

Что означает, что ключевое слово “inet” должно следовать за “on $int_if”

Подправим и попробуем ещё раз:

# pfctl - f / etc/ pf. conf

/ etc/ pf. conf:3: syntax error

# head -n 3 /etc/pf.conf | tail -n 1

pass out on $int_if inet all keep state

Никаких очевидных ошибок теперь не осталось. Но нам не видны все сопутствующие детали! Строка зависит от макроопределения $inf_if. Что же может быть неправильно определено?

# pfctl -vf /etc/pf.conf

int_if = "fxp 0"

block drop all

/etc/pf.conf:3: syntax error

После исправления опечатки «fxp 0» на «fxp0» пробуем ещё раз:

# pfctl - f / etc/ pf. conf

Отсутствие сообщений свидетельствует о том, что файл был успешно загружен.

В некоторых случаях pfctl может выдавать более специфичные сообщения об ошибках, нежели просто «syntax error»:

# pfctl -f /etc/pf.conf

/etc/pf.conf:3: port only applies to tcp/udp

/etc/pf.conf:3: skipping rule due to errors

/etc/pf.conf:3: rule expands to no valid combination

# head -n 3 /etc/pf.conf | tail -n 1

pass out on $int_if to port ssh keep state

Первая строка сообщения об ошибке наиболее информативна по сравнению с остальными. В этом случае проблема в том, что правило, указывая порт, не определяет протокол - tcp либо udp.

В редких случаях pfctl бывает обескуражен наличием непечатных символов или ненужных пробелов в файле, такие ошибки нелегко обнаружить без специальной обработки файла:

# pfctl -f /etc/pf.conf

/etc/pf.conf:2: whitespace after \

/etc/pf.conf:2: syntax error

# cat -ent /etc/pf.conf

1 block all$

2 pass out on gem0 from any to any \ $

3 ^ Ikeep state$

Здесь проблемой является символ пробела, после «бэкслэша» но перед концом второй строки, обозначенным знаком “$” в выводе cat -e.

После того, как набор правил успешно загружен, неплохо бы посмотреть на результат:

$ cat /etc/pf.conf

block all

# pass from any to any \

pass from 10.1.2.3 to any

$ pfctl -f /etc/pf.conf

$ pfctl - sr

block drop all

«Бэкслэш» в конце строки комментария на самом деле обозначает, что строка комментария будет продолжена ниже.

Разворачивание списков заключённых в фигурные скобки {} может выдать результат, который возможно вас удивит, а заодно и покажет обработанный анализатором набор правил:

$ cat /etc/pf.conf

pass from { !10.1.2.3, !10.2.3.4 } to any

$ pfctl -nvf /etc/pf.conf

pass inet from ! 10.1.2.3 to any

pass inet from ! 10.2.3.4 to any

Здесь загвоздка в том, что выражение "{ !10.1.2.3, !10.2.3.4 }" не будет означать «все адреса, за исключением 10.1.2.3 и 10.2.3.4», развёрнутое выражение само по себе означает совпадение с любым возможным адресом.

Вы должны перезагрузить свой набор правил после перманентных изменений, для того, чтобы убедиться, что и pfctl сможет загрузить его при перезагрузке машины. В OpenBSD стартовый rc-скрипт из /etc/rc первым делом загружает небольшой набор правил, установленный по умолчанию, который блокирует весь трафик, за исключением необходимого на этапе загрузки (такого как dhcp или ntp). Если же скрипт не сможет загрузить реальный набор правил из /etc/pf.conf из-за синтаксических ошибок, внесённых до перезагрузки машины без проверки, то набор «по-умолчанию» останется активным. К счастью, в этом наборе разрешены входящие ssh соединения, поэтому проблему можно будет решить удалённо.

Тестирование

Так как мы имеем предельно точно определённую политику, и набор правил, который должен её реализовывать, тогда термин тестирование будет означать в нашем случае соответствие получившегося набора заданной политике.

Есть всего два пути неправильного срабатывания правил: блокирование соединений, которые должны пропускаться и наоборот, пропускание тех соединений, которые должны блокироваться.

Тестирование в общем случае подразумевает под собой системный подход к упорядоченному созданию различных видов соединений. Невозможно проверить все возможные комбинации источника/приёмника и соответствующих портов на интерфейсах, т.к. файрвол может теоретически столкнуться с огромным количеством таких комбинаций. Обеспечение изначальной правильности набора правил может быть обеспечено только для очень простых случаев. На практике, наилучшим решением будет создание списка тестовых соединений, основанного на политике безопасности, такого, чтобы каждый пункт политики был бы затронут. Так, для нашего примера политики, список тестов будет следующим:

Соединение из LAN в DMZ (должно пропускаться)

из LAN во внешнюю сеть (должно пропускаться)

из DMZ в LAN (должно блокироваться)

из DMZ во внешнюю сеть (должно пропускаться)

из внешней сети в DMZ к 10.1.1.1 на порт 80 (должно пропускаться)

из внешней сети в DMZ к 10.1.1.1 на порт 25 (должно блокироваться)

из внешней сети в DMZ к 10.2.2.2 на порт 80 (должно блокироваться)

из внешней сети в DMZ к 10.2.2.2 на порт 25 (должно пропускаться)

из внешней сети в LAN (должно блокироваться)

Ожидаемый результат должен быть определён в этом списке до начала тестирования.

Это может звучать странно, но цель каждого теста - найти ошибки в реализации набора правил файрвола, а не просто констатировать их отсутствие. А высшая цель процесса, это построение набора правил без ошибок, поэтому, если вы предполагаете, что здесь вероятно могут содержаться ошибки, вам будет лучше их найти, чем пропустить. И если уж вы берёте на себя роль тестера, вы должны придерживаться деструктивного стиля мышления и пробовать обойти ограничения файрвола. И только факт, что ограничения нельзя сломать, станет аргументированным подтверждением того, что набор правил не содержит ошибок.

TCP и UDP соединения могут быть проверены с помощью nc. nc может использоваться как клиентская и серверная часть (используя опцию -l). А для ICMP запросов и ответов, наилучшим клиентом для проверки будет ping.

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

Используя инструменты из коллекции портов, такие как nmap, вы легко сможете просканировать множество портов даже на нескольких хостах. Если результаты выглядят не совсем ясно, не поленитесь заглянуть в man-страницу. К примеру, для TCP порта сканер возвращает значение ‘unfiltered’, когда nmap получает RST от pf. Также pf, установленный на одной машине со сканером, может привносить своё влияние на корректность работы nmap.

Более сложные инструменты проведения сканирования могут включать в себя средства для создания фрагментированных или посылки некорректных ip пакетов.

Для проверки того, что фильтром пропускаются соединения заданные в политике, наилучшим методом будет проверка с использованием тех приложений, которые впоследствии и будут использоваться клиентами. Так, проверка прохождения http-соединений с разных машин-клиентов веб-сервера, а также из разных браузеров и выборка различного контента будет лучше, чем просто подтверждение установления TCP сессии к nc, работающего в качестве серверной части. Различные факторы, такие, как операционная система хоста, также могут вызвать ошибки - проблемы с масштабированием TCP-окна (TCP window scaling) или ответами TCP SACK между определёнными операционными системами.

Когда очередной пункт тестирования пройден, результаты его могут быть не всегда одинаковыми. Может обрываться связь в процессе установления соединения, в случае, если файрвол возвращает RST. Установление соединения может просто оборваться по таймауту. Соединение может полностью устанавливаться, работать, но через некоторое время зависать или обрываться. Соединение может держаться, но пропускная способность или задержки могут отличаться от ожидаемых, быть выше или ниже (в случае если вы используете AltQ для ограничения пропускной способности).

В качестве ожидаемых результатов, помимо пропуска/блокирования соединения, можно также отметить то, логируются ли пакеты, как они транслируются, маршрутизируются, увеличивают ли нужные счётчики, если это необходимо. Если для вас важны эти аспекты, то их также необходимо включить в методику тестирования.

Ваша политика может включать требования, касающиеся производительности, реакции на перегрузки, отказоустойчивость. А они могут потребовать отдельных тестов. Если настраиваете отказоустойчивую систему с использованием CARP, вероятно вы захотите узнать, что произойдёт при различного рода отказах.

Когда вы наблюдаете результат, отличный от ожидаемого, пошагово отметьте ваши шаги во время теста, чего вы ожидали, почему вы этого ожидали, полученный результат и как результат отличается от ваших ожиданий. Повторите тест, чтобы увидеть, воспроизводится ли ситуация, либо отличается раз от раза. Попробуйте изменять входные параметры проверки (адрес источника/приёмника либо порты).

С момента, когда вы получили воспроизводимую проблему, необходимо приступить к отладке, чтобы выяснить, почему всё работает не так, как вы ожидали, и как всё «починить». С этой установкой, вы должны изменить набор правил и повторить все тесты, включая те, которые не вызывали ошибок, т.к., изменяя правила, вы могли непреднамеренно затронуть работу верно работающих частей набора правил.

Этот же принцип относится и к другим изменениям, вносимым в набор. Такая формальная процедура проверки поможет сделать процесс менее подверженным к внесению ошибок. Возможно, для мелких изменений и не потребуется повторять всю процедуру, но сумма нескольких мелких изменений может повлиять на общий результат обработки набора. Вы можете использовать систему контроля версий, такую как cvs, для работы с вашим конфигурационным файлом, т.к. это поможет в исследовании изменений, которые привели к появлению ошибки. Если вы знаете, что ошибка не возникала неделю назад, но сейчас она есть, просмотр всех сделанных изменений за последнюю неделю поможет заметить проблему, или, по меньшей мере, откатиться до момента её отсутствия.

Нетривиальные наборы правил можно рассматривать как программы, они редко бывают идеальны в своей первой версии, и требуется время, для того чтобы с уверенностью утверждать, что в них нет ошибок. Однако, в отличие от обычных программ, которые большинством программистов никогда не считаются свободными от ошибок, наборы правил всё же достаточно просты, чтобы быть близкими к этому определению.

Отладка

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

Перед тем, как вы начнёте поиск причины, вызвавшей проблему, вы должны чётко представить себе суть этой проблемы. Если вы сами заметили ошибку во время тестирования, это очень просто. Но если другой человек сообщает вам об ошибке, постановка чёткой задачи из неточного сообщения об ошибке может быть непростой задачей. Лучше всего начать с того, что вы сами воспроизведёте ошибку.

Не всегда проблемы сети могут быть вызваны пакетным фильтром. Перед тем, как сфокусировать своё внимание на отладке конфигурации pf, необходимо удостовериться, что проблема вызвана пакетным фильтром. Это легко сделать, а также поможет сэкономить время на поиск неисправности в другом месте. Просто выключите pf командой pfctl -d и проверьте, проявляется ли проблема снова. Если это так, включите pf командой pfctl -e и посмотрите, что происходит. Этот метод не пройдёт в некоторых случаях, например, если pf не делает правильную трансляцию сетевых адресов (NAT), то выключение pf очевидно не избавит вас от ошибки. Но в тех случаях, когда это возможно, постарайтесь убедиться, что виновен именно пакетный фильтр.

Соответственно, если проблема в пакетном фильтре, первое, что необходимо сделать, это убедиться в том, pf действительно работает и успешно загружен нужный набор правил:

# pfctl -si | grep Status

Status: Enabled for 4 days 13:47:32Debug: Urgent

# pfctl -sr

pass quick on lo0 all

pass quick on enc0 all

Отладка по протоколам

Следующим шагом отладки будет отражение проблемы в конкретных сетевых соединениях. Если вы имеете посылку: «не работает обмен мгновенными сообщениями в приложении X», нужно выяснить, какие сетевые соединения используются. Заключение может быть в виде «хост А не может установить соединение с хостом B на порту С». Иногда эта задача представляет наибольшую сложность, но если у вас есть информация о нужных соединениях и вы знаете, что файрвол их не пропустит, нужно будет всего лишь изменить правила для разрешения данной проблемы.

Есть несколько путей для выяснения используемых приложением протоколов или соединений. Tcpdump может отобразить пакеты прибывающие или покидающие, как реальный сетевой интерфейс, так и виртуальные, такие как pflog и pfsync. Вы можете задать выражение для фильтрации, чтобы задать пакеты для отображения и исключить побочный сетевой «шум». Попытайтесь установить сетевое соединение в нужном приложении и посмотрите на отсылаемые пакеты. Например:

# tcpdump -nvvvpi fxp0 tcp and not port ssh and not port smtp

23:55:59.072513 10.1.2.3.65123 > 10.2.3.4.6667: S

4093655771:4093655771(0) win 5840

1039287798 0,nop,wscale 0> (DF)

Это пакет TCP SYN , первый пакет из устанавливаемого TCP соединения (TCP handshake).

Отправитель - 10.1.2.3 порт 65123 (выглядит как случайный непривилегированный порт) а получатель 10.2.3.4 порт 6667. Детальное объяснение формата вывода tcpdump вы найдёте на страницах руководства по утилите. Tcpdump - наиболее важный инструмент для отладки проблем, связанных с pf, и очень важно познакомиться с ним поближе.

Другой метод - использование функции ведения лог-файлов в pf. Полагая, что вы используйте опцию ‘log’ во всех правилах с ‘block’, тогда все пакеты, заблокированные pf будут отражены в логе. Можно удалить опцию ‘log’ из правил, которые имеют дело с известными протоколами, т.е. записываться в лог будут только те пакеты, которые идут на неизвестные порты. Попробуйте использовать приложение, которое не может установить связь и загляните в pflog:

# ifconfig pflog0 up

# tcpdump -nettti pflog0

Nov 26 00:02:26.723219 rule 41/0(match): block in on kue0:

195.234.187.87.34482 > 62.65.145.30.6667: S 3537828346:3537828346(0) win

16384 (DF)

Если вы используете pflog - демона, который постоянно прослушивает pflog0 и сохраняет полученную информацию в /var/log/pflog, сохранённую информацию можно увидеть так:

# tcpdump - netttr / var/ log/ pflog

Когда выводите сохраненные pf пакеты, вы можете использовать дополнительные выражения для фильтрации, например, просмотреть пакеты, которые были заблокированы на входе на интерфейсе wi0:

# tcpdump -netttr /var/log/pflog inbound and action block and on wi0

Некоторые протоколы, такие как FTP, не так легко отследить, так как они не используют фиксированные номера портов, либо используют несколько сосуществующих соединений. Возможно, будет невозможно пропустить их через файрвол без открытия широкого диапазона портов. Для отдельных протоколов существуют решения, подобные ftp-proxy.

Отладка правил

Если ваш набор правил блокирует конкретный протокол потому что вы не открыли нужный порт, это больше проблема стадии проектировки нежели баг в правилах. Но что если вы видите, что блокируется соединение для которого у вас есть пропускающее его правило?

Например ваш набор содержит правило

block in return-rst on $ext_if proto tcp from any to $ext_if port ssh

Но когда вы пытаетесь подсоединиться к TCP порту 22, соединение принимается! Похоже, что файрвол игнорирует ваше правило. Как и в сборке «паззлов», в этих случаях, когда с ними сталкиваешься первые несколько раз, существует простое логическое и, как правило, тривиальное объяснение.

Первое, вы должны проверить все те шаги, о которых говорилось ранее. К примеру, положим, что файрвол работает и содержит правило, приведённое выше. Маловероятно, что имеют место наши предыдущие опасения, но это легко проверить:

# pfctl -si | grep Status

Status: Enabled for 4 days 14:03:13Debug: Urgent

# pfctl -gsr | grep "port = ssh"

@14 block return-rst in on kue0 inet proto tcp from any to 62.65.145.30 port = ssh

Следующее, что мы имеем: принимаются соединения TCP на порт 22 на kue0. Можно подумать, что это и так очевидно, но нелишним будет проверить. Запустите tcpdump:

# tcpdump -nvvvi kue0 tcp and port 22 and dst 62.65.145.30

Теперь повторите SSH соединение. Вы должны увидеть пакеты из вашего соединения в выводе tcpdump. Возможно вы их не видите, а это может быть из за того, что соединение на самом деле не проходит через kue0, а проходит через другой интерфейс, что объясняет, почему не срабатывает правило. Или вы возможно соединяетесь с другим адресом. Если вкратце, то если вы не видите ssh пакеты, то pf их также не увидит возможно не может их заблокировать используя правило, приведённое в нашей задаче.

Но если вы видите пакеты с помощью tcpdump, pf их тоже «увидит» и будет их фильтровать. Следующим предположением будет то, что блокирующее правило должно не просто присутствовать в наборе (что мы уже выяснили), а быть последним совпадающим правилом для нужных пакетов. Если же это не последнее правило, очевидно, согласно этому не принимается решение о задержании пакетов.

В каких случаях правило может быть не последним совпадающим правилом? Возможны три причины:

А) правило не срабатывает, так как просмотр правил не доходит до нужного нам.

Ранее присутствующее правило также срабатывает и вызывает прекращение выполнения опцией ‘quick’;

Б) обработка правила производится, но правило не срабатывает из за несовпадения отдельных критериев.

В) обработка правила производится, правило срабатывает, но обработка продолжается и последующие правила также срабатывают для пакета.

Чтобы отвергнуть эти три случая вы можете, глядя на загруженный набор правил мысленно представить себе обработку гипотетического TCP пакета, приходящего на интерфейс kue0 и порт 22. Выделите отлаживаемый блок. Начните обход с первого правила. Совпадает? Если да - пометьте его. Имеет ли оно опцию ‘quick’? Если так, то прекращаем обход. Если же нет, продолжаем со следующим правилом. Повторяйте проверку, до нахождения совпадения с опцией ‘quick’ или достижения конца набора правил. Какое правило совпало последним? Если это не правило номер 14, вы нашли объяснение проблемы.

Обход правил вручную может показаться забавным, тем не менее, он, при наличии достаточного опыта может быть проделан достаточно быстро и большой степенью надёжности. Если набор достаточно большой, вы можете временно его сократить. Сохраните копию реального списка правил и удалите те записи, которые, на ваш взгляд, не повлияют на результат. Загрузите этот набор и повторите проверку. Если теперь соединение блокируется, следовательно, казавшиеся несвязанными с искомыми пакетами правила ответственны за случаи А либо Б. Добавляйте правила одно за другим, повторяя тест, до тех пор, пока не найдёте нужное. Если соединение всё еще пропускается после удаления не влияющих на него правил - повторите мысленный обход уменьшенного набора.

Другой метод, это использование способности pf вести логи для идентификации случаев А или С. Добавьте ‘log’ ко всем правилам с ‘pass quick‘ перед 14ым правилом. Добавьте ‘log’ ко всем правилам с ‘pass’, стоящим после 14ого правила. Запустите tcpdump для интерфейса pflog0 и устанавливайте ssh соединение. Вы увидите, какие правила помимо 14ого срабатывают на ваших пакетах последним. Если в логе ничего нет, значит имеет место случай Б.

Отслеживание соединений через файрвол

Когда соединение проходит через файрвол, пакеты приходят на один интерфейс, а передаются наружу через второй. Ответы приходят на второй интерфейс, а уходят в первый. Соединения, таким образом, могут обрываться в каждом из этих четырёх случаев.

Первое, вы должны выяснить, в каком из четырёх случаев проблема. Если вы попытаетесь установить соединение, вы должны будете увидеть пакет TCP SYN на первом интерфейсе, используя tcpdump. Вы должны также увидеть тот же TCP SYN пакет на выходе со второго интерфейса. Если вы его не видите, следовательно, заключаем, что pf блокирует входящий пакет на первом интерфейсе, либо исходящий на втором.

Если же SYN посылка не блокируется, вы должны будете видеть SYN+ACK, приходящий на второй интерфейс и выходящий с первого. Если нет - pf блокирует SYN+ACK на каком-то интерфейсе.

Добавьте опцию ‘log’ к правилам, которые должны пропускать SYN и SYN+ACK на обоих интерфейсах, также к правилам, которые должны их блокировать. Повторите попытку соединения и проверьте pflog. Он должен прояснить, в каком случае происходит блокировка и каким правилом.

Отладка состояний соединений

Наиболее распространённая причина блокирования пакетов pf состоит в том, что в наборе существует избыточное блокирующее правило. Соответствующее правило, срабатывающее по последнему совпадению, может быть найдено добавлением опции ‘log’ во все потенциально влияющие на результат правила и прослушиванием интерфейса pflog.

В меньшем количестве случаев случается так, что pf «молча» отбрасывает пакеты основываясь не на правилах, и здесь добавление ‘log’ во все правила не приведёт к попаданию сброшенных пакетов в pflog. Часто пакет почти, но не полностью подпадает под запись в таблице состояний (state entry).

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

Запись в таблице состояний содержит информацию, относящуюся к одному соединению.

Каждая запись имеет уникальный ключ. Этот ключ состоит из нескольких значений, которые ограничивают constant throughout время жизни соединения. Вот они:

  • Тип адреса (Ipv4 или Ipv6)
  • Адрес источника
  • Адрес приёмника
  • Протокол (TCP UDP)
  • Порт источника
  • Порт приёмника

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

Когда опцией ‘keep state’ из правила создаётся запись в таблице состояний, запись о соединении сохраняется с использованием ключа данного соединения. Важное ограничение для таблицы состояний - все ключи должны быть уникальными. Т.е. не может быть двух записей с одинаковыми ключами.

Возможно сразу не очевидно то, что те же два хоста не могут установить несколько сосуществующих соединений используя те же адреса, протоколы и порты, но это есть фундаментальное свойство как TCP так и UDP. Фактически, стеки TCP/IP всего лишь могут ассоциировать отдельные пакеты с их сокетами выполняя выборку, основанную на адресах и портах.

Даже если соединение закрыто, та же пара адресов и портов не может быть заново задействована сразу же. Сетевым оборудованием могут позднее доставляться повторно переданные пакеты, и если стеком TCP/IP получателя они будут ошибочно приняты за пакеты вновь созданного соединения, это помешает или вовсе разорвёт новое соединение. По этой причине оба хоста должны выждать определённый промежуток времени, называемый 2MSL («двойное время жизни сегмента», «twice the maximum segment lifetime») перед тем, как снова иметь возможность использовать те же адреса и порты для нового соединения.

Вы можете пронаблюдать это свойство, вручную устанавливая несколько соединений к одному и тому же хосту. К примеру, имея веб-сервер работающий на 10.1.1.1 и порту 80, и дважды подсоединяясь с 10.2.2.2. используя nc:

$ nc -v 10.1.1.1 80 & nc -v 10.1.1.1 80

Connection to 10.1.1.1 80 port succeeded!

Во то время, пока соединения открыты, можете с помощью netstat на клиенте или сервере вывести информацию об этих соединениях:

$ netstat -n | grep 10.1.1.1.80

tcp 0 0 10.2.2.6.28054 10.1.1.1.80 ESTABLISHED

tcp 0 0 10.2.2.6.43204 10.1.1.1.80 ESTABLISHED

Как видите, клиент выбрал два различных (случайных) порта-источника, поэтому это не нарушает требования к уникальности ключей.

Вы можете указать nc использовать определённый порт-источник опцией -p:

$ nc -v -p 31234 10.1.1.1 80 & nc -v -p 31234 10.1.1.1 80

Connection to 10.1.1.1 80 port succeeded!

nc: bind failed: Address already in use

TCP/IP стек клиента предотвратил нарушение уникальности ключей. Некоторые редкие и ошибочные реализации TCP/IP стеков не отвечали этому правилу, и поэтому, как мы скоро увидим, pf заблокирует их соединения при нарушении уникальности ключей.

Вернёмся назад к тому месту, когда pf делает запрос в таблицу состояний, в то время когда пакет начинает отфильтровываться. Запрос состоит из двух шагов. Первый запрос делается для поиска вхождения в таблицу записи с ключом, соответствующим протоколу, адресам, и порту пакета. Поиск будет вестись для пакетов, идущих в любом направлениях. Предположим, что приведённый ниже пакет создал запись в таблице состояний:

incoming TCP from 10.2.2.2:28054 to 10.1.1.1:80

Запрос к таблице обнаружит следующие записи в таблице состояний:

incoming TCP from 10.2.2.2:28054 to 10.1.1.1:80

outgoing TCP from 10.1.1.1:80 to 10.2.2.2:28054

Запись в таблице включает информацию о направлении (входящий или исходящий) первого пакета, создавшего запись. Например следующие записи не вызовут совпадения:

outgoing TCP from 10.2.2.2:28054 to 10.1.1.1:80

incoming TCP from 10.1.1.1:80 to 10.2.2.2:28054

Причина этих ограничений неочевидна, но довольно проста. Представьте, что у вас всего один интерфейс с адресом 10.1.1.1, где веб-сервер осуществляет прослушивание порта 80. Когда клиент 10.2.2.2 подсоединяется, используя случайно выбранный исходящий порт 28054, первый пакет соединения приходит на ваш интерфейс и все ваши исходящие ответы должны будут идти с 10.1.1.1:80 на 10.2.2.2:28054. Вы же не будете пропускать исходящие пакеты с 10.2.2.2:28054 к 10.1.1.1:80, так как такие пакеты не имеют смысла.

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

Когда попытка отыскать пакет среди записей в таблице состояний терпит неудачу, производится обход списка правил фильтра. Вы должны специально разрешить прохождение пакета наружу через второй интерфейс отдельным правилом. Наверняка вы используете ‘keep state’ в этом правиле, чтобы вторая запись в таблице состояний охватывала всё соединение и на втором интерфейсе.

Вы можете удивиться, как же возможно создать вторую запись в таблице, если мы только что разъяснили, что записи должны иметь уникальные ключи. Объяснением здесь будет то, что запись также содержит информацию о направлении соединения, и комбинация этого с остальными данными должны быть уникальна.

Теперь мы также сможем объяснить разницу между свободным соединением и соединением, привязанным к интерфейсу. По умолчанию pf создаёт записи, которые не привязаны ни к какому интерфейсу. Поэтому, если вы разрешаете соединения на одном интерфейсе, пакеты относящиеся к соединению и подпадающие под запись в таблице (включая информацию о направлении пакета!) проходят через любой интерфейс. В простых инсталляциях со статической маршрутизацией это больше теоретические выкладки. В принципе, вы не должны видеть пакеты одного соединения, прибывающие через несколько интерфейсов и ответные пакеты, уходящие также на несколько интерфейсов. Однако при динамической маршрутизации такое возможное. Вы можете привязать записи о состояниях к конкретному интерфейсу используя глобальную установку ‘set state-policy if-bound’ или опцией для каждого правила ‘keep state (if-bound)’. Так вы будете уверены, что пакеты будут подпадать под записи только с интерфейса, который эти записи создал.

Если используется интерфейсы для туннелей, то одно и то же соединение проходит через файрвол несколько раз. Например первый пакет соединения сначала может пройти через интерфейс A, затем через B, потом С и наконец покинуть нас через интерфейс D. Обычно пакеты будут инкапсулированы на интерфейсах A и D и декапсулируется на B и C, поэтому pf видит пакеты разных протоколов и вы можете создать 4 различных записи в таблице состояний. Без инкапсуляции пакет будет неизменен на всех четырёх интерфейсах и вы не сможете использовать некоторые возможности, как трансляцию адреса или модуляцию номера tcp последовательности, потому что это приведёт к появлению в таблице состояний конфликтующих ключей. До тех пор, пока у вас не будет законченной установки включающей интерфейсы с туннелированием и отлаженными ошибкми вида "pf: src_tree insert failed", вы не сможете считать свою инталяцию достаточно успешной. Вернёмся к запросу к таблице состояний, производящемуся для каждого пакета перед проверкой правил. Запрос должен вернуть единственную запись с подходящим ключом, либо не вернуть ничего. Если запрос ничего не возвращает, производится обход списка правил.

Если же запись найдена, вторым шагом для пакетов TCP, перед тем как они начнут считаться принадлежащими конкретному соединению и подвергнутся фильтрации, будет проверка номера последовательности.

Есть большое количество TCP атак, в которых атакующий пытается управлять соединением между двумя хостами. В большинстве случаев, атакующий не находится на пути маршрутов между хостами, поэтому не может прослушать легитимные пакеты пересылаемые хостами. Однако он может отсылать пакеты любому из хостов, имитирующие пакеты его собеседника, путём спуфинга(“spoofing”) - подделки адреса отправителя. Целью атакующего может являться предотвращение возможности создания соединений между хостами или обрыв уже установленных соединений (чтобы вызвать отказ в обслуживании) или для создания вредоносной загрузки на соединения.

Для успешной атаки атакующему необходимо верно «угадать» несколько параметров соединения, таких как адрес/порт источника и приёмника. И для широко распространённых протоколов это может быть не так уж сложно, как может показаться. Если атакующий знает адреса хостов и один из портов (поскольку речь идёт о распространённом сервисе), ему будет нужно только «угадать» один порт. Даже если клиент использует по-настоящему случайный порт-источник (что на самом деле не всегда верно), атакующему нужно всего лишь перебрать 65536 портов за короткий промежуток времени. (В большинстве случаев даже (65536-1024) портов, т.е. только непривилегированные порты - прим. переводчика))

Но вот что по настоящему трудно угадать для нападающего, так это верный номер последовательности (и его подтверждение). Если оба хоста выбирают начальный номер последовательности случайным образом (или вы используете модуляцию номера последовательности для хостов, которые имеют «слабый» генератор ISN (Initial Sequence Number)), то атакующему не удастся подобрать соответствующее значение в нужный момент соединения.

Во время существования валидного TCP соединения номера последовательностей (и подтверждения) для отдельных пакетов изменяются согласно определенным правилам.

Например, если хост посылает некоторый сегмент данных и его получатель подтвердил приём, не должно быть причины, по которой отправитель должен послать данные сегмента еще раз. Но, фактически, попытка перезаписать части информации уже полученные хостом не является нарушением протокола TCP, хотя и может быть разновидностью атаки.

pf использует правила, чтобы определить наименьший диапазон для легитимных номеров последовательностей. В общем случае, pf может точно определить подлинность только 30000 из 4294967296 возможных номеров последовательности в любой момент соедиения. Только если номер последовательности и подтверждение входит в это окно, pf убедится в том, что пакет легитимный и пропустит его.

Если во время проведения запроса к таблице состояний найдена подходящая запись, на следующем шаге номера последовательностей пакетов, сохранённых в таблице, проверяются на вхождение в диапазон возможных значений. В случае неудачи при сравнении pf сгенерирует сообщение "BAD state" и отбросит пакет без вычисления набора правил. Есть две причины, по которым может не произойти сравнения с правилами: почти наверняка будет являтся ошибкой пропуск пакета, т.к. если вычисление набора приведёт к попаданию в правиле на опцию "keep state" и pf не сможет вынести решение и создать новую запись потому что это приведёт к появлению кнфликтующих ключей в таблице.

Для того чтобы видеть и записывать в лог сообщения "BAD state", вам необходимо включить отладочный режим используя команду:

$ pfctl - xm

Отладочные сообщения по умолчанию попадают на консоль,также syslogd записывает их в /var/log/messages. Ищите сообщения начинающиеся на "pf":

pf: BAD state: TCP 192.168.1.10:20 192.168.1.10:20 192.168.1.200:64828

[ lo=1185380879 high=1185380879 win=33304 modulator=0 wscale=1]

4:4 A seq=1185380879 ack=1046638749 len=1448 ackskew=0 pkts=940:631

dir=out,fwd

pf: State failure on: 1 |

Эти сообщения всегда идут парами. Первое сообщение показывает запись в таблице состояний в момент, когда пакет был заблокирован и номера последовательности пакета, который привел к ошибке. Вторая запись отображает условия, которые были нарушены.

В конце первого сообщения вы увидите, была ли создана запись состояния на входящий (dir=in) или исходящий (dir=out) пакет, и шел ли заблокированный пакет в том же напрвлении (dir=,fwd) или противоположном (dir=,rev) направлении.

Запись в таблице содержит три адреса: пары портов, два из которых всегда равны между собой, в случае если соединение не подверглось преобразованию nat,rdr или bnat. Для исходящих соединений источник выводится слева, а приёмник пакета - справа. Если исходящее соединение задействует преобразование адреса источника, пара в середине показывает источник после преобразования. Для входящих соединений источник находится справа в выводе, а адрес назначения посередине. Если входящее соединение подвергается преобразованию адреса назначения, пара ip/port слева показывает приёмник после проведённого преобразования. Этот формат соответствует выводу pfctl -ss, ч той лишь разницей, что pfctl показывает направление пакета используя стрелки.

В выводе вы можете видеть текущие номера последовательности у хостов в квадратных скобках. Так значение "4:4" означает, что соедиенение установлено полностью (меньшие значения более вероятны на этапе установления соединения, большие - к моменту закрытия соедиения). "A" означает, что заблокированный пакет имел установленный флаг ACK (также как и в выводе флагов у tcpdump), далее идут значения номеров последовательностей (seq=) и (ack=) в заблокированных пакетах и длина полезной нагрузки пакета - длина данных (len=). askskew это часть внутреннего представления данных в таблице, задействующаяся только при значениях не равных нулю.

Запись "pkts=930:631" обзначает, что с ней совпало 940 пакетов, шедших напрвлении, совпадающим с пакетом, вызвавшим создание данной записи, и 631 пакет в противоположном напрвлении. Эти счётчики будут особенно полезны при поиске проблем на этапе установления соединения, если один из них равен нулю, это будет противоречить вашему ожиданию того, что с данной записью совпадают пакеты, идущие в обоих напрвлениях.

Следующее сообщение собдержит список из одной или нескольких цифр. Каждая цифра представляет собой проверку, на которой произошла ошибка:

  1. размер окна пакета превышает максимальный размер у получателя (seq + len > high)
  2. пакет содержит уже переданные данные (seq< lo - win)
  3. ackskew меньше минимального значения
  4. ackskew больше максимального значения
  5. то же, что и в (1), но с разницей (seq + len > high + win)
  6. то же, что и в (2), но (seq < lo - maximum win)

К счастью, сообщения "BAD state" не относятся к реальному повседневному трафику и проверка pf номера последовательности позволяет не столкнуться с большинством аномалий. Если вы видите эти сообещения появляющиеся нерегулярно и не замечаете большое число подвисших соединений, вы можете просто их игногрировать. В интернет работает множество реализаций TCP/IP и некоторые из них могут иногда генерировать ошибочные пакеты.

Однако этот класс проблем может быть легко диагностирован по появлению сообщений "BAD state", появляющихся только в подобных случаях.

Создание записей состояний TCP по начальному SYN пакету.

В идеале, записи состояний должны создваться при появлении первого пакета SYN.

Вы можете принудительно включить использование этого правила, пользуясь принципом:

“Использовать опции "flags S/SA" во всех правилах "pass proto tcp keep state"”

Только начальные SYN пакеты (и только они) имеют установленный флаг SYN и сборшенный ACK. Когда применение опции "keep state" привязывается только к начальным SYN пакетам, только эти пакеты будут создавать записи в таблице состояний. Таким образом любая существующая запись в таблице состояний будет произведена от начального SYN пакета.

Причиной создания записей только по начальным пакетам служит расширение протокола TCP под названием "масштабирование окна" (“window scaling”), определённое в RFC1323. Поле заголовка TCP, используещееся для оповещения о размере принятых окон, слишком мало для сегодняшних высокоскоростных линий связи. Современные реализации TCP/IP предпочитают использование больших значений размера окна, чем может уместиться в существующем поле. Масштабирование размера окна означает, что все размеры окон, о которых известно от хоста-получателя, должны быть умножены на определённое значение, заданное получателем, а не взяты сами по себе. Для того, чтобы данная схема заработала, оба хоста должны поддерживать расширение и обозначить друг для друга свою возможность реализации его на этапе установления соединения (“handshake”) используя опции TCP. Эти опции представлены только в начальных пакетах SYN и SYN+ACK. И только если каждый из этих пакетов содержит опцию, взаимосогласование будет успешным и размер окна всех последующих пакетов будет умножаться на коэффициент.

Если бы pf “не знал” об используемом масштабировании окна, бралось бы предоставляемое значение без коэфиициента, и вычисление размеров окна для приемлемых значений номеров последовательности производилось бы неверно. В типовом случае хосты в начале соединения предоставляют малые значения размеров окна и увеличивают их в процессе соединения. Не подозревающий о существовании факторов изменяющих размер окна, pf с некоторого момента начнет блокирование пакетов, потому что будет считать, что один их хостов пытается обойти предоставленный “собеседником” максимальный размер окна. Эффекты от этого могут быть более или менее заметны. Иногда, хосты отреагируют на потерю пакетов переходом в т.н. “loss recovery mode” (“режим повторной передачи”) и будут анонсировать меньший размер окна. После того, как pf повторно передаст отброшенные в первый раз пакеты, размеры окон будут далее возрастать, до точки в которой pf снова начнёт их блокировать. Внешним проявлением может быть временное зависание соединений и низкая производительность. Возможно также полное зависание или сброс соединений по таймауту.

Но pf знает от возможности масштабирования окон и поддерживает такую возможность. Как бы то ни было, предпосылкой для создания записей в таблицу состояний по первым SYN пакетам будет то, что pf может ассоциировать первые два пакета соединения с записью в таблице. А так как полное согласование коэффициентов размера окон имеет место только в этих первых двух пакетах, то нет надёжного метода определить эти коэффициенты после согласования соединения.

В прошлом, масштабирование размеров окна использовалось не так широко, но ситуация быстро меняется. Только недавно в Linux включена эта опция по умолчанию. Если вы испытываете трудности с зависающими соединениями, особенно с некоторыми комбинациями хостов и видите сообщения "BAD state" относящиеся к этим соединениям, проверьте, что вы действительно создаёте записи для таблицы состояний по первым пакетам соединения.

Вы можете определить, использует ли pf опцию масштабирования для соедиения из вывода pfctl:

$ pfctl -vss

kue0 tcp 10.1.2.3:10604 -> 10.2.3.4:80 ESTABLISHED:ESTABLISHED

wscale 0 wscale 1

Если присутствует запись "wscale x" выведенная во второй строчке (даже если x равен нулю), pf зачит знает о том, что соединение использует масштабирование.

Другой простой метод для выявления проблем связанных с масштабированием это временное выключение поддержки масштабирования и потвторное воспроизведение ситуации. В OpenBSD использование масштабирования может управлятся опцией sysctl:

$ sysctl net. inet. tcp. rfc1323

net. inet. tcp. rfc1323=1

$ sysctl - w sysctl net. inet. tcp. rfc1323=0

net. inet. tcp. rfc1323: 1 -> 0

Подобные проблемы появляются когда вы создаёте записи в таблице состояний по пакетам, отличным от начальных SYN и используете опцию "moulate state" либо трансляцию. В обоих случаях трансляция производится в начале соединения. Если первый пакет не транслирован, транчляция последующих обычно обескураживает принимающую сторону и приводит к тому, что посланные ответы блокируются pf с сообщением "BAD state".

Раздел обновляется ежедневно. Всегда свежие версии самых лучших бесплатных программ для повседневного использования в разделе Необходимые программы . Там практически все, что требуется для повседневной работы. Начните постепенно отказываться от пиратских версий в пользу более удобных и функциональных бесплатных аналогов. Если Вы все еще не пользуетесь нашим чатом , весьма советуем с ним познакомиться. Там Вы найдете много новых друзей. Кроме того, это наиболее быстрый и действенный способ связаться с администраторами проекта. Продолжает работать раздел Обновления антивирусов - всегда актуальные бесплатные обновления для Dr Web и NOD. Не успели что-то прочитать? Полное содержание бегущей строки можно найти по этой ссылке .

Бесплатный фаервол Comodo. Тестирование, выводы

Comodo Firewall в работе

После установки и настройки Comodo спрятался в трее и начал доставать меня своими расспросами. В первый день я поигрался со всеми режимами фаервола и проактивной защиты и в конце концов заставил его замолчать. Каких-то тормозов после его появления в своей системе обнаружено не было. И вообще, работать с фаерволом от Comodo было достаточно легко и удобно. Интерфейс основного окна весьма прост и информативен:


Но вот к навигации по настройкам фаервола и проактивной защиты пришлось привыкать - не всегда удаётся быстро найти нужный пункт. Думаю, со временем это пройдёт.






Спустя несколько дней после установки Comodo Firewall я решил его немного потестировать.

Тест №1. Онлайн-тестирование

При нажатии на кнопку "Test" программа пытается установить связь с сервером сайта .

Поскольку эту утилиту Comodo Firewall ещё не знает, то при первой её попытке вырваться в интернет последовала незамедлительная реакция со стороны проактивной защиты и фаервола:

В обоих случаях я нажал заблокировать и получил подтверждение об успешном прохождении теста:

Затем я переименовал файл FireWallTest.exe в opera.exe и подменил им стандартный файл Оперы. Таким образом, я попытался обмануть Comodo Firewall, который уже хорошо знает этот браузер и постоянно и автоматически выпускает его в интернет. На запуск «фальшивой» Оперы из Тотала Comodo отреагировал следующим образом:

Получив моё разрешение на одноразовый запуск, фаервол предупредил меня о попытке выхода Оперы в интернет:

Получается, что любое приложение, для которого уже существуют правила, в случае подмены исполняемого файла без моего ведома выйти в интернет не сможет. Вроде всё хорошо, но вот какая штука: цвет верхней части окна с предупреждением зависит от серьёзности ситуации. Если Comodo оценивает событие как критичное, то цвет будет красным, если событие менее опасное – жёлтым. В моём случае Comodo посчитал смоделированную ситуацию не особо опасной и зажёг «жёлтый». К тому же вместо формулировки «исполняемый файл opera.exe не опознан» я бы предпочёл увидеть что «произошло изменение параметров файла opera.exe ”. Так предупреждают в подобных ситуациях комбайны от Касперского и Eset, например. Причём, пользователь видит окно тревоги с использованием красного цвета, что сразу заставляет обратить внимание на ситуацию. А предупреждение от Comodo может быть просто проигнорировано пользователем из-за недостаточного акцента на происходящее событие.

Подмена файла Оперы было лишь частью моего коварного плана. Следующей жертвой стал Internet Explorer 6 , который интегрирован в операционную систему, а, значит, iexplore.exe можно считать полноправным системным файлом. Каково же было моё удивление, когда под полное молчание Comodo я увидел окно о провале теста:

Видимо, создано лишнее правило, решил я и полез в политики фаервола и проактивной защиты. Покопавшись там минут 15, я принял единственно правильное решение - переустановить Comodo. Сказано - сделано. Оставив режимы работы по умолчанию, я повторил опыт с подменой iexplore.exe . На запуск из Тотала проактивная защита сработала, как и в случае с Оперой:

Здесь придётся сделать небольшое лирическое отступление. Дело в том, что при подмене исполняемого файла IE система в течение 4-8 секунд восстанавливает оригинальный iexplore.exe . В связи с этим результаты моего теста зависели от того, успевает подменённый файл постучаться в интернет или нет.

В случае, когда я успеваю совершить все манипуляции до восстановления explore.exe, происходит следующее. Получив моё разрешение на одноразовый запуск explore.exe , Тотал запускает утилиту FireWallTest, жму «Test”, проактивная защита Defens+ выдает предупреждение:

Если разрешаем (в качестве эксперимента) - отрабатывает фаервол:

Успеваем нажать «Блокировать» - тест пройден, утилита в интернет не проскочила. А вот если iexplore.exe восстановлен до того, как нажали кнопку блокировки - от Вашего выбора уже ничего не зависит - утилита автоматически получает доступ интернет в момент восстановления оригинального файла.

То же самое относится и к работе проактивной защиты: если не успел скомандовать блокировать до восстановления explore.exe - утилита автоматом получает доступ в интернет.

Вдоволь наигравшись с фальшивым IE, я вспомнил о самом первом провале теста, когда Comodo промолчал и выпустил «левый» файл в интернет. Переустановив Comodo, я перевёл Defense+ и фаервол в режим обучения и запустил IE. После этого вернул режимы, выставленные по умолчанию, и повторил тест. Comodo его снова молча провалил...

Тест №3. Дуэль

Находясь под впечатлением от результатов предыдущего теста, я искал дополнительные возможности протестировать Comodo и, наконец, нашёл утилиту AWFT.

Эта программка эмулирует поведение троянов и содержит серию из шести тестов, демонстрирующих различные методики неавторизованного доступа в сеть, минуя защиту фаервола. Среди этих тестов есть как старые способы обмана фаерволов, так и более современные методики. За каждый успешно пройденный тест фаерволу начисляется некоторое количество баллов. Если тест не пройден, баллы начисляются в пользу AWFT. Максимальное количество баллов - десять.

Утилита является условно-бесплатной, ограничение - 10 запусков. В верхней части окна программы расположены кнопки, запускающие соответствующие тесты, внизу указан сайт, куда будет прорываться AWFT, и результат дуэли между фаерволом и утилитой. Кнопка Reset Points служит для сброса набранных очков.


На всякий случай я решил поменять адрес сайта на свой.

Тестирование происходило при включенном Comodo Firewall и Defense+, запущенной Оперой и отключенным монитором Авиры.

В первом тесте использован приём с загрузкой скрытой копии браузера и пропатчиванием памяти перед его запуском.

При нажатии кнопки теста выскочило окно с ошибкой:

После закрытия этого окна Сomodo отреагировал на тест окном запроса, при нажатии кнопки «Блокировать» AWFT, немного призадумавшись, отдала первое очко фаерволу.

По утверждению разработчиков утилиты тест №2 - это старый и давно известный трюк. Comodo снова реагирует окном запроса и снова получает очко.

В тесте №3 также используется старый трюк. Comodo просто молча его блокирует, видимо, трюк действительно известный.

Тест №4 аналогичен первому тесту с запуском скрытой копии браузера и пропатчиванием памяти перед его запуском. Фаервол не выдал никаких предостережений, но через небольшую паузу заработал очередное очко.

Во время пятого и шестого теста необходимо переключиться в браузер и немного посерфинговать (я просто обновлял загруженную в браузере страницу).

В тесте №5 утилита выполняет эвристический поиск установленного на компьютере (или в сети) разрешённого программного обеспечения, имеющего доступ к интернет через порт 80, затем запускает копию разрешённой программы и перед самым запуском патчит память, занимаемую этой программой (т.е., AWFT запускает и саму себя в памяти разрешённой программы). Comodo молча справился с тестом и получил за него целых 3 очка.

Тест №6 аналогичен предыдущему пятому тесту. Используется тот же приём с эвристическим поиском установленного софта, имеющего право выходить наружу через порт 80. Только способ взлома сейчас изменён - используется пользовательский запрос. Попутно с этим AWFT пытается прилепить к браузеру левый скрытный тулбар. При открытой Опере у меня выскочило такое окно:


В момент подтверждения мною этого пользовательского запроса Comodo выдал свой запрос, утилита была снова заблокирована, а фаервол получил 3 очка себе в зачёт.

Итог дуэли - 10:0 в пользу Comodo. Повторив тесты с открытым Internet Explorer, я получил те же результаты.


Заключение

Несмотря на некоторый неприятный осадок в душе, оставшийся после тестирования фаервола, я всё же рекомендую Comodo Internet Security для домашнего использования, но только в качестве фаервола. И не слушайте тех умников, которые советуют отключать проактивную защиту, ни в коем случае! Только с использованием Defense+ этот фаервол действительно обеспечивает безопасность Вашего компьютера. А вот что действительно не следует использовать, так это антивирус от Comodo. Мало того, что он прилично пропускает, у Вас возникнут проблемы с его обновлением - уж очень громоздкие базы у него. К тому же он прилично влияет на быстродействие системы. У меня просто замечательно работали в паре Comodo Firewall и Avira Antivir Personal.

Тормозов и глюков в системе во время работы фаервола мною обнаружено не было. Свои размышления о результатах моего тестирования я пока оставлю при себе, хочется послушать Ваши коментарии.

Во время написания заключительной части этой статьи я наткнулся на результаты недавнего тестирования фаерволов лабораторией Matousec. Comodo Internet Security оказался единственным фаерволом со 100-процентным результатом (см. форум по фаерволам). Что же, я свой выбор сделал... А Вы?

плюсы (явные) :
бесплатное распространение,
наличие собственной базы данных программ;
наличие проактивной защиты (Defense+);
простота установки и начальной настройки;
очень информативное и удобное окно со сводкой;

плюсы (сомнительные) :
наличие нескольких режимов работы;

минусы (явные) :
раздражающий режим инсталляции;
подмена исполняемого файла не определяется проактивной защитой как критическое событие;

минусы (сомнительные) :
откровенно неудачный антивирус.

Сравнительное тестирование 21 популярного фаервола на качество защиты от атак, исходящих изнутри системы. В тесте проводилась проверка защиты на 64-х специально разработанных для него тестовых утилитах, проверяющих защиту процессов от завершения, защиту от стандартных внутренних атак, защиту от нестандартных утечек и защиты от нестандартных техник проникновения в режим ядра.

Наряду с антивирусом, фаервол является одним из главных компонентов обеспечения безопасности компьютера. Однако, в отличие от антивирусов, объективные тесты работы фаерволов проводятся достаточно редко. Этот пробел мы попробовали закрыть, проведя в 2011 и 2012 году тест фаерволов на защиту от внутренних атак и тест персональных IDS/IPS на защиту от атак на уязвимые приложения . В этом году мы решили расширить список используемых методов и повторить тест фаерволов на защиту от внутренних атак, чтобы посмотреть, как за прошедшее время изменились результаты популярных продуктов по данному критерию.

На что направлен данный тест или какие функции выполняет фаервол? По определению интернет-стандарта [RFC3511 ] (2003 г.), фаервол – это система, реализующая функции фильтрации сетевых пакетов в соответствии с заданными правилами с целью разграничения трафика между сегментами сети. Однако, с ростом сложности вредоносных программ и хакерских атак, исходные задачи фаервола дополнились новыми функциональными модулями. Уже фактически невозможно представить полноценный фаервол без модуля HIPS (мониторинга системных событий, контроля целостности системы и т.п.).

Главная задача современного фаервола – осуществлять блокировку неавторизованных сетевых коммуникаций (далее - атак), подразделяемых на внутренние и внешние. К таковым относятся:

Внешние атаки на защищённую фаерволом систему:

  • инициированные хакерами;
  • инициированные вредоносным кодом.
  • инициированные недоверенными приложениями (вредоносный код);
  • инициированные приложениями, сетевая активность которых явным образом запрещена правилами.

Кроме того, фактически исчезли с рынка продукты, которые можно было бы отнести к чистым персональным фаерволам в классической формулировке 2003 года. На смену им пришли комплексные продукты защиты персональных компьютеров, в обязательном порядке включающие в себя фаервольный компонент.

Тест фаервола на защиту от внешних атак включает в себя изучение качества защиты от атак, исходящих изнутри системы. Тест проводился по следующим направлениям:

  1. Проверка защиты процессов от завершения.
  2. Защита от стандартных внутренних атак.
  3. Тестирование защиты от нестандартных утечек.
  4. Тестирование защиты от нестандартных техник проникновения в режим ядра.

По сравнению с предыдущим тестом существенно расширилось количество используемых атак – с 40 до 64. Также изменялась операционная система, защиту которой должны осуществлять тестируемые продукты. В прошлом тесте это была Windows XP, а в данном тесте – Windows 7 x32. Также на конец года планируется аналогичный тест для операционной системы Windows 7 x64.

Введение

В тестировании принимала участие 21 популярная программа комплексной защиты (класса Internet Security, если в линейке такого продукта нет, то выбирался сугубо фаервол) от различных производителей актуальных на дату начала тестирования версий продуктов (май 2013) и работающих на платформе Windows 7 x 32 :

  1. Avast! Internet Security (8.0.1488).
  2. AVG Internet Security (2013.0.3272).
  3. Avira Internet Security (13.0.0.3499).
  4. Bitdefender Internet Security (16.29.0.1830).
  5. Comodo Internet Security (6.1.276867.2813).
  6. Dr.Web Security Space (8.0).
  7. Eset Smart Security (6.0.316.0).
  8. F-Secure Internet Security (1.77 build 243).
  9. G DATA Internet Security (1.0.13113.239).
  10. Jetico Personal Firewall (2.0).
  11. Kaspersky Internet Security (13.0.1.4190(g).
  12. McAfee Internet Security (11.6.507).
  13. Kingsoft Internet Security (2009.05.07.70).
  14. Microsoft Security Essentials (4.2.223.0) + Windows Firewall.
  15. Norton Internet Security (20.3.0.36).
  16. Online Armor Premium Firewall (6.0.0.1736).
  17. Outpost Security Suite Pro (8.0 (4164.639.1856).
  18. Panda Internet Security (18.01.01).
  19. PC Tools Internet Security (9.1.0.2900).
  20. Trend Micro Titanium Internet Security (6.0.1215).
  21. TrustPort Internet Security (2013 (13.0.9.5102).

Перед началом теста производилась подготовка среды тестирования. Для этого на чистый компьютер устанавливалась операционная система Windows 7 Enterprise SP1 x86 со всеми доступными на этот момент обновлениями, а также дополнительное программное обеспечение, необходимое для теста.

Тестирование производилось на двух типах настроек: рекомендуемых производителем стандартных (настройки по умолчания) и максимальных. В первом случае использовались рекомендуемые производителей настройки по умолчанию и производились все рекомендуемые программой действия.

Во втором случае в дополнение все настройки, которые были отключены в режиме «по умолчанию», но при этом могли повлиять на исход тестирования, включались и/или приводились в максимальное положение (наиболее строгие настройки). Другими словами – под выставлением максимальных настроек понимается перевод всех доступных из графического интерфейса пользователя настроек всех модулей, связанных с детектированием вредоносной файловой или сетевой активности, к наиболее строгому варианту.

Тест фаерволов проводился по следующим группам внутренних атак, для наглядности разбитых на уровни сложности:

1. Базовый уровень сложности (56 вариант атак):

1. проверка защиты процессов от завершения (41 вариант атак);
2. защита от стандартных внутренних атак (15 вариантов атак).

2. Повышенный уровень сложности (8 вариантов атак):

1. тестирование защиты от нестандартных утечек (3 варианта атак);
2. тестирование защиты от нестандартных техник проникновения в режим ядра (5 вариантов атак).

Подробное описание всех методов атаки, используемых в тесте, вы можете найти в методологии тестирования .

Проверка фаерволов на защиту от внутренних атак

Напомним, что согласно используемой схеме награждения , 1 балл (+) начислялся, если атака заблокирована автоматически, защитный функционал тестируемой программы не нарушен. 0.5 балла (или +/-) - если атака блокируется только при особых обстоятельствах (например, при правильном выборе пользователя нужного действия по запросу тестируемой программы). И, наконец, в случае если атака прошла успешно полностью или частично с выводом из строя функционала защиты, то баллы не начислялись. Максимально возможное количество набранных баллов в данном тесте составило 64.

В таблице 1-2 и на рисунке 1-2 представлены результаты тестирования фаерволов отдельно на стандартных и максимальных настройках. Для наглядности результаты для каждого фаервола разбиты на две группы: защита от атак базового уровня сложности и защита от атак повышенного уровня сложности.

Таблица 1: Результаты теста фаерволов на станд а ртных настройках

Протестированный продукт Всего баллов (макс. 64) Всего
%
Баллы % % от суммы Баллы % % от суммы
Comodo 53 95% 82,8% 6 75% 9,4% 59 92%
Online Armor 50 89% 78,1% 7,5 94% 11,7% 57,5 90%
Norton 45 80% 70,3% 6 75% 9,4% 51 80%
Jetico 46 82% 71,9% 4,5 56% 7,0% 50,5 79%
Outpost 45 80% 70,3% 2,5 31% 3,9% 47,5 74%
Trend Micro 42 75% 65,6% 3 38% 4,7% 45 70%
Kaspersky 42 75% 65,6% 2,5 31% 3,9% 44,5 70%
Dr.Web 42,5 76% 66,4% 2 25% 3,1% 44,5 70%
TrustPort 43 77% 67,2% 0,5 6% 0,8% 43,5 68%
G DATA 42 75% 65,6% 1 13% 1,6% 43 67%
Avast 41 73% 64,1% 1 13% 1,6% 42 66%
Eset 41 73% 64,1% 1 13% 1,6% 42 66%
Bitdefender 41 73% 64,1% 1 13% 1,6% 42 66%
AVG 41 73% 64,1% 0 0% 0,0% 41 64%
McAfee 41 73% 64,1% 0 0% 0,0% 41 64%
PC Tools 41 73% 64,1% 0 0% 0,0% 41 64%
Avira 40 71% 62,5% 0 0% 0,0% 40 63%
Microsoft 40 71% 62,5% 0 0% 0,0% 40 63%
F-Secure 31,5 56% 49,2% 1 13% 1,6% 32,5 51%
Panda 30 54% 46,9% 0 0% 0,0% 30 47%
Kingsoft 27 48% 42,2% 1 13% 1,6% 28 44%

Рисунок 1: Результаты теста фаерволов на стандартных настройках

Защита от внутренних атак на рекомендуемых производителем настройках оставляет желать лучшего. Только три фаервола смогли преодолеть порог в 80% на стандартных настройках – это Comodo, Online Armor и Norton. Достаточно близко к ним располагаются продукты Jetico (79%) и Outpost (74%). Результаты остальных фаерволов оказались существенно хуже.

По сравнению с результатами прошлого теста все лидеры подтвердили свои высокие результаты, произошли только небольшие перемещения внутри лидирующей группы, например Outpost и Jetico поменялись позициями. Единственно неожиданностью стал продукт Norton, который в прошлом тесте показал результат в 45% и находился в нижней части таблице, а в данном тесте с 80% занял третью позицию.

Полученные результаты связаны с тем, что многие производители выставляют стандартные настройки таким образом, чтобы уменьшить количество сообщений, на которые должен реагировать пользователь. Это подтверждает и результатами теста – на стандартных настройках фаерволы задавали вопросы пользователям только в 5,4% атак, а на максимальных – в 9,2% атак. Однако это сказывается на качестве защиты, которая «промолчит» в ситуации, когда вредоносная программа будет имитировать/производить вполне легитимные действия в системе.

Также следует обратить внимание на две закономерности. Во-первых, процент предотвращения сложных видов атак в целом заметно хуже, чем атак базового уровня сложности. Больше половины таких атак отклонили только четыре продукта - Comodo, Online Armor, Norton и Jetico. Еще четыре продукта вошли в граничную группу, отклонив от 25% до 38% таких атак – это Outpost, Trend Micro, Kaspersky и Dr.Web. Все остальные продукты отклонили не больше одной сложной атаки. Во-вторых, улучшились показатели отражения базовых атак. Если в прошлом тесте 11 (50%) продуктов отклонили меньше 50% атак, то в данном тесте таких продуктов только 3 (14%).

Таблица 2: Результаты теста фаерволов на максимальных настройках

Протестированный продукт Атаки базового уровня сложности (макс. 56 баллов) Атаки повышенного уровня сложности (макс. 8 баллов) Всего баллов(макс. 64) Всего
%
Баллы % % от суммы Баллы % % от суммы
Comodo 56 100% 87,5% 8 100% 12,5% 64 100%
Bitdefender 56 100% 87,5% 8 100% 12,5% 64 100%
Online Armor 53 95% 82,8% 8 100% 12,5% 61 95%
Kaspersky 53 95% 82,8% 7 88% 10,9% 60 94%
Norton 50,5 90% 78,9% 8 100% 12,5% 58,5 91%
PC Tools 49,5 88% 77,3% 5,5 69% 8,6% 55 86%
Outpost 49 88% 76,6% 5,5 69% 8,6% 54,5 85%
Eset 49 88% 76,6% 5,5 69% 8,6% 54,5 85%
Dr.Web 46,5 83% 72,7% 5 63% 7,8% 51,5 80%
Jetico 46 82% 71,9% 4,5 56% 7,0% 50,5 79%
Trend Micro 43 77% 67,2% 3 38% 4,7% 46 72%
TrustPort 43 77% 67,2% 2,5 31% 3,9% 45,5 71%
G DATA 42 75% 65,6% 3 38% 4,7% 45 70%
Avira 41,5 74% 64,8% 2 25% 3,1% 43,5 68%
Avast 41 73% 64,1% 1,5 19% 2,3% 42,5 66%
AVG 41 73% 64,1% 0 0% 0,0% 41 64%
McAfee 41 73% 64,1% 0 0% 0,0% 41 64%
Microsoft 40 71% 62,5% 0 0% 0,0% 40 63%
F-Secure 31,5 56% 49,2% 1 13% 1,6% 32,5 51%
Panda 30 54% 46,9% 0 0% 0,0% 30 47%
Kingsoft 27 48% 42,2% 1 13% 1,6% 28 44%

Рисунок 2: Результаты теста фаерволов на максимальных настройках

При включении максимальных настроек качество защиты от внутренних атак у многих протестированных фаерволов значительно повысилось. Особенно это заметно у крепких середнячков. Все лидеры прошлого теста в данном тесте также показали высокие результаты. Из изменений стоит отметить продукт Bitdefender, который наряду с Comodo, показал 100% результат и продукт Norton, переместившийся в лидирующую группу.

Результаты ряда продуктов на стандартных и максимальных настройках оказались одинаковыми. Это связанно с тем, что данные продукты не имеют настроек, способных повлиять на результаты нашего теста.

Сравнение качества защиты на стандартных и максимальных настройках

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

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

Таблица 3: Сводные результаты теста фаерволов на стандартных и максимальных настройках

Продукт

Стандартные настройки Максимальные настройки
Comodo 92% 100%
Online Armor 90% 95%
Norton 80% 91%
Jetico 79% 79%
Outpost 74% 85%
Trend Micro 70% 72%
Kaspersky 70% 94%
Dr.Web 70% 80%
TrustPort 68% 71%
G DATA 67% 70%
Avast 66% 66%
Eset 66% 85%
Bitdefender 66% 100%
AVG 64% 64%
McAfee 64% 64%
PC Tools 64% 86%
Avira 63% 68%
Microsoft 63% 63%
F-Secure 51% 51%
Panda 47% 47%
Kingsoft 44% 44%

Рисунок 3: Сводные результаты теста фаерволов на стандартных и максимальных настройках

Рисунок 3 очень наглядно демонстрирует разницу в результатах теста в зависимости от выбранных настроек.

Во-первых, только два продукта – Comodo и Online Armor показывают близкие к максимальным показатели защиты, как на стандартных, так и на максимальных настройках.

Во-вторых, при изменении стандартных настроек предложенных производителем, часть продуктов показывает существенно лучший уровень защиты. Наиболее ярко это видно на таких продуктах как Bitdefender, Kaspersky, Eset, F-Secure и PC Tools.

В-третьих, как уже отмечалось выше, некоторые из протестированных продуктов вовсе не имеет настроек, которые каким-либо образом могли бы повлиять на результаты теста. Поэтому их результаты на всех типах настроек в данном тесте одинаковы. К этой группе относится Jetico, Avast, AVG, McAffe, F-Secure, Panda, Kingsoft и Microsoft.

В итоговой оценке не учитываются ситуации, когда атака была отражена, однако при этом возникали проблемы с пользовательским интерфейсом продуктов. В большинстве случаев проблемы заключались в «вылетании» интерфейса на непродолжительное время (от 2 до 10 секунд) или до следующей загрузки операционной системы. Несмотря на то, что при проблемах с пользовательским интерфейсом продукты продолжали обеспечивать защиту, наличие таких проблем субъективно воспринимается негативно и может влиять на предпочтения в выборе продуктов. Количество проблем с пользовательским интерфейсом представлено в таблице 3 и на рисунке 3. Оценивались ошибки, возникающие при атаках 1 уровня, общее количество которых – 41.

Таблица 4: Количество проблем с пользовательским интерфейсом на стандартных и максимальных настройках

Протестированный продукт Стандартные настройки Максимальные настройки
Количество ошибок % Количество ошибок %
McAfee 34 83% 34 83%
Microsoft 33 80% 33 80%
Kingsoft 20 49% 20 49%
F-Secure 19 46% 19 46%
Panda 17 41% 17 41%
Jetico 16 39% 16 39%
PC Tools 13 32% 13 32%
Trend Micro 12 29% 12 29%
AVG 10 24% 9 22%
TrustPort 9 22% 9 22%
G DATA 9 22% 9 22%
Bitdefender 8 20% 8 20%
Norton 6 15% 6 15%
Avast 5 12% 5 12%
Outpost 5 12% 5 12%
Eset 5 12% 4 10%
Comodo 5 12% 0 0%
Avira 2 5% 2 5%
Dr.Web 2 5% 2 5%
Kaspersky 1 2% 1 2%
Online Armor 1 2% 1 2%

Рисунок 4: Количество проблем с пользовательским интерфейсом на стандартных и максимальных настройках

Полученные результаты показывают, что у продуктов McAfee и Microsoft проблемы с пользовательским интерфейсом возникали при большинстве атак (более 80%). Это можно назвать неприемлемым уровнем, т.к. практически любая успешно отраженная атака приведет к проблемам. Достаточно плохие результаты, лежащие в диапазоне от 30% до 50%, показывают продукты Kingsoft, F-Secure, Panda, Jetico и PC Tools. При их использовании каждая 2-3 атака будет приводить к проблемам с интерфейсом. Еще целый ряд продуктов показывают результаты от 10% до 30%, которые можно назвать удовлетворительными. Хорошие результаты показали продукты Avira, Dr.Web, Kaspersky и Online Armor, проблемы у которых возникали в диапазоне от 2% до 5% атак. Единственным продуктом, у которого ни разу не возникло проблем с пользовательским интерфейсом был Comodo на максимальных настройках, что можно признать отличным результатом. Однако при стандартных настройках результат Comodo ухудшается (12%), что говорит о том, что использование данного продукта требует определенных знаний по его настройке.

Итоговые результаты теста и награды

Так же, как и в предыдущем тесте, мы не усредняли результаты одного и того же продукта с различными настройками, а рассматривать их независимо друг от друга. Таким образом, каждый из протестированных продуктов может получить две награды, по одной на каждом виде настроек.

В соответствие со схемой награждения лучшие фаерволы получают награды с указанием использованных при этом настроек, см. таблицу 4.

Таблица 5: Итоговые результаты теста фаерволов на стандартных и максимальных настройках

Тестируемый продукт Вариант
настроек
Предотвращение атак [%] Всего
[%]
Награда
Базовый
уровень сложности
Повышенный уровень сложности
Comodo Max 100% 100% 100%
Platinum Firewall Outbound
Protection Award
Bitdefender Max 100% 100% 100%
Online Armor Max 95% 100% 95%
Gold Firewall Outbound
Protection Award
Kaspersky Max 95% 88% 94%
Comodo Standard 95% 75% 92%
Norton Max 90% 100% 91%
Online Armor Standard 89% 94% 90%
PC Tools Max 88% 69% 86%
Outpost Max 88% 69% 85%
Eset Max 88% 69% 85%
Norton Standard 80% 75% 80%
Dr.Web Max 83% 63% 80%
Jetico Max 82% 56% 79%
Silver Firewall Outbound
Protection Award
Jetico Standard 82% 56% 79%
Outpost Standard 80% 31% 74%
Trend Micro Max 77% 38% 72%
TrustPort Max 77% 31% 71%
Trend Micro Standard 75% 38% 70%
Kaspersky Standard 75% 31% 70%
Dr.Web Standard 76% 25% 70%
G DATA Max 75% 38% 70%
TrustPort Standard 77% 6% 68%
Bronze Firewall Outbound
Protection Award
Avira Max 74% 25% 68%
G DATA Standard 75% 13% 67%
Avast Max 73% 19% 66%
Avast Standard 73% 13% 66%
Eset Standard 73% 13% 66%
Bitdefender Standard 73% 13% 66%
AVG Max 73% 0% 64%
AVG Standard 73% 0% 64%
McAfee Max 73% 0% 64%
McAfee Standard 73% 0% 64%
PC Tools Standard 73% 0% 64%
Microsoft Max 71% 0% 63%
Microsoft Standard 71% 0% 63%
Avira Standard 71% 0% 63%
F-Secure Max 56% 13% 51% Нет награды
F-Secure Standard 56% 13% 51%
Panda Max 54% 0% 47%
Panda Standard 54% 0% 47%
Kingsoft Max 48% 13% 44%
Kingsoft Standard 48% 13% 44%

Лучшие результаты в тесте показали фаерволы Comodo и Bitdefender, набравшие 100% баллов на максимальных настройках. Эти два продукта получают награду Platinum Firewall Outbound Protection Award .

Очень высокие результаты в тесте (свыше 80%) также показали фаерволы Online Armor, Kaspersky, Comodo, Norton, PC Tools, Outpost, Eset и Dr.Web, которые получают награды Gold Firewall Outbound Protection Award . Важно отметить, что Comodo получил данную награду на стандартных настройках, Online Armor и Norton на стандартных и максимальных настройках, а все остальные – только на максимальных настройках.

Далее по списку расположилась группа из семи фаерволов, чьи результаты попадают в диапазон от 60% до 70%. Это Outpost, Kaspersky и Dr.Web на стандартных настройках; TrustPort и G DATA на максимальных настройках, а также Jetico и Trend Micro одновременно на стандартных и максимальных настройках. Все они получают награду

Достаточно большая группа продуктов, попавших в диапазон от 60% до 70%, получает награду . В ней следует отметить продукты Eset и Bitdefender на стандартных настройках, которые на максимальных настройках смогли отразить существенно большее количество атак.

Ознакомиться с подробными результатами теста и убедиться в правильности итоговых расчетов можно, скачав результаты теста в формате Microsoft Excel .

Шабанов Илья, управляющий партнер сайт:

«Очень обрадовал тот факт, что очень многие производители заметно улучшили проактивную защиту от внутренних атак и самозащиту в своих продуктах. Нам пришлось даже пересмотреть схему награждения, чтобы поднять планку требований. Результат менее 51% баллов теперь стал рассматриваться как полностью провальный.

Приятно удивил, Bitdefender отразившие в параноидальном режиме все 100% атак, Eset и Dr.Web с результатами на максимальных настройках 85% до 80% соответственно, а также новичок наших тестов TrustPort. В «золотую группу» продуктов по результатам этого теста попали фаерволы Comodo, Norton и Online Armor, набравшие более 80% на стандартных и максимальных настройках. Стабильно высокие результаты в тестах, затрагивающих проактивную защиту, продемонстрировали Kaspersky, Outpost, PC Tools.

Однако в случае целого ряда протестированных продуктов непонятна логика, по которой выставляются стандартные настройки. В результате уровень защиты большинства пользователей, привыкших использовать защиту со стандартными настройками, оказывается существенно заниженным. В первую очередь это относится к продуктам Bitdefender, Kaspersky, Eset и PC Tools».

Картавенко Михаил, руководитель тестовой лаборатории сайт:

«Рассматривая данный тест как продолжение прошлого аналогичного теста, можно обозначить несколько основных тенденций и проблем в работе фаерволов.

Во-первых, в среднем большинство продуктов показали лучшие результаты, чем 1.5 года назад, однако сделали они это в основном за счет отражения самых простых атак 1 уровня. Более сложные атаки «по зубам» только ограниченному кругу продуктов.

Во-вторых, даже если сработала защита процессов от завершения (1 уровень атак), у многих продуктов «вылетает» пользовательский интерфейс. Это ставит пользователя в неудобное положение, в котором он не понимает – работает ли защита или уже нет.

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

Таким образом, тест выявил «болевые» точки современных фаерволов, решение которых может улучшить их защиту».