Используем NMAP для обхода сетевых средств защиты.

Используем NMAP для обхода сетевых средств защиты.

Social Engineering

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

В качестве одного из инструментов сбора данных будет использоваться известнейший сканер Nmap. Но вот беда, современные IDS\IPS, Firewall, NGFW и им подобные средства будут этому препятствовать. В одной из предыдущих статей мы уже писали о фичах доступных в Nmap, но тогда речь шла о vulnerability assets.

А вот в сегодняшней статье мы поговорим о том как грамотно использовать фичи и специфические особенности Nmap для обхода IDS\IPS, Firewall средств защиты корпоративного периметра.

Сетевые средства защиты против Nmap.

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

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

Описание общих опций сканирования (теория).

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

При задании опции -f все типы сканирования (включая различные типы пингования) будут использовать маленькие фрагментированные IP пакеты. Идея состоит в том, чтобы разбить TCP заголовок на части и посылать их в различных пакетах для того, чтобы не дать определить пакетным фильтрам и системам обнаружения вторжения, что вы делаете. Будьте осторожны с этой опцией! Некоторые программы имеют проблемы с обработкой таких маленьких пакетов. Один старый сниффер Sniffit аварийно завершал работу после принятия первого фрагмента. 

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

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

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

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

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

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

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

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

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

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

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

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

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

Эта опция указывает Nmap использовать заданный MAC адрес для всех отсылаемых сырых ethernet фреймов. Эта опция подразумевает использование, --send-eth чтобы быть уверенным, что Nmap действительно использует пакеты уровня ethernet. MAC адрес может быть задан в нескольких форматах. Если это просто число 0, то Nmap выбирает польностью произвольный MAC адрес для сессии.

Опции Nmap для противодействия сетевым средствам защиты.

1.Форсируем многопоточное сканирование

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

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

$ sudo nmap -T3 192.168.0.1

В данном случае мы выбрали шаблон номер 3. Это дефолтовое значение, своеобразный компромисс между скоростью и точностью сканирования в медленных сетях. Однако в современных условиях, когда минимальная скорость проводного доступа в сеть уже перешагнула за 30 Мбит/с, лучшим выбором будет -T4 или даже -T5. Последний стоит применять только в стабильных сетях без провалов скорости.

Более низкие значения предназначены для обхода систем обнаружения вторжений. Например, -T0 отключает многопоточное сканирование и устанавливает задержку между пробами портов в пять минут; потратив весь день (ночь) на сканирование, ты можешь надеяться, что сама попытка сканирования будет не замечена (тем более что Nmap перебирает порты в случайном порядке). Так шаблон -T1 — более быстрый режим с задержкой в 15 с, -T2 — 0,4 с, -T3 — 10 мс, -T4 — 5 мс.

2.Скрываем следы сетевой активности

Увеличение задержки между пробами портов — не единственный способ скрыть, что машина сканируется. Еще один интересный метод — одновременно запустить несколько потоков сканирования, подменяя обратный IP-адрес во всех случаях, кроме одного. Смысл здесь в том, чтобы запутать IDS и администратора машины. В логах IDS окажется сразу несколько попыток сканирования с разных адресов, среди которых будет только один настоящий.

Использовать такой метод довольно просто:

$ sudo nmap -D адрес1,адрес2,адрес3 192.168.0.1

Ты можешь указать сколько угодно фиктивных адресов или позволить Nmap сгенерировать рандомные адреса за тебя (в данном случае десять адресов):

$ sudo nmap -D RND:10 192.168.0.1

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

Более сложный способ — организовать так называемое Idle-сканирование. Это очень интересная техника, которая базируется на трех простых фактах:

При выполнении SYN-сканирования удаленная сторона посылает пакет SYN/ACK в случае, если порт открыт, и пакет RST, если нет.
Машина, получившая незапрошенный пакет SYN/ACK, должна отвечать пакетом RST, а при получении незапрошенного RST — игнорировать его.
Каждый IP-пакет, отправленный машиной, имеет IPID, а многие ОС при отправке пакета просто увеличивают IPID.

Сама техника заключается в том, чтобы найти неактивную сетевую машину, которая просто ничего не делает (Idle), но при этом находится в рабочем состоянии и способна отвечать на сетевые запросы. Более того, машина должна работать на древней ОС, которая увеличивает IPID пакетов вместо рандомизации, как современные ОС. Сделать это можно с помощью все тех же флагов -O -v Nmap (строка IP ID Sequence Generation в выводе) либо с помощью Metasploit Framework (это удобнее и быстрее):

> use auxiliary/scanner/ip/ipidseq
> set RHOSTS 192.168.0.1-192.168.0.255
> run

Далее ты запускаешь сканирование портов:

$ sudo nmap -sI IP-Idle-машины 192.168.0.1

На каждую пробу порта Nmap сначала будет посылать запрос Idle-машине, записывать IPID пакета, затем посылать SYN-пакет жертве, подменяя обратный адрес на IP Idle-машины, затем снова посылать запрос Idle-машине и сверять IPID с ранее сохраненным. Если IPID увеличился со времени прошлой проверки, значит, машина посылала пакеты, а, как мы знаем из второго пункта выше, это означает, что она ответила пакетом RST. Это, в свою очередь, говорит, что проверяемый порт жертвы открыт. Если IPID не увеличился, значит, порт закрыт.

3.Уходим от IDS\IPS и пролазим через Firewall

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

Начнем с того, что даже без дополнительных опций Nmap уже способен хоть и не обойти, но обнаружить брандмауэр. Происходит так потому, что при SYN-сканировании состояние открыт/закрыт определяется путем анализа ответа машины: SYN/ACK — открыт, FIN — закрыт. Однако брандмауэры, чтобы минимизировать процессорные ресурсы, зачастую просто дропают пакеты, адресуемые фильтруемым портам (даже при настройке iptables в Linux стандартная практика — это дропнуть пакет с помощью -j DROP). Nmap отслеживает, при пробе каких портов не было получено ответа, и помечает эти порты filtered.

Еще одна техника обнаружения брандмауэра заключается в том, чтобы заставить Nmap генерировать «невероятные пакеты», такие как пакеты без единого флага (-sN), FIN-пакеты (-sF) и Xmas-пакеты, содержащие флаги FIN, PSH и URG (-sX). RFC описывает все эти ситуации, поэтому любое расхождение с RFC Nmap интерпретирует как наличие брандмауэра.

Многие брандмауэры можно обойти и точно определить, фильтруется порт или нет. Для этого можно использовать ACK-сканирование:

$ sudo nmap -sA 192.168.0.1

Теория здесь следующая: брандмауэр должен отбивать все новые TCP-подключения к порту, но также обязан не препятствовать прохождению пакетов в рамках уже установленных соединений. Простой способ сделать это — отбивать все SYN-пакеты (используется для установки соединения), но не мешать ACK-пакетам (используется для отправки пакетов в рамках уже открытого соединения).

Но есть одна тонкость. Дело в том, что есть так называемые stateful- брандмауэры. Они умеют отслеживать состояние соединения и проверяют такие поля пакетов, как IP-адрес и номер последовательности TCP, чтобы отслеживать, какие пакеты действительно пришли в рамках открытого ранее соединения, а какие были отправлены Nmap в рамках ACK-сканирования (iptables в Linux может работать в обоих режимах, но по умолчанию он не stateful, это более производительный вариант).

Выяснить, какой тип брандмауэра используется, можно, выполнив SYN-сканирование и сразу за ним — ACK-сканирование:

$ sudo nmap -sS 192.168.0.1
$ sudo nmap -sA 192.168.0.1

Если во втором случае порты, отмеченные во время SYN-сканирования как filtered, стали unfiltered, значит, перед тобой не stateful-брандмауэр.

Кроме того, можно попробовать обойти брандмауэр с помощью изменения номера исходящего порта:

$ sudo nmap --source-port 53 192.168.0.1

Это эксплуатация старой как мир ошибки настройки брандмауэра, которая заключается в том, что админ открывает доступ всему входящему трафику (включая протокол TCP) с порта 53, чтобы позволить приложениям беспрепятственно выполнять DNS-запросы. Сегодня такое встречается редко, но, как показывает практика, некомпетентность со временем не исчезает.

Кроме всего прочего, в Nmap есть средства для скрытия факта сканирования от глаз брандмауэров и IDS:

$ sudo nmap -f 192.168.0.1

В этом случае Nmap будет разбивать пакеты на крохотные фрагменты размером 8 байт. Делает он это в надежде на то, что брандмауэр или IDS не сможет собрать пакет из фрагментов и проанализировать его заголовок (по причине плохой реализации или в угоду производительности) и просто пропустит пакет или отбросит.

$ sudo nmap --mtu 16 192.168.0.1

Та же история, только с возможностью контролировать размер пакета (в данном случае 16). Можно использовать против брандмауэров и IDS, которые умеют ловить факты сканирования с помощью Nmap, анализируя размер фрагмента.

$ sudo nmap --data-length 25 192.168.0.1

Добавляет в конец пакета указанное количество рандомных байтов. Цель та же, что и в предыдущем случае: обмануть IDS, которая может быть способна обнаружить сканирование, анализируя размер пакета (Nmap всегда посылает пакеты длиной 40 байт при использовании протокола TCP).

Некоторые фичи и баги для преодоления IDS\IPS.

1.Firewall-bypass NSE Script (скрипт байпассинга)

А вот и скрпит от коллег с Vulners, который использует некоторые специфические особенности стека TCP\IP для преодоления фильтрации на фаерволах.

Вот так описывает функционал данного скрипта сам разработчик:

The script works by spoofing a packet from the target server asking for opening a related connection to a target port which will be fulfilled by the firewall through the adequate protocol helper port. The attacking machine should be on the same network segment as the firewall for this to work. The script supports ftp helper on both IPv4 and IPv6. Real path filter is used to prevent such attacks. Based on work done by Eric Leblond.

Опции использования.

nmap --script firewall-bypass <target> nmap --script firewall-bypass --script-args firewall-bypass.helper="ftp", firewall-bypass.targetport=22 <target>

Вывод после работы скрипта.

Host script results: | firewall-bypass: |_ Firewall vulnerable to bypass through ftp helper. (IPv4)

Сам скрипт и его подробное описание доступен на официальной страничке Vulners.

2.Скрытное сканирование портов через системы с уязвимой генерацией IP ID

Немного теории:

IP ID (dumb host) сканирование - относительно новая и очень мощная технология, которая позволяет:Сканировать системы, доступ к которым закрыт для атакующего. 
Не использовать при сканировании свой адрес, оставаясь неизвестным для жертвы. 
Частично исследовать правила файрволов.

Исследование правил файрвола и обход файрвола при сканировании. Метод оказывает некоторую помощь в исследовании настроек файрволов. Фактически, проверка каждого порта на стороне victim выглядит как попытка установления соединения от хоста dumb, и результаты сканирования показывают картину victim с точки зрения dumb. Если dumb использует требуемую здесь генерацию IP ID, есть возможность проверить, доступен ли какой-либо порт на victim для dumb.

Для сканирования машин за файрволом требуется только чтобы у атакующего была возможность послать пакет на victim c saddr=dumb. Часто это не проблема, так как тяжело определить кто на самом деле отправил пакет, но если атакующий и dumb находятся на разных интерфейсах роутера/файрвола жертвы, то правильная настройка файрвола может быть серьезным препятствием для такого сканирования.

Сканирование машин с приватными адресами. Elie Bursztein aka lupin опубликовал advisory, где указал на применимость этого сканирования для случая когда dumb - гейтвей в приватную сеть, а victim - машина, находящаяся во внутренней сети за dumb.

Сканирование выполняется тем же путем. Но следует учесть, что возможно это только в случае (см. выше) когда атакующий может послать спуфленый пакет на victim. А это возможно только когда ВСЕ роутеры на пути от атакующего до жертвы пропустят такой пакет, и более того, будут маршрутизировать его в направлении, указанном атакующим. На практике это возможно только в случае когда dumb не имеет элементарной защиты от spoof'инга, а взломщик атакует с машины непосредственно общающейся с dumb (e.g. с роутера провайдера). Но в этом случае, как правило, у атакующего есть и обычная возможность выполнить сканирование victim, единственное ограничение, которое в этом случае снимается - нет необходимости в получении атакующим трафика с victim. Так же следует помнить, что поскольку в качестве dumb выступает машина из той же сети что и victim, для расследования инцидента могут быть использованы логи траффика на ней - в них будет присутствовать ip атакующего.

Скрипт с опциями (с русскими комментариями) в офф репозитории

Social Engineering - Канал посвященный психологии, социальной инженерии, профайлингу, НЛП, Хакингу, Анонимности и безопасности в сети интернет, Даркнету и все что с ним связано. Добро пожаловать ;-)

S.E.Book - Литература социального инженера.

@Social_Engineering_bot - Бот обратной связи.

  1. Как научится распознавать эмоции ?
  2. Атака на сетевое оборудование Cisco арсеналом из Kali Linux.
  3. Android: Huawei без Google Play, динамические обновления и советы Сноудена.
  4. DDoS: Теория. Варианты защиты.
  5. DDoS: Теория. Инструменты. Атаки.
  6. Обзор основных инструментов пентестера. Пост-эксплуатация в Linux.


Report Page