Наблюдаем за активностью приложений и использованием портов
Для большинства соединений в компьютерных системах используются протоколы TCP и UDP. Все версии Windows открывают множество портов, обеспечивающих возможность выполнения полезных функций, в частности совместное использование файлов и вызов удаленных процедур (remote procedure call, RPC). Однако программы-«троянцы» могут злоупотреблять портами, открывая лазейки для нападения на компьютеры. Как для диагностики необходимых сетевых служб, так и для обнаружения вредных программ нужно уметь управлять трафиком между компьютерами сети. Первый шаг к этому — обнаружить программы, прослушивающие сетевые порты в компьютерах.
С помощью анализатора сетевых портов, такого как Nmap, можно выявить приложения и сетевые службы, установленные на компьютере, и слушающие порты. Например, при сканировании Web-сервера будут обнаружены открытые порты 80 и 443. Некоторые анализаторы портов позволяют запросить из открытого порта информацию о прослушивающем приложении. Обычно в ответ на запрос поступает текстовый баннер, который содержит информацию о приложении. Однако баннер может быть ложным. Например, захватив баннер, сканер анализатора может сообщить, что порт 80 прослушивается программой Apache. Если используется только Microsoft IIS, это сообщение должно вызвать подозрение, что какая-то другая программа маскируется под Apache. В зависимости от результатов проверки может возникнуть необходимость зарегистрироваться в системе и непосредственно определить приложение, прослушивающее этот порт.
Windows Server 2003 и Windows XP позволяют установить соответствие идентификаторов процессов (process identifier, PID) с открытыми сетевыми портами. Выпуская XP, компания Microsoft модернизировала Netstat, которая теперь поддерживает корреляцию PID - сетевое соединение, однако в программе по-прежнему есть изъяны. Например, Netstat показывает только PID, но не имя процесса. Чтобы узнать имя процесса, необходимо установить соответствие имени и PID с помощью такого инструмента, как Task Manager.
Менее известный инструмент поможет осуществить исследование и анализ сети. Это PortQry, сканер сетевых портов, ориентированный на продукты Microsoft и располагающий функциями мониторинга хост-систем локальной сети.
Обзор PortQry
PortQry 2.0 совместим с Windows 2003, XP и Windows 2000. Он отображает состояние портов TCP и UDP на локальной или удаленной машине. По функциональности PortQry уступает большинству других сканеров сетевых портов, таких как Nmap или бесплатные SuperScan 4.0 и ScanLine компании Foundstone. Но если запустить PortQry в локальном режиме на Windows 2003 или XP, то программа установит соответствие между открытыми портами и сетевыми приложениями-слушателями вплоть до уровня DLL. Кроме того, отчеты PortQry более насыщены информацией, чем отчеты Netstat.
При работе в дистанционном режиме PortQry показывает, закрыт или открыт данный порт. Для некоторых портов, например, LDAP (Lightweight Directory Access Protocol — упрощенный протокол доступа к сетевым каталогам) и RPC, PortQry выдает дополнительную информацию о прослушивающей службе. Например, при запросе LDAP порта UDP 389 PortQry передает полезную информацию о службе LDAP, в том числе о ее схеме, конфигурации и контекстах именования корневого домена; версии LDAP; хост-имени DNS.
PortQry — инструмент командной строки. Однако отдельно распространяемая программа PortQueryUI, которая рассматривается ниже, дополнена графическим интерфейсом для PortQry и несколькими функциями, облегчающими работу с продуктом.
Дистанционное использование PortQry
Чтобы загрузить PortQryV2.exe, следует обратиться на сайт http://www.microsoft.com/downloads и указать в строке поиска имя утилиты. После загрузки анализатора нужно запустить самораспаковывающийся архив, чтобы восстановить файлы в любом каталоге по выбору пользователя. Исполняемый файл 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 выдает следующую информацию:
TCP Port 80 (http service): LISTENING
С помощью других ключей можно настроить поведение PortQry. Ключи -r и -o обеспечивают сканирование диапазона последовательных портов или задают список отдельных портов, соответственно:
portqry -r 10:100 portqry -o 53,80,443
Порт-источник задается ключом -sp, после которого указывается номер порта. Изменить выбираемый по умолчанию протокол можно ключом -p, за которым следуют обозначения UDP или BOTH. Если для сканирования UDP-пакетов используется медленный канал связи, необходимо указать задержку медленного канала с помощью ключа -sl и настроить PortQry на более длительное ожидание ответов UDP от удаленных компьютеров.
Для сканирования порта SNMP нужно применить ключ -cn с последующей строкой имени сообщества SNMP, ограниченной восклицательными знаками:
portqry -cn !community_string!
где 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 для HTTP Secure (HTTPS). Кроме того, PortQry продолжает работать в командной оболочке и выдает информацию обо всех изменениях активности порта. Таким образом, если затем открыть браузер и обратиться к серверу, работающему с IIS, то PortQry сообщит об этом событии и новом установленном соединении (см. экран 1).
Экран 1. Использование PortQry для наблюдения за портом |
Для наблюдения за определенным приложением следует запустить PortQry с ключом -wpid:
portqry -local -wpid PID
где PID — идентификатор процесса приложения. Отслеживая PID, легко контролировать сетевую активность нового приложения. Допустим, требуется определить, какие порты использует Windows Messenger. Известно, что имя выполняемого файла программы — msmsgs.exe, и его можно увидеть в Task Manager. Следует запустить файл msmsgs.exe (или убедиться, что пиктограмма Windows Messenger находится в системной панели), затем запустить Task Manager. Щелкнув на вкладке Processes в Task Manager, можно убедиться, что в ней показан столбец PID. Если столбец отсутствует, нужно щелкнуть в меню View, Select Columns и установить флажок PID (Process Identifier). Необходимо отыскать процесс msmsgs.exe и запомнить его PID, затем открыть другое окно командной строки и запустить PortQry с ключом
-wpid и этим PID.
Экран 2. Пример вывода PortQry при наблюдении за процессом по его PID |
Как показано на экране 2, процесс с PID 2400 ожидает UDP-порт 1127. Если оставаться в режиме наблюдения, то PortQry выводит эту информацию до тех пор, пока не будет обнаружено изменение. PortQry проверяет изменения каждую минуту. Например, если зарегистрироваться в Windows Messenger, то PortQry автоматически выдает итоговую сводку новых действий в командную оболочку (см. экран 3).
Теперь известно, что Windows Messenger прослушивает порт UDP 1127 и использует порт назначения TCP 1863 для связи в процессе регистрации в приложении. Следует отметить, что Windows Messenger инициировал это соединение с удаленным IP-адресом, 207.46.107.118, который соответствует IP-адресу, связанному с узлом msgr.hotmail.com, частью сети Windows Messenger.
Если послать диалоговое сообщение, обнаруживается интересный факт. PortQry сообщает о двух вновь открытых сокетах (сокет — комбинация порта и удаленного IP-адреса). Новые сокеты — еще один порт с получателем TCP 1863 и новый порт с получателем TCP 80 (см. экран 4). TCP-порт 80 используется протоколом HTTP и указывает, что Windows Messenger обращается к удаленному Web-серверу при отправке диалогового сообщения. Спустя несколько минут отсутствия активности сеанс TCP заканчивается, порты закрываются, и PortQry сообщает, что только два первоначальных порта остаются открытыми.
На этом достаточно простом примере наглядно видны некоторые достоинства PortQry. С помощью Task Manager и PortQry можно наблюдать за активностью определенных приложений и распознавать используемые ими порты. Известно, что Windows Messenger задействует TCP-порт 1863, но программа использует и порт для HTTP. Кроме того, сложно наблюдать за конкретным приложением с помощью традиционного анализатора сети, который регистрирует трафик TCP/IP. Netstat выдает аналогичную информацию об открытых портах, но не позволяет отслеживать единственный PID или сообщить только об изменениях, связанных с новой активностью в сети.
PortQryUI
Microsoft предлагает графический интерфейс для PortQry (portqryui.exe). PortQryUI также можно загрузить с сайта http://www.microsoft.com/downloads. В PortQryUI входит версия portqry.exe и некоторые заранее определенные наборы, состоящие просто из групп портов для сканирования. Эти наборы — Domains and Trusts, IP Security (IPSec), Networking, SQL Service, Web Service, Exchange Server, NetMeeting и Miscellaneous. В табл. 1 указаны конкретные порты и протоколы, составляющие эти наборы. Можно создать и собственные группы портов для сканирования, сохранив их в специальном конфигурационном XML-файле.
При сканировании с использованием заранее подготовленного набора PortQryUI связывает воедино несколько запусков PortQry, а затем выводит результаты на экран. Например, если запросить Domains and Trusts, то интерфейс последовательно инициирует сеансы сканирования PortQry всех портов, связанных с Active Directory (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 -p both
выдает сжатый вариант результатов PortQryUI для службы Domains and Trusts. Команду необходимо вводить одной строкой без пробелов между номерами портов.
Таким образом, PortQry позволяет оценить сетевую активность систем Windows. Этот компактный, простой в использовании анализатор особенно полезен в локальном режиме. Программа может стать отличным дополнением к набору инструментов каждого администратора.
Джеф Феллинг - Директор по информационной безопасности компании aQuantive. Автор книги IT Administrator?s Top 10 Introductory Scripts for Windows, издательство Charles River Media. jeff@blackstatic.com