Сканирование TCP SYN
Очевидный метод, основанный на принципах создания TCP-соединения и состоящий в последовательной передаче на объект сканирования TCP SYN-запросов на создание соединения на различные порты. Если порт открыт, то на данный сканирующий запрос будет получен ответ TCP SYN АСК; если же порт закрыт – ответом будет TCP RST.
Сканирование TCP FIN
В основу данного метода легли некоторые тонкости реализации протокола TCP в различных сетевых ОС: на передаваемый TCP FIN-запрос закрытые порты отвечают пакетом с флагом RST, а открытые порты данное сообщение игнорируют. Однако сетевые ОС фирмы Microsoft таким методом просканировать не удастся, так как в их реализации протокола TCP передача пакета TCP RST в ответ на подобный запрос не предусмотрена.
Сканирование с использованием IP-фрагментации
Этот метод служит логическим продолжением предыдущих двух методов, отличаясь от них усложнением задачи обнаружения сканирования. Суть его состоит в разбиении TCP SYN- или TCP FIN-зaпpoca на несколько маленьких IP-фрагментов (минимальный размер поля данных в IP-фрагменте 8 байт, следовательно, TCP SYN-запрос, имеющий минимальный размер 20 байт, можно разбить на три фрагмента). Однако у этого метода сканирования может быть незапланированный побочный эффект: некоторые некорректные реализации TCP/IP, получив подобные маленькие IP-фрагменты, вызывают сбой операционной системы.
Сканирование ТАР IDENT
Большинство UNIX-систем по умолчанию используют ТАР IDENT сервис на 113-м порту, задача которого заключается в предоставлении удаленным пользователям информации о существующих на сервере в данный момент соединениях. Входными параметрами ТАР-сервера являются <localport> (интересующий нас порт сервисной службы на сервере) и <foreignport> (порт клиента, подключившегося к данной службе сервера).
|
Выходными параметрами ТАР-сервера являются сообщения вида
<localport>, <foreignport>: USERID: <systemtype>: <conn-info>
или
<localport>, <foreignport>: ERROR: <errortype>
Пример выходных данных ТАР-сервера:
6191, 23: USERID: UNIX: joe
6191, 23: USERID: MULTICS: StJohns.DODCSC.a
6191, 23: USERID: OTHER: StJohns.DODCSC.a
6191, 23: USERID: TAC: MCSJ-MITMUL
6191, 23: USERID: UNIX: a6X#-Yp,3147,2910
6191, 23: USERID: OTHER: wewishyouamerrychristmasand
6191, 23: ERROR: NO-USER
Методы "невидимого" удаленного сканирования
FTP Bounce Attack
Первым методом анонимного сканирования является метод, получивший название FTP Bounce Attack (скрытая атака по FTP). Протокол FTP имеет ряд недостаточно описанных функций, одна из которых – возможность создания так называемых "proxy" ftp-соединений с FTP-сервера. Если программная реализация FTP-сервера поддерживает режим proxy, то любой пользователь (и анонимный в том числе) может, подключившись к серверу, создать процесс DTP-server (Data Transfer Process – процесс передачи данных) для передачи файла с этого FTP-сервера на любой другой сервер в Internet. Функциональность данной возможности протокола FTP вызывает некоторое сомнение, так как в обычной ситуации ftp-клиент, подключающийся к серверу, передает и получает файлы либо непосредственно от себя, либо для себя.
Эта особенность протокола FTP позволяет предложить метод TCP-сканирования с использованием proxy ftp-сервера, состоящий в следующем: ftp-серверу после подключения выдается команда PORT с параметрами IP-адреса и TCP-порта объекта сканирования. Далее следует выполнить команду LIST, по которой FTP-сервер попытается прочитать текущий каталог на объекте, посылая на указанный в команде PORT порт назначения TCP SYN-запрос. Если порт на объекте открыт, то на сервер приходит ответ TCP SYN АСК и FTP-клиент получает ответы "150" и "226", если же порт закрыт, то ответ будет таким:
|
425. Can't Build Data Connection: Connection Refused (425. Невозможно установить соединение: в соединении отказано).
Далее в цикле FTP-серверу последовательно выдаются команды PORT и LIST и осуществляется сканирование разных портов.
Данный метод вплоть до конца 1998 года был единственным и поистине уникальным методом "невидимого" анонимного сканирования. Основная проблема взломщиков всегда состояла в невозможности скрыть источник сканирования, так как требовалось получать ответы на передаваемые запросы. Кроме того, в некоторых случаях межсетевой экран (МЭ) мог фильтровать запросы с неизвестных IP-адресов, поэтому данный метод совершил революцию в сканировании, так как, во-первых, позволял скрыть адрес злоумышленника и, во-вторых, давал возможность сканировать контролируемую МСЭ подсеть, используя внутренний расположенный за МСЭ ftp-сервер.
Сканирование с использованием "немого" хоста
Оригинальное название метода Dumb host scan переводится как "сканирование с использованием "немого" хоста". Основные положения, лежащие в основе метода (рис. 5.1), cостоят в следующем:
· с каждым переданным пакетом значение ID в заголовке IP-пакета обычно увеличивается на 1;
· хост отвечает на TCP SYN-3aпpoc TCP SYN ACK, если порт открыт; и TCP RST, если порт закрыт;
· существует возможность узнать количество пакетов, переданных хостом, но параметру ID в заголовке IP;
|
· хост отвечает TCP RST на TCP SYN ACK и ничего не отвечает на TCP RST.
Рис. 1. Сканирование методом Dumb host scan с открытым (слева) и закрытым (справа) портом X на хосте C
Рассмотрим, как работает данный метод.
Пусть X-Hacker - узел атакующего, откуда осуществляется сканирование, объект B – "тихий" узел (обычный узел, который не будет передавать пакеты, пока происходит сканирование узел C; таких узлов вполне достаточно в Internet), а узел C – объект сканирования. Узел X-Hacker при помощи, например, утилиты hping контролирует число исходящих от узла B пакетов по ID из заголовка IP, имеющего вид:
#hping B -r
HPING B (eth0 194.94.94.94): no flags are set, 40 data bytes
60 bytes from 194.94.94.94: flags=RA seq=0 ttl=64 id=41660 win=0 time=1.2 ms
60 bytes from 194.94.94.94: flags=RA seq=1 ttl=64 id=+1 win=0 time=75 ms
60 bytes from 194.94.94.94: flags=RA seq=2 ttl=64 id=+1 win=0 time=91 ms
60 bytes from 194.94.94.94: flags=RA seq=3 ttl=64 id=+1 win=0 time=90 ms
60 bytes from 194.94.94.94: flags=RA seq=4 ttl=64 id=+1 win=0 time=91 ms
60 bytes from 194.94.94.94: flags=RA seq=5 ttl=64 id=+1 win=0 time=87 ms
Как видно, ID увеличивается с каждым пакетом на 1, следовательно, узел B – именно тот "тихий" узел, который нужен взломщику.
X-Hacker посылает TCP SYN-запрос на порт Х узла C от имени B (автор метода предлагает для этого использовать утилиту hping с его сайта https://www.kyuzz.org/antirez, но можно применять и любые другие программные средства). Если порт X узла C открыт, то узел C пошлет узлу B ответ TCP SYN АСК (узел C не может знать, что этот пакет на самом деле пришел от X-Hacker). В этом случае объект B в ответ на TCP SYN АСК ответит на C пакетом TCP RST. Если атакующий пошлет на C определенное количество TCP SYN от имени узла B, то B, получив несколько TCP SYN АСК, ответит столькими же TCP RST, и на узле X-Hacker будет видно, что B посылает пакеты, следовательно, порт Х открыт. Выглядит это следующим образом:
60 bytes from 194.94.94.94: flags=RA seq=17 ttl=64 id=+1 win=0 time=96 ms
60 bytes from 194.94.94.94: flags=RA seq=18 ttl=64 id=+1 win=0 time=80 ms
60 bytes from 194.94.94.94: flags=RA seq=19 ttl=64 id=+2 win=0 time=83 ms
60 bytes from 194.94.94.94: flags=RA seq=20 ttl=64 id=+3 win=0 time=94 ms
60 bytes from 194.94.94.94: flags=RA seq=21 ttl=64 id=+1 win=0 time=92 ms
60 bytes from 194.94.94.94: flags=RA seq=22 ttl=64 id=+2 win=0 time=82 ms
Порт открыт
В том случае, если порт Х узла C закрыт, то передача на C нескольких TCP SYN-пакетов от имени B вызовет ответный пакет TCP RST. Узел B, получив от узла C такой пакет, проигнорирует его. Выглядит это так:
60 bytes from 194.94.94.94: flags=RA seq=52 ttl=64 id=+1 win=0 time=85 ms
60 bytes from 194.94.94.94: flags=RA seq=53 ttl=64 id=+1 win=0 time=83 ms
60 bytes from 194.94.94.94: flags=RA seq=54 ttl=64 id=+1 win=0 time=93 ms
60 bytes from 194.94.94.94: flags=RA seq=55 ttl=64 id=+1 win=0 time=74 ms
60 bytes from 194.94.94.94: flags=RA seq=56 ttl=64 id=+1 win=0 time=95 ms
60 bytes from 194.94.94.94: flags=RA seq=57 ttl=64 id=+1 win=0 time=81 ms
Порт закрыт