Главная

Monday, 19 February 2018

PortQry - бесплатный сканер сетевых портов.

Всем привет.

Некоторые проекты в недрах Microsoft могут быть отложены или даже стать историей. Иногда не заслуженно. Одним из них был проект по созданию простого сканера сетевых портов под публичным названием PortQry. Последний релиз про Portqry 2.0 Features and Functionality был здесь http://support.microsoft.com/?id=832919.

Остановимся на характеристиках PortQry и методах его использования. Кто знает, может это именно тот инструмент которого нам не хватает в нужную минуту).

Для большинства соединений в компьютерных системах используются протоколы TCP и UDP. Все версии Windows открывают множество портов, обеспечивающих возможность выполнения полезных функций, в частности совместное использование файлов и вызов удаленных процедур (RPC). Однако программы-"трояны" могут злоупотреблять портами, открывая лазейки для нападения на компьютеры. Как для диагностики необходимых сетевых служб, так и для обнаружения вредных программ нужно уметь управлять трафиком между компьютерами сети. Первый шаг к этому - обнаружить программы, прослушивающие сетевые порты в компьютерах.

С помощью анализатора сетевых портов, такого как Nmap, можно выявить приложения и сетевые службы, установленные на компьютере, и слушающие порты. Например, при сканировании Web-сервера будут обнаружены открытые порты 80 и 443. Некоторые анализаторы портов позволяют запросить из открытого порта информацию о прослушивающем приложении. Обычно в ответ на запрос поступает текстовый баннер, который содержит информацию о приложении. Однако баннер может быть ложным. Например, захватив баннер, сканер анализатора может сообщить, что порт 80 прослушивается программой Apache. Если используется только Microsoft IIS, это сообщение должно вызвать подозрение, что какая-то другая программа маскируется под Apache. В зависимости от результатов проверки может возникнуть необходимость зарегистрироваться в системе и непосредственно определить приложение, прослушивающее этот порт.

Windows Server 2003 и Windows XP позволяют установить соответствие идентификаторов процессов (processidentifier, PID) с открытыми сетевыми портами. С версии XP, компания Microsoft модернизировала Netstat, которая поддерживает корреляцию PID - сетевое соединение, однако в программе по-прежнему есть изъяны. Например, Netstat показывает только PID, но не имя процесса. Чтобы узнать имя процесса, необходимо установить соответствие имени и PID с помощью такого инструмента, как TaskManager.

Менее известный инструмент поможет осуществить исследование и анализ сети. Это PortQry, сканер сетевых портов, ориентированный на продукты Microsoft и располагающий функциями мониторинга хостов локальной сети.

Обзор PortQry

PortQry 2.0 совместим с Windows 2003 и выше. Он отображает состояние портов TCP и UDP на локальной или удаленной машине. По функциональности PortQry уступает большинству других сканеров сетевых портов, таких как Nmap или бесплатные SuperScan и ScanLine компании Foundstone. Но если запустить PortQry в локальном режиме на Windows 2003, то программа установит соответствие между открытыми портами и сетевыми приложениями-слушателями вплоть до уровня DLL. Кроме того, отчеты PortQry более насыщены информацией, чем отчеты Netstat.

При работе в дистанционном режиме PortQry показывает, закрыт или открыт данный порт. Для некоторых портов, например, LDAP (LightweightDirectoryAccessProtocol — упрощенный протокол доступа к сетевым каталогам) и RPC, PortQry выдает дополнительную информацию о прослушивающей службе. Например, при запросе LDAP порта UDP 389 PortQry передает полезную информацию о службе LDAP, в том числе о ее схеме, конфигурации и контекстах именования корневого домена; версии LDAP; хост-имени DNS.

PortQry - инструмент командной строки. Однако отдельно распространяемая программа PortQueryUI, которая рассматривается ниже, дополнена графическим интерфейсом для PortQry и несколькими функциями, облегчающими работу с продуктом.

Дистанционное использование PortQry

Исполняемый файл portqry.exe очень мал - всего 140 Кбайт. В командной строке следует перейти к каталогу, в котором установлена утилита, и запустить portqry.exe, чтобы отобразить все параметры запуска. С помощью PortQry можно исследовать удаленные машины, но это медленный и примитивный процесс по сравнению с другими анализаторами портов. Например, в отличие от Nmap, PortQry не позволяет сканировать с использованием специфических пакетных флагов (SYN, FIN).

Чтобы определить, установлен ли Web-сервер по TCP-порту 80 удаленной машины с IP-адресом 192.168.0.8, следует выполнить команду
portqry -n 192.168.0.8 -e 80

Ключ -n задает имя или IP-адрес машины. Ключ -e указывает порт назначения или конечную точку и предшествует номеру порта. По умолчанию PortQry сканирует с использованием протокола TCP, но, как показано ниже, можно указать и другой протокол. Если Web-сервер активен, то PortQry выдает следующую информацию:
TCPPort 80 (httpservice): LISTENING

С помощью других ключей можно настроить поведение PortQry. Ключи -r и -o обеспечивают сканирование диапазона последовательных портов или задают список отдельных портов, соответственно:
portqry -r 10:100
portqry -o 53,80,443
portqry -n myserver.com -e 25
portqry -n 10.0.0.1 -e 53 -p UDP -i
portqry -n host1.dev.reskit.com -r 21:445
portqry -n 10.0.0.1 -o 25,445,1024 -p both -sp 53

Порт-источник задается ключом -sp, после которого указывается номер порта. Изменить выбираемый по умолчанию протокол можно ключом -p, за которым следуют обозначения UDP или BOTH. Если для сканирования UDP-пакетов используется медленный канал связи, необходимо указать задержку медленного канала с помощью ключа -sl и настроить PortQry на более длительное ожидание ответов UDP от удаленных компьютеров.

Для сканирования порта SNMP нужно применить ключ -cn с последующей строкой имени сообщества SNMP, ограниченной восклицательными знаками:
portqry -n host32 -cn !my community name! -e 161 -p udp

где community_string — имя сообщества SNMP. Если не указать правильное имя сообщества, то вместо сведений об открытом или закрытом порте будет получен результат Filtered. С помощью PortQry можно быстро проверить, все ли системы имеют верно заданное имя сообщества, и определить, есть ли машины, настроенные на прием известной строки сообщества Public.

PortQry извлекает полезную информацию из определенных портов. Например, если запрос направлен к порту соответствий конечных точек RPC (TCP-порт 135), то PortQry возвращает информацию обо всех службах, прослушивающих этот порт.

Локальное использование PortQry

Недостатки дистанционного сканирования PortQry компенсируются уникальными локальными функциями. Для активизации локального режима нужно запустить PortQry с ключом -local. Если использовался только ключ -local, то PortQry выдает информацию об использовании всех локальных портов и соответствиях порт-PID. Вместо сортировки данных по открытым портам, PortQry перечисляет их в соответствии с PID. В результате администратор может быстро выяснить, какие приложения располагают открытыми сетевыми соединениями.

С помощью PortQry можно отслеживать изменения состояния конкретного локального порта или PID. Для наблюдения за портом 80 требуется выполнить команду
portqry -local -wport 80

и PortQry выдаст список всех приложений, прослушивающих порт 80. Например, если на системе работает Microsoft IIS, то PortQry сообщает, что служба W3SVC находится в состоянии Listening, и перечисляет другие порты, используемые службой W3SVC, в частности порт 443 для HTTPS. Кроме того, PortQry продолжает работать в командной оболочке и выдает информацию обо всех изменениях активности порта. Таким образом, если затем открыть браузер и обратиться к серверу, работающему с IIS, то PortQry сообщит об этом событии и новом установленном соединении.



Для наблюдения за определенным приложением следует запустить PortQry с ключом -wpid:
portqry -local -wpid PID
где PID — идентификатор процесса приложения. Отслеживая PID, легко контролировать сетевую активность нового приложения. Допустим, требуется определить, какие порты использует WindowsMessenger. Известно, что имя выполняемого файла программы — msmsgs.exe, и его можно увидеть в TaskManager. Следует запустить файл msmsgs.exe (или убедиться, что пиктограмма WindowsMessenger находится в системной панели), затем запустить TaskManager. Щелкнув на вкладке Processes в TaskManager, можно убедиться, что в ней показан столбец PID. Если столбец отсутствует, нужно щелкнуть в меню View, SelectColumns и установить флажок PID (ProcessIdentifier). Необходимо отыскать процесс msmsgs.exe и запомнить его PID, затем открыть другое окно командной строки и запустить PortQry с ключом
-wpid и этим PID.


Как показано на экране 2, процесс с PID 2400 ожидает UDP-порт 1127. Если оставаться в режиме наблюдения, то PortQry выводит эту информацию до тех пор, пока не будет обнаружено изменение. PortQry проверяет изменения каждую минуту. Например, если зарегистрироваться в Windows Messenger, то PortQry автоматически выдает итоговую сводку новых действий в командную оболочку.

Теперь известно, что WindowsMessenger прослушивает порт UDP 1127 и использует порт назначения TCP 1863 для связи в процессе регистрации в приложении. Следует отметить, что WindowsMessenger инициировал это соединение с удаленным IP-адресом, 207.46.107.118, который соответствует IP-адресу, связанному с узлом msgr.hotmail.com, частью сети WindowsMessenger.

Если послать диалоговое сообщение, обнаруживается интересный факт. PortQry сообщает о двух вновь открытых сокетах (сокет - комбинация порта и удаленного IP-адреса). Новые сокеты - еще один порт с получателем TCP 1863 и новый порт с получателем TCP 80. TCP-порт 80 используется протоколом HTTP и указывает, что WindowsMessenger обращается к удаленному Web-серверу при отправке диалогового сообщения. Спустя несколько минут отсутствия активности сеанс TCP заканчивается, порты закрываются, и PortQry сообщает, что только два первоначальных порта остаются открытыми.

На этом достаточно простом примере наглядно видны некоторые достоинства PortQry. С помощью TaskManager и PortQry можно наблюдать за активностью определенных приложений и распознавать используемые ими порты. Известно, что Windows Messenger задействует TCP-порт 1863, но программа использует и порт для HTTP. Кроме того, сложно наблюдать за конкретным приложением с помощью традиционного анализатора сети, который регистрирует трафик TCP/IP. Netstat выдает аналогичную информацию об открытых портах, но не позволяет отслеживать единственный PID или сообщить только об изменениях, связанных с новой активностью в сети.

PortQryUI

Для тех же кто жить не может без окошек Microsoft предлагает графический интерфейс (GUI) для PortQry (portqryui.exe). В PortQryUI входит версия portqry.exe и некоторые заранее определенные наборы, состоящие просто из групп портов для сканирования. Эти наборы - Domains and Trusts, IPSec, Networking, SQL Service, Web Service, Exchange Server, NetMeeting и Miscellaneous.


Можно создать и собственные группы портов для сканирования, сохранив их в специальном конфигурационном XML-файле (config.xml).

К примеру так выглядит секция Networking:
  <Service Name="Networking">
    <Port Name="PPTP" Value="1723" Protocol="TCP"/>
    <Port Name="DNS" Value="53" Protocol="BOTH"/>
    <Port Name="DHCP" Value="67" Protocol="BOTH"/>
    <Port Name="WINS" Value="137" Protocol="BOTH"/>
    <Port Name="SNMP" Value="161-162" Protocol="UDP"/>
    <Port Name="Winsock Proxy Client" Value="1745" Protocol="UDP"/>
  </Service>

При сканировании с использованием заранее подготовленного набора PortQryUI связывает воедино несколько запусков PortQry, а затем выводит результаты на экран. Например, если запросить DomainsandTrusts, то интерфейс последовательно инициирует сеансы сканирования PortQry всех портов, связанных с ActiveDirectory (AD), например NetBIOS, DNS, Kerberos, LDAP, RPC.

Недостаток PortQryUI заключается в том, что программа не работает в локальном режиме, поэтому пользователь не может наблюдать за PID и портами. Поскольку PortQryUI инициирует отдельные проверки PortQry для каждого порта, выходные данные содержат много лишней информации, например повторно указывается время начала сканирования. Можно очистить результаты, просто запустив утилиту для командной строки и указав конкретные порты. Например, команда
portqry -n 192.168.0.8 -o 135,
389,636,3268,3269,53,88,445,
137,138,139,42 -pboth
выдает сжатый вариант результатов PortQryUI для службы DomainsandTrusts. Команду необходимо вводить одной строкой без пробелов между номерами портов.

Таким образом, PortQry позволяет оценить сетевую активность систем Windows. Этот компактный, простой в использовании анализатор особенно полезен в локальном режиме. Программа может стать отличным дополнением к набору инструментов каждого администратора.

Информация о проекте PortQry была представлена Джефом Феллингом, директором по информационной безопасности компании aQuantive. Автор книги IT Administrator's Top 10 Introductory Scripts for Windows, издательство Charles River Media. jeff@blackstatic.com.

Во второй части речь пойдет по PortReport-е. Заходите, будет интересно.

No comments:

Post a Comment

А что вы думаете по этому поводу?