Скрытое сканирование Nmap

adm  •  15 April, 2008

Техника IdleScan
Почти 6 лет назад исследователь в области безопасности Antirez опубликовал новую технику сканирования TCP портов. Idlescan (скрытое сканирование) позволяет полностью просканировать порты компьютера-цели. При чем для этого атакующему не надо посылать ни одного пакета к компьютеру-цели с реального адреса атакующего! При этом системы обнаружения вторжений (IDS) не смогут определить истинного адреса атакующего. Вместо этого источником атаки будет считаться абсолютно "невинный" компьютер.


Для понимания процесса скрытого сканирования вам не надо быть экспертом в области компьютерных технологий. Вам надо учесть следующее:

Большинство сетевых серверов прослушивают TCP порты, например, 80 - веб-сервер, 25 - почтовый. Порт считается открытым, если какой-либо процесс "висит" на нем и "слушает" этот порт, в противном случае порт считается закрытым.
Один из способов определить, открыт порт или нет, это послать "SYN" пакет (запрос на установление соединения) на этот порт. Целевая машина ответит на это пакетом "SYN|ACK" (уведомление о принятом запросе), если порт открыт, или пакетом "RST" (сброс), если порт закрыт.
Компьютер, получивший "ничей" пакет SYN|ACK ответит на него пакетом RST. "Ничьи" RST пакеты игнорируются.
Каждый IP пакет имеет свой "идентификатор фрагмента" IPID. Большинство операционных систем просто увеличивают это значение для каждого следующего пакета, посылаемого в сеть. Таким образом, проверка номеров пакетов может дать информацию, сколько пакетов было послано с предыдущего момента.
Осознав эти особенности становиться возможным сканировать сеть, прикрываясь чужим адресом.
Как видно, "жертва" по разному отвечает хосту-зомби на якобы пришедшие от него пакеты. Если проверяемый порт открыт, "жертва" посылает пакет SYN|ACK хосту-зомби. Хост-зомби не ожидает никаких пакетов от "жертвы" и отвечает RST пакетом (сброс). Отвечая пакетом RST, хост-зомби увеличивает значение номера IPID (номер фрагмента). Настоящий атакующий определяет это в 3-м пункте рисунка. Если порт закрыт, "жертва" посылает хосту-зомби пакет RST, на который хост-зомби не отвечает (зачем отвечать, если вас послали? ;)), при этом IPID хоста-зомби не меняется. Атакующий проверяет на шаге 3 состояние счетчика IPID: если он увеличился на 2 (пакет RST и проверочный пакет) - порт открыт. Если на 1 - порт закрыт.

Преимущества IdleScan
Техника IdleScan предоставляет атакующему массу преимуществ по сравнению с классическими медодами сканирования, такими, как SYN или FIN-сканирование. Вот почему мы настоятельно рекомендуем обратить внимание на главу "Меры по защите от IdleScan". Ниже мы приводим причины, по которым хакеры могут воспользоваться этим методом:

Абсолютная невидимость сканирования. Речь идет не о незаметности сканирования для систем IDS, а о сокрытии атакующим своего реального IP адреса. Существуют некоторые методы, позволяющие атакующему "укрыться" от идентификации своего IP в процессе сканирования. Это метод "ложных хостов" (runmap -D) или полу-открытое сканирование (runmap -sS). Но даже эти методы требуют, чтобы атакующий отправил жертве несколько пакетов со своим реальным IP-адресов. IdleScan лишен этого недостатка: НИ ОДНОГО ПАКЕТА от атакующего не приходит жертве!
Обман файрволлов и пакетных фильтров. Фильтрация пакетов по признаку адреса источника - это широко распространенный метод защиты, используемый для ограничения числа машин, способных подключиться к защищаемому хосту. Например, сервер баз данных компании может разрешать подключения только от www-сервера. Домашний пользователь может разрешить только ssh-канал к своему рабочему месту. Более тяжелые последствия могут возникнуть, например, когда в компании bigwig руководство прикажет сетевым администраторам открыть дыру в файрволле для доступа к ресурсам внутренней сети с домашних IP-адресов (если они не хотят использовать VPN).
Выявление доверительных отношений на базе IP-адресов. Так, например, сканирование упомянутого выше сервера баз данных при помощи зомби-рабочего места может не дать результата. Однако если в качестве зомби выбран веб-сервер, мы получим открытый порт. Испльзуя эту информацию, атакующий может расставлять приоритеты в выборе целей для дальнейшей атаки.
Использование IdleScan в Nmap
Первым делом необходимо найти подходящий хост-"зомби". Хост не должен гнать большой трафик (отсюда и название - сканирование "вхолостую") и должен иметь предсказываемые значения IPID. Принтеры, ОС Windows, старые Linux-хосты, FreeBSD и MacOS обычно превосходно работают. Последние версии Linux, Solaris и OpenBSD имунны как зомби, однако любой хост может использоваться в качестве жертвы. Один из методов определить уязвимость хоста - это запустить Nmap с параметрами IdleScan. Nmap сам проверит хост-"зомби" и сообщит о его пригодности.

Выполнить эту операцию очень просто. Необходимо лишь указать имя "зомби" после опции -sI - и Nmap сделает все остальное. Вот пример:

# nmap -P0 -p- -sI kiosk.adobe.com www.riaa.com

Starting nmap V. 3.10ALPHA3 ( www.insecure.org/nmap/ )
Idlescan using zombie kiosk.adobe.com (192.150.13.111:80); Class: Incremental
Interesting ports on 208.225.90.120:
(The 65522 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
25/tcp open smtp
80/tcp open http
111/tcp open sunrpc
135/tcp open loc-srv
443/tcp open https
1027/tcp open IIS
1030/tcp open iad1
2306/tcp open unknown
5631/tcp open pcanywheredata
7937/tcp open unknown
7938/tcp open unknown
36890/tcp open unknown

Nmap run completed -- 1 IP address (1 host up) scanned in 2594.472 seconds

Из приведенного листинга видно, что RIAA не так уж хорошо защищен (заметьте - открыты порты PC Anywhere, Portmapper и Legato nsrexec). Поскольку судя по всему файрволла они не имеют, не похоже, чтобы они имели и какой-нибудь IDS. Но если бы и имели, они бы увидели зомби "kiosk.adobe.com" в качестве источника сканирования. Опция -P0 указывает Nmap не посылать PING-запроса машине RIAA. Это замедляет процесс сканирования, но зато ни один пакет с реальным IP-адресом атакующего не проходит на атакуемую машину. Сканирование проходило очень долго, поскольку были опрошены все 65535 портов. Попустите опцию -p-, чтобы сканировать только первые 1024 порта и остальные известные. И еще: найдите своего "зомби" - "kiosk" не очень подходит для этой цели, он очень часто пропадает, и, похоже, постоянно контролируется.

Защита от IdleScan
К счастью, существует несколько способов защиты от атак с использованием предсказания значения IPID:

Сетевые администраторы:

Сконфигурируйте Ваши файрволлы и/или граничные маршрутизаторы (те, что граничат с Интернет) на запрет приема входящих пакетов с ложными IP-адресами (от машин НЕ из вашей сети, зарезервированных IP-адресов типа 10.x.x.x, 192.168.х.х, 127.х.х.х и т.д.). Любой хороший файрволл позволяет это сделать. Самонастраиваемый файрволл также хорошо помогает от такого рода атак - посмотрите, есть ли такая опция в Вашем экземпляре.
Попробуйте использовать ОС с пенее предсказуемой IPID, например, OpenBSD, Solaris или Linux. Так вы обезопасите себя от использования в качестве "зомби". Для защиты от атак все равно потребуются дополнительные вложения.
Настройте фильтр исходящих пакетов на запрет выхода пакетов с поддельными IP-адресами. Этим вы предотвратите использование IdleScan (да и не только) Вашими сотрудниками, студентами и т.д.
Поставщики услуг Интернет (Internet Service Providers - ISPs):

Самая основная защита для ISP - это запрет исходящих пакетов с поддельными IP-адресами. Это не только обезопасит Вас от запуска Вашими клиентами IdleScan, но и от использования ими многих других вредоносных программ. Кроме помощи Интернету вцелом, Вы избавите себя и от излишних трат на расследование инциндентов с Вашими клиентами.

Разработчики ОС (OS Vendors):

Один хороший подход к решению проблемы - это использование соединения с условно-постоянными значениями IPID. Solaris сделала это, и несколько ограничила атакующих при сборе информации об остальных соединениях. Linux 2.4 также использует условно-постоянные IPID (см. net/ipv4/inetpeer.c). В добавок ко всему, Linux 2.4 обнуляет IPID в пакетах с флагом DF (Don't Fragment). После этого значение IPID критично лишь при дефрагментации IP-пакета. Другое решение (используется в OpenBSD) - генерация IPID случайным образом. Трудно реализовать правильно - будьте уверены, что последовательность не повторяется и отдельные значения не используются дважды за короткий промежуток времени.

Проблемы IdleScan
А сейчас давайте обсудим проблемы, могущие возникнуть (и возникшие перед нами) при разработке быстрого и точного Idle-сканера. Лишь немногие из вас пробовали сделать сканер сами, поэтому статья будет еще интересна и тем, кто может читать исходный код Nmap и других сканеров. Итак, мы выделим лишь некоторые основные моменты.

Быстродействие. Последовательное сканирование портов (как показано на диаграмме) - крайне медленный процесс для тысяч портов. В Nmap мы решили отсылать параллельно до 100 тестов. Обычно все порты "жертвы" закрыты и IPID "зомби" не увеличивается. Если Nmap обнаружил, что IPID увеличился, он незамедлительно снижает скорость сканирования.

Активные "зомби". IdleScan основан на подсчете числа пакетов, посланных "зомби", предполагая, что эти пакеты - ответы на пакеты, сгенерированные "жертвой". Таким образом, посторонние пакеты, посланные "иммунным" зомби, могут вызвать существенные нарушения в работе алгоритма. Nmap пытается решить эту проблему путем сверки ретрансмиссии пакетов и некоторых других методов для определения ложных результатов. Например, Nmap знает, что алгоритм нарушен в случае, если при проверке 6 портов IPID увеличился на 10 или 20. Nmap пытается настроить временные параметры сканирования и паралеллизм для компенсации времени при использовании активных хостов или при обнаружении "потерянных" пакетов. Обычно, Nmap не работает с очень активными "зомби". Один из методов работы с высоко активным "зомби" - отсылка большого числа (десятков или сотен) тестов на один порт. Эта техника "грубой силы" может скрыть некоторое число "белого шума" трафика. К сожалению, это выливается в значительное увеличение ширины канала и снижение скорости сканирования, кроме того, существует вероятность SYN-флудинга (переполнение буфера и отказа в обслуживании) "жертвы".

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

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

Еще о технике предсказания IPID
В этой статье описано использование техники IdleScan для сканирования портов. Тем не менее, существует множество других вещей, где можно использовать эту технику. Вот лишь некоторые из них:

Анализ трафика. Последовательные значения IPID определяют число пакетов, отправленных хостом за данный период времени. Таким образом, IPID может использоваться для вычисления веб-трафика и т.д.

Определение алиасов хоста. Иногда один хост имеет несколько IP-адресов или сетевых интерфейсов. Вы можете определить, какой IP-адрес соответствует данному хосту путем поиска идентичных значений IPID.

Демультиплексирование балансирующего канального оборудования. Это почти что реверсивная к IdleScan техника. Большие сайты часто используют оборудование балансировки загрузки, так что один адрес соответствует небольшому числу серверов. При помощи IPID Вы можете определить, сколько машин входят в группу балансировки и к какой из них Вы подключены. Например, поле ID в следующем листинге программы hping2 отчетливо показывает, что beta.search.microsoft.com поддерживается двумя машинами под балансировщиком (207.46.197.115):

# hping2 -c 10 -i 1 -p 80 -S beta.search.microsoft.com.
HPING beta.search.microsoft.com. (eth0 207.46.197.115): S set, 40 headers + 0 data bytes
46 bytes from 207.46.197.115: flags=SA seq=0 ttl=56 id=57645 win=16616 rtt=21.2 ms
46 bytes from 207.46.197.115: flags=SA seq=1 ttl=56 id=57650 win=16616 rtt=21.4 ms
46 bytes from 207.46.197.115: flags=RA seq=2 ttl=56 id=18574 win=0 rtt=21.3 ms
46 bytes from 207.46.197.115: flags=RA seq=3 ttl=56 id=18587 win=0 rtt=21.1 ms
46 bytes from 207.46.197.115: flags=RA seq=4 ttl=56 id=18588 win=0 rtt=21.2 ms
46 bytes from 207.46.197.115: flags=SA seq=5 ttl=56 id=57741 win=16616 rtt=21.2 ms
46 bytes from 207.46.197.115: flags=RA seq=6 ttl=56 id=18589 win=0 rtt=21.2 ms
46 bytes from 207.46.197.115: flags=SA seq=7 ttl=56 id=57742 win=16616 rtt=21.7 ms
46 bytes from 207.46.197.115: flags=SA seq=8 ttl=56 id=57743 win=16616 rtt=21.6 ms
46 bytes from 207.46.197.115: flags=SA seq=9 ttl=56 id=57744 win=16616 rtt=21.3 ms

--- beta.search.microsoft.com. hping statistic ---
10 packets tramitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 21.1/21.3/21.7 ms

Определение ОС. Как уже говорилось ранее, операционные системы совершенно по-разному генерируют последовательность IPID. Nmap использует эту информацию для определения, какая из версий ОС работает на сканируемой машине. Детальное описание приведено здесь.

Определение правил файрволла. IPID может оказать существенную помощь в определении набора правил файрволла. Вот простой пример:

Получаем IPID "жертвы", находящейся под защитой файрволла.
Отправляем PING-пакет "от хоста" той же сети на эту же "жертву".
Снова проверяем IPID. Если увеличился на 2 (один для ответа на PING и один для второго теста IPID), наш поддельный PING благополучно прошел. Внешний трафик может пересекаться с внутренним, однако повторное тестирование дает более точный результат.
Эта техника может быть расширена поистине до неограниченных пределов. Заметим, что все эти действия могут выполнены при помощи Hping.

Комментарии

Нет комментариев. Вы можете быть первым!

Оставить комментарий