Сайт HACK-INFO
Иногда у
вас может возникнуть потребность узнать какие сервисы предоставляет
определенный хост. Для этого существует ряд различных программ
сканирования портов. Простейший вариант - это программы типа SATAN
(Security Analysis Tool for Auditing Networks), которые
устанавливают соединение с каждым TCP-портом, открывая полное
TCP-соединение. Преимущества этого метода заключаются в том, что
пользователю, занимающемуся сканированием, не нужно самому
составлять ip-пакет, который будет использован для сканирования,
потому что он использует стандартные системные вызовы, и ему не
нужен доступ администратора ( обычно нужен, чтобы использовать SOCK
RAW или открывать /dev/bpf, /dev/nit и т.д.). Недостатком этого
метода заключается в том, что его легче обнаружить, причем
несколькими способами, в частности TCP Wrapper'ами by Wietse
Venema.Для устранения этого недостатка были придуманы методы
сканирования без установления полного TCP-соединения, т.н.
'полуоткрытое сканирование'.
Процесс установки
TCP-соединения состоит из трех фаз: сторона, устанавливающая
соединение, сначала посылает TCP-пакет с установленным флагом SYN,
после чего принимающая сторона посылает TCP-пакет с установленными
флагами SYN и ACK в случае, если порт открыт, или сбрасывает
соединение с флагом RST если порт не активен. Третья фаза происходит
когда сторона, устанавливающая соединение, посылает финальный
TCP-пакет с установленным флагом ACK ( само собой все эти пакеты
имеют соответствующие sequence- и ack-номера, и т.д. ). Теперь
соединение установлено.
Сканирования с SYN-флагом.
SYN-сканер посылает только первый пакет из трех и ждет SYN|ACK или
RST. Когда он получит либо то, либо другое, он будет знать, активен
этот порт или нет. Основное преимущество этого метода заключается в
том,что он не обнаруживается программами типа "SATAN" или TCP
Wrappers by Wietse Venema. Основные недостатки этого метода: Этот
метод обнаруживается некоторыми программами,которые проверяют
попытки коннекта с SYN-флагом ( например tcplog ), а также он
обнаруживается netstat(1)'ом. Сторона,устанавливающая соединение,
обычно должна составлять весь IP-пакет. Для этого необходимо иметь
доступ к SOCK_RAW ( в большинстве операционок: getprotbyname('raw')
) или /dev/bpf (Berkeley Packet Filter), /dev/nit (Sun 'Network
Interface Tap') и т.д. Для этого необходимо, как правило, иметь
уровень администратора. Stealth-сканирование. Этот метод
основан на некорректном сетевом коде в BSD. Учитывая то,что в
большинстве операционных систем используется BSD'шный сетевой код
или производный от него,этот способ работает на большинстве систем (
наиболее очевидное исключение - маршрутиризаторы Cisco ). Этот метод
трудно обнаружить. Даже зная сам метод, разработка обнаруживающего
алгоритма весьма проблематична без устранения самой ошибки.
Недостатки этого способа: Этот метод основан на ошибках в сетевом
коде. Это значит, что возможно, а точнее скорее всего, эти ошибки
будут исправлены. Например в OpenBSD это уже исправлено. Нельзя
поручиться, что этот способ будет нормально работать в конкретной
обстановке. Результаты могут быть разными в зависимости от платформы
и операционной системы, т.е. э тот способ не вполне надежен.
Используются TCP пакеты с установленными ACK и FIN флагами. Их надо
использовать,потому что,если такой пакет послать в порт при
неоткрытом соединении,всегда возвратится пакет с флагом
RST.
Существуют несколько методов, использующих этот
принцип: метод #1: Послать FIN-пакет. Если принимающий хост
возвращает RST, значит порт неактивен,если RST не возвращается,
значит порт активен. Учитывая тот факт, что этот метод работает на
таком количестве хостов, это - грустное свидетельство тому, какой
некорректный сетевой код в большинстве операционных систем. метод
#2: Послать ACK-пакет. Если TTL возвращаемых пакетов меньше, чем в
остальных полученных RST-пакетах, или если размер окна больше нуля,
то скорее всего порт активен.
|