Определение открытых портов на целевой системе является чрезвычайно важным шагом в определении поверхности атаки.
Открытые порты соответствуют сетевым службам, запущенным в системе.
Ошибки программирования или недостатки реализации могут сделать эти сервисы восприимчивыми к угрозам, а также привести к компрометации всей системы.
Для того чтобы проработать возможные векторы атак, мы должны сначала перечислить открытые порты на всех удаленных системах.
Эти открытые порты соответствуют службам, к которым будет обращаться либо UDP, либо TCP трафик. И TCP, и UDP являются транспортными протоколами.
Transmission Control Protocol (TCP) является более распространенным из двух протоколов и обеспечивает связь, ориентированную на соединение.
User Datagram Protocol (UDP) может быть протоколом, не ориентированным на соединение, который иногда используется в сервисах, где скорость передачи данных важнее, чем их целостность.
Метод тестирования на проникновение, используемый для определения этих служб, называется сканированием портов.
В этой статье мы рассмотрим некоторые основные теоретические аспекты сканирования портов, после чего мы сможем легко понять методологию работы любого инструмента для сканирования портов.
Сканирование портов UDP
Поскольку TCP является более широко используемым протоколом транспортного уровня, службы, работающие через UDP, часто забываются.
Несмотря на естественную тенденцию не замечать UDP-службы, перечисление этих служб абсолютно необходимо для получения полного представления о поверхности атаки любой конкретной цели.
Сканирование UDP часто может быть сложным, утомительным и отнимающим много времени.
Важно знать два различных подхода к сканированию UDP.
Первый метод заключается в том, чтобы полагаться исключительно на ответы ICMP port-unreachable.
Этот вид сканирования основывается на идее, что любые порты UDP, не связанные с действующим сервисом, будут возвращать ответ ICMP port-unreachable, а нехватка ответов интерпретируется как признак действующего сервиса.
Хотя этот подход часто эффективен в некоторых обстоятельствах, он также может давать неточные результаты в случаях, когда хост не генерирует ответы port-unreachable, или ответы port-unreachable ограничены по скорости, или фильтруются брандмауэром.
Второй метод заключается в использовании сервис-специфических зондов для получения ответа, который может показать, что ожидаемая служба запущена на целевом порту.
Хотя этот подход часто бывает очень эффективным, он также может отнимать много времени.
Сканирование портов TCP
В этой статье будет рассмотрено множество различных методов сканирования TCP.
Эти методы включают скрытое сканирование, сканирование соединений и зомби сканирование.
Чтобы понять, как работают эти методы сканирования, важно понять, как устанавливаются и формулируются TCP-соединения.
TCP – это протокол, ориентированный на соединение, и данные передаются по TCP только после установления соединения между двумя системами.
Процесс, связанный с установлением TCP-соединения, часто называют трехсторонним рукопожатием.
Это название указывает на три этапа процесса установления соединения.
Пакет TCP SYN отправляется от устройства, желающего установить соединение с портом устройства, с которым оно желает соединиться.
Если служба, связанная с принимающим портом, разрешает соединение, она отвечает запрашивающей системе пакетом TCP, в котором активированы биты SYN и ACK.
Соединение устанавливается в тот момент, когда запрашивающая система отвечает TCP ACK-ответом.
Этот трехэтапный процесс (трехстороннее рукопожатие) устанавливает TCP-сессию между двумя системами.
Все методы сканирования портов TCP выполняют некоторые разновидности этого процесса для выявления живых сервисов на удаленных узлах.
Сканирование по соединению и скрытое сканирование довольно просты для понимания.
При сканировании по соединению необходимо установить полное TCP-соединение для каждого сканируемого порта, то есть для каждого сканируемого порта выполняется полное трехстороннее рукопожатие.
Если соединение успешно установлено, порт считается открытым.
В случае скрытого сканирования полное соединение не устанавливается.
Скрытое сканирование дополнительно называют SYN-сканированием или полуоткрытым сканированием.
Для каждого сканируемого порта на порт назначения отправляется один SYN-пакет, и предполагается, что на каждом порту, который отвечает пакетом SYN+ACK, запущены службы.
Поскольку от инициирующей системы не отправляется окончательный ACK, соединение остается полуоткрытым.
Этот метод часто называют скрытым сканированием, поскольку решения для регистрации, которые регистрируют только установленные соединения, не зафиксируют никаких доказательств сканирования.
Конечным методом сканирования TCP, который будет обсуждаться в этой главе, может быть техника, называемая зомби-сканированием.
Цель зомби-сканирования – создать карту открытых портов на чужой системе без каких-либо доказательств того, что вы взаимодействовали с ней.
Принципы работы зомби-сканирования несколько сложны.
Выполнить метод зомби-сканирования можно с помощью следующих шагов:
- Определим удаленную систему для нашего зомби-хоста. Система должна обладать некоторыми характеристиками, а именно:
- Система должна быть простаивающей и не взаимодействовать активно с другими системами по сети.
- Система должна использовать инкрементную последовательность IPID.
- Отправим пакет SYN+ACK на этот зомби-хост и запишем начальное значение IPID.
- Отправим SYN-пакет с поддельным IP-адресом источника зомби-системы на целевую систему сканирования.
- В зависимости от состояния порта на объекте сканирования произойдет одно из двух следующих событий:
- Если порт открыт, цель сканирования вернет пакет SYN+ACK на зомби-узел, который, по ее мнению, отправил первоначальный запрос SYN. В этом случае зомби-хост ответит на незапрашиваемый пакет SYN+ACK пакетом RST и тем самым увеличит значение своего IPID на единицу.
- Если порт закрыт, цель сканирования вернет RST-ответ зомби-хосту, который, по ее мнению, отправил оригинальный SYN-запрос. Этот RST-пакет не вызовет никакого ответа от зомби, и IPID не будет увеличен.
- Отправим еще один пакет SYN+ACK на зомби-узел и оцените окончательное значение IPID в возвращенном RST-ответе. Если это значение увеличилось на единицу, то порт объекта сканирования закрыт, а если значение увеличилось на два, то порт объекта сканирования открыт.
Именно так работают методы сканирования портов.
Бонус: Дополнительно вы можете изучить, что такое и как работает Токенизация.
В этой статье мы попытались сделать что-то нестандартное, речь не идет о каком-либо инструменте, но если мы используем Kali Linux или работаем в сфере кибербезопасности, то мы должны обладать некоторыми техническими знаниями.
см. также:
- 🖧 Naabu – простой, быстрый и надежный сканер портов
- 🌐 Dome : Быстрый скрипт на Python, который делает активное и/или пассивное сканирование для получения субдоменов
- 🖧 Сканирование веб-приложений с помощью Nuclei
- 🖧 Использование Netcat для сканирования портов
- 🔍 Silver – массовое сканирование IP-адресов на уязвимые службы