Исследуем сетевые порты

Сетевые порты могут дать важнейшую информацию о приложениях, которые обращаются к компьютерам по сети. Зная приложения, которые используют сеть, и соответствующие сетевые порты, можно составить точные правила для брандмауэра, и настроить хост-компьютеры таким образом, чтобы они пропускали только полезный трафик. Построив профиль сети и разместив инструменты для распознавания сетевого трафика, можно более эффективно обнаруживать взломщиков — иногда просто анализируя генерируемый ими сетевой трафик. Эту тему мы начали рассматривать в первой части статьи, опубликованной в предыдущем номере журнала. Там приводились основные сведения о портах TCP/IP как фундаменте сетевой безопасности. Во второй части будут описаны некоторые методы для сетей и хост-компьютеров, с помощью которых можно определить приложения, прослушивающие сеть. Далее в статье будет рассказано о том, как оценить трафик, проходящий через сеть.

Блокирование сетевых приложений

Поверхность атаки по сети — общепринятый термин для описания уязвимости сети. Многие сетевые нападения проходят через уязвимые приложения, и можно существенно уменьшить площадь атаки, сократив число активных приложений в сети. Другими словами, следует отключить неиспользуемые службы, установить брандмауэр на выделенной системе для проверки законности трафика и составить исчерпывающий список управления доступом (access control list — ACL) для брандмауэра на периметре сети.

Каждый открытый сетевой порт представляет приложение, прослушивающее сеть. Поверхность атаки каждого сервера, подключенного к сети, можно уменьшить, отключив все необязательные сетевые службы и приложения. Версия Windows Server 2003 превосходит предшествующие версии операционной системы, так как в ней по умолчанию активизируется меньше сетевых служб. Однако аудит все же необходим, чтобы обнаружить вновь установленные приложения и изменения в конфигурации, которые открывают лишние сетевые порты.

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

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

Сканирование портов — процесс обнаружения прослушивающих приложений путем активного опроса сетевых портов компьютера или другого сетевого устройства. Умение читать результаты сканирования и сравнивать сетевые отчеты с результатами хост-опроса портов позволяет составить ясную картину трафика, проходящего через сеть. Знание сетевой топологии — важное условие подготовки стратегического плана сканирования конкретных областей. Например, сканируя диапазон внешних IP-адресов, можно собрать ценные данные о взломщике, проникшем из Internet. Поэтому следует чаще сканировать сеть и закрыть все необязательные сетевые порты.

Внешнее сканирование портов брандмауэра позволяет обнаружить все откликающиеся службы (например, Web или электронная почта), размещенные на внутренних серверах. Эти серверы также следует защитить. Настройте привычный сканер портов (например, Network Mapper — Nmap) на проверку нужной группы портов UDP или TCP. Как правило, сканирование портов TCP — процедура более надежная, чем сканирование UDP, благодаря более глубокой обратной связи с ориентированными на соединения протоколами TCP. Существуют версии Nmap как для Windows, так и для Unix. Запустить базовую процедуру сканирования просто, хотя в программе реализованы и гораздо более сложные функции. Для поиска открытых портов на тестовом компьютере я запустил команду

nmap 192.168.0.161

На экране 1 показаны результаты сеанса сканирования — в данном случае компьютера Windows 2003 в стандартной конфигурации. Данные, собранные в результате сканирования портов, показывают наличие шести открытых портов TCP.

Экран 1. Базовый сеанс сканирования Nmap
  • Порт 135 используется функцией отображения конечных точек RPC, реализованной во многих технологиях Windows - например, приложениях COM/DCOM, DFS, журналах событий, механизмах репликации файлов, формирования очередей сообщений и Microsoft Outlook. Данный порт должен быть блокирован в брандмауэре на периметре сети, но трудно закрыть его и одновременно сохранить функциональность Windows.
  • Порт 139 используется сеансовой службой NetBIOS, которая активизирует браузер поиска других компьютеров, службы совместного использования файлов, Net Logon и службу сервера. Его трудно закрыть, как и порт 135.
  • Порт 445 используется Windows для совместной работы с файлами. Чтобы закрыть этот порт, следует блокировать File and Printer Sharing for Microsoft Networks. Закрытие этого порта не мешает соединению компьютера с другими удаленными ресурсами; однако другие компьютеры не смогут подключиться к данной системе.
  • Порты 1025 и 1026 открываются динамически и используются другими системными процессами Windows, в частности различными службами.
  • Порт 3389 используется Remote Desktop, которая не активизирована по умолчанию, но на моем тестовом компьютере активна. Чтобы закрыть порт, следует перейти к вкладке Remote в диалоговом окне System Properties и сбросить флажок Allow users to connect remotely to this computer.

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

Хост-сканирование

Помимо использования сетевого сканера портов, открытые порты на хост-системе можно обнаружить с помощью следующей команды (запускается на хост-системе):

netstat -an

Эта команда работает как в Windows, так и в UNIX. Netstat выдает список активных портов компьютера. В Windows 2003 Windows XP следует добавить параметр -o, чтобы получить соответствующий идентификатор процесса (program identifier — PID). На экране 2 показаны выходные результаты Netstat для того же компьютера, сканирование портов которого выполнялось ранее. Следует обратить внимание на то, что закрыто несколько портов, которые прежде были активны.

Экран 2. Список открытых портов, полученный с помощью Netstat

Аудит журнала брандмауэра

Еще один полезный способ обнаружения сетевых приложений, которые отправляют или получают данные по сети, — собирать и анализировать больше данных в журнале брандмауэра. Записи Deny, в которых приводится информация с внешнего интерфейса брандмауэра, вряд ли будут полезны из-за «шумового трафика» (например, от червей, сканеров, тестирования по ping), засоряющего Internet. Но если записывать в журнал разрешенные пакеты с внутреннего интерфейса, то можно увидеть весь входящий и исходящий сетевой трафик.

Чтобы увидеть «сырые» данные трафика в сети, можно установить сетевой анализатор, который подключается к сети и записывает все обнаруженные сетевые пакеты. Самый широко распространенный бесплатный сетевой анализатор — Tcpdump для UNIX (версия для Windows называется Windump), который легко устанавливается на компьютере. После установки программы следует настроить ее для работы в режиме приема всех сетевых пакетов, чтобы регистрировать весь трафик, а затем подключить к монитору порта на сетевом коммутаторе и отслеживать весь трафик, проходящий через сеть. О настройке монитора порта будет рассказано ниже. Tcpdump — чрезвычайно гибкая программа, с помощью которой можно просматривать сетевой трафик с использованием специализированных фильтров и показывать только информацию об IP-адресах и портах либо все пакеты. Трудно просмотреть сетевые дампы в больших сетях без помощи соответствующих фильтров, но следует соблюдать осторожность, чтобы не потерять важные данные.

Объединение компонентов

До сих пор мы рассматривали различные методы и инструменты, с помощью которых можно обнаружить приложения, использующие сеть. Пришло время объединить их и показать, как определить открытые сетевые порты. Поразительно, как «болтливы» компьютеры в сети! Во-первых, рекомендуется познакомиться с документом Microsoft «Service overview and network port requirements for the Windows Server system» (http://support.microsoft.com/default.aspx?scid=kb;en-us;832017), в котором перечислены протоколы (TCP и UDP) и номера портов, используемые приложениями и большинством основных служб Windows Server. В документе описаны эти службы и используемые ими ассоциированные сетевые порты. Рекомендуется загрузить и распечатать это полезное для администраторов сетей Windows справочное руководство.

Настройка сетевого анализатора

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

Для этого требуется настроить монитор порта (разные поставщики называют его span port или mirrored port) в коммутаторе. Установить монитор порта в коммутаторе Cisco Catalyst компании Cisco Systems не составляет труда. Нужно зарегистрироваться на коммутаторе и активизировать режим Enable, затем перейти в режим configure terminal и ввести номер интерфейса порта коммутатора, на который следует посылать весь контролируемый трафик. Наконец, необходимо указать все отслеживаемые порты. Например, следующие команды обеспечивают мониторинг трех портов Fast Ethernet и пересылку копии трафика в порт 24.

interface FastEthernet0/24
port monitor FastEthernet0/1
port monitor FastEthernet0/2
port monitor FastEthernet0/3
end

В данном примере сетевой анализатор, подключенный к порту 24, будет просматривать весь исходящий и входящий трафик компьютеров, подключенных к первым трем портам коммутатора. Для просмотра созданной конфигурации следует ввести команду

show run

Чтобы сохранить новую конфигурацию, нужно использовать команду

write memory

Первоначальный анализ

Рассмотрим пример анализа данных, проходящих через сеть. Если для сетевого анализа используется компьютер Linux, то можно получить исчерпывающее представление о типе и частоте пакетов в сети с помощью такой программы, как IPTraf в режиме Statistical. Детали трафика можно выяснить с использованием программы Tcpdump.

В таблице приведены статистические выходные данные, собранные с помощью IPTraf в небольшой сети с Active Directory (AD) в течение 15 минут. Для краткости, тестирование проводилось вечером, когда никто из пользователей не обращался в сеть. В примере не показаны все порты Windows, но продемонстрированы приемы оценки портов и их привязки к службам и приложениям.

TCP 22. Наиболее активно работающий сетевой порт. Известно, что он используется программой Secure Shell (SSH), которую я применяю для подключения компьютера Linux с утилитой IPTraf.

UDP 138. Второй по частоте использования — UDP-порт 138, задействованный службой NetBIOS Datagram Service. В упомянутом выше документе Microsoft указывается, что данный порт используется несколькими службами Windows, в том числе Computer Browser, DFS, License, Messenger, Net Logon и Server. В группу портов TCP и UDP 135-139 входит несколько специфических портов, используемых многими приложениями Windows. По всей вероятности, некоторые из этих портов придется держать открытыми, что, к сожалению, открывает доступ к другим приложениям Windows.

TCP 80. Третий порт в списке — TCP-порт 80, который используется для незашифрованного трафика HTTP (Web). Но в режиме Statistics программы IPTraf нельзя определить, указывает ли данный трафик на попытки клиента обратиться к Web-серверу внутри сети или внутренний компьютер просто обращается к Web-серверу в Internet (более подробно о таком сценарии будет рассказано в следующем разделе).

UDP 137 и UDP 53. Эти порты используются службами преобразования имен Windows — в данном случае, NetBIOS и DNS.

UDP 67 и UDP 68. UDP-порты 67 и 68 используются DHCP-сервером для назначения динамических IP-адресов.

UDP 123. Данный порт зарезервирован для протокола Network Time Protocol (NTP) или, в случае Windows, Simple Network Time Protocol (SNTP). Этот протокол синхронизирует время между компьютером и NTP-сервером, например контроллером домена (DC).

Остальные порты получили лишь по одному пакету. Чтобы исследовать их, можно собирать статистику в течение более длительного времени и выявить закономерности, либо параллельно запустить Tcpdump и собрать больше данных, в частности, IP-адреса источника и назначения. Даже из приведенного общего вида можно извлечь информацию об этих пакетах. Например, каждый пакет имеет размер 229 байт; можно предположить, что одно приложение перескакивает между разными портами, но, чтобы утверждать это, требуется дополнительная информация.

Tcpdump

Tcpdump — превосходный инструмент командной строки для анализа сетей, который собирает детальные данные о пакетах в сети. Для того чтобы выяснить, где зарождается HTTP-трафик, можно воспользоваться командой

tcpdump -i eth1 -nq proto TCP
port 80

В данном простом примере требуется лишь узнать IP-адреса компьютеров, использующих HTTP, поэтому были задействованы параметры, которые показывают только данные TCP-порта 80. Параметр -i eth1 указывает анализируемый интерфейс. В нашей тестовой сети eth1 — это сетевой адаптер, подключенный к монитору порта в коммутаторе.

Параметр -nq представляет собой два отдельных параметра: -n предписывает Tcpdump не преобразовывать хост-имен и имен служб, а -q переводит Tcpdump в быстрый (скрытый) режим. Наконец, нужно просматривать только данные трафика TCP-порта 80, поэтому добавлена команда

proto TCP port 80

которая ограничивает объем рассматриваемых данных.

На экране 3 показаны выходные данные команды. Через порт 80 работают только два компьютера в сети 192.168.0.0. Отсюда можно сделать вывод, что компьютер по адресу 192.168.0.112 пытается обратиться к Web-серверу по адресу 192.168.0.7. Теперь можно проверить, находится ли по этому адресу законный Web-сервер, или классифицировать находку иным образом. Список всех параметров приведен на главной странице Tcpdump. Возможности этой программы широки.

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

Подготовка набора правил брандмауэра

Чтобы составить набор правил брандмауэра — особенно в сложных ситуациях, например в демилитаризованной зоне (DMZ), — следует применять все перечисленные выше методы оценки сетевого трафика. С их помощью можно точно установить задействованные сетевые порты. На основе этих данных строится набор правил брандмауэра. В DMZ изолируются компьютеры, которые принимают прямые соединения с Internet (например, внешние почтовые серверы, Web-серверы) от других серверов во внутренней сети. Компьютеры в DMZ также должны устанавливать соединения с некоторыми компьютерами во внутренней сети, поэтому необходимо создать набор правил брандмауэра, который разрешает такое соединение.

Рассмотрим два метода, с помощью которых можно определить списки ACL для правил брандмауэра в тестовой DMZ. Предположим, что Web-серверу в DMZ требуется извлечь данные из системы Microsoft SQL Server во внутренней сети. Вместо туманного правила, которое разрешает соединение между IP-адресом Web-сервера и IP-адресом системы SQL Server, следует составить списки ACL, которые разрешают только обращения к SQL Server.

Один из способов подготовки такого ACL — контролировать монитор порта и составить ACL на основе анализа обнаруженного трафика. Для этого нужно установить монитор порта на DMZ-интерфейсе брандмауэра и активизировать анализатор сети. На данном этапе следует убедиться, что между DMZ и внутренней подсетью правила брандмауэра не действуют. Затем требуется сгенерировать типичный сетевой трафик с помощью Web-приложения, как это делали бы пользователи. После просмотра данных сетевого анализатора нужно записать все уникальные IP-адреса и соединения сетевого порта. Наконец, на основе собранной информации следует составить и разместить списки ACL брандмауэра. В данном примере требуется, чтобы Web-сервер инициировал соединения с SQL Server. SQL Server использует TCP-порт 1433, поэтому в результатах сетевого анализатора должны быть пакеты, направляемые в этот порт. Однако, если Web-сервер является членом домена, DC которого находятся во внутренней сети, можно ожидать интенсивного сетевого трафика от Web-сервера к DC. После анализа результатов анализатора следует разрешить в ACL брандмауэра весь необходимый сетевой трафик.

Второй метод обнаружения портов, необходимых Web-серверу для связи с машиной SQL Server, — метод проб и ошибок, который заключается в создании и развертывании ACL, запрещающего трафик между DMZ и внутренней сетью.

Начав использовать Web-сервер, следует отыскать в журналах брандмауэра блокированные пакеты (вероятно, их будет много). Для каждого блокированного пакета необходимо исследовать и оценить адреса источника и назначения, а также информацию о сетевом порте. Затем составляются списки ACL, которые разрешают полезный трафик. Эту процедуру следует повторять до тех пор, пока из журнала не исчезнут записи Deny для пакетов, пересылаемых между DMZ и внутренней сетью.

Знание — лучшая защита

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


Джеф Феллинг - Директор по информационной безопасности компании Quantive. Автор книги IT Administrator?s Top 10 Introductory Scripts for Windows (издательство Charles River Media). jeff@blackstatic.com