- PVSM.RU - https://www.pvsm.ru -
Весь диапазон IPv4 адресов — это 4-миллиарда IP-адресов. Это кажется огромной цифрой, но весь IPv4 интернет можно полностью просканировать на предмет одного TCP-порта за 40 минут, например найти все веб-серверы в мире или все открытые SSH-порты. При этом достаточно одного сервера и гигабитного канала. Это полезно для исследований, например если вы собираете статистику по используемым технологиям в мире, или оцениваете процент уязвимых сервисов, открытых наружу.
Программа zmap (не путать с nmap) позволяет сканировать огромные диапазоны сетей намного быстрее любого сканера из-за особой архитектуры. В статье мы рассмотрим пример как собрать список всех веб-серверов в мире с помощью zmap. Имея список хостов с открытым HTTP портом, уже можно использовать более интеллектуальный сканер, передавая ему точный список целей.
Для сканирования небольших подсетей традиционно используется Nmap — популярный мультитул с открытым кодом и массой пентестерских плюшек внутри. Он хорошо подходит для сканирования небольших диапазонов и выборочных хостов. У nmap есть собственный движок для написания пользовательских скриптов на языке lua (Nmap Script Engine) и много крутых готовых скриптов. Но nmap плохо подходит для сканирования больших сетей, вроде миллионов или даже миллиардов адресов. Такие задачи займут несколько дней или даже недель. Дело в том, что nmap использует сетевую подсистему операционной системы и на каждый запрос открывается полноценный сокет. Без этого не обойтись для полноценного TCP-подключения, когда нужно пообщаться с сервисом, например сделать GET-запрос на веб-сервер. Но это сильно снижает производительность, когда требуется быстрое SYN-сканирование, где стоит задача только узнать открыт ли порт.
Нам больше подойдут асинхронные сканеры Zmap и Masscan: оба работают значительно быстрее, используют драйвер PF_RING [1] (сокет, значительно ускоряющий захват пакетов) и рандомизируют адреса, чтобы избежать убойного DoS'a. В отличие от Nmap, они не используют системный TCP/IP: первый генерирует голые Ethernet-фреймы, второй использует самописный TCP-стек.
Masscan считается самым быстрым сканером интернета, способным пройтись по всему IPv4 диапазону за шесть минут, но только при нескольких параллельно подключенных физических адаптерах, с одного генерируется исходящий трафик с SYN-пакетам, а на другой приходят ответы. В условиях одиночного подключения доработанный Zmap оказался почти в полтора раза быстрее. Эти рекорды, разумеется, ставились на топовом железе на каналах 10 Гбит/c, и повторить их самостоятельно будет сложно и дорого. На куда более доступном гигабитном подключении Zmap тоже работает быстрее чем Masscan за счёт более эффективного использования ресурсов канала и CPU и справляется примерно за 45-50 минут.
Упрощенная схема работы Zmap и Masscan. Отдельно работает генератор исходящего трафика и обработчик входящих ответов
Если не вдаваться в технические подробности, Zmap и Masscan используют две сущности: генератор исходящего трафика содержащего SYN-запросы и отдельно обработчик входящих ответов. Производительность здесь ограничена только шириной канала и производительностью сетевого интерфейса, а именно лимитом PPS (packets per second). Поэтому процесс сканирования можно разделить на несколько интерфейсов или даже несколько физических хостов, если существует возможность подменять Source IP на адрес обработчика входящих пакетов.
Нужно иметь в виду, что сканер сильно нагружает систему и особенно сетевые интерфейсы, утилизируя весь доступный канал. Если начать сканирование без предупреждения хостера, это будет выглядеть как DDoS и вас скорее всего очень быстро отключат от сети. Также нужно быть готовым, что сканирование всего интернета спровоцирует ответную реакцию — на вас начнут жаловаться. То есть хостеру придет пачка автоматических писем с жалобами «вы нас сканируете».
Так что перед началом своего проекта лучше подготовиться:
scanner-for-educational-project.ivan-ivanov.com
Важно понимать, что zmap генерирует одновременно миллионы TCP-запросов. Если между интернетом и сканирующим сервером будет установлен роутер с NAT, фаерволл с connection tracking, DDoS-защита или любая другая система со stateful фаерволом, пытающаяся отслеживать подключения, она сломается из-за того, что не сможет переварить столько подключений. Поэтому запускать zmap находясь NAT-ом, например за домашним WiFi-роутером, нельзя.
Установите Zmap (инструкция [2])
Протестируйте на чём-нибудь простом, посмотрим соседние веб-сервера с habr.com:
$ zmap -p 80 178.248.237.0/24 -B 100M -o habr.txt
Опции:
Сканирование 254 адресов с помощью zmap заняло несколько секунд
По умолчанию zmap просто складывает найденные адреса в текстовый файл отделяя их переносом строки. Но также может писать результаты в формате json и xml. Опция --output-fields позволяет указать дополнительные поля, которые будет добавлены в вывод.
Попробуем для примера более расширенный формат вывода в json, с указанием порта, на которым пришел ответный запрос и TTL пакета:
$ zmap -p80 --output-module=json --output-fields=ttl,sport,dport,saddr 178.248.237.68 -o habr.com.json
# Посмотрим результат
$ cat habr.com.json
{ "ttl": 58, "sport": 80, "dport": 51309, "saddr": "178.248.237.68" }
Я попробовал запустить сканирование на
Так выглядит сканирование на интерфейсе 200Mbit/s, прогнозируемое время около шести часов:
Даже с каналом в 100 Mbit/s весь интернет можно просканировать за ночь.
Теперь мы можем сказать сколько мире адресов слушают порт 80 и собрать их список. Его можно направить в L7-сканер чтобы проанализировать на application layer на предмет уязвимостей.
Например, получить HTML Title всех веб-серверов в мире с помощью nmap. На вход nmap передаем файл полученный от zmap в обычном формате:
$ nmap -sV -p 80 -v -n --script http-title -iL habr.txt
Автор: Андрей Козлов
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/352775
Ссылки в тексте:
[1] PF_RING: https://www.ntop.org/products/packet-capture/pf_ring/
[2] инструкция: https://github.com/zmap/zmap/blob/master/INSTALL.md
[3] VPS: https://www.reg.ru/?rlink=reflink-717
[4] Image: https://vdsina.ru/eternal-server?partner=habr9
[5] Источник: https://habr.com/ru/post/499750/?utm_source=habrahabr&utm_medium=rss&utm_campaign=499750
Нажмите здесь для печати.