Преодоление firewall'ов снаружи и изнутри

       

он же firewall) неплохо бы


Прежде чем воевать с брандмауэром ( он же firewall) неплохо бы для начала разобраться, что это такое и зачем оно нужно. Первые локальные сети подключались к Интернет кишками наружу, то есть напрямую. Все узлы получали действительные IP-адреса, видимые отовсюду и если в локалке имелся SQL/WEB/FTP сервер или "расшаренные" ресурсы, к ним мог подключаться кто угодно! Пароли на доступ, как водится, отсутствовали или выбирались довольно предсказуемым образом, что делало атаку тривиальной. Вот тогда-то брандмауэры и появились! Брандмауэр стоит между Интернетом и локальной сетью, внутрь которой он никого не пускает. То есть, подключиться к расшаренным ресурсам или корпоративному серверу снаружи уже не получится. Если же сервер должен быть виден извне локальной сети, он располагается в так называемой демилитаризованной зоне или сокращенно DMZ, причем, доступ из DMZ в локальную сеть обычно закрыт. Даже если хакер поразит DMZ-сервер, он все равно не сможет проникнуть в остальные компьютеры. Еще брандмауэр может ограничить выход в Интернет, например, запретить сотрудникам компании заходить на сервера типа www.porno.com или заблокировать некоторые порты, например, 4662 — стандартный порт Осла.

Рисунок 1 типичная схема подключения брандмауэра
Все брандмауэры делятся на два типа: пакетные фильтры и фильтры уровня приложений (они же proxy). Пакетный фильтр это обычный роутер (он же маршрутизатор), маршрутизирующий или не маршрутизирующий TCP/IP пакеты согласно установленной системе правил. Поэтому, если в локальной сети уже присутствует роутер (а без него никак!), приобретать дополнительный пакетный фильтр не нужно! Всякий маршртузитатор может выполнять функции пакетного фильтра, но далеко не всякий пакетный фильтр может служить маршрутизатором!
Фильтры уровня приложений — это обычные Proxy. На компьютер, "смотрящий" в Интернет, устанавливается Proxy-сервер (например, мой любимый Etlin HTTP-Proxy) и все остальные компьютеры работают уже через него! В отличии от варианта с маршрутизатором, компьютеры, огражденные Proxy-сервером, реальных IP уже не получают и внешний наблюдатель видит лишь один узел — Proxy.
С одной стороны, это усиливает защищенность сети. Теперь не надо ломать голову над конфигурацией пакетного фильтра. Просто установил Proxy и все, но… далеко не все приложения поддерживают работу через Proxy. Вот, например, Осел поддерживает, а Shareza — нет. К тому же "запроксированные" компьютеры не могут принимать входящих подключений. Частично эта проблема снимается трансляторами сетевых адресов (Network Address Translation или сокращенно NAT), ретранслирующих поступающие пакеты на заданный порт такой-то машины, однако, тут не все просто. Вот, например, тот же Осел. Через Proxy он работает в ущербленном режиме и многие сервера его вообще не пускают, или пускают, но с низким ID. Если же поставить NAT и ретранслировать пакеты через Proxy, то все будет работать, но… только на одном узе. Одновременный запуск Осла на двух или более машинах окажется невозможен, ведь извне сети все локальные машины имеют один и тот же IP адрес!
Чем отличается брандмауэр типа "фильтр уровня приложений" от обычного Proxy? В общем случае — ничем, правда, если Proxy тупо пересылает запросы, не вдаваясь ни в какие подробности, брандмауэр может выполнять некоторые дополнительные проверки, например, блокировать попытки соединения на определенные IP-адреса. Часто приходится слышать, что фильтры уровня приложений "следят" за соответствием формы запросов определенному протоколу. На самом деле, это не совсем так. Фильтры уровня приложений не "следят" за протоколом, они работают на нем! В частности, чтобы "пробиться" через HTTP-Proxy, необходимо составить соответствующий HTTP-запрос, иначе сервер просто не поймет чего мы от него хотим. Важно понять: брандмауэр анализирует только форму, но не содержимое. Допустим, нам необходимо скрытно передать награбленную информацию. Мы укладываем ее в HTTP-запрос, маскирующийся под URL или графический файл и… брандмауэр пропустит его как ни в чем не бывало!
С некоторых пор, в брандмауэры начали встраиваться антивирусы и системы обнаружения вторжений (Intruders Detection System – или сокращенно IDS).


Ну с антивирусами все более или менее понятно. Сигнатуры там и все такое. А IDS – это что? Грубо говоря, это такая штука, которая не просто тупо блокирует трафик, но еще и распознает потенциально опасные действия. Например, если кто-то начинает сканировать порты или ломаться на печально известный 135 порт, содержащий уязвимость, IDS поднимает тревогу: караул! нас атакуют! Собрав как можно больше сведений об атакующем, она мылит администратора или сбрасывает сообщение на пейджер.
Теперь перейдем к домашнему компьютеру или даже небольшой локальной сети. Нужен ли им брандмауэр или нет? А если нужен, то какие порты закрывать? Вопрос, конечно, наболевший, но сформулирован он неправильно. На типичном домашнем компьютере просто не содержится никаких серверных служб, поэтому закрывать ничего не нужно! Исключение составляет 135 порт, принудительно открываемый Windows NT/2000/XP и удерживающий его для своих нужд. Несколько лет назад в нем была обнаружена уязвимость, через которую ринусь черви, хакеры и прочая нечисть. Проблема решается либо установкой брандмауэра, блокирующего 135 порт, либо пакетом обновления, уже давно выпущенном Microsoft (достаточно нажать "Windows Update").
Локальный брандмауэр — очень глючная вещь, зачастую приводящая к синим экранам, блокирующая работу многих честных приложений, увеличивающая нагрузку на процессор и "съедающая" часть пропускной способности канала. Зачем же тогда он нужен?
Вот, например, у нас имеется локальная сеть с расшаренными папками и принтером. Чтобы не назначать на все это хозяйство труднозапоминаемые пароли, можно просто установить брандмауэр и запретить подключаться к ним извне сети. Или вот, например, мы хотим контролировать активность различных приложений, не позволяя кому попало лезть в Интернет. Быть может, программа серийный номер передает, чтобы проверить не был ли он "спионерен" или вирус использует наш компьютер для рассылки спама по всему периметру мясокомбината. Стандартный пакетный фильтр, установленный на марштутизаторе, с этой задачей справится уже не в состоянии, поскольку он оперирует только портами и адресами, но не имеет никаких представлений том, какое именно приложение выполнило запрос.


Вот для этого и нужны локальные брандмауэры! Их главная и практически единственная задача — никого не выпускать в Интернет без предварительного разрешения пользователя. Возможность блокировки входящих соединений также предусмотрена, но, как правило, она не используется, поскольку, на домашнем компьютере не установлено никаких серверов! Троянские программы первого поколения часто открывали один или несколько портов для удаленного управления, но сейчас эта практика отходит в прошлое и чаще всего серверная часть устанавливается у хакера, а вирус сам ломиться к нему по HTTP.
Выполняют ли брандмауэры свою задачу? Как сказать… С одной стороны, часть атак они все-таки отражают (кстати говоря, сканирование портов атакой еще не является), тем не менее, их очень легко обойти — как снаружи, так и изнутри. Покажем как это осуществить на практике, но прежде снимем с брандмауэра крышку и подергаем за разноцветные проводки.

Рисунок 2 брандмауэр в огненных тонах

Содержание раздела