[My Home Page] [Contact information] [My Bookmark] [Music Page] [Articles] [HackPage] [Sign Guestbook] [My Public PGP Key]


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


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

    Пример  программы  для  разных  видов  сканирования  TCP портов вы
можете найти в приложении 4.

<== Back to main page counter
My Home Page How to contact me My Bookmarks Music Page Articles Hack Page Welcome to Guestbook Windows (1251) encoding Unix  (Koi8) encoding My Public PGP Key
Hosted by uCoz