Перейти к содержимому

Tcp scan что это

  • автор:

Port Scanning Techniques

Port Scanning is a process of identifying listening ports on a networked system. It reveals a wealth of information about the target including running services, operating system, presence of a firewall.

Introduction

Just as with other reconnaissance techniques, port scanning must be both efficient and reliable in order to be useful. Several techniques were developed to deal with firewalls, intrusion detection systems and other filtering devices while still being able to complete the scan in a timely manner. Today’s arsenal of port scanning techniques…

Tcp scan что это

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

Сканирование как метод вскрытия каналов передачи данных существует уже достаточно долгое время. Идея заключается в том, чтобы исследовать как можно больше каналов и отслеживать те из них, которые находятся в состоянии ожидания соединения и являются полезными для исследующего.

Сам по себе термин «сканирование» появился в процессе слияния компьютеров с телефонными системами. В результате была сформирована глобальная сеть телефонных коммуникаций, доступ в которую можно получить, всего лишь набрав номер на телефонном аппарате. С одного телефона доступны миллионы абонентов телефонной сети, однако полезными могут оказаться лишь сотни, а то и десятки абонентов, к телефонам которых подключен модем.

Логически верным подходом для поиска телефонных номеров таких абонентов является «атака в лоб» — перебор всех возможных номеров АТС и поиск тона несущей частоты, генерируемого модемом на другом конце линии. Так возникло направление, называемое wardialing. Появилась масса программ типа ToneLoc, предназначенных для исследования большого объема телефонных номеров на наличие абонентов, к телефонам которых подключен модем..

Основная идея проста. Если, набрав номер, модем установил соединение (т.е. на другом конце линии также находится модем), набранный номер запоминается. В противном случае модем «вешает трубку», набирает следующий номер и вновь пробует установить соединение.

Wardialing является весьма эффективным методом для поиска входов в различные сети по коммутируемой телефонной линии. С другой стороны, огромное число компьютеров объединены в сеть с помощью специального оборудования (сетевых адаптеров, кабельных модемов) и выделенных линий и не используют коммутируемые линии АТС. В этом случае программы типа ToneLoc оказываются бесполезными, поскольку определить нужно не телефонный номер, а номер порта сервера, ожидающего запрос на соединение.

Термин «порт» является абстрактным понятием, используемым для упрощенного описания механизма установления соединения между хостами, и представляет собой потенциальный канал передачи данных. Использование механизма портов существенно облегчает процесс установления соединения и обмена информацией между сервером и хостом. Кроме того, имеется возможность исследования сетевого окружения сервера методом опроса его портов (т.н. «сканирование» портов). На все возможные номера портов (1-65535) сервера посылается «лавина» пакетов, и по тому, от каких портов будут (или не будут) получены ответы, определяются открытые порты и службы, работающие на исследуемом сервере.

Техника сканирования портов

Было разработано огромное количество различных методов для поиска протоколов и портов, которые «прослушивает» удаленная машина. Все методы имеют определенные преимущества и недостатки. Ниже рассмотрены наиболее часто используемые из них.

Сканирование сервера с использованием ICMP-эха

Перед непосредственным сканированием портов удаленного хоста необходимо выяснить, какие хосты в сети являются функционирующими, и определить их адреса. Особенно это важно при сканировании группы хостов либо при сканировании определенного сегмента сети.

Данный метод работает аналогично команде ping. В качестве запроса хост отправляет серверу ICMP-сообщение и ожидает получения ответа, также представляющего собой ICMP-сообщение (т.н. ICMP-эхо). Варьируя время ожидания ответа на ping-запрос, можно сканировать большие сети.

Сканирование TCP-портов функцией connect()

Данный метод является основным для сканирования портов по протоколу TCP. Функция connect() позволяет хосту соединиться с любым портом сервера. Если порт, указанный в качестве параметра функции, прослушивается сервером (т.е. порт открыт для соединения), то результатом выполнения функции будет установление соединения с сервером по указанному порту. В противном случае, если соединение не установлено, то порт с указанным номером является закрытым.

Этот метод обладает одним серьезным преимуществом: его может применить любой пользователь, не обладающий никакими привилегиями на хосте. Другое преимущество — скорость исследования. Последовательный перебор портов путем вызова функции connect() для очередного номера порта, определение его состояния и закрытие соединения — достаточно долгий процесс. Однако его можно ускорить, применив метод «параллельного просмотра» с использованием неблокированного соединения (non-blocked socket). Такой метод позволяет определить состояние практически всех портов сервера одновременно.

Большим недостатком данного метода является возможность обнаружения и фильтрации такого рода сканирования, причем сделать это достаточно легко. Log-файл сканируемого сервера укажет службам, отвечающим за внешние подключения, на наличие многочисленных попыток подключения с одного адреса и ошибок установления соединения (поскольку хост исследующего после соединения с сервером сразу обрывает его), а те, в свою очередь, немедленно заблокируют доступ к серверу для хоста с данным адресом.

Сканирование TCP-портов флагом SYN

Данный метод известен еще как «сканирование с установлением наполовину открытого соединения» (half-open scanning), поскольку установление полного TCP-соединения не производится. Вместо этого хост отправляет на определенный порт сервера SYN-пакет, как бы намереваясь создать соединение, и ожидает ответ. Наличие в ответе флагов SYN|ACK означает, что порт открыт и прослушивается сервером. Получение в ответ TCP-пакета с флагом RST означает, что порт закрыт и не прослушивается.

В случае приема SYN|ACK-пакета хост немедленно отправляет RST-пакет для сброса устанавливаемого сервером соединения. преимущество данного метода прежде всего заключается в том, что лишь немногие серверы способны зарегистрировать такого рода сканирование. К сожалению, пользователь, должен обладать статусом Root на хосте, с которого производится сканирование. Если статус будет ниже Root, то пользователь попросту не сможет программно сформировать одиночный SYN-пакет.

Сканирование TCP-портов флагом FIN

Как уже говорилось, лишь немногие серверы способны отследить попытку SYN-сканирования их портов. Так, некоторые файрволлы и пакетные фильтры «ожидают» поддельные SYN-пакеты на закрытые порты защищаемого ими сервера, и специальное программное обеспечение типа synlogger или courtney распознает попытку SYN-сканирования. Если сервер «рвет» соединение после опроса нескольких портов, используется FIN-сканирование.

FIN-пакеты способны обойти эти средства защиты. Идея заключается в том, что, согласно RFC 793, на прибывший FIN-пакет на закрытый порт сервер должен ответить RST-пакетом. FIN-пакеты на открытые порты игнорируются сервером. Однако не все ОС придерживаются этой рекомендации. Так, ОС Windows 95/98/NT, по всей видимости, имеют иммунитет к такому сканированию, однако большинство ОС являются восприимчивыми. Таким образом, совместно используя SYN и FIN-сканирование можно с успехом обойти средства защиты сервера и просканировать его порты.

Сканирование TCP-портов флагами SYN|FIN с использованием IP-фрагментации

Данный метод представляет собой комбинацию SYN и FIN-сканирования с небольшим усовершенствованием. TCP-пакет (SYN или FIN-пакет, имеющий небольшой размер) разбивается на стороне хоста на пару IP-фрагментов меньшего размера, и эта пара IP-фрагментов отправляется серверу. На стороне сервера IP-фрагменты «собираются» в один TCP-пакет и производится его обработка (те же действия, как и при SYN или FIN-сканировании).

Фрагментация позволяет уменьшить вероятность обнаружения сканирования фильтрами пакетов и другим подобным оборудованием. Однако при этом следует быть очень осторожным, поскольку некоторые программы имеют обыкновение «зависать» при попытке обработки такого маленького IP-фрагмента.

Сканирование TCP-портов методом reverse-ident (обратной идентификации)

Протокол ident (RFC 1413) позволяет определить имя (username или login, указанное при входе в систему) владельца любого запущенного на сервере процесса, связанного с ним, даже если сам этот процесс не инициализировал TCP-соединение. Так, например, имеется возможность подключиться к http-порту и затем использовать identd чтобы определить, работает ли на сервере пользователь root. Это может быть сделано только при установлении «полного» TCP-соединения к порту исследуемого сервера.

Сканирование TCP-портов с использованием атаки «Прорыв через FTP»

Интересной «возможностью» протокола FTP (RFC 959) является поддержка т.н. «уполномоченных» (proxy) соединений. Другими словами, атакующий, находясь на сервере source.com, может подключиться к интерпретатору (Protocol Interpreter) протокола FTP-сервера taregt.com для установления контроля над сетевым соединением. Затем атакующий дает запрос PI сервера инициализировать активный DTP-сервер (Data Transfer Process) и отправить через него любой файл на любой узел Internet !

Данная особенность (известная, кстати, с 1985 года) может использоваться для похищения почты и новостей, «взлома» серверов, заполнения их дисков, обхода файрволлов, и на практике подобную деятельность очень сложно отследить. В нашем случае можно осуществить сканирование TCP-портов исследуемого сервера с помощью proxy-FTP. Так, пройдя через файрволл, хост соединяется с FTP-сервером, и затем сканируются порты, доступ к которым был заблокирован файрволлом (например, 139-й порт). Кроме того, если FTP-сервер позволяет читать и записывать данные в каталог (например /incoming), имеется возможность отправлять любые данные на обнаруженный открытый порт сервера.

Перед непосредственным сканированием порта необходимо установить соединение с FTP-сервером и использовать команду PORT с указанием номера интересуемого порта. Таким образом серверу будет сообщено, что пассивный User-DTP на стороне хоста ожидает приема через некоторый указанный порт. Затем необходимо дать команду LIST для текущего каталога, и FTP-сервер отправит данные о каталоге по каналу Server-DTP, соединенному с User-DTP по указанному порту.

Если указанный в команде PORT порт сервера открыт, результат выполнения LIST будет успешным (код ответа в этом случае будет 150 и 226). В противном случае будет иметь место подобный ответ:

> 425 Can’t build data connection: Connection Refused

После этого вновь используется команда PORT с указанием другого порта и операция повторяется.

Преимущества данного метода очевидны (невозможность отслеживания сканирования, обход файрволлов). К недостаткам относится прежде всего низкая скорость сканирования и тот фактор, что некоторые FTP-серверы наконец-то закрыли эту «дыру».

Сканирование UDP-портов проверкой ICMP-сообщения «Порт недоступен»

Этот метод также предназначен для определения состояния портов сервера. Основным отличием является использование протокола UDP вместо протокола TCP. Не смотря на то, что организация протокола UDP проще, чем TCP, сканировать UDP-порты гораздо труднее. Это связано прежде всего с концепцией протокола UDP как протокола с негарантированной доставкой данных. Поэтому UDP-порт не посылает подтверждение приема запроса на установление соединения, и нет никакой гарантии, что отправленные UDP-порту данные успешно дойдут до него.

К счастью, большинство серверов в ответ на пакет, прибывший на закрытый UDP-порт, отправляют ICMP-сообщение «Порт недоступен» (Port Unreachable — PU). Таким образом, если в ответ на UDP-пакет пришло ICMP-сообщение PU, то сканируемый порт является закрытым, в противном случае (при отсутствии PU) порт открыт. Поскольку нет гарантии, что запросы от хоста дойдут до сервера, пользователь должен позаботиться о повторной передаче UDP-пакета, который, по всей видимости, оказался потерянным.

Этот метод работает очень медленно из-за использования на некоторых машинах т.н. «компенсации» (RFC 1812 раздел 4.3.2.8), ограничивающей частоту генерирования ICMP-сообщений об ошибке. Например, ядро Linux ограничивает частоту генерирования ICMP-сообщения «адресат недостижим» (Destination Unreachable) до 80 сообщений за 4 секунды, с простоем 0,25 секунды, если это ограничение было превышено. Кроме того, для использования данного метода (а именно — для обнаружения ICMP-сообщений об ошибке) пользователь должен обладать статусом Root на хосте, с которого производится сканирование.

Может показаться, что сканирование UDP-портов не дает той полноты информации, какую можно получить при сканировании TCP-портов. Однако, принимая во внимание существующие (хотя и не многочисленные) «дыры» в службах, использующих протокол UDP (например, «дыру» в rpcbind-демоне ОС Solaris, который может находится на любом UDP-порту с номером выше 32770), сканирование UDP-портов кажется не таким уж бессмысленным.

Сканирование UDP-портов с использованием функций recvfrom() и write()

Этот метод используется в случае, когда пользователь, проводящий сканирование, не обладает статусом Root на хосте. Поскольку не-root пользователь не может «читать» ICMP-сообщение PU, в ОС, поддерживающих механизм сокетов (например в Linux), имеется возможность получения информации о состоянии UDP-порта косвенным способом. Так, например, попытка вызова функции write() на закрытый порт обычно приводит к возникновению ошибки.

Функция recvfrom() в этом плане более информативна. Вызов ее на неблокированный UDP-сокет сервера обычно возвращает ошибку EAGAIN (Try Again — «попытайтесь еще раз», код 13) в случае, когда ICMP-сообщение не было принято, и ECONREFUSED (Connection Refused — «соединение закрыто», код 111), если ICMP-сообщение было принято. Таким образом, по этим признакам также возможно определить состояние портов сканируемого сервера.

Возможности RuNmap

До возникновения идеи о создании программы Nmap были исследованы возможности многих сканеров, таких, как strobe (автор — Julian Assange), netcat (Hobbit), stcp (Uriel Maimon), pscan (Pulvius) ident-scan (Dave Goldsmith) и Satan (Wietse Venema). Все они — превосходные сканеры. Вначале были попытки доработать код одних сканеров для поддержки лучших возможностей других. Затем было решено написать абсолютно новый сканер, который использовал бы лучшие возможности его предшественников, и, конечно, имел новые, такие, как «фрагментированное» сканирование и др. Так получился сетевой сканер Nmap — the Network Mapper. Программа RuNmap представляет собой русифицированную и доработанную версию Nmap. Ниже приведены наиболее отличительные ее возможности.

Динамическое вычисление времени задержки. Некоторым сканерам для работы необходимо указать время задержки между передачей двух пакетов. Как вам узнать его? Естественно, можно использовать данные ping-запроса, но это займет достаточно много времени, и кроме того время задержки постоянно меняется и зависит от «загруженности» хоста, состояния сети и т.д. RuNmap самостоятельно определяет время задержки, и подстраивает его в процессе сканирования. Для root-пользователей используется наилучший способ определения времени задержки — функция ping. Для остальных этот параметр определяется функцией connect () на закрытый порт. Кроме того, у пользователя имеется возможность самостоятельно задать время задержки, но обычно делать это нет необходимости.

Повторная передача пакетов. Некоторые сканеры сразу отправляют все запросы, а затем «собирают» ответы на них. Весьма некорректный подход, поскольку при этом не принимается во внимание тот факт, что иногда пакеты могут просто не дойти до адресата по самым различным причинам. В такой ситуации сканер примет решение об отсутствии ответа и ошибочно укажет, что сканируемый порт закрыт. Больше всего ошибок возникает при использовании «негативного» сканирования типа UDP или FIN, решение в которых принимается на основе отсутствия ответа. RuNmap автоматически выбирает число повторных передач пакетов на порты, от которых не был получен ответ.

Параллельное сканирование портов. Некоторые сканеры последовательно сканируют все 65535 портов за один раз. Этот метод нормально работает лишь при сканировании TCP-портов в высокоскоростных локальных сетях. Глобальные сети типа Internet высокой скоростью не отличаются. RuNmap использует неблокированный ввод/вывод (non-blocked i/o) и параллельное сканирование во всех режимах TCP и UDP. Вы можете задать число параллельных процессов сканирования самостоятельно. На очень быстрых сетях эффективность сканирования уменьшается при указании этого значения больше 18. На медленных сетях — наоборот, чем больше значение, тем выше эффективность.

Гибкое указание сканируемых портов. Часто бывает необходимо отсканировать какие-либо конкретные порты, а не все 65535 портов сразу. Большинство сканеров позволяет задавать диапазон портов типа 1-N, что также не всегда приемлемо. RuNmap позволяет задать любое количество произвольных диапазонов и портов, например ’21-25,80,113,6000-‘. При использовании «быстрого» режима RuNmap будет сканировать только порты, перечисленные в файле /etc/services.

Гибкое задание цели сканирования. Часто необходимо просканировать более чем один хост, однако большинство сканеров позволяют задать лишь один адрес. Все, что не является опцией или ее аргументом, RuNmap воспринимает как адрес целевого хоста. Таким образом, вы можете абсолютно произвольно указать адреса и диапазоны адресов, которые хотите просканировать. Кроме того, вы можете использовать маску для сканирования групп адресов различных классов.

Определение неактивных хостов. Некоторые сканеры позволяют сканировать большие сети, однако они тратят очень много времени на сканирование 65535 портов хоста, который по каким-либо причинам не функционирует. По умолчанию, перед сканированием RuNmap опрашивает каждый хост и определяет его состояние, для того, чтобы не тратить времени на сканирование неактивных хостов.

Определение IP-адреса сканирующего хоста. По некоторым причинам большинство сканеров требуют указать используемый сканирующим хостом IP-адрес в качестве одного из параметров. RuNmap автоматически определяет IP-адрес машины, на которой он работает, на стадии ping-опроса, и использует тот адрес, на который пришел ответ. Если он не смог это сделать (например, пользователь отключил ping-опрос), RuNmap пробует определить первичный сетевой интерфейс и использует его IP-адрес. Наконец, пользователь сам может указать IP-адрес его хоста.

Основы Nmap: типы сканирования и флаги

Nmap — это самый известный инструмент сканирования среди пентестеров и хакеров. По сути, это сканер портов, который помогает сканировать сети и идентифицировать доступные порты и службы, а также предоставляет дополнительную информацию о целях (включая обратные DNS-имена, предположительную операционную систему, типы устройств и MAC-адреса). Он также пригодится во время аудита сети.

Базовый синтаксис Nmap:

Обратите внимание, что выполнения некоторых типов сканирования могут потребоваться привилегии sudo.

Флаги Nmap

Nmap — это мощный инструмент сканирования сетей, который позволяет настраивать сканирование с помощью передаваемых через командную строку флагов. Несколько важных флагов:

  • -h: вывод краткой справки
  • -sS: выполнить сканирование TCP SYN
  • -sU: выполнить сканирование UDP
  • -sV: проверить открытые порты для определения информации о службе/версии
  • -O: включить обнаружение ОС
  • -v: включить расширенный вывод (выводит больше информации). Уровень расширенности можно установить следующим образом:
    • -vv: 2-й уровень verbosity. Минимальный рекомендуемый уровень verbosity.
    • -v3: 3-й уровень verbosity. Указав число, можно задать уровень verbosity.
    • -oN: перенаправить обычный вывод в заданное имя файла
    • -oX: делать вывод в чистом формате XML и сохранять его в заданном файле.
    • -oG: предоставить вывод, который можно обработать через grep, и сохранять его в файл. Это устаревший формат, так как пользователи теперь переходят на XML-выводы.
    • nmap -p 80 127.0.0.0.1: сканируется порт 80 на localhost
    • nmap -p 1-100 127.0.0.1: сканирует порты с 1 по 100 на localhost.
    • nmap -p- 127.0.0.1: сканирует все порты на localhost.

    Типы сканирования в Nmap

    Nmap поддерживает разные типы сканирования. Самые популярные из них:

    1: TCP (-sT)

    В этом типе сканирования Nmap отправляет TCP-пакет на порт с установленным флагом SYN. В этом случае может произойти следующее:

    • Цель отвечает пакетом RST – значит, порт закрыт.
    • Цель вообще не отвечает. Возможно, из-за того, что брандмауэр отбрасывает все входящие пакеты и в этом случае порт будет считаться отфильтрованным.
    • Цель отвечает TCP-пакетом с установленными флагами SYN/ACK, значит, порт открыт. А затем Nmap ответит TCP-пакетом с установленным флагом ACK, что завершает трехстороннее рукопожатие TCP.

    Это не очень надежный метод сканирования, так как брандмауэр можно легко настроить на ответные пакеты RST или сбрасывание всех входящих пакетов. Кроме того, этот метод очень медленный, поскольку он ожидает всего трехэтапного рукопожатия TCP.

    2: Сканирование SYN “Half-open” (-sS)

    Сканирование SYN, или так называемое “полуоткрытое”, или “скрытое сканирование” — улучшение по сравнению с предыдущим методом. В предыдущем методе после получения пакета SYN/ACK мы отправляли обратно TCP-пакет с установленным флагом ACK, теперь мы отправляем RST-пакет. Это предотвращает повторные попытки сервера выполнить запросы и значительно сокращает время сканирования.

    Этот метод является усовершенствованием предыдущего, потому что:

    • Он быстрее
    • Может обойти примитивные брандмауэры
    • Часто SYN-сканирование не регистрируется приложениями на портах, поскольку большинство приложений начинают регистрировать соединение только после того, как оно полностью установлено, чего нельзя сказать о SYN-сканировании

    Однако в производственных средах запускать SYN-сканирование не рекомендуется, так как это может привести к выходу из строя некоторых нестабильных приложений. Также следует отметить, что для сканирования SYN требуются привилегии sudo, поскольку оно требует обработки неформатированных пакетов.

    Фактически при запуске с привилегиями sudo nmap по умолчанию использует SYN-сканирование. А в противном случае по умолчанию используется сканирование TCP.

    3: Сканирование UDP (-sU)

    Сканирование UDP менее надежно, чем два предыдущих, поскольку UDP-соединения не имеют статических данных. Это означает, что нет “фидбек механизма”, такого, как TCP. UDP работает по принципу “сделал и забыл” — он отправляет пакеты, направленные на определенные порты, и надеется, что они дойдут. При этом больше внимания уделяется скорости, а не качеству. Однако отсутствие механизма обратной связи затрудняет идентификацию открытых портов.

    При отправке UDP-пакета на целевой порт возможны три сценария:

    • Ответ не получен, тогда nmap помечает порт как open|filtered. В таком случае он отправляет еще один UDP-пакет для повторной проверки и если ответа снова нет, он помечает порт как open|filtered и идет дальше.
    • Он может получить ответ UDP, но это бывает очень редко. В таком случае порт помечается как open.
    • Если порт closed и он получает обратный echo -запрос ICMP, это означает, что порт недоступен.

    Специальные виды сканирования в Nmap

    Кроме этих типов сканирования, есть несколько менее популярных, которые более “скрытны”, чем сканирование TCP SYN. К ним относятся следующие:

    1: Сканирование TCP Null (-sN)

    При сканировании TCP Null у отправленных TCP-пакетов нет установленных флагов. Если порт closed, цель должна ответить RST (согласно RFC).

    2: Сканирование TCP FIN (-sF)

    Этот способ сканирования очень похож на TCP Null, за исключением того, что вместо отправки полностью пустого TCP-пакета он отправляет пакет с установленным флагом FIN, который используется для корректного закрытия соединения. Следовательно, цель должна ответить RST для closed портов, в соответствии с RFC.

    3: Сканирование TCP Xmas (-sX)

    Сканирование TCP Xmas также похоже на два предыдущих метода, за исключением того, что они используют TCP-пакеты с установленными флагами PSH, URG и FIN. Как и в предыдущих двух типах сканирования, этот тип также ожидает пакеты RST для closed портов в соответствии с RFC.

    Ограничения

    Поскольку эти сканирования имеют схожее поведение, они также имеют аналогичные результаты с UDP-сканированием. В этом случае могут быть только три ответа:

    • open|filtered : когда нет ответа, порт классифицируется так, потому что отсутствие ответа может означать только две вещи:
      • Порт открыт
      • Порт защищен брандмауэром, поэтому filtered

      Также отметим, что, хотя RFC 793 требует, чтобы сетевые хосты отвечали на искаженные пакеты TCP-пакетом RST для closed портов и вообще не отвечали для open портов, некоторые системы отвергают это соглашение. Такое поведение в основном наблюдается на серверах Microsoft Windows и некоторых устройствах CISCO, где все некорректно сформированные пакеты отбрасываются по умолчанию.

      Сканирование сети на наличие хостов с помощью Nmap

      Одна из самых важных вещей, которую нужно сделать при подключении к сети — получить список всех активных хостов в сети перед дальнейшим исследованием. Это можно сделать с помощью “Ping Sweep”, который включает отправку ICMP-пакета на все IP-адреса в сети и ожидает ответы. В этом случае активными считаются хосты, ответившие ICMP-пакетом.

      Указать целевые диапазоны IP-адресов можно с помощью дефисов или через CIDR следующим образом:

      Флаг -sn подавляет любое сканирование портов и заставляет nmap полагаться исключительно на эхо-пакеты ICMP (или ARP-запросы при запуске с привилегиями суперпользователя) для идентификации активных хостов в сети. Он также отправляет TCP-пакет SYN на целевой порт 443 и TCP-запрос ACK (TCP SYN, если запущен с привилегиями суперпользователя) на целевой порт 80.

      Скриптовый движок Nmap

      Nmap Scripting Engine (NSE) — это мощное дополнение к Nmap, которое позволяет расширить его функционал. Написанный на языке Lua, он позволяет писать сценарии и автоматизировать многие виды задач (к примеру, тестирование на уязвимости и взлом).

      Несколько полезных категорий:

      • safe: Не влияет на цель
      • intrusive: Небезопасный: может повлиять на цель
      • vuln: Сканировать на наличие уязвимостей
      • exploit: Попытаться использовать уязвимость
      • auth: Попытаться обойти аутентификацию для запущенных служб
      • brute: Попытаться перебрать учетные данные для запущенных служб
      • discovery: Попытка запросить у запущенных служб дополнительную информацию о сети

      Для запуска скрипта нужно указать его в виде –script=<script-name>

      Также можно указать несколько скриптов для одновременного запуска, разделяя их имена запятыми, например –script=<script-name1>,<script-name2>.

      Некоторым скриптам нужен аргумент, который можно указать так –script-args <args>.

      Отдельные скрипты имеют встроенное меню справки, которое можно вызвать с помощью:

      Полный список скриптов можно найти здесь .

      Подводим итоги

      У Nmap есть много бесплатных и хорошо оформленных материалов. Вы можете найти больше информации о флагах, скриптах и многом другом на официальном сайте . Поэкспериментируйте с разными флагами и сценариями и посмотрите, как отличаются их результаты в разных средах.

      Открытые методы сканирования

      Данный метод является основным для сканирования портов по протоколу TCP. Функция connect() позволяет хосту соединиться с любым портом сервера. Если порт, указанный в качестве параметра функции, прослушивается сервером (т.е. порт открыт для соединения), то результатом выполнения функции будет установление соединения с сервером по указанному порту.

      Frame1

      В противном случае, если соединение не установлено, то порт с указанным номером является закрытым.

      Frame2

      Этот метод обладает одним серьезным преимуществом: его может применить любой пользователь, не обладающий никакими привилегиями на хосте. Другое преимущество — скорость исследования. Последовательный перебор портов путем вызова функции connect() для очередного номера порта, определение его состояния и закрытие соединения — достаточно долгий процесс. Однако его можно ускорить, применив метод «параллельного просмотра» с использованием неблокированного соединения (non-blocked socket). Такой метод позволяет определить состояние практически всех портов сервера одновременно.

      Большим недостатком данного метода является возможность обнаружения и фильтрации такого рода сканирования, причем сделать это достаточно легко. Log-файл сканируемого сервера укажет службам, отвечающим за внешние подключения, на наличие многочисленных попыток подключения с одного адреса и ошибок установления соединения (поскольку хост исследующего после соединения с сервером сразу обрывает его), а те, в свою очередь, немедленно заблокируют доступ к серверу для хоста с данным адресом.

      Преимущества:быстрый, безошибочный, не требует дополнительных привилегий

      Недостатки:легко обнаруживается и протоколируется (логируется)

      Сканирование tcp-портов методом reverse-ident (обратной идентификации)

      Протокол ident позволяет определить имя (username или login, указанное при входе в систему) владельца любого запущенного на сервере процесса, связанного с ним, даже если сам этот процесс не инициализировал TCP-соединение.

      Протокол ident иначе называется протоколом аутентификации сервера. За ним зарезервирован 113-й TCP-порт, который используется демоном (синоним драйвера в ОС Windows) identd, выполняющим функции аутентификации согласно протокола ident, для приема запросов и передачи ответов на них. Этот процесс происходит следующим образом.

      Сервер прослушивает 113 порт и ожидает прихода запроса на соединение. Как только соединение установлено, сервер считывает блок данных, характеризующий соединение, для которого необходимо получить информацию аутентификации. В запросе, помимо информации, находящейся в IP и TCP-заголовках, передается небольшой текстовый блок данных, состоящий из двух полей:

      <Порт сервера>,<Порт клиента>

      где <Порт сервера> — это номер порта сервера, на котором запущен identd и о котором необходимо получить информацию, а <Порт клиента> — номер порта на хосте, посылающем запрос серверу, на который сервер должен прислать ответ. Например:

      означает, что клиенту необходимо узнать, кто в настоящее время использует 6191 порт на сервере, и передать эту информацию сервер должен на 23-й порт хоста. Ответ сервера выглядит следующим образом:

      где <Порт сервера> и <Порт клиента> копируются из запроса хоста, <Ответ> представляет собой ключевое слово, определяющее тип ответа, а <Дополн.инф.> является текстовой строкой, содержание которой зависит от типа ответа. Например:

      6193, 23 : USERID : UNIX : stjohns

      6195, 23 : ERROR : NO-USER

      Как и большинство программ, identd имеет некоторые интересные особенности функционирования, позволяющие получить требуемую информацию, не используя стандартный 113 порт и уж тем более не проходя процедуру аутентификации. Так, например, имеется возможность подключиться к http-порту и затем использовать identd чтобы определить, работает ли на сервере пользователь root.

      К сожалению, это может быть сделано только при установлении «полного» TCP-соединения к порту исследуемого сервера, что позволяет системному администратору отследить ваши действия.

      Преимущества:быстрый, не требует дополнительных привилегий, дает важную информацию о хосте

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *