Обнаружение доступных сетевых служб

Выше была описана технология выявления сетевых узлов путем уста- новки TCP-соединения. Аналогичная технология используется, когда заранее известно, что узел в сети присутствует, но необходимо получить информацию о доступных сетевых службах, т. е. выполнить сканирование портов сетевого узла. В этом случае последовательно осуществляются попытки подключения к сетевым портам в определенном диапазоне.

Чаще всего применяются не подряд все номера портов, а только те из них, которые наиболее интересны злоумышленникам с целью дальнейшего

проникновения. В ряде случаев перечень номеров портов может быть сфор- мирован  злоумышленниками на  основе  полученной  ранее  по  коду  ICMP- ответа информации о типе операционной системы.

Одиночный запрос установки TCP-соединения по одному из портов мо- жет считаться атакой лишь в случае, когда защищаемая сеть является «кли- ентской». Однако если мы защищаем «клиентскую» сеть, которая не должна

предоставлять вовне каких-либо сетевых услуг, то и одиночные попытки ус- тановки соединения должны интерпретироваться как атака. Последователь- ные же попытки установить соединение с несколькими портами явно свиде- тельствует о начавшейся сетевой атаке.

Таким образом, в случае TCP-пакетов атакой будем считать все попытки установки TCP-соединения, инициируемые извне.

Рис. 2.7. Последовательные попытки установки TCP-соединений

Заметим,   что   мы   рассмотрели  только   классический  способ   TCP- сканирования, известный как сканирование методом Connect(), когда устанав- ливается полное TCP-соединение. Вместе с тем известны более изощренные методы, позволяющие процесс сканирования осуществлять скрытно: SYN- сканирование,  FIN-сканирование, ACK-сканирование, XMAS-сканирование, NULL-сканирование. Соответственно известны утилиты, позволяющие авто- матизировать указанные методы. Коротко опишем эти методы.

Метод сканирования TCP-портов системным вызовом Connect() являет- ся основным для сканирования портов по протоколу TCP. Функция Connect() позволяет атакующему узлу соединиться с любым портом сервера. Если порт, указанный  в  качестве  параметра  функции,  прослушивается сервером  (т. е. порт открыт для соединения), то результатом выполнения функции будет ус- тановление соединения с сервером по указанному порту. В противном случае, если соединение не установлено, то порт с указанным номером является за-

крытым. Метод Connect() является легко обнаруживаемым благодаря наличию многочисленных попыток подключения с одного адреса и ошибок установле- ния соединения (поскольку атакующий узел после соединения с сервером сра- зу обрывает его).

Метод сканирования TCP-портов флагом SYN известен еще как «скани-

рование с установлением наполовину открытого соединения» поскольку уста- новление полного TCP-соединения не производится. Вместо этого атакующий отправляет на определенный порт сервера SYN-пакет, как бы намереваясь создать соединение, и ожидает ответ. Наличие в ответе флагов SYN|ACK оз- начает, что порт открыт и прослушивается сервером. Получение в ответ TCP- пакета с флагом RST означает, что порт закрыт и не прослушивается. В случае приема SYN|ACK-пакета узел немедленно отправляет RST-пакет для сброса устанавливаемого сервером соединения.

Метод сканирования TCP-портов флагом FIN известен по-другому как

«обратное стелс-сканирование с использованием флага FIN». Идея метода за-

ключается в том, что согласно RFC 793 на прибывший FIN-пакет на закрытый порт сервер должен ответить RST-пакетом. FIN-пакеты на открытые порты игнорируются объектом сканирования.

Метод   сканирования   TCP-портов   флагом   ACK   похож   на   FIN- сканирование, известен по-другому как «обратное стелс-сканирование с ис- пользованием флага ACK». Идея метода заключается в том, что согласно RFC

793 на прибывший ACK-пакет на закрытый порт сервер должен ответить RST- пакетом. ACK-пакеты на открытые порты игнорируются объектом сканирова- ния.

Методы сканирования XMAS («Новогодняя елка») и NULL заключают-

ся в отправке на сервер TCP-пакета с установленными всеми флагами (XMAS) либо со всеми сброшенными флагами (NULL). В соответствии с RFC 793 на прибывший пакет с данными значениями флагов на закрытый порт сервер должен ответить RST-пакетом. Такие пакеты на открытые порты игнорируют- ся объектом сканирования.

Указанные выше методы сканирования позволяют злоумышленнику вы-

яснить наличие открытых TCP-портов на атакуемом узле. Для обнаружения открытых UDP-портов применяется иной подход.

Выполнить анализ открытых UDP-портов злоумышленнику несколько

сложнее, чем TCP-портов. Причина в том, что в отличие от протокола TCP, UDP является протоколом с негарантированной доставкой данных. Поэтому UDP-порт не посылает подтверждение приема запроса на установление со- единения, и нет никакой гарантии, что отправленные UDP-порту данные ус- пешно дойдут до него. Тем не менее большинство серверов в ответ на пакет, прибывший на закрытый UDP-порт, отправляют ICMP-сообщение «Порт не- доступен» (Port Unreachable — PU). Таким образом, если в ответ на UDP- пакет пришло ICMP-сообщение PU, то сканируемый порт является закрытым, в противном случае (при отсутствии PU) порт открыт.

Рис. 2.8. Пример UDP-сканирования

Обычно сканеры работают следующим образом: на тестируемый порт отправляется UDP-пакет, состоящий, например, из 18 нулей (рис. 2.8). Если соответствующий порт открыт, то в ответ тестируемый компьютер может ли- бо ничего не отправить, либо отправить ответный UDP-пакет. В этом случае сканер делает вывод о том, что порт открыт. Если же порт закрыт, то тести- руемый компьютер должен ответить ICMP-сообщением с кодом 0х03 (Port Unreachable). Получив такое сообщение (рис. 2.9), сканер сделает вывод о за- крытости данной службы.

Для UDP-протокола нет четкого понятия, кто является инициатором па-

кета. Так, исходящий UDP-запрос на любую службу, очевидно, предполагает входящий UDP-ответ. Вместе с тем любой UDP-пакет с равной вероятностью может быть и входящим UDP-ответом, и исходящим UDP-запросом. Следова- тельно, в отличие от протокола TCP здесь нельзя четко разделить входящие и исходящие UDP-пакеты.

Единственным критерием, который позволяет идентифицировать вхо-

дящие UDP-пакеты как атаку, является последовательность пакетов, отправ- ляемая на различные UDP-порты. При этом порт отправителя вероятнее всего будет в «клиентском» диапазоне — больше 1024.

Рис. 2.9. Пример ICMP-пакета Port Unreachable

ВЫПОЛНИТЬ!

8.   Запустите программу-сканер портов SAURON.

9.   Осуществите захват сетевого трафика.

10. Выполните сканирование TCP- и UDP- портов соседнего  компьютера  в диапазоне от 130 до 140, последовательно выполняя сканирование различ-

ными   методами:   Connect(),   SYN-сканированием,   FIN-сканированием, ACK-сканированием, XMAS-сканированием, NULL-сканированием, UDP- сканированием.

11. Проанализируйте полученный трафик. Найдите отличительные  признаки каждого метода сканирования. Сформулируйте признаки  подобных атак. Сделайте вывод о возможности блокирования данных атак.

Источник: Андрончик А. Н., Богданов В. В., Домуховский Н. А., Коллеров А. С., Синадский Н. И., Хорьков Д. А., Щербаков М. Ю., Защита информации в компьютерных сетях. Практический курс

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

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