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

June 15th, 2012
admin
Опубликовано в рубрике