Русская Википедия:Idle scan
Idle scan — это сверхскрытный метод сканирования TCP-порта, при применении которого пакеты сканирования отражаются от внешнего хоста. За счёт этой особенности метод используется злоумышленниками для незаметного определения открытых портов целевого компьютера[1].
Компьютер злоумышленника выдаёт себя за другой компьютер («зомби») и посылает запрос на установление соединения с портом целевого компьютера. Цель отвечает компьютеру-зомби, открыт ли её порт, а злоумышленник косвенно получает эту информацию. Между атакующим компьютером и целью нет взаимодействия: атакующий взаимодействует только с компьютером-зомби. Такое сканирование можно выполнить с помощью общих программных сетевых утилит, таких как nmap и hping[2].
Основы компьютерных сетей
В этом разделе рассматриваются некоторые особенности протокола TCP/IP, необходимые для понимания метода.
Для каждого отправляемого IP-пакета в специальном поле Identification (IP ID) устанавливается его номер. При переполнении этого поля значение меняется на ноль и счёт начинается заново. Сделав два замера номеров сетевого пакета можно узнать сетевую активность наблюдаемого компьютера.[3]
Спецификация IPv4 не задаёт порядок присвоения значений IP ID, указывая лишь, что каждому пакету следует давать уникальное для пары отправитель-получатель и используемого протокола значение IP ID. Уникальность должна обеспечиваться в течение интервала времени, которое пакет может находиться в сети.[3] Это означает, что присвоение значений IP ID может выполняться различными путями, которые можно разделить на три класса [4]:
- Sequential — равномерное увеличение
- Sequential jump — нарастание
- Random — случайные значения
Установление соединения между двумя хостами происходит следующим образом. Хост Х, желающий соединиться с хостом Y, посылает пакет SYN на адрес Y (указывая IP-адрес и порт назначения и IP-адрес источника, т.е. свой). Если запрашиваемый порт Y открыт, то Y посылает пакет SYN|ACK по адресу, который был указан как адрес источника в первом пакете SYN. Далее X тоже отправляет SYN|ACK на Y в качестве подтверждения. Если порт закрыт, то Y отправляет SYN|RST на Х или ничего не отправляет.[5]
Алгоритм метода
Idle scan состоит из трёх шагов, которые повторяются для каждого интересующего порта[2]:
- Узнать IP ID зомби и записать его.
- Подготовить пакет SYN от зомби и отправить его на нужный порт цели. В зависимости от состояния порта реакция цели приведёт к увеличению IP ID зомби.
- Снова узнать IP ID зомби. Состояние целевого порта определяется путём сравнения этого нового IP ID с тем, что был записан на первом шаге.
После этого процесса IP ID зомби должен был увеличиться на один или два. Увеличение на один указывает на то, что зомби не отправил никаких пакетов, кроме своего ответа на пакет злоумышленника. Это означает, что порт закрыт (т.е. целевой хост отправил зомби либо пакет RST, который был проигнорирован, либо вообще ничего). Увеличение на два означает, что порт открыт (цель предположительно отправила зомби пакет SYN|ACK в ответ на поддельный SYN). Увеличение, превышающее два, обычно означает плохой зомби-хост. Он или имеет непредсказуемый IP ID, или в этот момент соединяется с другими хостами.[2]
Выбор зомби-хоста
Чтобы начать сканирование необходимо узнать, какие хосты находятся в нужной подсети. Сделать это можно утилитой nmap[6]. Возможный результат вывода программы:
nmap -v -O -sS 192.168.43.1/30
Starting Nmap 6.40 ( http://nmap.org ) at 2017-12-07 16:10 MSK
Initiating ARP Ping Scan at 16:10
Scanning 4 hosts [1 port/host]
Completed ARP Ping Scan at 16:10, 0.31s elapsed (4 total hosts)
Initiating Parallel DNS resolution of 4 hosts. at 16:10
Completed Parallel DNS resolution of 4 hosts. at 16:10, 0.01s elapsed
Nmap scan report for 192.168.43.0 [host down]
Nmap scan report for 192.168.43.2 [host down]
Nmap scan report for 192.168.43.3 [host down]
Initiating SYN Stealth Scan at 16:10
Scanning 192.168.43.1 [1000 ports]
Discovered open port 53/tcp on 192.168.43.1
Completed SYN Stealth Scan at 16:10, 4.61s elapsed (1000 total ports)
Initiating OS detection (try #1) against 192.168.43.1
Эта команда выводит список всех хостов в данном диапазоне IP. Опция -0
включает функцию определения операционной системы, опция -v
активирует вербальный режим, опция -sS
включает скрытное SYN-сканирование, 192.168.1.0/24 - сканируемая подсеть[7].
В данном примере проверялось четыре хоста, три из которых были неактивны.
Далее из списка активных хостов нужно выделить подходящие зомби-хосты. Чтобы удачно их выбрать нужно, чтобы выполнялись два условия[2]:
- При обмене пакетами с ним его IP ID должен инкрементироваться на единицу
- Хост должен быть бездействующим, чтобы посторонний трафик не исказил его IP ID
Проверить выполнение условий для конкретного хоста можно при помощи утилиты hping[8]. Результат:
hping3 -r 192.168.43.1
HPING 192.168.43.1 (wlan0 192.168.43.1): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=192.168.43.1 ttl=64 DF id=64118 sport=0 flags=RA seq=0 win=0 rtt=7.8 ms
len=40 ip=192.168.43.1 ttl=64 DF id=+33 sport=0 flags=RA seq=1 win=0 rtt=3.7 ms
len=40 ip=192.168.43.1 ttl=64 DF id=+48 sport=0 flags=RA seq=2 win=0 rtt=7.6 ms
соответствует невыполению указанных условий. В этом случае нужно выбрать другой хост.[2]
Если результат следующий:
hping3 -r 192.168.43.1
HPING 192.168.43.1 (wlan0 192.168.43.1): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=192.168.43.1 ttl=64 DF id=64118 sport=0 flags=RA seq=0 win=0 rtt=7.8 ms
len=40 ip=192.168.43.1 ttl=64 DF id=+1 sport=0 flags=RA seq=1 win=0 rtt=3.7 ms
len=40 ip=192.168.43.1 ttl=64 DF id=+1 sport=0 flags=RA seq=2 win=0 rtt=7.6 ms
то хост инкрементирует значение IP ID методом Sequential, и ни с кем не взаимодействует, т.е. удовлетворяет обоим условиям и подходит для применения idle scan[2].
Примеры использования
После нахождения компьютера-зомби и нахождения его IP ID, можно проводить сканирование. Технология idle scan является встроенной в следующие утилиты Linux:
NMAP
В nmap технология idle scan встроена, воспользоваться ей можно набрав команду[6]:
$ nmap -P0 -p- -sI 192.168.43.1 192.168.43.5
Первый указанный адрес будет адресом компьютера-зомби, второй, соответственно, адресом цели. Опции -P0
означает пингование с использованием IP-протокола, -p
- сканирование только определённых портов, -sI
означает использование техники idle scan.[6]
HPING
Чтобы послать от имени зомби пакет на цель можно использовать hping3. Для подмены адреса отправителя можно написать[8]:
$ hping3 -c 1 -S -a 192.168.43.1 192.168.43.5 -p 80
Источником здесь является первый адрес, целью - второй. Опция -с 1
означает посылку одного пакета, -p 80
- порт, на который посылается пакет.[8]
Также можно использовать hping2:
$ hping2 —spoof 172.16.0.105 -S 172.16.0.100 -p 22 -c 1
После того как компьютер послал от имени зомби пакеты на цель, нужно проверить его IP ID той же командой hping3 <адрес зомби>
. Если разница в значениях IP ID равна 2, то порт открыт, если 1, то закрыт. Если получено другое значение, то в это время зомби-хост с кем-то взаимодействовал по сети.
Зная прирост IP ID и как послать пакеты с подставного адреса, можно легко проверить закрыт или открыт порт[1].
Цели применения
Первая и самая основная - исследовать на открытость порты интересующей машины, оставшись при этом незамеченным[1].
Другой целью является возможность скомпрометировать компьютер-зомби в глазах целевого компьютера, при наличии соответствующей политики безопасности на целевой машине. Например, если на целевом компьютере есть политика игнорировать пакеты с компьютера, с которого было слишком много пакетов SYN на разные порты за определённое время (это поведение считается подозрительным, т.к. именно таким способом делается примитивное сканирование портов)[1].
В качестве ещё одного применения данной техники можно назвать определение доверительных отношений между двумя компьютерами. Ведь на самом деле idle scan определяет, открыт порт или нет для компьютера-зомби, а не для сканирующего компьютера[1].
Предсказуемость IP ID также применяется для определения операционной системы компьютера, т.к. разные операционные системы используют разные алгоритмы выдачи[9].
Защита
Защититься от этого и других скрытых сканирований можно с помощью современных сетевых систем обнаружения вторжений (IPS, IDS, NIDS). Например, с помощью программ с открытых исходным кодом таких как Snort, Bro и т.д. Так же существует ряд мер, которые можно предпринять для защиты от этого метода со стороны разных организаций[1]:
- Сетевые администраторы
- Настройка брандмауэра, запрещающая входящие пакеты с фиктивными исходными адресами. Большинство брандмауэров предоставляет эту функцию.
- Внедрение фильтрации исходящих сообщений, предотвращающей подделку пакетов из сети. Это не позволит пользователям реализовывать атаки такого типа.
- Провайдеры интернет-услуг
- Фильтрация исходящих сообщений, предотвращающая подделку пакетов из сетей. Также Фильтрация исходящих сообщений поможет от атак IP-спуфинга.
- Разработчики ОС
- Рандомизации последовательности IPID. Это реализуется, например, в OpenBSD. Это трудно осуществить, т.к. нужно следить, что последовательность не повторяется и что отдельные цифры не будут использоваться дважды в течение короткого периода времени.
См. также
Примечания
Литература
Ссылки
- Insecure.org/nmap/idlescan Шаблон:Wayback - Подробное описание метода
- Idle Port Scanning and Non-interference Analysis of Network Protocol Шаблон:Wayback - Улучшение метода
- Nmap.online-domain-tools.com Шаблон:Wayback - Онлайн Nmap-сканер