Рисунок 2.18 - Формат IP-заголовка нефрагментированного пакета
Поле «Флаги» указывает на возможность фрагментации. Нулевое состояние первого бита разрешает выполнять фрагментацию, единичное – запрещает. Второй бит определяет последний пакет дейтаграммы.
Поле «Смещение фрагмента» используется для указания места данного фрагмента в дейтаграмме. Смещение измеряется группами по 8 байт (т.е. в данном случае смещение составляет 32 группы по 8 байт, или 256 байт). Первый фрагмент всегда имеет нулевое смещение.
Таким образом, TCP-пакет (SYN или FIN-пакет, имеющий размер порядка 24 байт) разбивается на стороне хоста на пару IP-фрагментов меньшего размера, и эта пара IP-фрагментов отправляется серверу. На стороне сервера IP-фрагменты «собираются» в один TCP-пакет и производится его обработка (те же действия, как и при SYN или FIN-сканировании).
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
|||||||||||||||||||||||||||||||
Номер версии=4 |
Длина заголовка=5 |
Тип сервиса |
Общая длина = 256 |
||||||||||||||||||||||||||||
Идентификатор = 111 |
Флаги=1 |
Смещение фрагмента = 0 |
|||||||||||||||||||||||||||||
Время жизни = 119 |
Протокол = 6 |
Контрольная сумма заголовка |
|||||||||||||||||||||||||||||
Адрес отправителя |
|||||||||||||||||||||||||||||||
Адрес получателя |
|||||||||||||||||||||||||||||||
Данные |
|||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
Номер версии=4 |
Длина заголовка=5 |
Тип сервиса |
Общая длина = 216 |
||||||||||||||||||||||||||||
Идентификатор = 111 |
Флаги=3 |
Смещение фрагмента = 32 |
|||||||||||||||||||||||||||||
Время жизни = 119 |
Протокол = 6 |
Контрольная сумма заголовка |
|||||||||||||||||||||||||||||
Адрес отправителя |
|||||||||||||||||||||||||||||||
Адрес получателя |
|||||||||||||||||||||||||||||||
Данные |
|||||||||||||||||||||||||||||||
Протокол ident позволяет определить имя (username или login, указанное при входе в систему) владельца любого запущенного на сервере процесса, связанного с ним, даже если сам этот процесс не инициализировал TCP-соединение.
Протокол ident иначе называется протоколом аутентификации сервера. За ним зарезервирован 113-й TCP-порт, который используется демоном (синоним драйвера в ОС Windows) identd, выполняющим функции аутентификации согласно протокола ident, для приема запросов и передачи ответов на них. Этот процесс происходит следующим образом.
Сервер прослушивает 113 порт и ожидает прихода запроса на соединение. Как только соединение установлено, сервер считывает блок данных, характеризующий соединение, для которого необходимо получить информацию аутентификации. В запросе, помимо информации, находящейся в IP и TCP-заголовках, передается небольшой текстовый блок данных, состоящий из двух полей: <Порт сервера>, <Порт клиента>, где <Порт сервера> - это номер порта сервера, на котором запущен identd, и о котором необходимо получить информацию, а <Порт клиента> - номер порта на хосте, посылающем запрос серверу, на который сервер должен прислать ответ [34]. Например:
6191 , 23
означает, что клиенту необходимо узнать, кто в настоящее время использует 6191 порт на сервере, и передать эту информацию сервер должен на 23-й порт хоста. Ответ сервера выглядит следующим образом:
<Порт сервера>,<Порт клиента>:<Ответ>:<Дополн.инф.>
где <Порт сервера> и <Порт клиента> копируются из запроса хоста, <Ответ> представляет собой ключевое слово, определяющее тип ответа, а <Дополн.инф.> является текстовой строкой, содержание которой зависит от типа ответа. Например:
6193, 23 : USERID : UNIX : stjohns
6195, 23 : ERROR : NO-USER
Как и большинство программ, identd имеет некоторые особенности функционирования, позволяющие получить требуемую информацию, не используя стандартный 113 порт и не проходя процедуру аутентификации. Так, например, имеется возможность подключиться к http-порту и затем использовать identd чтобы определить, работает ли на сервере пользователь root.
Это может быть сделано только при установлении «полного» TCP-соединения к порту исследуемого сервера, что позволяет системному администратору отследить действия.
При Xmas сканировании посылаются TCP пакеты отдаленному устройству с установленными URG, PUSH, и FIN флагами. Этот тип сканирования называется Xmas (в переводе с английского – Рождество) сканированием из-за чередующихся битов, попеременно включаемых в байте флагов (00101001), которые очень напоминают горящие огни Рождественской елки [7].
Закрытый порт отвечает на Xmas сканирование пакетом с установленным битом RST (рисунок 2.20).
Исходный Адресат
Рисунок 2.20 - Сканирование Xmas закрытого порта
Подобно FIN сканированию, открытый порт на удаленном компьютере будет считаться рабочим, если он не отвечает на запросы (рисунок 2.21).
Исходный Адресат
Рисунок 2.21 - Сканирование Xmas открытого порта
Рисунок 2.19 - Пример фрагментации дейтаграммы
В этом случае фрагментация позволяет уменьшить вероятность обнаружения сканирования фильтрами пакетов и другим подобным оборудованием. Однако, следует учитывать, что некоторые программы имеют обыкновение «зависать» при попытке обработки такого маленького IP-фрагмента [7].
При Null сканировании выключаются все управляющие биты, создавая недостаток TCP флагов, которые никогда не должны происходить в действительности [36].
Если порт закрыт, должен быть возвращен пакет с установленным битом RST (рисунок 2.22).
Исходный Адресат
Рисунок 2.22. Null сканирование закрытого порта
Ответ на Null сканирование к открытому порту не приводит ни к какому ответу (рисунок 2.23).
Исходный Адресат
Рисунок 2.23 - Null сканирование открытого порта
К преимуществам Xmas и Null сканирования можно отнести следующее. Так как сеансы TCP соединений не создаются ни для одного из этих типов сканирования, они остаются невидимыми для приложений удаленного компьютера. Поэтому, ни один из этих типов сканирования не должен оставлять записи ни в одном из журналов регистрации.
Для определения закрытого порта необходимо передать два пакета, а для открытого – всего один.
Недостатками Xmas и Null сканирования является то, что на компьютере с операционной системой Windows, все порты будут казаться закрытыми, независимо от их фактического состояния.
Эти типы сканирования используют пакеты, которые не отвечают требованиям стандарта TCP. Чтобы собирать такие специальные пакеты, ложные сокеты операционной системы формирует пакеты из ничего. Это обходит требования операционной системы, которые обычно накладываются на IP соединение, но это также требует, чтобы пользователь, имел привилегированный доступ к системе [20].
Некоторые операционные системы ограничивают номер RST пакетов, посланных отдельному компьютеру, и эти пределы могут вынудить программу Nmap (программа для сканирования портов) выдать ложную информацию, что порт является открытым.
Первым методом анонимного сканирования является метод, получивший название FTP Bounce Attack (скрытая атака по FTP). Протокол FTP (RFC 959) имеет ряд недостаточно описанных функций, одна из которых - возможность создания так называемых "proxy" ftp-соединений с FTP-сервера. Если программная реализация FTP-сервера поддерживает режим proxy, то любой пользователь (и анонимный в том числе) может, подключившись к серверу, создать процесс DTP-server (Data Transfer Process - процесс передачи данных) для передачи файла с этого FTP-сервера на любой другой сервер в Internet. Функциональность данной возможности протокола FTP вызывает некоторое сомнение, так как в обычной ситуации ftp-клиент, подключающийся к серверу, передает и получает файлы либо непосредственно от себя, либо для себя [26].
Эта особенность протокола 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-сервер.