Сканирование портов

           - Маленькое отступление.
           -    Читателям, не знакомым с принципами работы TCP/IP я
           - рекомендую пропустить эту главу, или ознакомиться с ними
           - прочитав TCP/IP Programming Guide, или что-то подобное

    Иногда  у вас может  возникнуть  потребность  узнать какие сервисы
предоставляет  определенный  хост.  Для этого существует ряд различных
программ сканирования портов

    Простейший  вариант - это программы  типа 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-пакетах, или если размер окна больше  нуля,
то скорее всего порт активен.

Оглавление Haking
Hosted by uCoz