Masscan-ng является форком masscan с поддержкой инкапсулированных соединений SSL/TLS (в частности, HTTPS) и многопоточная обработка пакетов.
Подготовка к установке
Устанавливаем инструменты разработчика
1 | dnf groupinstall 'Development Tools' -y |
и дополнительные, необходимые, библиотеки
1 | dnf install pcre-devel openssl-devel libpcap -y |
Так же, дополнительно создаем симлинк для библиотеки libpcap, без него сканер не будет работать
1 | cd /usr/lib64 ; ln -s libpcap.so.1 libpcap.so |
Установка masscan-ng
Далее ни чего сложного...
Клонируем masscan-ng с репозитория bi-zone
1 2 | git clone https://github.com/bi-zone/masscan-ng cd masscan-ng |
собираем и устанавливаем
1 2 | make make install |
Использование masscan-ng
Использование аналогично nmap. Для сканирования сегмента сети для некоторых портов:
1 | masscan-ng -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 |
Это позволит:
- сканирует подсеть 10.x.x.x и подсети 2603:3001:2d00:da00::x
- сканирует порт 80 и диапазон от 8000 до 8100, или всего 102 порта, в обеих подсетях
Чтобы увидеть полный список опций, используйте функцию --echo. При этом происходит сброс текущей конфигурации и выход из программы. Этот вывод может быть использован в качестве входных данных для программы:
1 2 | masscan-ng -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf masscan-ng -c xxx.conf --rate 1000 |
Проверка баннеров
Masscan-ng может делать больше, чем просто определять, открыты ли порты. Он также может завершить TCP-соединение и взаимодействие с приложением на этом порту, чтобы получить простую "баннерную" информацию.
Masscan-ng поддерживает проверку баннеров для следующих протоколов:
- FTP
- HTTP/HTTPS
- IMAP4
- memcached
- POP3
- SMTP
- SSH
- SSL
- SMBv1
- SMBv2
- Telnet
- RDP
- VNC
Проблема заключается в том, что masscan-ng содержит свой собственный TCP/IP стек, отдельный от системы, на которой он запущен. Когда локальная система получает SYN-ACK от проверяемой цели, она отвечает пакетом RST, который разрывает соединение до того, как masscan-ng сможет перехватить баннер.
Самый простой способ предотвратить это - назначить masscan-ng отдельный IP-адрес. Это будет выглядеть как в одном из следующих примеров:
1 2 | masscan-ng 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200 masscan-ng 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d |
Выбранный адрес должен находиться в локальной подсети и не использоваться другой системой. Masscan-ng предупредит вас о том, что вы допустили ошибку, но вы можете испортить связь с другой машиной на несколько минут, поэтому будьте осторожны.
В некоторых случаях, например, при использовании WiFi, это невозможно. В этих случаях вы можете заблокировать порт, который использует masscan-ng. Это не позволит локальному TCP/IP стеку увидеть пакет, но masscan-ng все равно увидит его, поскольку он обходит локальный стек. Для Linux это выглядит следующим образом:
1 2 | iptables -A INPUT -p tcp --dport 61000 -j DROP masscan-ng 10.0.0.0/8 -p80 --banners --source-port 61000 |
Как сканировать весь Интернет
Хотя программа полезна для небольших внутренних сетей, на самом деле она разработана с учетом всего Интернета. Это может выглядеть примерно так:
1 | masscan-ng 0.0.0.0/0 -p0-65535 |
Сканирование всего Интернета - это плохо. Во-первых, некоторые части Интернета плохо реагируют на сканирование. С другой стороны, некоторые сайты отслеживают сканирование и добавляют вас в бан-лист, что приведет к тому, что вы лишитесь доступа к полезным частям Интернета. Поэтому вы хотите исключить много диапазонов. Чтобы внести в черный список или исключить диапазоны, используйте следующий синтаксис:
1 | masscan-ng 0.0.0.0/0 -p0-65535 --excludefile exclude.txt |
Это просто выведет результаты в командную строку. Вероятно, вы хотите сохранить их в файл. Поэтому вам нужно что-то вроде:
1 | masscan-ng 0.0.0.0/0 -p0-65535 -oX scan.xml |
Это сохранит результаты в XML-файл, что позволит вам легко сбросить результаты в базу данных или что-то еще.
Но это происходит только при скорости по умолчанию 100 пакетов/секунду, что займет целую вечность для сканирования Интернета. Вам нужно ускорить его следующим образом:
1 | masscan-ng 0.0.0.0/0 -p0-65535 --max-rate 100000 |
Это увеличит скорость до 100 000 пакетов в секунду, что позволит просканировать весь Интернет (за вычетом исключений) примерно за 10 часов на порт (или 655 360 часов при сканировании всех портов).
Главное, что следует отметить в этой командной строке, это то, что все эти опции совместимы с nmap. Кроме того, "невидимые" опции, совместимые с nmap, также установлены для вас: -sS -Pn -n --randomize-hosts --send-eth. Аналогично, формат XML-файла вдохновлен nmap. Конечно, есть много различий, потому что асинхронная природа программы приводит к принципиально иному подходу к проблеме.
Приведенная выше командная строка немного громоздка. Вместо того чтобы выводить все в командную строку, можно хранить это в файле. Приведенные выше настройки будут выглядеть следующим образом:
1 2 3 4 5 6 7 | rate = 100000.00 output-format = xml output-status = all output-filename = scan.xml ports = 0-65535 range = 0.0.0.0-255.255.255.255 excludefile = exclude.txt |
Чтобы использовать этот конфигурационный файл, воспользуйтесь параметром -c:
1 | masscan-ng -c myscan.conf |
Это также упрощает работу при повторном сканировании.
По умолчанию masscan-ng сначала загружает конфигурационный файл /etc/masscan-ng/masscan-ng.conf. Любые последующие параметры конфигурации переопределяют то, что находится в этом файле по умолчанию. Именно туда я поместил свой параметр "excludefile", чтобы никогда не забыть его. Он просто работает автоматически.