Для сканирования портов в операционной системе Windows существует большое количество программ. Наиболее оптимальной является программа Nmap с графической надстройкой Zenmap.
Программа Nmap предназначена для сканирования сетей с любым количеством объектов, определения состояния объектов сканируемой сети, а также портов и соответствующих им служб. Для этого Nmap использует много различных методов сканирования, таких, как UDP, TCP connect(), TCP SYN, FTP proxy, Reverse-ident, ICMP (ping), FIN, ACK, Xmas tree, SYN и NULL-сканирование.
Nmap также поддерживает большой набор дополнительных возможностей, а именно: определение операционной системы удаленного хоста с использованием отпечатков стека TCP/IP, "невидимое" сканирование, динамическое вычисление времени задержки и повтор передачи пакетов, параллельное сканирование, определение неактивных хостов методом параллельного ping-опроса, сканирование с использованием ложных хостов, определение наличия пакетных фильтров, прямое (без использования portmapper) RPC-сканирование, сканирование с использованием IP-фрагментации, а также произвольное указание IP-адресов и номеров портов сканируемых сетей [9].
Результатом работы Nmap является список отсканированных портов удаленной машины с указанием номера и состояния порта, типа используемого протокола, а также названия службы, закрепленной за этим портом. Порт характеризуется тремя возможными состояниями: "открыт", "фильтруемый" и "нефильтруемый". Состояние "открыт" означает, что удаленная машина прослушивает данный порт. Состояние "фильтруемый" означает, что брандмауэр, пакетный фильтр или другое устройство блокирует доступ к этому порту и Nmap не смог определить его состояние. "Нефильтруемый" означает, что по результатам сканирования Nmap воспринял данный порт как закрытый, при этом средства защиты не помешали Nmap определить его состояние. Это состояние Nmap определяет в любом случае (даже если большинство сканируемых портов хоста фильтруются).
В зависимости от указанных опций, Nmap также может определить следующие характеристики сканируемого хоста: метод генерации TCP ISN, имя пользователя (username) владельца процесса, зарезервировавшего сканируемый порт, символьные имена, соответствующие сканируемым IP-адресам и т.д [5].
Zenmap — официальный графический интерфейс пользователя для программы Nmap Security Scanner. Программа написана на языке Python, и работает на платформах, на которых работают Python и nmap. Распространяется на условиях свободной GNU General Public License.
Часто используемые настройки сканирования могут быть сохранены как профили для повторного использования. Мастер команд поддерживает интерактивное создание командных строк Nmap. Сканированные результаты сохраняются и могут быть просматриваться позже, сравниваться с другими результатами на факт изменений. Результаты сохраняются в поисковой базе данных. Внешний вид работы программы представлен на рисунок 2.24.
Рисунок 2.24 - Внешний вид работы программы Zenmap
Для просмотра содержимого в отсылаемых пакетах применяются декодеры протоколов, с помощью которых можно просматривать заголовки и содержимое сетевых пакетов в читаемом виде. Sniffer Pro LAN позволяет анализировать сетевой трафик в реальном времени. После запуска Sniffer переводит сетевой интерфейс в режим прослушивания и накапливает статистическую информацию о трафике, позволяя отображать ее в табличном или графическом виде. Важной особенностью пакета Sniffer Pro LAN является возможность анализа сетевого трафика за длительный период времени с представлением данных в графическом формате. Sniffer Pro LAN собирает и накапливает статистику, которая может быть отображена в реальном времени в виде "моментального снимка" сетевой активности, сохранена для дальнейшего использования или экспортирования. На рисунке 2.25 представлен внешний вид окна, в котором отображаются результаты работы программы.
Рисунок 2.25 - Внешний вид работы программы Sniffer Pro LAN
Для сканирования портов программой Zenmap необходимо с помощью программы-мастера создать специальные файлы сценариев, в которых указываются методы сканирования. Далее, указав адрес назначения, производится опрос портов. Например, результаты работы могут выглядеть следующим образом:
Starting Nmap 4.62 ( http://nmap.org ) at 2008-04-23 16:30 (Interesting ports on 192.168.50.254:
Not shown: 1699 filtered ports
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
1026/tcp open LSA-or-nterm
1027/tcp open IIS
1723/tcp open pptp
2301/tcp open compaqdiag
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
3389/tcp open ms-term-serv
8080/tcp open http-proxy
MAC Address: 00:1C:C4:79:A1:60 (Hewlett Packard)
Nmap done: 1 IP address (1 host up) scanned in 82.328 seconds
Если определить открытые порты не удалось, результаты могут выглядеть так:
Starting Nmap 4.62 ( http://nmap.org ) at 2008-04-23 16:38 (All 1715 scanned ports on 192.168.50.252 are closed)
MAC Address: 00:1C:C4:79:A1:60 (Hewlett Packard)
Nmap done: 1 IP address (1 host up) scanned in 8.640 seconds
Применяя метод ICMP сканирования, полученные данные выглядят так:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2008-04-25 12:40 EDT
Host 192.168.0.10 appears to be up.
MAC Address: 00:30:48:11:AB:5A (Supermicro Computer)
Nmap finished: 1 IP address (1 host up) scanned in 0.778 seconds
Raw packets sent: 2 (68B) | Rcvd: 1 (46B)#
Метод TCP connect:
Starting nmap 3.81 ( http://www.in secure.org/nmap:/) at 2008-05-10 12:30 EDT
Initiating Connect() Scan against 192.168.0.10 [1663 ports] at 12:30 Discovered open port 3389/tcp on 192.168.0.10
Discovered open port 80/tcp on 192.168.0.10
Discovered open poit 3306/tcp on 192.168.0.10
Discovered open port 445/tcp on 192.168.0.10
Discovered open port 139/tcp on 192.168.0.10
Discovered open port 520/tcp on 192.168.0.10
Discovered open port 135/tcp on 192.168.0.10
The Connect() Scan took 1.45s to scan 1663 total ports.
Host 192.168.0.10 appears to be up ... good.
Interesting ports on 192.168.0.10:
(The 1656 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
520/tcp open efs
3306/tcp open mysql
3389/tcp open ms-term-serv
MAC Address: 00:30:48:11:AB:5A (Supermicro Computer)
Nmap finished: 1 IP address (1 host up) scanned in 2.242 seconds
Raw packets sent: 2 (68B) | Rcvd: 1 (46B)
Метод SYN сканирование:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2008-05-10 12:25 EDT Initiating SYN Stealth Scan against 192.168.0.10 [1663 ports] at 12:25 Discovered open port 80/tcp on 192.168.0.10
Discovered open port 3389/tcp on 192.168.0.10
Discovered open piort 3306/tcp> on 192.168.0.10
Discovered open port 139/tcp on 192.168.0.10
Discovered open port 135/tcp on 192.168.0.10
Discovered open port 520/tcp on 192.168.0.10
Discovered open port 445/tcp on 192.168.0.10
The SYN Stealth Scan took 1.35s to scan 1663 total ports.
Host 192.168.0.10 appears to be up ... good.
Interesting ports on 192.168.0.10:
(The 165 6 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
520/tcp open efs
3306/tcp open mysql
3389/tcp open ms-term-serv
MAC Address: 00:30:48:11:AB:5A (Supermicro Computer)
Nmap finished: 1 IP address (1 host up) scanned in 2.117 seconds Raw packets sent: 1705 (68.2KB) | Rcvd: 1664 (76.5KB)
Метод FIN сканирование:
Starting nmap 3.81 (http://www.insecure.org/nmap/) at 2008-05-10 21:17 EDT
Initiating FIN Scan against 192.168.0.7 [1663 ports] at 21:17
The FIN Scan took 1.51s to scan 1663 total ports.
Host 192.168.0.7 appears to be up ... good.
Interesting ports on 192.168.0.7:
(The 1654 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open|filtered ftp
22/tcp open|filtered ssh
23/tcp open|filtered telnet
79/tcp open|filtered finger
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
514/tcp open|filtered she
ll886/tcp open|filtered unknown
2049/tcp open|filtered nfs
MAC Address: 00:03:47:6D:28:D7 (Intel)
Nmap finished: 1 IP address (1 host up) scanned in 2.276 seconds
Raw packets sent: 1674 (66.9KB) | Rcvd: 1655 (76.1KB)
Метод Xmas сканирование:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2008-05-10 21:18 EDT
Initiating XMAS Scan against 192.168.0.7 [1663 ports] at 21:18
The XMAS Scan took 1.55s to scan 1663 total ports.
Host 192.168.0.7 appears to be up ... good.
Interesting ports on 192.168.0.7:
(The 165 4 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open|filtered ftp
22/tcp open filtered ssh
23/tcp open filtered telnet
79/tcp open|filtered finger
110/tcp open|filtered pop3
111/tcp open filtered rpcbind
514/tcp open filtered shell
886/tcp open|filtered unknown
2049/tcp open|filtered nfs
MAC Address: 00:03:47:6D:28:D7 (Intel)
Nmap finished: 1 IP address (1 host up) scanned in 2.432 seconds
Raw packets sent: 1674 (66.9KB) | Rcvd: 1655 (76.1KB)
Метод Null сканирование:
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2008-05-10 21:19 EDT
Initiating NULL Scan against 192.168.0.7 [1663 ports] at 21:19
The NULL Scan took 1.42s to scan 1663 total ports.
Host 192.168.0.7 appears to be up ... good.
Interesting ports on 192.168.0.7:
(The 165 4 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open|filtered ftp
22/tcp open|filtered ssh
23/tcp open|filtered telnet
79/tcp open|filtered finger
110/tcp open|filtered pop3
111/tcp open|filtered rpcbind
514/tcp open|filtered shell
886/tcp open|filtered unknown
2049/tcp open|filtered nfs
MAC Address: 00:03:47:6D:28:D7 (Intel)
Nmap finished: 1 IP address (1 host up) scanned in 2.251 seconds
Raw packets sent: 1674 (66.9KB) | Rcvd: 1655 (76.1KB)
Используя программу Sniffer Pro LAN можно проанализировать отсылаемые и принимаемые пакеты при различных методах сканирования. Например, при сканировании рабочей станции, которая в данный момент не доступна, методом ICMP результат будет следующим:
ICMP: Echo
Если машина подключена к сети:
ICMP: Echo
ICMP: Echo reply
При сканировании методом TCP connect, ответ с закрытого порта:
TCP: D=80 S=41441 SYN SEQ=3365539736 LEN=0 WIN=5840
TCP: D=41441 S=80 RST ACK=3365539737 WIN=0
Открытый порт:
TCP: D=21 S = 2900 SYN SEQ=121585238 LEN=0 WIN=65535
TCP: D=2900 S = 21 SYN SEQ=121585239 SEQ=2001273213 LEN=0 WIN=33580
TCP: D=21 S = 2900 ACK=2001273214 WIN=65535
TCP: D=21 S = 2900 RST ACK=2001273214 WIN=0
SYN сканирование. Закрытый порт:
TCP: D=113 S=57283 SYN SEQ=2360927338 LEN=0 WIN=3072
TCP: D=57283 S=113 RST ACK=2360927339 WIN=0
SYN сканирование. Открытый порт:
TCP: D=80 S=57283 SYN SEQ=2360927338 LEN=0 WIN=3072
TCP: D=57283 S=80 SYN ACK=2360927339 SEQ=1622899389
TCP: D=80 S=57283 RST WIN=0
FIN сканирование. Закрытый порт:
TCP: D=443 S=62178 FIN SEQ=3532094343 LEN=0
TCP: D=62178 S=443 RST ACK=3532094343 WIN=0
FIN сканирование. Открытый порт:
TCP: D=23 S=62178 FIN SEQ=3532094343 LEN=0 WIN=2048
Xmas сканирование. Закрытый порт:
TCP: D=618 S=36793 FIN URG PUSH SEQ=3378228596 LEN=0 WIN=1024
TCP: D=36793 S=618 RST ACK=3378228596 WIN=0
Xmas сканирование. Открытый порт:
TCP: D=79 S=36793 FIN URG PUSH SEQ=3378228596 LEN=0 WIN=2048
Null сканирование. Закрытый порт:
TCP: D=438 S=36860 WIN=4096
TCP: D=36860 S=438 RST ACK=2135565682 WIN=0
Null сканирование. Открытый порт:
TCP: D=110 S=36860 WIN=1024
В отличие от операционных систем семейства Windows, Unix-системы предпочтительно используют терминальный режим работы для выполнения различных операций. Применение графической оболочки возможно, но не обязательно. Поэтому программы для сканирования портов, в основном, работают в режиме командной строки.
Наиболее распространенной программой для проведения сканирования является Nmap. Рассмотренная версия этой программы (Zenmap) для Windows-систем, программа Nmap является аналогом для систем семейства Unix. Отличием является то, что параметры сканирования задаются не с помощью мастера команд, а вручную. Так как набор команд не изменился, то и формат выходных результатов аналогичен данным программы Zenmap.
Обычно злоумышленники прибегают к сканированию TCP- и UDP-портов удаленного компьютера, чтобы установить, какие из них находятся в состоянии ожидания запросов. Поэтому выявить факт сканирования — значит, установить, в каком месте и кем будет предпринята попытка взлома. Основные методы выявления факта сканирования состоят либо в использовании специальной программы, предназначенной для выявления вторжений на уровне сети (IDS), либо в использовании механизма защиты на уровне отдельного узла.
Для выявления попыток сканирования портов можно также воспользоваться утилитой snort. Эта утилита является одной из программ систем IDS. Ниже приведен пример листинга, содержащего данные о попытке сканирования портов.
[**] spp_portscan: PORTSCAN DETECTED from 192.168.1.10 [**] 05/22-18:48:53.681227 [**] spp_portscan: portscan status from 192.168.1.10: 4 connections across 1 hosts: TCP(O), UDP(4) [**] 05/22-18:49:14.180505 [**] spp_portscan: End of portscan from 192.168.1.10 [**] 05/22-18:49:34.180236
Для платформы UNIX также существуют утилиты для определения попыток сканирования. Например, утилита scanlogd компании Solar Designer, которая выявляет и регистрирует попытки сканирования. Кроме того, утилиту Psionic PortSentry, созданную в рамках проекта Abacus, можно настроить не только на регистрацию, но и на принятие контрмер при выявлении факта активного сканирования. Один из способов борьбы с попытками сканирования портов заключается в автоматической установке для ядра правил фильтрации, когда к уже существующим правилам добавляется новое, запрещающее доступ со стороны узла-нарушителя. Такое правило можно задать в конфигурационном файле утилиты PortSentry. При этом одно и то же правило может отличаться в различных системах. Для системы Linux 2.2.x, в которой имеется поддержка ядра брандмауэра, в файл portsentry.conf нужно добавить следующую запись:
# New ipchain support for Linux kernel version 2.102+ KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -1"
Большинство брандмауэров могут настраиваться на режим обнаружения попыток сканирования. Некоторые брандмауэры умеют выявлять скрытое сканирование. Многие из них, поддерживая режим выявления SYN-сканирования, абсолютно игнорируют FiN-сканирование. Проблемой при выявлении факта сканирования может являться задача анализа огромных системных журналов, накапливаемых при ежедневной работе серверов сети. Для упрощения решения этой задачи можно воспользоваться утилитой Psionic Logcheck. Также необходимо настроить утилиты таким образом, чтобы они реагировали на обнаруженные попытки сканирования в реальном времени. При использовании пороговых значений все предупреждения будут группироваться, а не обрабатываться по одному. Для брандмауэра Firewall-1 с этой целью можно использовать утилиту Ланца Спитцнера (Lance Spitzner) alert, sh. Эта утилита будет выявлять и отслеживать попытки сканирования портов, работая под управлением Firewall-1 в качестве средства защиты, заданного пользователем [28].
Для платформы Windows тоже имеется несколько утилит, предназначенных для выявления попыток сканирования. Можно отметить такую утилиту, как Genius 2.0, разработанную компанией Independent Software для платформ Windows 95/98 и Windows NT. Этот программный продукт предоставляет гораздо больше возможностей, чем простое средство обнаружения TCP-сканирования портов. Утилита Genius отслеживает многочисленные запросы к открытым портам и при обнаружении попыток сканирования отображает на экране предупреждающее диалоговое окно, в котором содержится IP-адрес взломщика и доменное имя его узла.