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

В этом руководстве мы рассмотрим некоторые инструменты и методы, которые вы можете использовать для проверки правил брандмауэра. Это некоторые из тех же инструментов, которые могут использовать злоумышленники, поэтому вы сможете увидеть, какую информацию они могут найти, сделав запросы ваших серверов.

Предпосылки

  • Сервер с Ubuntu 24.04 в качестве ОС
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя

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

Инструменты, которые мы будем использовать для тестирования политики брандмауэра

Есть довольно много различных инструментов, которые вы можете использовать для проверки нашей политики брандмауэра. Некоторые из них имеют перекрывающуюся функциональность. Мы не будем использовать все возможные инструменты. Вместо этого мы рассмотрим некоторые общие категории инструментов аудита и рассмотрим инструменты, которые мы будем использовать в этом руководстве.

Анализаторы пакетов

Анализаторы пакетов могут использоваться для просмотра всего сетевого трафика, который проходит через интерфейс в мельчайших деталях. Большинство анализаторов пакетов имеют возможность работать в режиме реального времени, отображая пакеты по мере их отправки или получения, или записывать информацию пакета в файл и обрабатывать ее в более позднее время. Анализ пакетов дает вам возможность видеть на гранулярном уровне, какие типы ответов ваши целевые машины отправляют обратно на хосты в открытой сети.

Для целей этого руководства мы будем использовать инструмент tcpdump. Это хороший вариант, потому что он мощный, гибкий и вездесущий в системах Linux. Вы будете использовать его для захвата необработанных пакетов, когда мы проведем наши тесты, если нам понадобится расшифровка для последующего анализа. Некоторые другие популярные варианты - Wireshark (или tshark, его двоюродный брат командной строки) и tcpflow, которые могут объединять целые разговоры TCP организованным образом.

Портовые сканеры

Чтобы генерировать трафик и ответы для захвата анализатора пакетов, вы будете использовать сканер портов. Портовые сканеры могут использоваться для создания и отправки различных типов пакетов на удаленные хосты, чтобы определить тип трафика, который принимает сервер. Вредоносные пользователи часто используют это как инструмент обнаружения, чтобы попытаться найти уязвимые службы для использования (в первую очередь, это одна из причин использования брандмауэра), поэтому вы будете использовать это, чтобы попытаться увидеть, что может обнаружить злоумышленник.

Для этого руководства вы будете использовать инструмент картирования сети nmap и сканирования портов. Вы можете использовать nmap для отправки пакетов разных типов, чтобы выяснить, какие службы находятся на вашей целевой машине и какие правила брандмауэра защищают ее.

Настройка аудиторской машины

Прежде чем начать, вы должны убедиться, что у нас есть необходимые инструменты. Вы можете получить tcpdump и nmap из репозиториев Ubuntu. Запустите обновление apt update для обновления локальных списков пакетов, а затем установите их с установкой apt install:

Обновите систему

Свежая установленная Ubuntu 24.04 требует обновления пакетов до последних доступных версий.

1
sudo apt update -y && sudo apt upgrade -y
1
sudo apt install tcpdump nmap

Затем создайте каталог, в котором вы можете хранить результаты сканирования:

1
mkdir ~/scan_results

Чтобы убедиться, что вы получаете чистые результаты, выйдите из любых сессий, которые могут быть открыты между вашей системой аудита и целевой системой. Это включает в себя сеансы SSH, любые соединения HTTP (S), которые вы могли установить в веб-браузере, и т. Д.

Сканирование цели для открытых портов TCP

Теперь, когда наш сервер и файлы готовы, вы начнете сканирование целевого хоста для открытых портов TCP.

На самом деле есть несколько TCP-сканов, которые nmap умеет делать. Лучшее, что обычно начинается с сканирования SYN, также известного как «полуоткрытое сканирование», потому что оно никогда не обсуждает полное соединение TCP. Это часто используется злоумышленниками, так как он не регистрируется на некоторых системах обнаружения вторжений, потому что он никогда не завершает полное рукопожатие.

Настройка захвата пакета

Перед сканированием вы настроите tcpdump для захвата трафика, генерируемого тестом. Это поможет вам более глубоко проанализировать отправленные и полученные пакеты, если это необходимо. Создайте каталог внутри результатов ~/scan_results, чтобы вы могли хранить файлы, связанные с вашим сканированием SYN, вместе:

1
mkdir ~/scan_results/syn_scan

Вы можете начать захват tcpdump и записать результаты в файл в каталоге ~/scan_results/syn_scan со следующей командой:

1
sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

По умолчанию tcpdump будет работать на переднем плане. Чтобы запустить сканирование nmap в том же окне, вам нужно приостановить процесс tcpdump, а затем перезапустить его в фоновом режиме.

Мы можем приостановить рабочий процесс, нажав Ctrl+Z:

1
2
3
Output
^Z
[1]+  Stopped                 sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

Теперь вы можете перезапустить работу в фоновом режиме, набрав bg

Вы должны получить аналогичную линию вывода, на этот раз без метки «Stopped» и с амперсандом в конце, чтобы указать, что процесс будет запущен в фоновом режиме (т.е. больше не будет блокировать ваш терминал):

1
2
Output
[1]+ sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets &

Команда теперь работает в фоновом режиме, наблюдая за любыми пакетами, проходящими между вашим аудитом и целевыми машинами. Теперь мы можем запустить сканирование SYN.

Запустите SYN Scan

С помощью tcpdump, записывающего ваш трафик на целевую машину, вы готовы запустить nmap. Вы можете запустить nmap с этими флагами:

1
sudo nmap -sS -Pn -p- -T4 -vv --reason -oN ~/scan_results/syn_scan/nmap.results target_ip_addr 

Даже если шаблон времени установлен на уровне 4, сканирование, вероятно, займет некоторое время, поскольку он проходит через 65 535 портов.

Остановите захват пакета tcpdump

Как только сканирование будет завершено, вы можете вывести наш процесс tcpdump на первый план и остановить его.

Выведите его из фона, используя fg, для «передний план»:

Остановите процесс, нажав Ctrl+C.

Анализ результатов

Теперь у вас должно быть два файла в каталоге ~/scan_results/syn_scan. Один называется пакетами, генерируемыми при запуске tcpdump, а другой — nmap, называемым nmap.results.

Давайте посмотрим на nmap.results. Сначала файл результатов:

1
less ~/scan_results/syn_scan/nmap.results 

Выделенная выше область содержит основные результаты сканирования. Вы можете сделать вывод, что порт 22 и порт 80 открыты на сканируемом хосте, чтобы обеспечить трафик SSH и HTTP. Также было закрыто 65 533 порта. Другой возможный результат будет «фильтрован». Фильтрация означает, что эти порты были идентифицированы как остановленные чем-то вдоль сетевого пути. Это может быть брандмауэр на целевом устройстве, но это также могут быть правила фильтрации на любом из промежуточных узлов между аудиторской и целевой машинами.

Чтобы увидеть фактический трафик пакетов, который был отправлен и получен от цели, вы можете прочитать файл пакетов обратно в tcpdump, например:

1
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets | less

Этот файл содержит весь разговор, который состоялся между двумя хостами. Вы можете фильтровать несколькими способами.

Например, для просмотра только трафика, отправленного на цель, можно ввести:

1
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'dst target_ip_addr' | less

Аналогично, чтобы просмотреть только трафик отклика, вы можете изменить dst на src:

1
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr' | less

Открытые порты TCP отвечают на эти запросы пакетом SYN. Мы можем искать ответы для этого типа с помощью такого фильтра:

1
sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr and tcp[tcpflags] & tcp-syn != 0' | less 

Это покажет вам только успешные ответы SYN и должно соответствовать портам, которые вы видели в беге nmap:

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

Сканирование цели для открытых портов UDP

Теперь, когда у вас есть хорошее представление о том, как запустить эти тесты, вы можете выполнить аналогичный процесс для сканирования открытых портов UDP.

Настройка захвата пакета

Опять же, создайте каталог для хранения ваших результатов:

1
mkdir ~/scan_results/udp_scan

Начните снова ловить tcpdump. На этот раз запишите файл в новый каталог ~/scan_results/udp_scan:

1
sudo tcpdump host target_ip_addr -w ~/scan_results/udp_scan/packets

Приостановите процесс и поместите его на задний план, введя Ctrl+Z, а затем запустите bg:

Запустите UDP Scan

Теперь вы готовы запустить UDP-сканирование. Из-за характера протокола UDP сканирование обычно занимает значительно больше времени, чем сканирование SYN. На самом деле, это может занять больше дня, если вы сканируете каждый порт в системе. UDP является протоколом без подключения, поэтому отсутствие ответа может означать, что порт цели заблокирован, что он был принят или что пакет был потерян. Чтобы попытаться различить их, nmap должен повторно передавать дополнительные пакеты, чтобы попытаться получить ответ.

Большинство флагов будут такими же, как вы использовали для сканирования SYN. Единственным новым флагом является:

  • -sU: Это говорит nmap для выполнения UDP-сканирования.

Ускорение UDP-теста

Если вы беспокоитесь о том, сколько времени займет этот тест, вы можете сначала протестировать только подмножество портов UDP. Вы можете протестировать только 1000 наиболее распространенных портов, оставив флаг -p. Это может значительно сократить время сканирования. Если вы хотите получить полную картину, вам придется вернуться позже и отсканировать весь диапазон портов.

Поскольку вы сканируете свою собственную инфраструктуру, возможно, лучшим вариантом для ускорения сканирования UDP является временное отключение ограничения скорости ICMP в целевой системе. Обычно хосты Linux ограничивают ответы ICMP до 1 в секунду (это, как правило, хорошо, но не для нашего аудита), что означает, что полное сканирование UDP займет более 18 часов. Вы можете проверить эту настройку на целевой машине, набрав:

1
sudo sysctl net.ipv4.icmp_ratelimit
1
2
Output
net.ipv4.icmp_ratelimit = 1000

«1000» — это количество миллисекунд между ответами. Вы можете временно отключить ограничение скорости на целевой системе, набрав:

1
sudo sysctl -w net.ipv4.icmp_ratelimit=0 

Очень важно вернуть это значение после теста.

Запуск теста

Обязательно запишите результаты в каталог ~/scan_results/udp_scan. Все вместе команда должна выглядеть так:

1
sudo nmap -sU -Pn -p- -T4 -vv --reason -oN ~/scan_results/udp_scan/nmap.results target_ip_addr

После завершения сканирования вы должны вернуть ограничение скорости ICMP (если вы его изменили) на целевую машину:

1
sudo sysctl -w net.ipv4.icmp_ratelimit=1000

Остановите захват пакета tcpdump

Верните процесс tcpdump на передний план вашей аудиторской машины, выполнив fg:

Затем остановите захват пакета с помощью Ctrl+C.

Анализ результатов

Теперь вы можете посмотреть сгенерированные файлы.

Полученный файл nmap.results должен быть аналогичен последнему результату:

1
less ~/scan_results/udp_scan/nmap.results

Ключевым различием между этим результатом и результатом SYN ранее, вероятно, будет количество портов, помеченных как открытые. Это означает, что nmap не может определить, означает ли отсутствие ответа, что служба приняла трафик, или он был сброшен каким-либо брандмауэром или фильтрующим механизмом по пути доставки.

Анализ выхода tcpdump также значительно сложнее, потому что нет флагов подключения и потому что вы должны соответствовать ответам ICMP на запросы UDP.

Вы можете увидеть, сколько пакетов nmap было отправлено в порты, которые были зарегистрированы как открытые, с помощью запроса на просмотр трафика UDP в один из портов:

1
sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 22'

Сравните это с результатами одного из отсканированных портов, помеченных как «закрытые»:

1
sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 53'

Вы можете попытаться вручную реконструировать процесс, через который проходит nmap, сначала составляя список всех портов, на которые мы отправляем UDP-пакеты, используя что-то вроде этого:

1
sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets "udp" | awk '{print $5;}' | awk 'BEGIN { FS = "." } ; { print $5 +0}' | sort -u | tee outgoing

Затем вы можете увидеть, какие пакеты ICMP мы получили, сказав, что порт недоступен:

1
sudo tcpdump -nn -Q in -r ~/scan_results/udp_scan/packets "icmp" | awk '{print $10,$11}' | grep unreachable | awk '{print $1}' | sort -u | tee response

Затем вы можете взять эти два ответа и посмотреть, какие UDP-пакеты никогда не получали ответ ICMP:

1
comm -3 outgoing response

Это должно в основном соответствовать списку портов, о которых сообщала nmap (он может содержать некоторые ложные срабатывания из потерянных пакетов возврата).

Открытие хоста и сервиса

Вы можете запустить некоторые дополнительные тесты на вашей цели, чтобы увидеть, возможно ли для nmap идентифицировать операционную систему или любую из версий службы. Создайте каталог для хранения результатов вашей версии:

1
mkdir ~/scan_results/versions

Поиск версий сервисов на сервере

Вы можете попытаться угадать версии служб, работающих на цели, с помощью процесса, известного как дактилоскопия. Вы извлекаете информацию с сервера и сравниваете ее с известными версиями в нашей базе данных.

tcpdump не будет слишком полезен в этом сценарии, поэтому вы можете пропустить его. Если вы хотите захватить его в любом случае, следуйте процессу, который вы использовали в прошлый раз.

Сканирование nmap, которое вам нужно использовать, запускается флагом -sV. Поскольку вы уже сделали сканирование SYN и UDP, вы можете пройти в точных портах, на которые нужно смотреть с помощью флага -p. Здесь вы посмотрите на 22 и 80 (порты, которые были показаны в нашем сканировании SYN):

1
sudo nmap -sV -Pn -p 22,80 -vv --reason -oN ~/scan_results/versions/service_versions.nmap target_ip_addr

Если вы просматриваете файл, который приводит к результату, вы можете получить информацию о работе службы, в зависимости от того, насколько «понятен» ответ службы:

1
less ~/scan_results/versions/service_versions.nmap 

Здесь вы можете увидеть, что тест смог идентифицировать версию сервера SSH и упакованный дистрибутив Linux, а также принятую версию протокола SSH. Он также распознал версию Nginx и снова определил ее как соответствующую пакету Ubuntu.

Открытие операционной системы Host

Вы можете попытаться получить nmap, угадав операционную систему хоста на основе характеристик ее программного обеспечения и ответов. Это работает так же, как и сервисная версия. Опять же, мы опускаем этот tcpdump, но вы можете выполнить его, если хотите.

Флаг, необходимый для обнаружения операционной системы, -O (заглавная буква «O»). Полная команда может выглядеть примерно так:

1
sudo nmap -O -Pn -vv --reason -oN ~/scan_results/versions/os_version.nmap target_ip_addr

Если вы посмотрите файл вывода, вы можете увидеть что-то вроде этого:

1
less ~/scan_results/versions/os_version.nmap

Мы видим, что в этом случае nmap не имеет догадок для операционной системы на основе увиденной подписи. Если бы он получил больше информации, он, вероятно, показал бы различные проценты, которые указывают, как подпись целевой машины соответствует подписям операционной системы в ее базах данных. Вы можете увидеть подпись отпечатка пальца, которую nmap получил от цели ниже отпечатка пальца TCP/IP fingerprint: строка.

Идентификация операционной системы может помочь злоумышленнику определить, какие эксплойты могут быть полезны в системе. Настройка брандмауэра для ответа на меньшее количество запросов может помешать точности некоторых из этих методов обнаружения.

Завершение

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

Если вам понравился этот пост, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.