Rambler's Top100

Сканирование "вхолостую" - IDLESCAN

Почти четыре года назад исследователь безопасности вычислчтельных систем Антирез (Antirez - не знаю, имя это или псевдоним), опубликовал описание качественно новой техники сканирования TCP-портов. IdleScan (или "сканирование вхолостую" - не нашел более краткого перевода для этого термина), позволяет произсести абсолютно невидимое сканирование портов (да, это действительно так!!!). Атакующий может просканировать цель, НЕ ПОСЫЛАЯ при этом ей (цели) пакетов от своего IP-адреса! Вместо этого используется хитрый метод, позволяющий просканировать жертву через так называемый хост-"зомби". Системы обнаружения атак (IDS - Intrusion Detection Systems) с радостью сообщат, что невинный "зомби" и есть злобный хакер. Кроме абсолютной невидимости, этот тип сканирования позволяет определить политику доверия между машинами на уровне протокола IP.

Мы предполагали, что такая важная проблема вызовет немедленную реакцию со стороны производителей операционных систем, и посыплются различные "патчи", но к сожалению, практически все проигнорировали это сообщение, и вскоре проблема была забыта. Разработчики посчитали, что это всего лишь теоретические доводы, не имеющие и не могущие иметь практическое воплощение в реальном мире. Для того, чтобы опровергнуть их позицию и заставить производителей ОС исправить положение, в сканере Nmap была реализована техника IdleScan. В этой статье детально описана сама техника IdleScan, а также для сетевых администраторов и производителей ОС даны рекомендации по защите от нее.

Заметьте, что сканирование вхолостую - это лишь один из многих рисков, основанных на предсказании чисел последовательности IPID (см. статью). В этой статье приведени некоторые другие методы атак, осуществляемых при помощи этой характеристики.

Техника IdleScan

Несмотря на то, что метод IdleScan более совершенен, чем остальные методы сканирования (см. статью), не нужно быть экспертом по протоколам TCP/IP для того, чтобы понять его суть. Необходимо знать лишь четыре основных факта:

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

Как показано выше, целевой хост по-разному отвечает на запросы "зомби", в зависимости от состояния портов. Если тестируемый порт открыт, "жертва" отсылает "зомби" SYN|ACK. "Зомби" не понимает одиночного SYN|ACK и отсылает "жертве" RST, что приводит к увеличению счетчика IPID на 1. Если "жертва" отсылает "зомби" RST, последний благополучноего игнорирует, и счетчик IPID не увеличивается. Атакующий проверяет на шаге 3 состояние счетчика IPID: если он увеличился на 2 (пакет RST и проверочный пакет) - порт открыт. Если на 1 - порт закрыт. Процесс успешно завершен!

Преимущества IdleScan

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

Использование 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:

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

Поставщики услуг Интернет (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 может оказать существенную помощь в определении набора правил файрволла. Вот простой пример:

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

Эта техника может быть расширена поистине до неограниченных пределов - мы могли бы (и можем) написать большую статью с полным ее описанием. Заметим, что все эти действия могут выполнены при помощи Hping.

Заключение

В заключении мы хотели бы привести некоторые ссылки на ресурсы по данной тематике:

(с) 2003 Fyodor

(c) 2003 Алексей Волков

Insecure.Org - Россия

Rambler's Top100 ???????@Mail.ru