Реализация сканирования портов веб-сайта

Сканирование портов веб-сайта может показаться простым, но прежде чем запускать команду Nmap на нашей цели, мы должны сначала немного покопаться. Мы собираемся сканировать правильную цель? В этой статье мы подробно рассмотрим, как правильно сканировать порты веб-сайта. Все приведенные ниже примеры были созданы на Kali Linux. В даной статье мы рассмотрим тему реализация сканирования портов веб-сайта.

Общий подход к сканированию портов веб-сайта

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

С технической точки зрения, мы не можем сканировать порты веб-сайта или имени хоста — мы можем сканировать порты только IP-адреса, в который разрешается целевое имя хоста / полное доменное имя (например, www.example.com).

Итак, прояснив это, первое, что мы должны сделать, это выполнить поиск DNS для цели.

Правило № 1: преобразовать имя целевого хоста в IP-адрес(а)

Мы можем использовать любую из следующих команд для выполнения задания:

host www.example.com

dig www.example.com +short

getent ahosts www.example.com

Теперь, когда мы получили все IP-адреса, мы должны убедиться, что они действительно принадлежат нашей цели.

Правило № 2: убедитесь, что вы собираетесь сканировать правильный IP-адрес(а)

Дело в том, что целевой веб-сайт может использовать провайдера CDN (Content Delivery Network), фактически скрывая за ним свой реальный IP-адрес.

Или это может быть балансировка нагрузки между несколькими IP-адресами. Мы никогда не узнаем эти вещи, если немного не покопаемся. Мы обсудим это в следующем разделе.

Правило №3: Выберите правильную стратегию сканирования портов

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

Мы подробно расскажем об этом в заключительном разделе этой статьи.

Почему важно определить, использует ли веб-сайт CDN?

Если целевой веб-сайт использует CDN, это означает, что реальный IP-адрес веб-сайта скрыт за CDN. И IP-адреса, которые мы видим, когда делаем DNS-запросы, принадлежат провайдеру CDN, а не фактическому целевому веб-сайту!

Это, конечно, важная информация. Сканируя IP-адрес CDN, мы, очевидно, сканируем что-то совершенно отличное от того, что мы хотим сканировать.

Как определить, использует ли сайт CDN?

Существует несколько способов идентификации CDN. Мы можем разделить их на следующие две категории:

      • Сторонний онлайн-инструмент — это быстрый и простой способ, но не всегда точный.
      • Ручной способ — это требует от нас ввода команды или двух, но это всегда на 100% точно.

Давайте разберем их.

Способ 1: Онлайн-инструменты для идентификации CDN

Существует ряд онлайн-инструментов, которые могут помочь нам определить, использует ли конкретный веб-сайт CDN или нет. Вот некоторые из бесплатных:

Но, как мы указали выше, иногда эти сторонние инструменты могут давать неточную информацию. Поэтому всегда полезно проверить все вручную, чтобы быть уверенным на 100%. Это также легко сделать, так почему бы не привыкнуть к этому и делать это всегда вручную.

Способ 2: ручной способ идентификации CDN

Сначала мы должны преобразовать имя хоста веб-сайта в IP-адрес(а).

host -t A www.example.com

Затем мы должны найти, кому принадлежат эти IP-адреса в базе данных WHOIS. Это даст нам 100% уверенности.

whois <IP-ADDRESS>

Если мы повсюду видим признаки CDN (такие имена, как Amazon, Cloudflare, Azure и т. д.), то нет никаких сомнений — веб-сайт использует CDN. Вот пример:

A website using Cloudflare CDN

Целевой веб-сайт использует CDN, что теперь?

В подходе тестирования белого ящика или в типичном сценарии VAPT клиент предоставляет имена хостов и IP-адреса всех активов в области как часть информации об области, поскольку цель обычно состоит в том, чтобы протестировать фактические активы в области.

При большем подходе «черного ящика» или в упражнении красной команды нам пришлось бы выяснять это самостоятельно. Клиент не дал нам эту информацию. Поэтому нам пришлось бы каким-то образом раскрывать реальный IP-адрес сайта.

Как раскрыть реальный IP-адрес веб-сайта за CDN?

Хорошая новость заключается в том, что это почти всегда возможно. С другой стороны, может потребоваться более глубокое копание и использование сторонних сервисов, которые не всегда бесплатны. Раскрытие реального IP-адреса за CDN — это тема, выходящая за рамки этой статьи, но давайте кратко упомянем некоторые приемы и методы, которые можно использовать для этого:

        • Изучение заголовков HTTP
        • Проверка SSL-сертификатов
        • Просмотр исторических записей DNS
        • Заставить сайт отправить нам электронное письмо
        • Поиск уязвимости на сайте
        • Изучение известных сетевых диапазонов и IP-адресов цели

Подробную информацию об этих методах можно найти по следующим ссылкам:

Сайт на нескольких IP-адресах

Иногда целевой веб-сайт использует несколько IP-адресов и некоторую форму балансировки нагрузки. Например, на следующем снимке экрана показан веб-сайт, использующий балансировку нагрузки с помощью циклического перебора DNS. Обратите внимание, как порядок IP-адресов меняется каждый раз, когда мы выполняем поиск DNS:

A website using load balancing using DNS round robin

В подобных случаях важно сканировать порты всех IP-адресов, чтобы обеспечить полное покрытие. Некоторые из этих систем могут быть настроены иначе, чем другие, и, просканировав их все, мы можем обнаружить что-то важное.

Итак, к этому моменту мы должны были собрать все IP-адреса, принадлежащие целевому веб-сайту. Теперь давайте приступим к фактическому сканированию портов.

Стратегии сканирования портов

Когда дело доходит до сканирования портов, нам, возможно, придется рассмотреть различные стратегии в зависимости от характера теста.

Сценарий white box / VAPT

Во время тестирования white-box или в типичном сценарии VAPT цель обычно состоит в том, чтобы найти как можно больше уязвимостей.

Поэтому мы всегда сканируем все порты на удаленных хостах, что гарантирует полное покрытие и отсутствие пропуска служб, работающих на целевых хостах.

Следующая команда является типичным способом сканирования портов веб-сайта во время упражнения VAPT:

nmap -n -Pn -sS -p0-65535 -oA output <IP-ADDRESS>

        • -n (без разрешения DNS)
        • -Pn (без обнаружения узла, рассматривать узел как подключенный к сети)
        • -sS (выполнить сканирование TCP SYN)
        • -p0-65535 (просканировать все порты)
        • -oA (вывод во всех 3-х форматах — nmap, gnmap, xml)

С точки зрения времени мы оставляем его по умолчанию, что означает, что мы используем «обычный» шаблон времени (-T3). Это определенно не скрыто, и поэтому очень вероятно, что его обнаружат.

Мы делаем это только тогда, когда знаем, что нас не заблокируют. Обычно мы заранее просим клиента внести наш исходный IP-адрес в белый список, чтобы нас не заблокировали.

Это также полезно для клиента и его команды SOC (Security Operations Center), чтобы различать наши действия по тестированию и потенциальную реальную атаку.

Black-box / сценарий «красной команды»

Теперь, в подходе «black box» или в учениях красной команды, мы бы поступили иначе. Цель здесь больше не в том, чтобы найти как можно больше уязвимостей, но, конечно, нам бы этого хотелось. Мы все равно хотели бы добиться полного охвата.

В этих сценариях мы также должны быть скрытными, чтобы не быть заблокированными. Если нас заблокируют, то наши результаты будут неточными и неполными. Мы также «сожжем» наш исходный IP-адрес, и нам, возможно, придется получить новый (например, арендовать новый экземпляр VPS).

Итак, для того, чтобы наше сканирование портов было скрытым, самым важным аспектом является скорость. Мы просто должны делать это достаточно медленно, чтобы оставаться незамеченными. Вот наши варианты с Nmap:

Nmap option Timing template name Speed
-T2 polite 1 packet every 0.4 seconds
-T1 sneaky 1 packet every 15 seconds
-T0 paranoid 1 packet every 5 minutes

Для получения более подробной информации о шаблонах таймингов см. официальную документацию Nmap (ссылка).

Таким образом, если мы хотим провести полное сканирование портов в разумные сроки, мы должны использовать как минимум «вежливый» шаблон (-T2). Это может закончить работу за 7,2 часа. Команда будет:

nmap -T2 -n -Pn -sS -p0-65535 -oA output <IP-ADDRESS>

Но это, вероятно, все равно будет обнаружено! В качестве альтернативы можно использовать «подлый» шаблон (-T1), для выполнения которого потребуется 11 дней. У вас есть 11 дней, чтобы выполнить полное сканирование портов? Это все еще выполнимо, но если у нас этого нет, то мы должны компенсировать. Мы должны найти баланс между охватом и необходимым временем.

Нахождение правильного баланса..

Следующие 5 примеров — это то, что мы обычно используем в упражнениях «черный ящик» или «красная команда». Обычно мы используем эти команды, когда клиент не вносит нас в белый список. В зависимости от проекта и выделенных временных рамок нам нужно выбрать наиболее подходящую стратегию сканирования.

Следующие команды используют «скрытый» временной шаблон (-T1), чтобы избежать обнаружения, но при этом предоставить результаты в разумные сроки. Обратите внимание, что мы сканируем только порты TCP.

Не стесняйтесь использовать любую из этих команд в соответствии с вашей текущей ситуацией и потребностями:

Сканировать порты веб-сервера (56 портов)

nmap -T1 -n -Pn -sS -p80-90,443,4443,8000-8009,8080-8099,8181,8443,9000,9090-9099 -oA output <IP-ADDRESS>

Необходимое время: 14 минут.

Сканировать порты веб-сервера и другие интересные порты (93 порта)

nmap -T1 -n -Pn -sS -p21-23,25,53,80-90,111,139,389,443,445,873,1099,1433,1521,1723,2049,2100,2121,3299,3306,3389,3632,4369,4443,5038,5060,5432,5555,5900-5902,5985,6000-6002,6379,6667,8000-8009,8080-8099,8181,8443,9000,9090-9099,9200,27017 -oA output <IP-ADDRESS>

Необходимое время: 24 минуты.

Сканировать 200 самых популярных портов

nmap -T1 -n -Pn -sS --top-ports 200 -oA output <IP-ADDRESS>

Необходимое время: 50 минут.

Сканировать 1000 самых популярных портов

nmap -T1 -n -Pn -sS --top-ports 1000 -oA вывод <IP-АДРЕС>

Необходимое время: 4 часа 10 минут.

Сканировать 4790 самых популярных портов (аналогично сканеру Nessus)

nmap -T1 -n -Pn -sS --top-ports 4790 -oA output <IP-ADDRESS>

Необходимое время: 20 часов.

Советы по длительному сканированию портов

Запускайте их безопасно

Если вы используете выделенный Linux VPS для своей деятельности, убедитесь, что вы запускаете сканирование портов в терминальном мультиплексоре, таком как GNU Screen или tmux.

Это предотвратит случайное прерывание сканирования в случае нарушения соединения между вами и вашим VPS.

Обнаружение блокировки

Во время сканирования портов рекомендуется время от времени проверять, не обнаруживаются ли ваши сканирования и не блокируетесь ли вы.

Для этого мы можем просто проверить, можем ли мы по-прежнему подключаться к порту веб-сервера, который, как мы знаем, открыт (например, порт tcp/80).

Мы можем легко сделать это с помощью утилиты Netcat следующим образом:

nc -nvz <IP-ADDRESS> 80

        • -n (без разрешения DNS)
        • -v (подробный вывод)
        • -z (режим нулевого ввода-вывода, отчет только о состоянии соединения)

Если вы хотите, чтобы эта проверка порта выполнялась автоматически, скажем, каждый час, вы можете просто создать еще одно окно терминала screen/tmux на своем VPS и выполнить там однострочник:

while true; do date; nc -nvz <IP-ADDRESS> 80; sleep $((60*60)); done

Теперь у вас будет хороший отчет о ситуационной осведомленности каждый час:

Web server port check during scanning

Кстати..

Знаете ли вы, как Nmap использует опцию «-top-ports» и какие это самые популярные (наиболее популярные) порты? Просто запустите следующую однострочную команду, чтобы узнать 100 лучших портов TCP:

sort -k3 -nr /usr/share/nmap/nmap-services | grep '/tcp' | head -100

Вывод

Мы искренне надеемся, что эта статья предоставила все необходимые сведения о том, как правильно сканировать порты веб-сайта. Следуя 3 правилам, упомянутым выше, сканирование портов веб-сайта может быть очень простым и понятным.

 

 

 

 

 

 

 

 

 

 

 

 

      •  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 1 Average: 5]

Leave a reply:

Your email address will not be published.