Инструментальные средства обеспечения безопасности

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


Основной метод сканирования TCP-портов - это установление TCP-соединения connect() (-sT) с портом, чтобы посмотреть, будет ли получен ответ. То же самое делает TCP-клиент, желая установить соединение (законченное трехходовое соединение), за исключением того, что nmap может разорвать соединение, послав пакет RST, как только соединение будет установлено. Можно использовать сканирование RPC (-sR) для сканирования любого открытого для RPC-сервиса порта (такого, как portmapper). Ниже приведены несколько примеров этих способов сканирования.

[bjohnson@originix ~]$ nmap -sT 192.168.1.109

Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 111/tcp open sunrpc 884/tcp open unknown 889/tcp open unknown 6000/tcp open X11

Nmap run completed - 1 IP address (1 host up) scanned in 0 seconds [bjohnson@originix ~]$ nmap -sR 192.168.1.109

Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service (RPC) 22/tcp open ssh 111/tcp open sunrpc (rpcbind V2) 884/tcp open (mountd V1-2) 889/tcp open (mountd V1-2) 6000/tcp open X11 Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds

Обратите внимание, как при сканировании -sR используются RPC-команды для определения, есть ли в наличии работающий RPC-сервис. Nmap исследует тип и версию работающих сервисов rpcbind и mountd. Следующая таблица показывает, как выполняется сканирование -sT, -sR и -sP типов.

Nmap посылает на порт хостаNmap получает от порта хостаNmap отвечаетNmap принимает решение
SYNSYN/ACKACK следом за RSTПорт открыт; хост работает.
SYNRST-Порт закрыт; хост работает.
SYNNothing-Порт блокирован брандмауэром или хост не работает.

Это великолепно, но поскольку вы всего лишь создали TCP-соединение, оно, скорее всего, будет зарегистрировано службой, предоставившей его.


Nmap позволяет сделать много интересного с TCP-пакетами, которые вы используете для сканирования портов. Во-первых, есть SYN-сканирование (-sS), которое создает первую половину TCP-соединения (посылая TCP-пакет с установленным флагом SYN) но затем ведет себя несколько иначе. Если приходит TCP-пакет с установленным флагом RST, nmap решает, что порт закрыт и ничего больше не предпринимает. Однако если приходит ответ (о чем свидетельствует пакет с установленным флагом SYN/ACK), вместо того чтобы подтвердить получение этого пакета, как это было бы при установлении нормального соединения, посылается RST-пакет, как это показано в следующей таблице. Поскольку трехходовое TCP-соединение не завершено, многие сервисы не регистрируют соединение. Поскольку вы осуществляете манипуляции с некоторыми из этих TCP-флагов на низком уровне, вы не можете реализовать эти типы сканирования, не имея полномочий пользователя root в системе.

Nmap посылает на порт хостаNmap получает от порта хостаNmap отвечаетNmap принимает решение
SYNSYN/ACKRSTПорт открыт; хост работает.
SYNRST-Порт закрыт; хост работает.
SYNNothing-Порт блокирован брандмауэром или хост не работает.
Так же как сервисы могут не регистрировать "незавершенное" соединение, некоторые брандмауэры или системы определения вторжений (IDSs) могут быть настроены на поиск таких типов сканирования. У Nmap есть несколько способов сканирования, но и хорошие IDSs-системы могут поймать вас. Вдобавок, брандмауэр может фильтровать подозрительные пакеты и искажать результаты сканирования.

Вы должны были уже понять, что в любой момент, как только вы посылаете TCP-пакет на закрытый порт, стек TCP/IP на другой стороне готов послать в ответ RST-пакет. Что же в этом случае происходит с разрешенными TCP пакетами? Если закрытый порт всегда отвечает пакетами RST, почему бы просто не посылать не имеющие смысла пакеты и не смотреть, что придет в ответ?

FIN-сканирование (-sF) посылает пакеты FIN, которые обычно используются для закрытия соединения.


Однако, поскольку мы посылаем его прежде, чем соединение было установлено, открытый порт должен игнорировать такой мусор. Закрытый порт по-прежнему будет отвечать пакетом RST, как это показано в следующей таблице. Nmap предлагает два способа мусорного сканирования: Xmas tree (-sX) (рождественское) сканирование (которое устанавливает FIN, URG, и PUSH флаги TCP-пакета, расцвечивая его подобно новогодней елке) и null-сканирование (-sN) (которое выключает все флаги, подобно тому, как это делает hping по умолчанию). Поскольку мы совершаем некоторые манипуляции с пакетами на низком уровне, то такое сканирование также требует полномочий пользователя root. Имейте в виду, что не все стеки TCP/IP реализованы корректно. Даже притом, что открытые порты не посылают RST-пакеты в ответ на такие виды проверок, некоторые стеки TCP/IP не следуют этим правилам и посылают ответ в любом случае. Это означает, что вы можете ошибочно сделать положительное предположение при использовании такого сканирования для некоторых типов хостов. Также любой хост, защищенный брандмауэром, может вернуть ложный ответ. Nmap предполагает, что порт открыт, если не получает ничего в ответ. Что если брандмауэр блокирует этот ответ? Такое сканирование более скрытое, но оно и менее аккуратное.

Nmap посылает на порт хостаNmap получает от порта хостаNmap принимает решение
FINNothingПорт открыт, если хост работает и не защищен брандмауэром.
FINRSTПорт закрыт; хост работает.
Иногда nmap может сообщить вам, что порт подвергается фильтрации. Это означает, что влияние брандмауэра или фильтра накладывается на возможность nmap точно определить, открыт или закрыт порт. Некоторые брандмауэры, тем не менее, могут только фильтровать входящие соединения (это означает, что они просматривают только входящие SYN-пакеты на конкретном порту). Если вы хотите проверить правила брандмауэра, запустите ACK-сканирование для хоста, находящегося за брандмауэром. Всякий раз, как ACK-пакет (подтверждение) посылается не как часть существующего соединения, принимающая сторона предположительно посылает пакет RST.


Сканирование ACK (-sA) может использовать этот факт для определения, осуществляется ли блокирование или фильтрация порта. Если получен пакет RST, порт не фильтруется; в противном случае, осуществляется фильтрация, как это показано в следующей таблице. Именно сканирование ACK может показать вам, что конкретный хост защищен брандмауэром.

Nmap посылает на порт хостаNmap получает от порта хостаNmap принимает решение
ACKRSTПорт не защищен брандмауэром; порт может быть открыт или закрыт; хост работает.
ACKNothing or ICMP unreachableПорт блокирован брандмауэром и хост работает.
Поскольку такое сканирование не может сказать, закрыт ли на самом деле порт или открыт, возможно, вы захотите использовать другие виды сканирования в комбинации с ACK-сканированием. Например, вы можете использовать ACK-сканирование в комбинации с SYN-сканированием (-sS), чтобы определить, что хост защищен брандмауэром, который использует полную проверку пакетов или только проверку входящих соединений (SYN-флаг). В следующем примере используется SYN сканирование только 80 порта, открытого на машине 192.168.1.40. Там также сообщается, что порты 21 и 22 фильтруются и nmap не может определить их статус. ACK-сканирование сообщает нам, что все порты на машине открыты, в то время как SYN-сканирование говорит о том, что производится фильтрация! Это означает, что SSH и FTP на машине 192.168.1.40 подвергаются фильтрации с использованием неполной схемы; поскольку SYN-пакеты блокируются, а ACK - пропускаются.

# nmap -sS 192.168.1.40

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.40): (The 1546 ports scanned but not shown below are in state: closed) Port State Service 21/tcp filtered ftp 22/tcp filtered ssh 80/tcp open http Nmap run completed - 1 IP address (1 host up) scanned in 8 seconds # nmap -sA 192.168.1.40

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) All 1549 scanned ports on (192.168.1.40) are: Unfiltered

Nmap run completed - 1 IP address (1 host up) scanned in 7 seconds

Помните, как мы использовали hping в лекции "Системные средства с открытым программным кодом: основы" для подмены исходящего IP-адреса, сканирующего порты и, тем не менее, получали результат? Nmap позволяет вам сделать нечто подобное, применяя Idle-сканирование (-sI). Для этого необходимо найти хост, который не пропускает никакого трафика и имеет TCP/IP-стек с известным IP ID-инкрементом (например, Windows всегда использует 256). За подробной информацией о таком сканировании обращайтесь к примеру использования hping в лекции "Системные средства с открытым программным кодом: основы".


Содержание раздела