My photo
 Моя диссертация
  • Автореферат
  • Статья
  •  Библиотека
  • Определение ОС
  • Сканирование портов
  • Безопасность TCP/IP
  • Атака format string
  • Переполнение буфера
  • Программирование
  • Linux Security Guide
  • Secure programming
  • RFC Index List
  •  Ссылки
  • Списки рассылки
  • Группы новостей Usenet
  • Web сайты
  • Ftp архивы
  •  Поиск в Internet
  • Статистика поиска
  • Designed by
    Andrew V.Volkogon
    2002

    Title
      RussianEnglishUkranian  
     
    Атака через Internet 3-е изд.-М.:ДМК,2000.-336с.
    Медведовский И.Д. Семьянов П.В. Леонов Д.Г.
    Глава 5. Методы удаленного сканирование портов.

           Определение открытых портов на удаленной машине является важной задачей как администраторов серверов так и хакеров. Сканирование сервера сети на открытые порты (особенно сразу после установки на него ОС) дает сведения об запущенных на нем сервисах. Отключение этих сервисов позволяет избежать части проблем связанных с незаконным вторжением в систему используя не нужные (но запущенные) сервисы. Дальнейшее периодическое сканирование портов позволяет обнаружить сервисы которые могли запустить хакеры после вторжения в систему. Хакер на основе анализа открытых портов также получает много информации об удаленной системе. На их основе можно сделать заключение об ОС работающей на удаленном хосте ( некоторые сервисы существуют только для определенных ОС). Получив название службы, ее версию и ОС под которой работает хост можно (зная соответствующие уязвимости в этих службах) без особых усилий проникнуть на удаленный хост и получить права администратора.
           Сетевые службы предоставления доступа WWW, Telnet, Ftp и т.д (в UNIX средах они запускаются в виде демонов) после запуска ожидают получения удаленных запросов на подключение от клиентов на определенных, заранее зарезервированных TCP или значительно реже UDP портах. Так как UDP порты используются значительно реже то далее будет рассмотрено сканирование TCP портов (хотя принципиально сканирование не отличается).
           Таким образом, список открытых (активных) портов на сервере означает наличие запущенных на нем серверных приложений, предоставляющих удаленный доступ. В приложении к курсовому проекту находится список портов с соответствующими им сетевыми службами.
           Рассмотрим процесс подключения к серверному приложению, ожидающему запросы на каком - либо TCP порту. Данный процесс состоит из двух этапов. На первом этапе клиенту необходимо создать обычное TCP соединение с указанным TCP портом сервера. Для этого клиент передает на сервер TCP SYN запрос на необходимый порт (TCP SYN запрос означает TCP пакет с установленным SYN битом).
           Если клиент получает ответ на этот запрос (TCP SYN ASK), то порт открыт и TCP соединение будет создано. Если же ответ за определенный промежуток времени так и не пришел, то либо порт закрыт и соответствующий ему сервис не доступен, либо имеют место физические проблемы с линией связи. На втором этапе, после установления TCP соединения, клиент и сервер обмениваются специфичными для данных приложений командами, создавая соединение уже на уровне приложения (в терминах модели OSI - на прикладном уровне).
           Нужно отметить, что первый этап является стандартным и абсолютно инвариантным относительно любого вида серверного приложения, к которому осуществляется подключение. На этой особенности и основывается сканирование портов.
           Сканированием портов - называется метод удаленного анализа, осуществляемый путем передачи тестовых запросов на соединение и позволяющий определить список активных служб предоставления удаленного сервиса на каком - либо хосте. Все методы сканирования делятся на две группы:
           1. Методы открытого сканирования : непосредственный инициатор однозначно определяется объектом сканирования по IP адресу приходящих запросов.
           2. Методы невидимого анонимного сканирования. Непосредственный инициатор не определяется объектом сканирования (однозначно определяется только промежуточный источник сканирующих запросов).

    Методы открытого сканирования
           Скнирование TCP SYN - очевидный метод, основанный на принципах создания TCP - соединения и состоящий в последовательной передаче на объект сканирования TCP SYN запросов на создание соединения на различные порты. Если порт открыт, то на данный сканирующий запрос будет получен ответ TCP SYN ACK; если же порт закрыт - ответом будет TCP RST.
           Сканирование TCP FIN - в основу данного метода легли некоторые тонкости реализации протокола TCP в разных сетевых ОС: на передаваемый TCP FIN запрос закрытые порты отвечают пакетом с флагом RST, а открытые порты данное сообщение игнорируют. Однако сетевые ОС фирмы Microsoft таким методом просканировать не удастся, так как в их реализации протокола TCP передача пакета TCP RST в ответ на подобный запрос не предусмотрена.
           Сканирование с использованием IP фрагментации - этот метод является логическим продолжением предыдущих двух методов, отличаясь от них усложнением задачи обнаружения сканирования. Суть его состоит в разбиении TCP SYN или TCP FIN запроса на несколько маленьких IP фрагментов (минимальный размер поля данных в IP фрагменте 8 байт, следовательно TCP SYN запрос имеющий минимальный размер 20 байт, можно разбить на три фрагмента). Однако у этого метода есть незапланированный побочный эффект: некоторые некорректные реализации TCP/IP, получив подобные маленькие IP фрагменты, вызывают сбой ОС.
           Сканирование TAP IDENT - большинство UNIX систем по умолчанию используют TAP IDENT сервис на 113 порту, задача которого заключается в предоставлении удаленным пользователям информации о существующих на сервере в данный момент соединениях. Входными параметрами TAP сервера является (интересующий нас порт сервисной службы на сервере) и (порт клиента, подключившегося к данной службе сервера).
           Входными параметрами TAP сервера являются сообщения вида: <localport>, <foreignport> : USERID : <systemtype> : <conn-info> или <localport>, <foreignport> : ERROR : <errortype>        Пример входных параметров TAP сервера: 6191, 23 : USERID : UNIX : joe 6191, 23 : USERID : MULTICS : StJohns.DODCS.a        Подробности о выходных данных TAP сервера можно найти в RFC 1413. Стоит заметить, что для определения активности одного порта на сервере требуется перебор портов клиента от 1000 до 65535, что делает данный метод чрезвычайно не эффективным.

    Методы "невидимого" анонимного сканирования
           Скрытое сканирование по ftp - протокол ftp (RFC 959) имеет ряд чрезвычайно интересных и недостаточно документированных функций, одна из которых - возможность создание так называемых proxy ftp соединений с ftp сервера.
           Метод заключается в следующем : ftp серверу после подключения выдается команда PORT с параметрами IP адреса и TCP порта объекта сканирования. Далее следует выполнить команду LIST, по которой ftp сервер попытается прочитать текущий каталог на объекте, посылая на указанный в команде PORT назначения TCP SYN запрос. Если порт на объекте открыт, то на сервер приходит ответ TCP SYN ACK и ftp клиент получает ответы 150 и 226. Если же порт закрыт то ответ будет таким: 425 Can't Built Data Connection: Connection refused        Далее в цикле ftp серверу последовательно выдаются команды POTR и LIST и осуществляется сканирование разных портов.
           Сканирование через proxy сервер - этот способ состоит в том чтобы производить сканирование вышеописанными методами но с чужого хоста доступного по telnet. В таком случае на исследуемой машине останутся записи об промежуточном хосте.
           Исходя из выше сказанного написание сканера портов (открытым методом) сводится к следующему:
           - составление базы данных, номеров портов и названий служб использующих данные порты по умолчанию
           - написание процедуры, которая в цикле перебирает порты по вышеописанной базе данных и пытается установить соединение (для socket интерфеса - функция connect). Если соединение установлено то порт открыт и остается вывести его имя взятое из базы данных.
           - для некоторых портов возможно вывод некоторого буфера данных пересылаемого удаленным сервисом в ответ на установленное соединение. В этом буфере обычно содержится точное название и версия сервиса.