---
# System prepended metadata

title: '**Использования IDS+IPS для защиты периметра сети**'
tags: [IDS+IPS]

---

# **Использования IDS+IPS для защиты периметра сети**
###### tags: `IDS+IPS`
***В данной работе будет показано использования двух межсетевых экранов, в которых будут установлены модули SURICATA и SNORT. Для выполнения данной работы необходимо подготовить следующий стенд (в данной инструкции использовался EVE-NG).***
* Межсетевой экран №1(готовое решение PfSense(SNORT))
* Межсетевой экран №2(готовое решение PfSense(SURICATA))
* Свичи для имитации DMZ и LAN (cisco в примере)
* Машины в NET зоне для имитации атак (Debian, Kali, количество по требованию)
* Машина в DMZ (kali, для настройки pfsense)
* Машины в LAN (kali, для настройки, win7 для имитации атак)
****В результате у вас должен быть примерно следующий стенд.
![](https://i.imgur.com/XoGOCtB.png)

*Итак, начнем!*
1. В данной работе есть особенность, нам необходимо использовать последние версии pfsense(2.5.2) либо же обновить текущую версию.
Для обновления, необходимо добавить нужно количество pfsense на стенд и подключить к Net, потом подключить к ним kali затем зайти на него через веб-браузер и обновить там до версии 2.4.5. А затем зайти непосредственно на pfsense и там выбрать пункт **8**, затем ввести команду **pfSense-upgrade**, после долгих обновлений мы получим нужную версию pfsense.
Второй вариант (оптимальный) можно просто скачать нужный образ и добавить его в eve-ng, ссылка как добавить образ - https://mikrotiklab.ru/emulyator/dobavlenie-obrazov.html
ссылка на сам образ pfsense https://drive.google.com/file/d/1m1U7n1YK3X6hfpGYQMcfbJq5T1qsWXuJ/view?usp=sharing
2. После обновления собираем данную инфраструктуру в единое целое (обязательно обращаем внимание на e0 и e1 интерфейсов, также, сеть можно указывать любую, у меня используется те, что на скриншоте). 
3. После того, как наша инфраструктура собрана заходим на pfsense для настройки интерфейса DMZ зоны. Для этого выбираем следующие пункты:
>    Вначале выбираем **2**
>    Далее, снова **2**
>    На запрос сетевого адреса DMZ, указываем адрес из выбранной вами сети, у меня это **192.16.12.254** (для удобства указываем последний адрес подсети)
>    Маску указываем **24**
>    На вопрос про gateway просто нажимаем **Enter**
>    DHCP  - n
>    HTTP - n
>    На этом настройка завершена, наша будующая DMZ сеть настроена.
>    ![](https://i.imgur.com/onmpZQZ.png)

Аналогично подключаемся к pfsense LAN и настраиваем адресацию там.
4. Теперь нам необходимо установить нужные модули в оба pfsense. Как видно из схемы (первый скриншот), в pfsense-DMZ необходимо установить SURICATA, а в pfsense-LAN необходимо установить SNORT. 
**Начнем с DMZ**
> заходим на kali(на схеме kali6) и подключаемся через браузер к pfsense. В pfsense переходим по пути **System > General Setup** и там в поле dns указываем **8.8.8.8**. Сохраняем и применяем настройки.
Затем переходим по пути **System > Package Manager > Installed Packages**, если в вашей сборке НЕ установлена Suricata, а имееться Snort, то необходимо его удалить, по кнопке "корзины". Затем перейти в **Available Packages** и ввести **Suricata**, установить её кнопкой **install**. Если же установлено, то необходимо её обновить базы. Для этого переходим в **Services > Suricata** , там переходим в **Global Settings** и выставляем галочки и параметры как на скриншотах ниже. Кроме полей Snort Rules Filename и Snort Rules Code, данные поля необходимо заполнить из личного кабинета в https://snort.org/, необходимо там зарегистрироваться и указать актуальные данные с вашего личного кабинета, где Snort Rules Code это oincode, у меня он по ссылке - https://snort.org/users/802195/oinkcodes/802035, у вас будет свой.
![](https://i.imgur.com/auYx1hr.png)
![](https://i.imgur.com/4PjmHT8.png)
После того, как все указали, сохраняем и переходим на вкладку Update, где в ручном режиме обновляем все базы.

**Теперь приступим к LAN(Snort)**
> Аналогично подключаемся к kali и подключаемся к pfsense LAN(не забываем указать DNS 8.8.8.8).
> Тут нам нужно установить Snort. переходим по пути **System > Package Manager > Installed Packages**, если в вашей сборке НЕ установлена Snort, а имееться Suricata, то необходимо его удалить, по кнопке "корзины". Затем перейти в **Available Packages** и ввести **Snort**, установить его кнопкой **install**. Если же установлено, то необходимо её обновить базы. В Snort это делаеться проще, необходимо просто перейти во вкладку Update и щелкнуть обновить.
> Настройки в Snort необходимо выставить следующие:
> ![](https://i.imgur.com/QqRf9sl.png)
![](https://i.imgur.com/TgW8P65.png)
На этом этапе обновления Snort и Suricata завершается.
5. Использование Snort и Suricata для детектирования и блокировки атак
Сразу обозначим, что для проверки IDS/IPS проверим реализацию следующих атак:
![](https://i.imgur.com/JR7336A.png)
Для эксперимента сначала попробуем проверить атаку сканирование на **WAN интерфейса Suricata** (внешний файерволл). Проведем донастройку Suricata, заходим на нее через kali, переходим по пути **Services > Suricata** добавляем новый интерфейс, указываем WAN и убираем все галочки логирования. Остальные параметры нужны для тонкой настройке. Обратите внимание на блок настроек **Network Suricata Should Inspect and Protect** данные настройки влияют на принадлежность трафика к той или иной сети, по умолчанию трафик с WAN является External Net, весь трафик внутри Home Net. 
Там же, выбираем **WAN Categories** так как мы тестируем систему включаем все правила, которые есть, для этого щелкаем **Select all**. Если обратить внимание на сами правила, то мы видим, что в них есть откуда и куда должна идти атака, например Home > Externatl или наоборот, но атаки могут быть и изнутри сети, поэтому необходимо будет поправить настройки интерфейса, позже мы это сделаем.
Сейчас же, после включения всех правил по умолчанию, перейдем назад к **Suricata** и включим наш созданный интерфейс для возможности отлавливания атак - щелкаем по кнопке пуск в графе **Suricata status**.
![](https://i.imgur.com/F2TMFhV.png)
![](https://i.imgur.com/3DJQ9tR.png)
Наша Suricata запущена, переходим в графу **Alerts** тут будут показаны все сработки по атакам в соответствии с правилами.
Попробуем первую нашу атак(8 в списке - сканирования), просканируем снаружи нашу сеть.
Запускаем kali и пробуем nmap просканировать сеть(как это делать было показано на предыдущих занятиях курса).
![](https://i.imgur.com/h8dTGY0.png)
![](https://i.imgur.com/JaxYo07.png)
Как видим, есть сработки по некоторым правилам, что сигнализирует о попытках сканирования. Также, можно попробовать сканировать в агрессивном режиме (**nmap -A -Pn**), в этом случае сработок будет несколько больше и явно будет видно, что происходит сканирования, в этом случае вероятность быть обнаруженным явно выше. Есть также "тихий" режим сканирования, но не помогает, в этом случае, IPS все также обнаруживают попытки сканировать.
А теперь, попробуем просканировать наоборт изнутри сети наружу. В этом случае, правила срабатывать не будут, причина - настройка Externel и Home сети. Так как в правилах строго указано откуда и куда должен идти трафик. Настроим данные пункты для всего трафика.
Переходим в наш WAN интерфейс. И посмотрим, какие сети используются у каждой переменной Externel и Home (расположены в графе **Network Suricata Should Inspect and Protect**).
![](https://i.imgur.com/jF0klvf.png)
![](https://i.imgur.com/2TuQGII.png)
Необходимо поправить данные поля, чтобы они принимали весь трафик, в этом случае, правила будут действовать на любой трафик, как изнутри, так и снаружи.
Для того, чтобы это поправить необходимо тут же в Suricata перейти во вкладку **Pass Lists** и там добавить новый Pass Lists, но предварительно, нужно создать алиасы для нужной нам сети, для этого переходим в **Firewall > Aliases** и там добавляем новый алиас, параметры необходимо указать как на скриншоте ![](https://i.imgur.com/Uc9Cce3.png).
После переходим в Pass Lists и добавляем его, галочки с других пунктов убираем.
![](https://i.imgur.com/nkkSeOv.png)
После, **выключаем интерфейс**, внутри интерфейса меняем дефолтные пункты в **Network Suricata Should Inspect and Protect**, указываем созданные.
![](https://i.imgur.com/dheXmyl.png)
Сохраняем изменения и запускаем интерфейс.
После этого, атаки изнутри будут определяться также как и снаружи.
![](https://i.imgur.com/plBmn9s.png)

**Далее**, настроим pfsense со snort таким образом, чтобы трафик шел не через NAT, а прокидывался маршрутом, также немного донастроим Suricata, на ней добавим алиасы внутренней сети(LAN), а также изменим интерфейс сурикаты с WAN, на внутренний(DMZ). Причина по которой нам нужны именно маршруты а не NAT, чтобы из LAN были видны адреса машин внутри.
**Сейчас снова заходим на Suricata**
Переходим в **System > Routing** и добавляем новый gateway **Add**. У меня настройки gateway выглядят так.
![](https://i.imgur.com/lRNXplQ.png)
Адрес gateway, это адрес pfsense со snort, интерфейса, который смотрит в DMZ зону.
Затем добавляем статический маршрут.
![](https://i.imgur.com/5EGrCCg.png)
Для удобства также переименуем LAN в DMZ (делали на прошлом занятии)
Затем, необходимо добавить правило с нашей LAN сетью, но предварительно создадим в алиасах наши сети для создания офисной сети, как мы это делали для Suricata.
![](https://i.imgur.com/mmzLUjN.png)
И теперь, поправим основное разрешающее правило в DMZ, вместо текущей DMZ_lan, укажем наш алиас.
![](https://i.imgur.com/8ghRYyO.png)
Также, в Suricata изменим интерфейс с WAN на DMZ.
Переходим на наш pfsense со Snort и выключаем там NAT, после этого, все должно заработать. Отключаеться NAT следующим образом переходим по пути **Firewall > Nat > Outbound** и mode выбираем **Disable**.
После этого, попробуем провести атаку из LAN сети наружу. В результате мы должны видеть, кто сканирует сеть изнутри.
![](https://i.imgur.com/7ajkxyu.png)
На этом настройка pfsense с Suricata завершена.
Теперь переходим непосредственно к настройке pfsense со SNORT.
Заходим через kali на вебку pfsense. И там переходим в **Services > Snort**. Там уже будет создан интерфейс на котором будет слушаться трафик, переходим к его настройки, щелкаем по карандашу напротив интерфейса. Сразу включаем все правила, по аналогии с Suricata. Щелкаем **Select all**. 
![](https://i.imgur.com/EQea2T1.png)
А также, нам необходимо добавить все сети для прослушки в графе **Choose the Networks Snort Should inspect and Whitelist** по умолчанию там стоит **Default**.
Для этого переходим в **Pass Lists** и там добавляем новый pass list, который в Snort добавляется очень просто.
![](https://i.imgur.com/Ear6CbE.png)
Сохраняем и возвращаемся в редактирование интерфейса Snort. Где добавляем наш Pass List.
![](https://i.imgur.com/pLQ2RAE.png)
Также, рекомендую заранее выставить галочку по пути **Global Settings > OpenAppID**
![](https://i.imgur.com/V1v9jqY.png)
Данная опция позволяет Snort определять какие приложения генерируют трафик и тем самым можно будет в дальнейшем блокировать нежелательные.
У Snort оставляем интерфейс по-умолчанию (у меня это DMZ(em0)), можно же выставить любой, так как трафик будет виден на любом интерфейсе.
Запускаем интерфейс. 
![](https://i.imgur.com/AoAavZO.png)
Пробуем сканировать изнутри сети.
![](https://i.imgur.com/AUNHJwm.png)
Результат на Suricata.
![](https://i.imgur.com/btvf7OS.png)
Как видим, атаки детектируются. Тем самым, мы проверили, что сканирование определяется обоими IDS достаточно эффективно.
**В результате, мы настроили обе IDS/IPS системы. Далее, будем сравнивать по различным способам атаки их эффективность.**

6. ***Reverse-shell***
Проверим как Snort и Suricata реагируют на атаки типа Reverse-shell. Я буду реализовывать атаку по своей инструкции: [Metasploit Reverse Shell](https://hackmd.io/vviES5n1R7Kd_645sdTiPQ). Атаковать будем в LAN сеть из внешний сети.
Генерируем payload meterpreter через msfvenom и с помощью сервера скачиваем его внутрь сети.
![](https://i.imgur.com/EL79qus.png)
Создаем сервер через mfsconsole и проверяем как среагирует IPS/IDS.
После скачивания, именно на файл(таким образом, мы обнаружили сразу реакцию на переход по ссылки 7 пункт), оба IPS среагривали примено одинаково:
**SNORT**
![](https://i.imgur.com/tTBSsNS.png)
После запуска добавилось.
![](https://i.imgur.com/swzYFGd.png)
**SURICATA**
![](https://i.imgur.com/goDSyAi.png)
После запуска добавилось.
![](https://i.imgur.com/BwApOBR.png)

Поэтому, можно утверждать, что оба IDS обнаруживают данные виды атак.

7. ***SSH-туннель***
Попробуем создать ssh-туннель изнутри сети наружу и проверить как будут реагировать наши IPS.
Для создания ssh-туннеля, я использовал свою инструкцию: [SSH](https://hackmd.io/@25kh5VF_RE2wLelXKgDhjQ/SJmGrVj0O)
Итак, пробуем подключаться по ssh и смотрим, что происходит на IPS:
**SURICATA**
В Suricata по стандартному порту ssh сработок не обнаружено. Если изменить порт, на другой, то Suricata сработает на такое событие. Также, если поправить само правило, то оно должно работать на все порты, таким образом, мы сможем видеть подключение SSH по любому порту.
![](https://i.imgur.com/AGrBpsP.png)
**SNORT**
![](https://i.imgur.com/AaGhE5M.png)
Благодаря функции определения приложения, snort сразу показывает, что было обнаружено приложение с ssh.
8. **OpenVPN Tunnel**
Проверим, как будут наши IDS/IPS реагировать на создание vpn туннеля. Я буду использовать, свою же инструкцию (L3 Tunnel): [OpenVPN](https://hackmd.io/@25kh5VF_RE2wLelXKgDhjQ/HJ5P4S7Rd) 
**SURICATA**
К сожалению, Suricata не обнаружила openvpn.
**SNORT**
![](https://i.imgur.com/oISYP9n.png)
В случае, если используеться стандартный порт, то snort скажет про openvpn, только с использованиям AppID.
![](https://i.imgur.com/1nOQU9T.png)
Если замаскировать трафик по например http, то он указывает на странное содержание в http трафике.
Но если, замаскировать трафик в https, то в этом случае, IPS, не увидит ничего подозрительно, так как будет считать, что трафик зашифрован. В этом случае, нужно использовать дополнительные средства, которые его будут расшифровывать.
8. **DNS Tunnel**
Проверим, как будут реагировать наши IDS на создание DNS туннеля. Пользоваться будем инструкцией, которая была разработана ранее: [DNS](https://hackmd.io/@25kh5VF_RE2wLelXKgDhjQ/HyFxoMsJY) 
**SNORT**
Снорт, без проблем обнаруживает DNS туннель и даже показывает с помощью какого ПО было создано.
![](https://i.imgur.com/9OP4GWB.png)
**Suricata**
![](https://i.imgur.com/kv6rzjj.png)
Как и Snort, Suricata также обнаружила DNS туннель.
По результатам, можно сделать вывод, что оба IDS успешно обнаруживают такие туннели.
9. **ICMP Tunnel**
Теперь протестируем, как будут реагировать наши IDS на создание ICMP туннеля. Пользоваться будем инструкцией, которая была разработана ранее: [ICMP](https://hackmd.io/@25kh5VF_RE2wLelXKgDhjQ/HyFxoMsJY) 
**SNORT**
К сожалению, Snort(при стандартных правилах) не увидел подозрительного трафика при создании ICMP туннеля через Hans.
**Suricata**
Suricata, также не увидела ICMP туннеля через Hans. Правила были использованы также стандартные.
10. **Stealer**
Попробуем воспользоваться программой, которая следит за пользователями и передает подробную информацию о его действиях постороннему лицу, на почту, которую он указал при внедрение стилера. Стилер будем использовыть Saint, который мы ранее пробовали использовать(в самом конце инструкции): [ICMP](https://hackmd.io/NNilZ-duQGqaoQyCWHpt0w).
**SNORT**
К сожалению, по стандартным правилам SNORT не смогу обнаружить подозрительный трафик.
**SURICATA**
Suricata также не обнаружила трафик по стандартным правилам.
**По итогу:**
IDS/IPS системы в стандратной комплектации могут обнаружить различные типовые атаки, но в случае, если злоумышленник использует изощренные метода, то необходимо либо писать свои правила для их обнаружения, либо использовать расширенные пакеты правил. Также, не стоит забывать про другие СЗИ в комплексе.
P.S.
Snort и Suricata имеют возможности блокировки, которые включаются на интерфейсе:
![](https://i.imgur.com/QjjUzPl.png)
На обоих используются два режима, первый Legacy, который блокирует весь трафик, если было обнаружено любое правило с IP адреса, то есть полностью вырубает IP.
Второй, InLine более "умный" режим, который блокирует только то правило, что выбирает специалист. Позволяет управлять блокировкой более гибко.