Обход Брандмауэров/IDS

Многие пионеры Интернета представляли его в своем воображении как открутую глобальную сеть с универсальным пространством IP адресов, позволяющую создавать виртуальные соединения между любыми двумя точками. Это позволило бы хостам общаться на равных, обмениваясь информацией между собой. Люди могли бы получить доступ к своим домашним системам с работы, изменяя настройки климат-контроля или открывая двери ранним гостям. Этому видению глобальной соединенности не суждено было сбыться по причинам нехватки адресного пространства и проблемам безопасности. В ранние 1990-е организации стали использовать брадмауэры с целью сокращения возможностей соединения. Огромные сети были отрезаны от Интернета различными программными прокси, серверами преобразования имен и пакетными фильтрами. Неограниченный поток информации сократился до строго регламентированных каналов связи и содержимому передающемуся по ним.

Сетевые барьеры, такие как брандмауэры, могут сделать процесс исследования сети чрезвычайно сложным. Никаких послаблений не намечается, т.к. предотвращение инвентаризации сети часто является ключевой целью введения таких устройств. Тем не менее, Nmap предоставляет множество функций для облегчения понимания структуры таких сложных сетей и для проверки того факта, что сетевые фильтры работают как предполагалось. Поддерживаются даже механизмы обхода плохо организованных вариантов защит. Один из лучших методов проверки вашей системы безопасности - это попытка ее обойти. Поставьте себя на место атакующего и примените описанные ниже методы к вашей сети. Запустите FTP bounce сканирование, idle сканирование, атаку с фрагментацией пакетов или попробуйте пробиться через один из ваших прокси-серверов.

В дополнении к ограничению сетевой активности, компании все больше и больше используют мониторинг траффика с помощью систем обнаружения вторжений (intrusion detection systems - IDS). Все эти системы используют правила, составленные для обнаружения различного рода сканирований с помощью Nmap, т.к. сканирование часто оказывается предвестником атак. Многие из этих систем недавно были преобразованы в системы предотвращения вторжений (intrusion prevention systems - IPS), которые блокирую трафик, расцениваемый как злонамеренный. К сожалению для сетевых администраторов и продавцов IDS, обнаружение вторжений с большой долей вероятности путем анализа паетов данных является сложной задачей. Атакующие с помощью терпения, навыков и с помощью некоторых опций Nmap обычно могут незамеченными обойти системы IDS. Между тем, администраторам приходится иметь дело с большим количеством ложных положительных результатов, когда такие системы ошибаются и блокируют безвредную сетевую активность.

Время от времени некоторые высказывают предположения, что Nmap не следует предоставлять фукнции для обхода IDS. Они аргументируют свою позицию тем, что эти функции могут быть с равным успехом использованы атакующими, так же как они используются администраторами для улучшения систем защиты. Проблема в таких рассуждениях заключается в том, что такие методы будут по-прежнему использоваться атакующими, которые просто найдут другие утилиты или самостоятель добавят такие функции в Nmap. Тем временем администраторам будет намного сложнее выполнять свою работу. Использование только современных FTP серверов намного более мощное средство защиты, чем попытки предотвратить распространение утилит позволяющих реализовать FTP bounce атаки.

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

-f (фрагментировать пакеты); --mtu (используя заданное значение MTU)

При задании опции -f все типы сканирования (включая различные типы пингования) будут использовать маленькие фрагментированные IP пакеты. Идея состоит в том, чтобы разбить TCP заголовок на части и посылать их в различных пакетах для того, чтобы не дать определить пакетным фильтрам и системам обнаружения вторжения, что вы делаете. Будьте осторожны с этой опцией! Некоторые программы имеют проблемы с обработкой таких маленьких пакетов. Один старый сниффер Sniffit аварийно завершал работу после принятия первого фрагмента. Задайте эту опцию один раз, и Nmap будет разбивать пакеты на части по 8 байт или меньше после IP заголовка. Таким образовм, 20-ти байтный TCP заголовок будет разбит на 3 пакета. Два из них будут содержать по 8 байт этого заголовка, а третий - последние 4. Конечно же, каждый фрагмент также имеет IP заголовок. Задайте опцию -f снова, чтобы использовать фрагменты по 16 байт (тем самым сократится число фрагментов). Или вы можете задать свой собственный размер фрагмента с помощью опции --mtu. Не используйте опцию -f вместе с --mtu. Размер должен быть кратным 8. В то время как фрагментированные пакеты не смогут пройти через пакетные фильтры и брандмауэры, которые ставят в очередь все IP фрагменты, например, с помощью опции CONFIG_IP_ALWAYS_DEFRAGв ядре Linux, некоторые сети не могут позволить себе связанное с этим падение производительности и поэтому не используют такую возможность. Другие могут использовать ее, потому что фрагменты в таких сетях могут идти по разным маршрутам. Некоторые системы фрагментируют исходящие пакеты прямо в ядре. Linux с включенным модулем отслеживания соединения iptables тому пример. Произведите сканирование с включенным сниффером Wireshark , чтобы убедиться, что пакеты фрагментируются. Если в вашей ОС возникают проблемы, попробуйте задать опцию --send-eth, чтобы обойти IP слой и отсылать сырые ethernet фрэймы.

-D <фиктивный_хост1>[,<фиктивный_хост2>][,ME][,...] (Маскировка сканирования с помощью фиктивных хостов)

Производится сканирование с использованием фиктивных хостов; в этом случае цель сканирования считает, что заданные вами фиктивные хосты также производят ее сканирование. Хотя IDS цели может сообщить о том, что было произведено 5-10 сканирований портов с каждого IP адреса, система не сможет узнать, с какого из этих IP адресов действительно производилось сканирование, а какие были лишь безвредными ловушками. Хотя этот тип сканирования может быть распознан путем отслеживания маршрута, сбрасыванием ответа или другими активными методами, в большинстве случае он является эффективным способом сокрытия вашего IP адреса.

При задании фиктивных хостов, разделяйте их запятыми; вы также можете указать ME как один из фиктивных хостов для задания позиции в списке вашего реального IP адреса. Если вы задаете ME в шестой позиции или дальше, некоторые обычные системы обнаружения сканирования портов (например, Solar Designer's excellent Scanlogd) вряд ли вообще отобразят ваш IP адрес. Если вы не задаете флаг ME, Nmap поставит его в произвольную позицию. Вы также можете использовать RND для генерации произвольного, незарезервированного IP адреса, или RND:<чило> для генерации определенного <числа> адресов.

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

Фиктивные хосты используются и во время фазы обнаружения хостов (используя ICMP, SYN, ACK и что там еще), и во время сканирования портов. Также они используются во время удаленного определения ОС (-O). Эта техника не работает при сканировании с целью определения версии или с целью обнаружения возможности установления TCP соединения. Во время сканирования задержки принудительно устанавливаются между каждой группой обманных запросов. Т.к. ловушки посылаются одной группой сразу, то это может временно нарушить работу системы контроля ограничений нагрузок.

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

-S <IP_адрес> (Изменить исходный адрес)

В некоторых обстоятельствах Nmap может не определить ваш адрес (в этом случае Nmap сообщит вам об этом). В этом случае используйте опцию -S, передав ей в качестве параметра IP адрес, чтобы указать интерфейс, который вы хотите использовать для отправки пакетов.

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

-e <интерфейс> (Использовать конкретный интерфейс)

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

--source-port <номер_порта>; -g <номер_порта> (Задать свой номер порта)

Одной из удивительно часто встречаюшиься ошибок при конфигурировании системы безопасности является тенденция доверять траффику основываясь только на номере исходного порта. Легко понять как это происходит. Администратор устанавливает новенький брандмауэр, и его заваливают жалобы от неблагодарных пользователей, чьи приложения перестали работать. В частности, может не работать DNS, т.к. UDP DNS ответы от внешних серверов больше не могут войти в сеть. Еще одним распространенным примером ялвяется FTP. При активной FTP передаче, удаленный сервер пытается установить соединение с клиентом, чтобы послать запрашиваемый файл.

Существуют безопасные методы решения этих проблем, часто в виде прокси на уровне приложений или надстроек к брандмауэрам. Но, к сожалению, существуют и более легкие, небезопасные методы. Принимая во внимание то, что DNS ответы приходят с порта 53 а FTP с порта 20, многие администраторы поддаются искушению и просто разрешают весь входящий трафик с этих портов. Они также часто полагают, что атакующие не заметят и не будут использовать такие дыры в брандмауэрах. В других случаях, администраторы считают, что это всего лишь временные меры, до тех пор пока они не придумают более безопасные способы решения проблем. Потом они забывают об этом.

Перегруженные работой сетевые администраторы не единственные, кто попадается в такую ловушку. Многочисленные продукты просто кишат такими небезопасными правилами. Даже Microsoft заслуживает порицания. Фильтры IPsec, которые были установлены в Windows 2000 и Windows XP содержат внутренне правило, разрешающее весь TCP или UDP траффик с порта 88 (Kerberos). Еще один известный случай: версии брандмауэра Zone Alarm до 2.1.25 разрешали все входящие UDP пакеты с порта 53 (DNS) или 67 (DHCP).

Nmap предоставляет опции -g и --source-port (они эквиваленты) для того, чтобы воспользоваться такими ошибками. Просто задайте номер порта, и Nmap будет использовать его для отправки пакетов. Nmap должна использовать различные номера портов, чтобы точно определить ОС; также DNS запросы игнорируют опцию --source-port, т.к. для их осуществления Nmap использует системные библиотеки. Большинство TCP вариантов сканирований, включая SYN сканирование, полностью поддерживают эту опцию, как и UDP сканирование.

--data-length <число> (Добавить произвольные данные к посылаемым пакетам)

В обычных условиях Nmap посылает минимальные пакеты, содержащие только заголовок. Так TCP пакеты составляют 40 байтов, а запросы на ICMP эхо ответ всего 28. Эта опция указывет Nmap добавлять заданное число произвольных байтов к посылаемым пакетам. Эта опция не влияет на пакеты, используемые для определения ОС (-O) , поскольку в этом случае необходимо тщательное соответствие запросов, но большинство пакетов, используемых для различных видов пингования и сканирования портов поддерживают ее. Это немного замедляет сканирование, зато делает его более незаметным.

--ip-options <S|R [маршрут]|L [маршрут]|T|U ... >; --ip-options <шестнадцатиричная строка> (Посылать пакет с заданным ip опциями)

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

Наиболее действенным способом задания IP опций является передача их значений в качестве аргументов опции --ip-options. Каждое шестнадцатиричное значение задается с помощью \x, после которого следуют два цифры. Вы можете повторять символы, поставив после них звездочку и указав количество повторений. Например, \x01\x07\x04\x00*36\x01 это шестнадцатиричная строка, содержащая 36 NUL байтов.

Nmap также предоставляет механизм сокращений для задания таких опций. Просто передайте в качестве аргумента букву R, T или U для задания опции записи маршрута, записи временной метки или обеих соответственно. Ослабление или ужесточение отслеживания источника может быть задано с помощью L или S, затем пробела, а затем разделенный пробелами список IP адресов.

Если вы хотите заданные опции в передаваемых и получаемых пакетах, задайте опцию --packet-trace. Для большей информации и примеров использования IP опций с Nmap, смотрите https://seclists.org/nmap-dev/2006/q3/0052.html.

--ttl <значение> (Установить IP поле time-to-live (время жизни)

Устанавливает IPv4 поле time-to-live в посылаемых пакетах в соответствии с заданным значением.

--randomize-hosts (Использовать произвольный порядок целей сканирования)

Указывает Nmap перемешать каждую группу, содержащую до 16384 хостов, перед началом сканирования. Это может сделать сканирование менее заметным для различного рода систем сетевого мониторинга, особенно если вы используете низкие значения таймингов. Если вы хотите перемешивать большие по размеру группы, то увеличьте значение PING_GROUP_SZ в nmap.h и перекомпилируйте программу. Альтернативным решением является генерация списка целевых IP адресов (-sL -n -oN <имя_файла>), обработка его с помощью Perl скрипта и затем передача его Nmap в качестве параметра опции -iL.

--spoof-mac <MAC адрес, префикс или название производителя> (Задать собственный MAC адрес)

Указывает Nmap использовать заданный MAC адрес для всех отсылаемых сырых ethernet фреймов. Эта опция подразумевает использование, --send-eth чтобы быть уверенным, что Nmap действительно использует пакеты уровня ethernet. MAC адрес может быть задан в нескольких форматах. Если это просто число 0, то Nmap выбирает польностью произвольный MAC адрес для сессии. Если задается строка в виде простого набора шестнадцатиричных цифр (можно разделять пары двоеточиями), то Nmap будет использовать эту строку в качестве MAC адреса. Если задано менее 12-ти шестнадцатиричных цифр, то Nmap заполняет остаток из 6 байтов произвольными значениями. Если в качестве аргумента не передается ни 0, ни шестнадцатиричная строка, то Nmap просматривает nmap-mac-prefixes в поисках названия производителя, содержащего данную строку (нечувствительна к регистру). Если найдено совпадение, то Nmap использует OUI производителя (3-байтный префикс), а оставшиеся 3 байта заполняет произвольно. Примеры аргументов опции --spoof-mac: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2 и Cisco. Эта опция оказывает влияние только на сканирования с использованием сырых пакетов, такие как SYN сканирование или определение ОС, а также не ориентированные на соединение функции, такие как определение версии или Nmap Scripting Engine (NSE).

--badsum (Посылать пакеты с фиктивными TCP/UDP контрольными суммами)

Указывает Nmap использовать неправильные TCP или UDP контрольные суммы для пакетов, отправляемых на целевой хост. Т.к. практически все реализации стека IP просто не обрабатывают такие пакеты, то любые ответы скорее всего приходят от брандмауэров или IDS, которые не обременяеют себя проверкой контрольной суммы. Более детальное описание этой техники смотрите на https://nmap.org/p60-12.html