Почему не фаерволят фаерволы

Автор: (c)Крис Касперски ака мыщъх

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

Введение

Фаервол (от английского "firewall" - огненная стена, точнее - огнезащитная стена, разделяющая смежные здания от распространения пожара, ведь в былые времена зачастую выгорали целые города), он же брандмауэр (от немецкого "brandmauer" - brand: пожар, mauer: стена), он же межсетевой экран, если говорить совсем по-русски. Но что же это все-таки такое? А ничего... Удачный маркетинговый трюк - впарить нам многофункциональный "швейцарский" нож, вместо того, чтобы позволить покупать эти программные продукты по отдельности.

Персональные фаерволы берут на себя функции:

С одной стороны мы получаем оптовый пакет "услуг", который в розницу обошелся бы намного дороже (ну, представим себе на минуту, что пиратства в России нет), плюс каждый программный пакет потребовал бы индивидуальной настройки. Но если рассмотреть вопрос под другим углом, развернув принцип на 180 градусов ниже нуля, можно быстро прийти к выводу, что комбинированные устройства хорошими не бывают и швейцарским ножом тот же швейцарский сыр не разрежешь.

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

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

Обзор персональных брандмауэров

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

Фаерволов куча - какой из них выбрать? Или, быть может, ничего выбирать не нужно и выбор уже сделан за нас? В XP SP2 встроена какая-то пародия на персональный брандмауэр, которая делает вид, что работает, и страшно нервничает при всякой попытке ее отключения, популярно объясняя пользователю, что его компьютер находится в ужасной опасности и вот-вот падет жертвой хакерской атаки или другой крупной трагедии.

На сайте http://www.firewallleaktester.com можно найти перечень персональных брандмауэров вместе с результатами тестирования их стойкости к различным видам проникновения. Последнее тестирование состоялось в 2006 году. То есть, больше года назад. Для компьютерной индустрии - это огромный срок, но... ядра персональных брандмауэров не переписываются каждый день, да и методики атак совершенствуются довольно медленно, поэтому представленным результатам вполне можно верить.

Результат тестирования

Рисунок 1. Результат тестирования персональных брандмауэров по данным http://www.firewallleaktester.com.

Первое место занял компактный и к тому же бесплатный фаервол Jetico Personal Firewall, созданный одноименной компанией (http://www.jetico.com/jpfirewall.htm). На втором месте оказался популярный отечественный брандмауэр Outpost Firewall Pro от компании Agnitum, ожидающий 40 убитых енотов за каждый компьютер, на котором он будет установлен. Возможно, Outpost действительно хороший персональный брандмауэр (лично меня как разработчика прельщает возможность создания подключаемых модулей и наличие SDK, но отпугивает откровенно кривая реализация перехвата системных функций), однако отдавать свои кровные не каждый захочет. Windows Firewall вообще провалил тестирование и вместо награды получил жирный красный крест. А чего еще можно ожидать от Microsoft?!

Jetico Personal Firewall

Рисунок 2. Отсюда можно скачать лучший бесплатный брандмауэр - Jetico Personal Firewall.

По другим данным (см. "Personal Firewall Software Reviews 2007", http://personal-firewall-software-review.toptenreviews.com), самым лучшим фаерволом признан ZoneAlarm Pro (золото), Outpost занимает свое "законное" второе место (серебро), а вот SyGate Personal Firewall, которым пользуется мыщъх, не получил даже бронзы, попав на восьмое место.

Какой из этого напрашивается вывод? Качество персонального брандмауэра - весьма относительная величина, слагающаяся из множества критериев, каждому из которых присваивается свой "вес", но... чтобы получить объективную оценку (или претендующую на роль таковой), необходимо поставить всех пользователей раком, навязав им свои понятия, что такое "хорошо" и что такое "плохо". Например, лично мне плевать на удобство интерфейса, гибкую систему формирования отчетов, etc. Достаточно, чтобы брандмауэр вел мониторинг сетевой активности, писал логи и позволял открывать/закрывать доступ к определенным портам с указанных IP-адресов, что умеет практически любой персональный брандмауэр, исключая разве что недоразумение под названием Windows Firewall.

Короче, братва, кончай дрочить над обзорами. Берем любой фаервол и начинаем его настраивать.

Результат тестирования

Рисунок 3. Результат тестирования персональных брандмауэров по данным http://personal-firewall-software-review.toptenreviews.com.

В данной статье в качестве подопытной крысы использован SyGate Personal Firewall 4.2. Это бесплатная версия, остальные уже распространялись как shareware (либо с деньгами и полным функционалом, либо без денег и возможности ведения логов).

Внешний вид брандмауэра

Рисунок 4. Внешний вид брандмауэра SyGate Personal Firewall.

Что может и не может брандмауэр

Ага, вот! Порты закрыть он может!!! Брандмауэрами закрывают порты - это все знают! Но далеко не каждый догадывается, что... у него нет тех портов, которые следовало бы закрыть. Перефразируя кота Матроскина, можно сказать: "чтобы закрыть какой-то порт, его прежде нужно открыть, а чтобы открыть порт, у нас денег нет". В прямом смысле. В смысле - денег. Вот, допустим, у кого-то имеется локальная сеть с SQL-сервером, который должен быть "виден" только изнутри и недоступен снаружи. В таких случаях умные администраторы просто объясняют маршрутизатору, что SQL не вправе получать пакеты, приходящие из внешнего мира, равно как и отправлять их. Аналогичным образом порты SQL-сервера закрываются и на брандмауэре.

Ах! У нас нет SQL-сервера? Какая жалость!!! А что у нас еще есть?! Ну... если хорошо поискать... Вот черт, ничего не находится!!! Ну, это на Linux ничего не находится, а вот коварная Windows открывает ряд портов для своих служебных целей, даже если нам эти цели без надобности (см. рис. 5):

Штатная утилита netstat

Рисунок 5. Штатная утилита netstat, запущенная с ключом "-a", показывает все порты, открытые системой (строка LISTENING).

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

Существовало три пути, чтобы предотвратить вторжение червя. Первое - установить заплатку, которая, если мне не изменяет память, вышла за год или полгода до эпидемии. Второе - отключить саму службу DCOM RPC, благо 99,9% пользователям она нужна, как мыщъху - панталоны. Штатными средствами этого было не сделать, но в сети тут же появились "выключалки" от сторонних разработчиков. Наконец, третий путь: закрыть этот зловредный 135-й порт на брандмауэре, что в свое время и сделал мыщъх, которому было лень качать заплатку (см. рис. 6).

Червь MSBlast ломится на уязвимый 135 порт

Рисунок 6. Червь MSBlast ломится на уязвимый 135 порт, закрытый на брандмауэре.

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

Брандмауэр тут не нужен. То есть, очень даже нужен!!! Например, давайте занесем все баннерообменные сети в "черный список", чтобы с них ничего не загружалось. Туда же добавить адреса всех "счетчиков" (тип "рамблеровского"), чтобы никакая информация от нас не отправлялась (хоть никакого секрета она и не представляет, но все-таки лично мне неприятно быть частью чьей-то статистической базы данных). Только... специально для этой цели существуют "баннерорезалки" с уже готовыми "черными листами", причем постоянно пополняемыми.

Основное назначение персонального брандмауэра - это разделение интра- и интернета, то есть возведение защитной стены между локальной сетью (как правило, домашней) и враждебным интернетом. Допустим, у нас имеются "расшаренные" файлы/папки и принтеры, доступные безо всяких паролей (ведь пароли - это такой геморрой), и чтобы нас не поимели как молодых, брандмауэр позволяет заблокировать всякие попытки обращения к "расшаренным" ресурсам извне, ну или открыть к ним доступ только с определенных адресов (например, из корпоративной сети той организации, где вы работаете). У большинства брандмауэров это делается одним взмахом мыши: просто сбрасываем/устанавливаем галочку напротив пункта "....shared flies/folders/printers".

Насколько надежна такая защита? Может ли хакер "пробить" брандмауэр?! Независимо от конструктивных особенностей реализации брандмауэра непосредственный обмен данными с закрытым портом "извне" невозможен. И хотя имеется ряд "узких" мест (например, при сильной фрагментации TCP-пакета порт назначения не вмещается в TCP-заголовок и некоторые брандмауэры спокойно пропускают такие пакеты), мы можем не заморачиваться и не выседая на измену, чувствовать себя как у Христа за пазухой, ибо вероятность быть атакованным через скаченный варез несравненно выше.

Еще брандмауэр может (и должен) следить за сетевой активностью честных приложений, показывая - кто из них ломиться в сеть, на какой порт и по каким адресам. Например, если мы запускаем Горящего Лиса и он ломится на Home Page, ранее прописанную нами, то это нормально. Если же Лис лезет на fxfeeds.mozilla.org, то это тоже нормально, только очень сильно подозрительно, но в принципе программа подобного уровня вправе обращаться к своему сайту и никакого криминала здесь нет. А вот если игра типа "Тетриса" пытается открыть какой-то порт (например, порт 666), то с вероятностью близкой к единице в ней запрятана закладка и от такой программы можно ожидать всего, чего угодно, так что лучше стереть ее нахрен или ограничиться тем, что на вопрос брандмауэра ответить "нет".

Вообще говоря, пробить брандмауэр "изнутри" очень просто. То есть, зловредная программа имеет в своем арсенале массу способов, как установить канал связи с удаленным узлом и брандмауэр ей не помеха. Тем не менее, основная масса малвари написана пионерами, которые ни хрена не шарят в теме и потому попытки открытия back-door портов (через которые хакеры и рулят захаченными компьютерами) отлавливаются брандмауэрами со свистом навозной пули. Более грамотная малварь внедряется в процессы доверенных приложений (например, в IE, Горящего Лиса, Outlook Express, The Bat, etc), осуществляя обмен данными от их имени. Большинство брандмауэров отлавливают факт внедрения (хотя и не обязаны это делать), однако если малварь уже находится на компьютере, то у нее есть все шансы обломать брандмауэр, каким бы крутым он ни был. Впрочем, учитывая качество нынешней малвари, брандмауэры побеждают чаще.

Приступаем к настройке брандмауэра

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

Начнем с портов. Вернее сказать, вернемся к ним. Ох уж эти порты... развелось их тут. Некоторые руководства предлагают сразу и навсегда закрыть порты, используемые троянскими лошадьми, устанавливающими back-door'ы. Списки таких портов выглядят довольно внушительно. Троянцев сейчас много и все они используют различные порты. Ну, положим, закроем мы их. Что это нам даст?! А ничего! Эти порты и так закрыты по умолчанию. Проникнуть сквозь них малварь не сможет и чтобы установить back-door ей придется либо прикинуться полезным варезом, который установит на компьютер сам пользователь, либо же заюзать какую-нибудь незалатанную дыру. Естественно, после того, как малварь обоснуется на компьютере, она попытается открыть порт, ожидая поступления дальнейших инструкций от хакера. И если этот порт закрыт на брандмауэре, малварь обломается, а брандмауэр выдаст предупреждение. Дескать, вот такая тут зараза...

Интернет буквально кишит подобными статьями, от непроходимой тупости которых мыщъх уже устал. Короче. Внятно, доступно и на пальцах. Мальварь уже давно не использует фиксированные порты, а выбирает их случайным (или псевдослучайным образом). Это раз. А теперь два - при установке любого TCP/IP соединения на самом деле используется не один, а два порта: заранее известный фиксированный порт удаленного узла (например, в случае WWW это порт 80), и локальный порт, автоматически открываемой операционной системой на нашей машине и выбираемый произвольным образом (естественно, из числа свободных). Существует вероятность (причем, весьма значительная), что при установке легального TCP/IP соединения нормальной программой, операционная система назначит "троянский" локальный порт, который закрыт брандмауэром!!! Это означает, что: а) соединение не будет установлено; б) брандмауэр поднимет визг, а пользователь, соответственно, хватаясь за сердце, начнет искать несуществующего трояна, скачивая самые последние версии антивирусов, но так и не найдет его, поскольку... тревога оказалась ложной.

По той же причине нельзя закрыть все неиспользуемые порты, как советуют некоторые авторы, т.к. при этом мы не сможем вообще установить ни одного TCP/IP соединения!!!

Так какие же порты нужно закрывать?! Ответ - если (допустим) у вас домашняя локальная сеть и proxy-сервер на 8080 порте, через который выходят в Интернет остальные домочадцы, то точно таким же образом через него могут выходить в сеть и все остальные обитатели Интернет. Зачем? Ну, мало ли... Даже если proxy не анонимный (то есть, не подходит для атак от чужого имени), то внутрисетевой трафик у большинства провайдеров обычно значительно дешевле или вовсе бесплатен. Вот юные хакеры и рыщут в поисках домашних proxy. Вообще-то, большинство proxy позволяет установить пароль на вход, но... далеко не все программы, работающие через proxy, поддерживают такой режим.

Ок. Другой ход. В настойках proxy должен быть список разрешенных интерфейсов, с которыми он может работать. Обмен пакетами со всеми остальными интерфейсами запрещен. Интерфейс в данном случае - это (в грубом приближении) идентификатор сетевого устройства. Сетевая карта, модем - все они имеют свои интерфейсы. Короче, выбираем интерфейс сетевой карты, подключенной к домашней локальной сети, и запрещаем все остальные. Красота! Ну, да... красота. Местами. А местами - безобразие сплошное. Если DSL-модем имеет Ethernet-порт, воткнутый в свитч (вполне типичная конфигурация домашней локальной сети), то у нас имеется всего один интерфейс как для интернета, так и для локальной сети.

Или вот - мыщъх использует Etlin HTTP Proxy, позволяющий выбрать всего один интерфейс для работы. А мыщъх'у необходимо выбрать два: интерфейс локальной домашней сети и интерфейс виртуальной сети VM Ware, которой тоже нужен доступ в Интернет. Можно, конечно, выбрать другой Proxy сервер, но проще в настройках брандмауэра указать список IP адресов домашней локальной сети (и виртуальной сети), с которых разрешен доступ к порту Proxy-сервера (в данном случае это 8080 порт). Если же у вас нет proxy-сервера, то просто не заморачивайтесь с этим вопросом (примечание: модемы с Ethernet-портами обычно имеют встроенный брандмауэр, позволяющий разграничить доступ к локальной сети - по поводу его настройки курите прилагающиеся к модему мануалы).

Proxy-сервер

Рисунок 7. Proxy-сервер "Etlin HTTP Proxy" позволяет выбрать интерфейс, с которым он будет работать, но только один...

Теперь перейдем к зашаренным ресурсам, про которые мы уже говорили. Брандмауэры в своей массе не блокируют к ним доступ из Интернета по умолчанию, "благодаря" чему атаки следуют ударными темпами и компьютеры ложатся стройными могильными рядами. Лучше вообще не иметь никаких расшаренных ресурсов, используя персональные ftp сервера, которые как раз и предназначены для обмена файлами, но... объяснить среднестатистическому пользователю типа "жена", что такое ftp намного сложнее, чем найти копию Windows без багов. Так что, приходится шарить. Ну, и шарьте себе на здоровье, только в настройках брандмауэра найдите пункт, касающийся доступа шары из интернета и распорядитесь с ним по обстоятельствам.

И последнее (но самое важное). Практически все брандмауэры поддерживают список "доверенных приложений", а при выводе запроса на подтверждение имеют галочку "не показывать это сообщение в дальнейшем". Так вот! Настоятельно рекомендуется сию галочку не трогать!!! Конечно, частые запросы на подтверждения очень занозят, но зато позволяют держать ситуацию под контролем. То же самое относиться и к списку доверенных приложений. Допустим, заносим туда IE, чтобы брандмауэр не задалбливал нас дурацкими вопросами. Теперь запускаем какое-нибудь приложение, которое неожиданно вызывает браузер по умолчанию (в данном случае IE) и передает через него некоторую информацию на удаленный узел, например, серийный номер для подтверждения его (не)валидности. А вот если при каждом запуске IE будет выпрыгивать запрос от брандмауэра, этот фокус уже не пройдет!!!

Галочка, предлагающая не выводить это сообщение в дальнейшем

Рисунок 8. Галочка, предлагающая не выводить это сообщение в дальнейшем (чтобы не надоедать), к услугам которой лучше не прибегать.

Попутно запретите своему компьютеру посылать эхо ответы (опция ICMP ECHO в брандмауэре), чтобы неприятели не запинговали вас до смерти, за короткое время сгенерировав до фига мегабайт трафика, не только затормозив работу компьютера, но еще и посадив на бабки, ведь трафик на большинстве тарифов денег стоит!

Заключение

Брандмауэр (даже персональный) - это все-таки не IE и даже не Горящий Лис, а программный пакет совсем другого порядка, требующий знания и понимания протоколов, на которых держится Интернет. В противном случае вряд ли можно ожидать осмысленного ответа на вопрос, заданный пользователю брандмауэром. Человеческий фактор - самое слабое звено и никакими техническими ухищрениями эту проблему не исправишь. Банальность, конечно, но с каждым годом она все обостряется и обостряется.