Отчет можно использовать для активного исследования брандмауэров для перечисления правил блокировки исходящих или входящих сообщений. Используйте его правильно, и вы сможете получить конфигурацию брандмауэра.
В основном я разработал его, чтобы помочь себе в устранении неполадок с распределенным сетевым сканером, который я сейчас разрабатываю.
Этот фрагмент кода представляет собой всего лишь анализатор PCAP, а это означает, что вам необходимо предоставить ему правильно полученный дамп сетевых пакетов, чтобы он работал. Затем инструмент распечатает порты, которые (согласно PCAP) заблокированы брандмауэром.
Чтобы использовать его, вам необходим доступ как минимум к двум машинам. Один находится за брандмауэром, который вы хотите протестировать, а другой — с другой стороны.
Есть два возможных варианта использования:
Вам понадобятся такие инструменты, как tcpdump, tshark или Wireshark, для захвата и сохранения сетевого трафика (или любой другой анализатор), а также такие инструменты, как nmap или Masscan, для создания и отправки зондирующих пакетов. В следующих примерах я буду использовать Masscan и tcpdump.
В случае, если прямо перед внешней машиной есть еще один брандмауэр (а не тот, который находится за брандмауэром, который вы собираетесь тестировать), было бы лучше знать, каковы внутренние правила. Но это не обязательно, вы все равно можете разобраться, проведя больше тестов из разных мест.
Выполнение следующих шагов поможет вам получить точный результат.
Давайте представим, что мы хотим перечислить исходящие правила, потому что мы планируем позже запустить сетевой сканер на этом компьютере и поэтому хотим быть уверены, что исходящий трафик не будет заблокирован нашим выходным брандмауэром.
Машина за брандмауэром имеет IP-адрес aaaa
, а внешняя машина — bbbb
. Эта вторая машина будет той, на которой мы будем запускать анализатор пакетов (в данном случае tcpdump
), и первой, которую мы собираемся настроить.
Приобретение PCAP
Здесь нам нужно запустить анализатор пакетов, чтобы увидеть, какие зондирующие пакеты не дойдут до места назначения. Учитывая, что на этой машине есть общедоступный IP-адрес bbbb
связанный с сетевым интерфейсом eth0
, и брандмауэр не работает . Мы запускаем tcpdump следующим образом
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
будет сгенерирован файл re-port.pcap
, который после завершения теста мы передадим этому инструменту. Но эту часть мы увидим позже.
Зондирование трафика
Мы собираемся сгенерировать 65535 SYN
-пакетов с машины за брандмауэром и отправить их на bbbb
.
Для этого я использую masscan
. Это позволяет нам установить скорость с помощью опции --rate
и количество пакетов, обрабатываемых для каждого указанного порта, с помощью опции --retries
. Оба этих параметра важны для нас, потому что мы должны быть уверены, что все пакеты, которые могут достичь пункта назначения, дойдут до него. В зависимости от пропускной способности источника/назначения пакеты могут быть потеряны из-за высокой скорости отправки. В этом тесте нам нужно действовать медленно и безопасно. У нас в Италии есть поговорка: кто идет медленно, тот далеко идет, и мне кажется, здесь она уместна.
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
Проведя несколько тестов, я выяснил, что 350 пакетов в секунду, отправленных дважды на порт, всего 131072 (128 тыс.) пакетов, занимают около девяти минут без потери пакетов.
Перечислить правила брандмауэра
На этом этапе мы можем использовать Re-port
для получения списка закрытых портов. Вернитесь на первую машину, остановите анализатор пакетов, нажав CTRL+C
, и скопируйте re-port.pcap
в каталог, где у вас есть инструмент Re-port. Теперь вы можете запустить его следующим образом:
./enumerate.py re-port.pcap
В предыдущих примерах перечислялись правила блокировки TCP. Если вам нужен список всех заблокированных портов UDP, выполните описанные выше шаги, изменив команды следующим образом:
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
Запустите ./enumerate.py --help, чтобы отобразить все параметры.
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
Отчет — это класс Python, и вы можете использовать/расширять его по своему усмотрению.
Он является итеративным, и вы используете его в операторе with
.
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
или
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@ r4d10n: за простую идею этого инструмента.