Хакер №024. Спецвыпуск

Хакер №024. Спецвыпуск


IP-МАСКАРАДИНГ



прячем сеть от чужих глаз

Спецвыпуск Xakep, номер #024, стр. 024-056-3

ВДОГОНКУ

Кроме файрволла существуют еще и другие способы обеспечить доступ из Инета к ресурсам нашей супер-LAN. Эти способы основаны на принципах маскарадинга для внешних соединений. Самый простой способ заключается в запуске так называемого перенаправителя (redirector), который является своеобразным прокси. Он ожидает соединения на заданном порте, а затем открывает соединение на фиксированном "нутровым" хосте и порте и копирует данные между двумя соединениями. Пример такой программы - redir в никсах. С точки зрения глупого нета соединение установлено с нашим файрволлом. А вот с точки зрения не менее глупого внутреннего сервака - соединение установлено от внутреннего интерфейса файрволла к серваку. Короче, обмануты все =). Другой подход (для него нужны *nix с версией ядра выше 2.1, а есть еще у кого-то ниже? :)) состоит в использовании форвардинга портов в ядрышке. Он делает ту же самую работу, что и тулза redir, но другим способом: ядро переписывает проходящие пакеты, заменяя их адрес и порт назначения на адрес и порт внутреннего хоста. Инет думает, что соединение установлено с нашим файрволлом, а "нутровый" сервак думает, что это прямое соединение из нета до него. Опять всех админ надул :).

НАТЯГИВАЕМ

Теперь рассмотрим, как наш брат хацкер всех натягивать будет, ведь обойти маскарадинг тоже можно. Например, вот таким способом. Этот способ нашел бравый хацкер из забугорья H.D. Moore (hdm@secureaustin.com). Из-за того, что в коде, отвечающем за маскарадинг, найдены траблы, хацкер может перезаписать установки маскарадинга UDP, после чего он будет способен организовать туннелирующее (подробно об этом тоже читай в этом номере) UDP-соединение с тачкой, находящейся за файрволлом, осуществляющим маскарадинг. Хакер не может знать, какие порты и адреса используются во внутренней сети, если, конечно, ему сам админ по пьяни не скажет (НЛП, блин), но он может вычислить число текущих соединений, идущих через файрволл и количество машин, находящихся за огненной стеной. Любая сетка, где юзается маскарадинг UDP-траффика, уязвима для такой атаки (а ведь UDP-протокол юзает множество прог). Поскольку UDP - это протокол, в котором отсутствует понятие соединения (как TCP), то единственный путь определить, что маскированное соединение более не используется, - по тайм-ауту или же после получения сообщений ICMP, говорящих, что порт закрыт (пинговать надобно). На тайм-аут по умолчанию полагается 5 минут, это одно и то же значение для форвардинга UDP-пакетов. А это позволит хакеру найти действующий туннель и поюзать его в своих корыстных целях. Протоколы TCP и UDP требуют, чтобы и порт, с которого отправлен пакет, и порт, на который он отправлен, так же как адрес источника и получателя, обязательно присутствовали в пакете. Порт для исходящих соединений обычно выбирается, как первый доступный из диапазона 1024-65535 (подробнее об этом читай в предыдущем Спеце) - а как же выбирает порты файрволл с установленным маскарадингом? Ядро использует для этих целей порты от 61000 до 65906 по умолчанию, позволяя теоретически обслуживать до 4096 TCP и UDP-сессий одновременно. Эти значения могут быть изменены путем редактирования и пересборки кода или же редактированием /proc - файловой системы, через которую можно осуществить доступ к адресному пространству процесса. Итак, теперь, когда соединение, запрошенное внутренним хостом megatron, осуществляется в порт 1050, и его назначение - внешний DNS-сервер dns_server, а в порт 53 маскирующая машина добавляет новое поле таблицы маскарадинга, выглядящее примерно так:

Назад на стр. 024-056-2  Содержание  Вперед на стр. 024-056-4


 

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