5.8. Определение открытых портов

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

Просмотреть открытые порты можно двумя способами. Менее надёжный способ — опросить сетевой стек с помощью команды netstat -an или lsof -i. Этот способ не очень надёжен, так как эти программы не подключаются к компьютеру по сети, а просто определяют, что происходит в системе. По этой причине, эти приложения часто подменяются нападающими. Таким способом взломщики пытаются скрыть свои следы, если они незаконно открыли порты.

Другим более надёжным способом проверки открытых портов является использование сканера портов, например nmap.

Следующая команда, запущенная с консоли, определяет, какие порты ждут TCP-соединений из сети:

nmap -sT -O localhost

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


Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-09-24 13:49 EDT
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1653 ports scanned but not shown below are in state: closed)
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
111/tcp   open  rpcbind
113/tcp   open  auth
631/tcp   open  ipp
834/tcp   open  unknown
2601/tcp  open  zebra
32774/tcp open  sometimes-rpc11
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 12.857 days (since Sat Sep 11 17:16:20 2004)
 
Nmap run completed -- 1 IP address (1 host up) scanned in 5,190 seconds

Здесь видно, что работает portmap, так как запущена служба sunrpc. Однако есть и некая таинственная служба, открывшая порт 834. Чтобы проверить, не связан ли этот порт с какой-либо известной службой, введите:

cat /etc/services | grep 834

Эта команда не возвращает результата. Это означает, что хотя порт находится в зарезервированном диапазоне (от 0 до 1023) и для его открытия нужны права root, он не связан ни с одной известной службой.

Затем проверьте, что о нём сообщит команда netstat или lsof. Чтобы проверить порт 834 с помощью netstat, выполните следующую команду:

netstat -anp | grep 834

Команда возвращает следующий результат:

tcp   0    0 0.0.0.0:834    0.0.0.0:*   LISTEN   653/ypbind

То, что команда netstat показала этот порт, успокаивает, так как злоумышленник, открывший порт на взломанном компьютере, скорее всего, не захочет, чтобы эта команда его вывела. Кроме этого, параметр [p] показывает код процесса (PID) службы, открывшей порт. В данном случае открытый порт принадлежит RPC-службе ypbind (NIS), работающей совместно со службой portmap.

Команда lsof показывает похожие сведения, так как она также может связать открытые порты со службами:

lsof -i | grep 834

Ниже приведена значимая часть результатов команды:

ypbind      653        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      655        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      656        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      657        0    7u  IPv4       1319                 TCP *:834 (LISTEN)

Эти инструменты позволяют узнать о состоянии работающих на компьютере служб многое. Они очень гибки и могут предоставить массу информации о сетевых службах и их конфигурации. Поэтому очень рекомендуется обратиться к страницам man, посвящённым lsof, netstat, nmap и services.